周琦 龔元明
摘 要:目前汽車CAN總線網(wǎng)絡負載日益增加,CAN FD總線作為新技術,在未來有可能取代CAN總線而成為新一代汽車總線網(wǎng)絡。針對汽車總線網(wǎng)絡和以太網(wǎng)互通互聯(lián)的問題,在研究CAN FD協(xié)議的基礎上,本文設計了以ATMEL公司的SAME54系列單片機作為主控制器的CAN FD-TCP/IP網(wǎng)關。該網(wǎng)關以ATA6561作為CAN FD收發(fā)器,KSZ8091作為以太網(wǎng)PHY,利用LwIP(Light weight Internet Protocol)協(xié)議棧將TCP/IP和CAN FD數(shù)據(jù)進行協(xié)議轉換,實現(xiàn)CAN FD網(wǎng)絡和終端互聯(lián)網(wǎng)設備的信息交互,該網(wǎng)關工作正常,能夠為新一代網(wǎng)聯(lián)汽車搭載CAN FD技術提供參考。
關鍵詞: CAN FD總線;以太網(wǎng);網(wǎng)關;車聯(lián)網(wǎng)
【Abstract】 At present, the load of automotive CAN bus network is increasing. As a new technology, CAN FD bus may replace CAN bus in the future and become a new generation of bus network. Aiming at the problem of interconnecting the bus network and Ethernet, based on the research of CAN FD protocol, this paper designs a CAN FD-TCP/IP gateway with ATMEL's SAME54 series MCU as the main controller. The gateway uses ATA6561 as the CAN FD transceiver, and KSZ8091 as the Ethernet PHY. The LwIP (Light Weight Internet Protocol) protocol stack is used to convert the TCP/IP and CAN FD data to realize the information exchange between the CAN FD network and the terminal Internet device. The gateway works fine and can provide reference for the new generation networked car with CAN FD technology.
【Key words】 ?CAN FD bus; Ethernet; gateway; vehicle networking
0 引 言
隨著電子、半導體、通訊等行業(yè)的快速發(fā)展,汽車電子智能化的需求也愈加強烈,消費者希望駕駛動力性、舒適性、經(jīng)濟性以及娛樂性更強的汽車。汽車制造商為了提高產(chǎn)品競爭力,將越來越多的電子控制系統(tǒng)加入到汽車控制中。受限于CAN傳輸速率,通常汽車高速CAN系統(tǒng)的實際使用速率為500 kbit/s[1]。ECU的大量增加使總線負載率急劇增大以致造成網(wǎng)絡擁堵,較高的總線負載率可能會增大報文延遲、降低系統(tǒng)的擴展性,尤其對于實時性要求較高的安全系統(tǒng),高負載率甚至可能影響汽車行車安全[2]。CAN總線最多只能傳輸8字節(jié)的特點又造成多幀傳輸,使得通信效率低下。為此,德國博世公司對CAN總線數(shù)據(jù)鏈路層進行改進,啟動了CAN FD開發(fā)[3]。CAN FD憑借總線帶寬和有效載荷的優(yōu)勢,以及向下兼容CAN 總線的特點[4],在未來可能成為汽車總線架構中的應用解決方案。本文運用CAN FD技術,結合TCP/IP協(xié)議,設計網(wǎng)關對2種通信協(xié)議進行轉換,在智能網(wǎng)聯(lián)汽車發(fā)展的背景下,可實現(xiàn)汽車總線網(wǎng)絡和互聯(lián)網(wǎng)終端設備的信息交互。 對此擬展開研究論述如下。
1 CAN FD總線介紹
由于汽車行業(yè)電子單元逐漸增多,傳統(tǒng)CAN總線帶寬難以滿足要求,改進后的CAN FD克服了CAN總線的限制,傳輸速率可達5 Mbit/s,并且有效載荷(數(shù)據(jù)場)可擴展至64字節(jié)。
CAN FD數(shù)據(jù)鏈路層如圖1所示,分為仲裁場和數(shù)據(jù)場。其中,仲裁場通信速率和傳統(tǒng)CAN一致,在數(shù)據(jù)場通信速率可達5 Mbit/s。仲裁場EDL位用來區(qū)分是CAN幀、還是CAN FD幀,BRS位區(qū)分是否轉換可變速率,ESI位表示主被動錯誤狀態(tài)。數(shù)據(jù)場采用新的4位DLC編碼表示數(shù)據(jù)場長度,DLC小于8時與原CAN 總線一致,大于8時有一個非線性增長,直至擴展到64字節(jié)。CRC校驗以含填充位進行計算,在第一位以及之后每4位添加一個填充位加以分割,該填充位對上一位取反,作為格式檢查。由于CAN FD數(shù)據(jù)場長度有很大變化,CRC生成多項式根據(jù)DLC長度來選擇,分為CRC_15、CRC_17和CRC_21[5-7]。
2 網(wǎng)關系統(tǒng)硬件設計
系統(tǒng)硬件主要由主控制器、CAN FD收發(fā)器、以太網(wǎng)收發(fā)器、RJ45網(wǎng)絡接口、EEPROM存儲模塊以及電源模塊組成。主控制器采用ATMEL公司的SAME54P20A芯片,該芯片是一款基于ARM Cortex-M4架構的32位處理器,運行時鐘可高達120 MHz,RAM存儲區(qū)達到256 KB,并帶有10/100 M以太網(wǎng)MAC和CAN/CAN FD接口,工作電壓1.71~3.6 V。所以只需外接CAN FD收發(fā)器和以太網(wǎng)收發(fā)器即可實現(xiàn)協(xié)議轉換功能,網(wǎng)關系統(tǒng)結構框圖如圖2所示。由圖2可知,對其中各組成單元的設計解析可做重點闡述如下。
2.1 CAN FD模塊硬件設計
CAN FD收發(fā)器采用Microchip公司的ATA6561,該收發(fā)器符合ISO 11898-1(2015)標準,最快通信速率可達5 Mbit/s,支持低功耗喚醒功能,工作電壓5 V。CAN FD和CAN物理層相似,STBY為喚醒引腳,連接到SAME54輸出引腳,在CANH和CANL引腳間并聯(lián)2個60 Ω終端電阻,屏蔽干擾。該模塊設計電路如圖3所示。
2.2 以太網(wǎng)模塊硬件設計
以太網(wǎng)模塊主要包括以太網(wǎng)PHY、變壓器和RJ45端口,電路設計如圖4所示。選用KSZ8091MLX作為以太網(wǎng)PHY,支持IEEE 802.3標準,帶有MII接口,工作電壓3.3 V。MII規(guī)范為端口提供16根引腳,分別為MAC層和物理層之間的發(fā)送、接收接口,MDIO和MDC分別是數(shù)據(jù)線和時鐘線。KSZ8091采用25 MHz外部晶振提供時鐘信號。RJ45端口選用HALO公司的HFJ11系列,內(nèi)置網(wǎng)絡變壓器,簡化了設計電路。
2.3 存儲模塊
系統(tǒng)中存儲模塊采用ATMEL公司生產(chǎn)的AT24MAC芯片,電路設計如圖5所示。AT24MAC是一個2Kb的非易失性存儲器(EEPROM),和主芯片MCU采用 I2C兩線接口連接,A0、A1、A2用來選擇器件地址。存儲模塊用于存儲以太網(wǎng)通信的IP地址、子網(wǎng)掩碼和網(wǎng)關地址等參數(shù)。
3 軟件設計
基于前述網(wǎng)關模型,軟件模塊主要由3部分組成,分別為:CAN FD網(wǎng)絡接口模塊、TCP/IP網(wǎng)絡接口模塊、協(xié)議數(shù)據(jù)轉換模塊。開發(fā)工具為Atmel Start和Atmel Studio。Atmel Start在線生成底層驅動,Atmel Studio加載驅動后進行軟件開發(fā)。研究可得各部分開發(fā)設計內(nèi)容詳述如下。
3.1 CAN FD網(wǎng)絡接口模塊
3.1.1 CAN FD波特率選擇
CAN FD在物理層會進行硬同步和延時補償,直接由ATA6561收發(fā)器完成。波特率設置主要是對位時間進行分配。CAN FD波特率分為仲裁場和數(shù)據(jù)場兩段,仲裁場波特率和傳統(tǒng)CAN總線波特率一致,數(shù)據(jù)場波特率可達5 Mbit/s。一般來說,數(shù)據(jù)場波特率要大于仲裁場波特率,因此需要分別配置這兩段波特率。帶CAN FD接口的單片機一般有2套位時間定義寄存器,可采用不同的位時間單位,位時間各段分配比例也可不同。以仲裁場波特率為500 Kbps和數(shù)據(jù)場波特率為2 Mbps為例,說明CAN FD波特率配置方法。假設CAN FD時鐘fsys=12 MHz,仲裁段波特率分頻器NBRP=2,相位緩沖段1的NTSEG1=8,相位緩沖段2的NTSEG2=3,同步跳轉寬度NSJW=1,仲裁段波特率為:
3.1.2 CAN FD收發(fā)程序設計
CAN FD在數(shù)據(jù)鏈路層遵循ISO11892-2(2015),作為CAN FD幀格式時必須把EDL位和BRS位置位,相應地,初始化時可在SAME54中使能CCCR寄存器中的FDOE和BRSE位,并對相應波特率寄存器進行操作。CAN FD幀信息封裝在結構體中,該結構體包含幀ID、幀類型、幀長度、幀格式以及有效載荷。在發(fā)送CAN FD幀時,首先定義好發(fā)送緩沖區(qū)長度,最大為64字節(jié),寫入有正確ID的發(fā)送郵箱。在向發(fā)送緩沖區(qū)發(fā)送一個新報文之前,需要檢查緩沖區(qū)是否空閑,若空閑,則寫入數(shù)據(jù)到發(fā)送緩沖區(qū)。在接收中斷下,接收CAN FD幀時需要設置接收郵箱,郵箱按照ID編號優(yōu)先級由大到小排列。若郵箱的接收緩沖區(qū)滿,則讀取并保存數(shù)據(jù),而后再釋放緩沖區(qū)。如果具有相同幀ID的新消息被接收,之前的消息會被覆蓋。多個郵箱可以被串在一起形成接收緩沖數(shù)據(jù)。在接收時還可以設置接收過濾器,可選擇接收特定ID的報文。CAN FD接收和發(fā)送流程如圖6所示。
3.2 TCP/IP網(wǎng)絡接口模塊
SAME54P20A的MAC控制器和PHY芯片KSZ8091構成物理層和數(shù)據(jù)鏈路層,本設計采用基于TCP/IP的LwIP協(xié)議棧實現(xiàn)網(wǎng)絡層和傳輸層,可在無操作系統(tǒng)的情況下獨立運行[8]。LwIP實現(xiàn)的重點是在保持TCP協(xié)議主要功能的基礎上減少對RAM的占用。
LwIP協(xié)議棧在TCP實現(xiàn)中專門使用一個數(shù)據(jù)結構來描述一個連接,把這個數(shù)據(jù)結構稱為TCP控制塊。TCP控制塊包含了雙方實現(xiàn)基本通信所需要的信息,如發(fā)送窗口、接收窗口、數(shù)據(jù)緩沖區(qū)等[9]。TCP協(xié)議實現(xiàn)的本質就是對TCP控制塊中各個字段的操作。
TCP編程函數(shù)輸出流程如下:tcp_write構造數(shù)據(jù)交互報文,在TCP層由報文段構造函數(shù)tcp_enqueue來完成,該函數(shù)將TCP數(shù)據(jù)和首部部分字段填入報文中,并將報文段組織在發(fā)送緩沖隊列上;tcp_output函數(shù)被調用時會把控制塊發(fā)送緩沖隊列上依次取下報文段發(fā)送,然后調用tcp_output_segment發(fā)送報文段,該函數(shù)完成首部剩余字段中確認號、通告窗口的填寫,并與IP層的ip_route交互,獲得偽首部中源IP地址字段;最后,IP層的發(fā)送函數(shù)ip_output被調用,組裝并發(fā)送IP數(shù)據(jù)報文。
TCP輸入流程如下:TCP報文從IP層ip_input函數(shù)傳遞給TCP層tcp_input函數(shù),這個函數(shù)是TCP層的總輸入函數(shù),為報文段匹配TCP控制塊;tcp_process函數(shù)完成了TCP狀態(tài)機的實現(xiàn),如果檢測到報文中有數(shù)據(jù),則調用tcp_receive函數(shù),完成TCP中數(shù)據(jù)接收、數(shù)據(jù)重組等工作。TCP函數(shù)調用流程如圖7所示。
TCP服務器建立步驟如下:
(1)調用函數(shù)tcp_new()新建一個TCP控制塊。
(2)調用函數(shù)tcp_bind()綁定本地IP地址和端口號。
(3)調用函數(shù)tcp_listen()服務器進入監(jiān)聽狀態(tài),等待客戶端連接。
(4)調用函數(shù)tcp_accept()注冊建立連接后的回調函數(shù)。
3.3 協(xié)議轉換模塊
CAN FD總線和以太網(wǎng)都遵循OSI模型,協(xié)議之間的轉換實質就是2種協(xié)議的封裝和解封裝過程。協(xié)議轉換流程如圖8所示。
當CAN FD收發(fā)器ATA6561收到數(shù)據(jù)傳入主控制器SAME54P20A時,取出CAN FD幀數(shù)據(jù)段內(nèi)容,參考TCP/IP協(xié)議格式,將數(shù)據(jù)段封裝到TCP數(shù)據(jù)包中,依次添加TCP報頭、IP報頭,然后把打包好的IP數(shù)據(jù)傳送給以太網(wǎng)收發(fā)器KSZ8091,添加以太網(wǎng)幀頭并發(fā)送至以太網(wǎng)。
當有數(shù)據(jù)幀從以太網(wǎng)端發(fā)送過來,首先經(jīng)過RJ45網(wǎng)絡接口送到以太網(wǎng)收發(fā)器KSZ8091,KSZ8091隨后將數(shù)據(jù)幀直接傳給主控制器SAME54,主控制器會對接收到的以太網(wǎng)數(shù)據(jù)幀解封裝,去除以太網(wǎng)幀頭、TCP報頭等,得到原始數(shù)據(jù)信息,然后封裝成CAN FD幀格式,經(jīng)收發(fā)器ATA6561的CANH、CANL差分線發(fā)送出去。
4 系統(tǒng)功能測試
LwIP協(xié)議棧初始化配置時,TCP服務器端口號為6060,IP地址為192.168.0.100,網(wǎng)關地址為192.168.0.1,并開啟監(jiān)聽模式。TCP客戶端IP地址設置為192.168.0.149,子網(wǎng)掩碼255.255.255.0,網(wǎng)關地址為192.168.0.1。網(wǎng)關初始化完成之后,TCP客戶端發(fā)送和TCP服務器的連接請求,TCP服務器和客戶端經(jīng)過三次握手后建立TCP連接。
打開TCP/IP端網(wǎng)絡調試助手,CAN FD端ZCANPRO軟件,進行收發(fā)測試,如圖9和圖10所示。以第二條報文為例, CAN FD幀ID為0x281,報文數(shù)據(jù)為aa 01 02 03 04 05 06 07 08 09 0a 0b,幀類型為標準幀。發(fā)送該CAN FD報文后,網(wǎng)絡調試助手接收到TCP/IP幀,第一個字節(jié)00代表標準幀,01代表擴展幀。第二至第四字節(jié)為幀ID,之后為報文數(shù)據(jù)。通過多次比對,兩者收發(fā)內(nèi)容一致,證明該網(wǎng)關能實現(xiàn)CAN FD和TCP/IP幀之間的協(xié)議轉換,實時性好。
5 結束語
本文基于新興CAN FD總線技術,研究了CAN FD總線相比于傳統(tǒng)CAN總線帶來的變化和優(yōu)勢,對CAN FD和TCP/IP協(xié)議轉換網(wǎng)關進行了軟硬件設計,通過測試驗證該網(wǎng)關具有良好的可靠性,為整車總線網(wǎng)絡和終端網(wǎng)聯(lián)設備間的信息交互提供設計參考。
參考文獻
[1]符曉芬. CAN總線在汽車電氣控制中的應用[J]. 電子技術與軟件工程, 2017(11):247.
[2]陳曦.CAN總線實時性和可靠性若干問題的研究[D]. 天津:天津大學, 2010.
[3]XIE Yong, HUANG Pengcheng, LIANG Wei, et al. Comparison between CAN and CAN FD: A quantified approach[C]// Proc. of IUCC.Guangzhou, China:IEEE, 2017:1399-1403.
[4]楊福宇. 有關CAN FD的評論[J]. 單片機與嵌入式系統(tǒng)應用, 2012, 12(7):34-36,40.
[5]王偉. CAN FD突破CAN總線應用局限[J]. 電子技術應用, 2015, 41(5):3,13.
[6]ZAGO G M, FREITAS E P D. A quantitative performance study on CAN and CAN FD vehicular networks[J]. IEEE Transactions on Industrial Electronics, 2018,65(5):4413-4422.
[7]CENA G, BERTOLOTTI I C, HU Tingting, et al. Improving compatibility between CAN FD and legacy CAN devices[C]// 2015 IEEE 1st International Forum on Research & Technologies for Society & Industry Leveraging A Better Tomorrow(RTSI). Turin, Italy:IEEE,2015:1-8.
[8]唐文俊, 李維波, 賀洪,等. 一種基于ARM的遠程監(jiān)控系統(tǒng)的設計與實現(xiàn)[J]. 船電技術, 2011, 31(11):1-5.
[9]孫樂鳴, 江來, 代鑫. 嵌入式TCP/IP協(xié)議棧LWIP的內(nèi)部結構探索與研究[J]. 電子元器件應用, 2008,10(3):79-82.