楊 波,韓 杰,孫樂羊
(北京航天時代光電科技有限公司,北京 100094)
控制器局域網(wǎng)(Controller Area Network,CAN)為德國Bosch公司20世紀(jì)80年代開發(fā)的一種串行數(shù)據(jù)通信協(xié)議,最初是為了解決汽車中大量控制與測試儀器之間的數(shù)據(jù)交換,由于其接口通信簡單實(shí)用、成本合理,已在各個工業(yè)領(lǐng)域得到廣泛應(yīng)用,成為國際上應(yīng)用最廣泛的開放式現(xiàn)場總線之一。
但是隨著工業(yè)水平的提高,控制系統(tǒng)越來越復(fù)雜,對數(shù)據(jù)傳輸速率、數(shù)據(jù)吞吐量及通信可靠性提出了更高的要求。傳統(tǒng)的CAN總線通信已經(jīng)不能滿足市場需求,CAN總線的升級總線——波特率可變控制器局域網(wǎng)(CAN with Flexible Data?rate,CANFD)應(yīng)運(yùn)而生。從2012年第十三屆ICC大會上Bosch公司發(fā)布CANFD協(xié)議,到2015年提交國際標(biāo)準(zhǔn)化ISO11898系列,CANFD技術(shù)正在飛速發(fā)展[1]。
CAN總線通信的最高傳輸速率為1Mbps,實(shí)際可實(shí)現(xiàn)速率只能達(dá)到 500kbps[2?3]。 CANFD 繼承了CAN總線的絕大多數(shù)特性,如雙絞線串行通信協(xié)議、仲裁技術(shù)、糾錯機(jī)制等,但在總線帶寬和可傳送數(shù)據(jù)長度方面進(jìn)行了改善,并通過改變幀結(jié)構(gòu)和提高位速率成功的將數(shù)據(jù)傳輸速率提高到了5Mbps,實(shí)現(xiàn)了速度與穩(wěn)定的兩者兼得。目前在車載通信領(lǐng)域,CANFD已逐漸取代CAN總線,成為主流總線通信之一[4?7]。但車載領(lǐng)域的CANFD總線通信多采用單片機(jī)控制以達(dá)到節(jié)省成本、實(shí)現(xiàn)簡單的目的,不能應(yīng)用于對可靠性能和抗干擾能力要求更高的無人機(jī)等武器領(lǐng)域中。
CANFD控制器 MCP2517芯片為 SPI通信方式,支持SPI通信的微處理器有很多,如單片機(jī)、數(shù)字信號處理(Digital Signal Processing,DSP)等,本文提出采用DSP+現(xiàn)場可編程門陣列(Field Pro?grammable Gate Array,F(xiàn)PGA)來實(shí)現(xiàn)CANFD通信。DSP通過外部存儲器接口(External Memory Interface,EMIF)與 FPGA相連,使 FPGA作為DSP的高速數(shù)據(jù)傳輸接口對CANFD控制器進(jìn)行讀寫操作。本文提出的基于 DSP+FPGA控制的CANFD總線通信方法能夠克服單片機(jī)抗干擾能力差、數(shù)據(jù)讀寫速度慢的缺陷,更能夠滿足對可靠性有更高要求的航天航空控制的需求。
由于CAN總線每次只能傳輸8字節(jié)數(shù)據(jù),通信速率較慢,且總線的位填充會造成干擾,可靠性低。CANFD總線由CAN總線改進(jìn)后優(yōu)勢明顯,具體體現(xiàn)在以下幾個方面:
1)數(shù)據(jù)場長度:數(shù)據(jù)場由數(shù)據(jù)幀中傳輸?shù)臄?shù)據(jù)組成,CAN的DLC數(shù)據(jù)位是4bits,數(shù)據(jù)幀中最多包含8字節(jié)傳輸數(shù)據(jù)。CANFD對數(shù)據(jù)場的長度進(jìn)行了擴(kuò)展,并采用非線性定義的方式定義數(shù)據(jù)字節(jié),每數(shù)據(jù)幀傳輸數(shù)據(jù)長度可達(dá)64字節(jié),避免了數(shù)據(jù)分裂的狀況。
2)可變比特率:CANFD總線在仲裁段和數(shù)據(jù)段可采用不同的波特率傳輸,通過控制場的比特率轉(zhuǎn)換(BRS)位來控制是否切換比特率,隱性表示轉(zhuǎn)換可變速率,顯性表示不可轉(zhuǎn)變速率,CANFD的波特率表示為500kbps/2Mbps。其中,500kbps為仲裁段的傳輸速率,2Mbps為數(shù)據(jù)段的傳輸速率。
3)新CRC格式:由于CAN總線位填充規(guī)則對CRC的干擾,使得錯幀漏檢率沒能達(dá)到設(shè)計預(yù)期。CANFD總線對CRC算法做出了改變,將填充位納入到CRC計算中,即CRC以含填充位的位流進(jìn)行計算,以一個填充位開始并且序列每4位插入一個填充位加以分割,且填充位的值是上一位的反碼。格式檢查時,如果不是反碼就做報錯處理,且CRC長度是由傳輸數(shù)據(jù)長度決定的,當(dāng)傳輸數(shù)據(jù)為0~16字節(jié)時,CRC長度就為17,CRC多項式可表示為
當(dāng)傳輸數(shù)據(jù)長度為17~64字節(jié)時,CRC長度為21,CRC多項式就表示為
CANFD的CRC算法新的CRC段糾錯方式可以改善錯誤幀漏檢率。
4)DLC編碼:CANFD數(shù)據(jù)幀采用了新的DLC編碼,在數(shù)據(jù)場長度為0~8個字節(jié)時,采用線性規(guī)則,當(dāng)數(shù)據(jù)長度為12~64個字節(jié)時,采用非線性規(guī)則編碼,具體的編碼規(guī)則如表1所示。
表1 DLC編碼規(guī)則Table 1 Rules of DLC code
系統(tǒng)包括DSP、FPGA、CANFD控制器、收發(fā)器、信號隔離芯片。
DSP、CANFD控制器與FPGA通過SPI接口通信,DSP選用TI公司的TMS320C6713,F(xiàn)PGA選用Cyclone公司的EP4CE6F17C8。DSP作為數(shù)據(jù)解算核心和控制核心,自身更擅長數(shù)據(jù)處理而非邏輯控制,且自身接口有限,沒有良好的通用性。FPGA接口多且大多可通用,邏輯控制簡單,能夠滿足大數(shù)據(jù)量高速的傳輸控制,且可實(shí)現(xiàn)譯碼、外圍接口及接口電路的集成[8]。
DSP+FPGA+MCP2517配合實(shí)現(xiàn)CANFD總線的數(shù)據(jù)傳輸,F(xiàn)PGA作為DSP與外圍接口之間的橋梁,在接收到信號上升沿時,對相應(yīng)數(shù)據(jù)進(jìn)行鎖存,完成信號的采集、濾波、解調(diào),再將數(shù)據(jù)庫存放在制定的內(nèi)存存儲器,DSP通過EMIF總線接口讀取相應(yīng)數(shù)據(jù),并作新數(shù)據(jù)處理和控制指令的執(zhí)行,且并行處理方式的FPGA對CANFD控制器進(jìn)行數(shù)據(jù)傳輸和使能、中斷控制。
支持SPI的微處理器有ARM、STM32、DSP、FPGA,采用DSP+FPGA模式來實(shí)現(xiàn)CANFD通信,能夠克服單片機(jī)固有的缺陷,更能夠滿足對可靠性有更高要求的航天航空控制的需求。單片機(jī)處理速度低、接口少、資源有限,遇到強(qiáng)干擾程序容易跑飛[9?12]。系統(tǒng)的硬件設(shè)計框圖如圖1所示。
圖1 系統(tǒng)硬件框圖Fig.1 Block diagram of system hardware
CANFD控制器采用 MCP2517,MCP2517是Microchip公司開發(fā)的一款帶 SPI接口的外部CANFD控制器,微處理器只需要支持SPI通信即可擴(kuò)展CANFD。MCP2517控制器支持CAN 2.0B和CANFD模式,時鐘頻率可達(dá)40MHz,通過SPI可與控制器進(jìn)行通信,SPI的時鐘頻率可達(dá)20MHz;31個FIFO可配置為接收或發(fā)送;32個過濾器和屏蔽器對象可設(shè)置來對接受報文的ID屏蔽;仲裁域比特率高達(dá)1Mbps,數(shù)據(jù)段波特率高達(dá)1Mbps;發(fā)送報文可設(shè)置發(fā)送優(yōu)先級。
CANFD控制器模塊設(shè)計電路如圖2所示。
圖2 CANFD控制器模塊原理圖Fig.2 Schematic diagram of CANFD controller module
采用TJA1044GT芯片作為CANFD總線的收發(fā)器,芯片的差分接收端并聯(lián)120Ω的匹配電阻,來克服 “長線效應(yīng)”,收發(fā)器模塊電路如圖3所示。收發(fā)器與CANFD控制器之間選用隔離芯片ISO7242對輸入輸出總線差分信號進(jìn)行隔離,隔離電路如圖4所示。
圖3 CANFD總線收發(fā)器模塊電路圖Fig.3 Circuit diagram of CANFD bus transceiver module
圖4 信號隔離模塊電路圖Fig.4 Circuit diagram of signal isolation module
系統(tǒng)軟件設(shè)計主要分為模塊初始化、報文接收、報文發(fā)送,軟件實(shí)現(xiàn)流程如圖5所示。
圖5 軟件設(shè)計流程圖Fig.5 Flowchart of software design
模塊初始化是指DSP通過FPGA向CANFD控制器芯片發(fā)送配置信息,對CANFD控制器進(jìn)行初始化設(shè)置,模塊初始化配置的流程如下:
1)選擇工作模式為配置模式,設(shè)置波特率可變。
2)配置標(biāo)稱位時間和數(shù)據(jù)位時間寄存器,根據(jù)想要設(shè)置的仲裁域和數(shù)據(jù)域的波特率值計算寄存器設(shè)置值。
3)配置FIFO控制寄存器,設(shè)置FIFO的報文深度、有效負(fù)載大小、報文發(fā)送優(yōu)先級、接收還是發(fā)送FIFO、設(shè)置非空/非滿中斷允許。
4)設(shè)置接收過濾器和屏蔽寄存器。
5)配置CANFD控制寄存器,選擇工作模式為CANFD工作模式。
模塊初始化完成后,可進(jìn)行報文發(fā)送和接收配置,配置流程如下:
1)讀取發(fā)送/接收下一報文的地址:MCP2517控制器的RAM區(qū)沒有對每個FIFO對象設(shè)置固定的內(nèi)存地址,報文對象的地址取決于所選的配置,但是應(yīng)用程序不必計算地址,用戶需要發(fā)送開始前通過讀取發(fā)送/接收FIFO的用戶地址寄存器值來獲取下一個報文對象的地址。
2)發(fā)送報文時,DSP通過FPGA向CANFD控制器的FIFO地址(上一步驟讀到的下一發(fā)送報文對象的地址)寫入要發(fā)送的報文;接收報文時,通過配置過濾器對象和屏蔽器對象給接收FIFO匹配一個或多個過濾器。
3)啟動發(fā)送/接收:設(shè)置FIFO控制寄存器中的報文請求發(fā)送和FIFO頭部遞增。
4)報文發(fā)送/接收過程中可觀察FIFO狀態(tài)寄存器中的報文索引標(biāo)志及發(fā)送/接收FIFO的用戶地址位是否正確遞增。
DSP TMS320C6713的主頻為528MHz,F(xiàn)PGA EP4CE6F17C8的主頻為66MHz,MCP2517FD芯片的時鐘頻率為 40MHz,SPI接口的時鐘頻率為20MHz。所以,將實(shí)驗條件設(shè)置為通信電纜長3m、接收發(fā)送的報文長度為最大64字節(jié)。
CAN總線通信最高傳輸速率為1Mbps,正??蓪?shí)現(xiàn)速率只能達(dá)到500kbps,CANFD由于控制域和數(shù)字域采用不同的波特率進(jìn)行數(shù)據(jù)通信,通信速率在理論上大于CAN總線通信。在實(shí)驗中驗證當(dāng)波 特 率 為 500kbps/2Mbps 和 1Mbps/5Mbps 時CANFD總線通信的準(zhǔn)確性,實(shí)驗步驟為:
1)首先使用Modelsim仿真軟件對FPGA程序進(jìn)行時序仿真,仿真結(jié)果預(yù)期一致則證明FPGA與CANFD控制器通信正常。
2)DSP通過FPGA來配置MCP2517控制寄存器的值,將控制器設(shè)置為CANFD模式,設(shè)置波特率、ID號和報文深度,有效數(shù)據(jù)長度為64字節(jié)。
3)編寫DSP程序?qū)崿F(xiàn)CANFD總線的自發(fā)自收功能,提前編輯CANFD總線要收發(fā)的數(shù)據(jù)信息,每次發(fā)送200個報文,共發(fā)送10次。
4)利用CANFD通信調(diào)試上位機(jī)對比發(fā)送數(shù)據(jù)與接收數(shù)據(jù),統(tǒng)計傳輸時間、錯誤字節(jié)數(shù),計算誤碼率。
使用Modelsim仿真軟件對FPGA程序進(jìn)行時序仿真并給定輸入,如果得到預(yù)期輸出,則證明可以實(shí)現(xiàn)對CANFD控制器的時序控制,且理論上可以實(shí)現(xiàn)基于DSP+FPGA系統(tǒng)的CANFD通信。
仿真模擬DSP通過FPGA向CANFD總線發(fā)送信息,根據(jù)控制器芯片MCP2517的SPI指令格式,F(xiàn)PGA應(yīng)向MCP2517發(fā)送復(fù)位指令來將控制芯片的內(nèi)部寄存器復(fù)位為默認(rèn)狀態(tài),復(fù)位指令為發(fā)送地址0x0000和數(shù)據(jù)信息0b000,接著向控制芯片地址為 0x0001的寄存器寫入數(shù)據(jù)信息0x02000300,最終得到的仿真時序圖如圖6所示。
圖6 仿真驗證時序結(jié)果Fig.6 Timing results of simulation verification
由圖6可知,時序仿真結(jié)果與設(shè)想一致,表現(xiàn)為:當(dāng)DSP控制FPGA的片選拉低且寫使能信號拉低后,F(xiàn)PGA控制的CANFD的片選被拉低,CANFD的數(shù)據(jù)線上依次傳輸?shù)刂沸畔⒑蛿?shù)據(jù)信息(0x0001和0x02000300), 證明了基于 DSP+FPGA系統(tǒng)的CANFD通信可行性。
在DSP+FPGA+CANFD控制器實(shí)驗平臺上對4.1節(jié)中的步驟2~步驟4進(jìn)行實(shí)驗驗證,通過CANFD測試盒和上位機(jī)來記錄發(fā)送和接收的數(shù)據(jù),對發(fā)送和接收的數(shù)據(jù)進(jìn)行比對,實(shí)驗結(jié)果如表2所示。
表2 實(shí)驗驗證結(jié)果Table 2 Results of experiment verification
由表2的實(shí)驗結(jié)果可知,在通信電纜長3m、發(fā)送10次數(shù)據(jù)、每次發(fā)送200條報文、報文有效長度為64字節(jié)、波特率設(shè)置為500kbps/2Mbps及1Mbps/5Mbps條件下,錯誤字節(jié)數(shù)均為0,誤碼率小于1%,證明了該系統(tǒng)可實(shí)現(xiàn)可靠的CANFD通信。
由于實(shí)驗條件有限,不能充分驗證在不同工作環(huán)境下的CANFD通信情況,如極限溫度對通信數(shù)據(jù)準(zhǔn)確性的影響、不同波特率的有效通信距離變化等,所以本文提出的方法仍需要加入考慮環(huán)境溫度和通信距離等更多因素的對比實(shí)驗來驗證。
隨著汽車、無人機(jī)等領(lǐng)域?qū)νㄐ艛?shù)據(jù)傳輸速率、數(shù)據(jù)吞吐量及可靠性提出了更高的要求,CANFD總線通信方法已逐漸開始取代傳統(tǒng)的CAN總線通信,保證CANFD數(shù)據(jù)傳輸?shù)姆€(wěn)定性和可靠性也逐漸成為學(xué)者及工程師關(guān)注的重點(diǎn)。本文采用DSP+FPGA+MCP2517的方法來實(shí)現(xiàn)CANFD通信,并通過了仿真和實(shí)驗驗證,結(jié)果表明:該方法降低了軟件調(diào)試難度,減輕了處理器的運(yùn)行負(fù)載,提高了系統(tǒng)的抗干擾能力,實(shí)現(xiàn)了5Mbps數(shù)據(jù)傳輸速率,是CAN總線最高傳輸速率的5倍。實(shí)際應(yīng)用中會有通信距離、環(huán)境溫度等多種因素影響通信效果,本文提出的方法還需要通過更深入的研究來完善總結(jié)。