張濤,李珍珍,王思山,黃愛蓉
(湖北汽車工業(yè)學(xué)院 電氣與信息工程學(xué)院,湖北 十堰 442002)
SAE J1939協(xié)議的研究及其協(xié)議棧的實現(xiàn)
張濤,李珍珍,王思山,黃愛蓉
(湖北汽車工業(yè)學(xué)院 電氣與信息工程學(xué)院,湖北 十堰 442002)
闡述了一種基于CAN總線的車輛網(wǎng)絡(luò)通信協(xié)議SAE J1939,設(shè)計和實現(xiàn)了基于μC/OS-II嵌入式操作系統(tǒng)的協(xié)議棧,能夠發(fā)送和接收J(rèn)1939報文。該協(xié)議棧支持分布在車輛各個不同位置的ECU之間的具有實時閉環(huán)控制功能的高速通信網(wǎng)絡(luò)。最后,在采用標(biāo)準(zhǔn)SAE J1939協(xié)議的汽車儀表上驗證了所設(shè)計的協(xié)議棧,很好地實現(xiàn)了車輛ECU之間的高速通信。
CAN總線;SAE J1939;μC/OS-II;ECU
J1939協(xié)議技術(shù)在國外,特別是歐洲、美國、日本,已經(jīng)相當(dāng)成熟。目前,J1939已經(jīng)成為世界各大車輛部件制造廠商支持的重要通信標(biāo)準(zhǔn),尤其在大客車、載重貨車、特種車輛和工程機械得到廣泛的應(yīng)用[2]。國內(nèi)在CAN總線方面的研究和應(yīng)用與國外相比有明顯差距。由此,SAE J1939協(xié)議不僅是目前有實用參考意義的車用網(wǎng)絡(luò)協(xié)議,而且對其徹底分析對制定上層協(xié)議有著重要的指導(dǎo)意義。
SAE J1939協(xié)議供卡車及其拖車、大客車、建筑設(shè)備以及農(nóng)業(yè)設(shè)備使用,是用來支持分布在車輛各個不同位置的電控單元之間實現(xiàn)實時閉環(huán)控制功能的高速通信標(biāo)準(zhǔn),其數(shù)據(jù)傳輸速率為250kb/s,其物理層和數(shù)據(jù)鏈路層以CAN2.0B為基礎(chǔ),還定義了網(wǎng)絡(luò)層和應(yīng)用層協(xié)議。J1939通信協(xié)議是以CAN總線通信協(xié)議為基礎(chǔ)制定的,借用CAN的信息幀傳遞J1939的信息,即利用CAN總線的29位標(biāo)識符位形成J1939的編碼系統(tǒng),約定了貨車和客車的通信編碼,并按這一規(guī)則形成了J1939的通信協(xié)議,實現(xiàn)了一個完整的網(wǎng)絡(luò)定義[3]。
SAE J1939協(xié)議各層根據(jù)OSI模型構(gòu)建,針對OSI每層都有對應(yīng)的J1939協(xié)議分層,但并不是所有的層次都是由各自的J1939文檔來明確界定的。SAE J1939協(xié)議與OSI模型的關(guān)系如圖1所示[4]。
SAE J1939協(xié)議是車輛網(wǎng)絡(luò)的應(yīng)用層協(xié)議,其物理層和數(shù)據(jù)鏈路層都是以CAN2.0B協(xié)議為基礎(chǔ)的,有關(guān)CAN的介紹很多,在此不作過于詳細(xì)的描述,只對本協(xié)議相關(guān)內(nèi)容進行研究。
物理層主要是定義電氣接口和物理介質(zhì),實現(xiàn)網(wǎng)絡(luò)中電控單元(ECU)之間的電連接。物理層物理介質(zhì)為中屏蔽雙絞線,其特定阻抗為120 Ω,電流對稱驅(qū)動。2條線分別命名為CAN_H(黃色)和CAN_L(綠色)。物理層是差動電壓方式傳輸信號的[5]。
數(shù)據(jù)鏈路層通過物理鏈接保證數(shù)據(jù)可靠傳輸。主要定義了信息幀的數(shù)據(jù)結(jié)構(gòu)、編碼規(guī)則,包括通信優(yōu)先權(quán)、通信格式、通信要求、總線仲裁、錯誤檢測及處理,即發(fā)送CAN數(shù)據(jù)幀中的必要同步,順序控制,糾錯控制和流控制。流控制是以統(tǒng)一的消息幀格式實現(xiàn)的。SAE J1939設(shè)備必須使用擴展幀,標(biāo)準(zhǔn)幀格式消息可以在網(wǎng)絡(luò)中存在,但只能以本文所描述的方式。標(biāo)準(zhǔn)幀設(shè)備不響應(yīng)網(wǎng)絡(luò)管理消息,不支持標(biāo)準(zhǔn)化通信[6]。
根據(jù)OSI模型層次的劃分進行本協(xié)議棧的總體分析與設(shè)計,并對除了網(wǎng)絡(luò)層以外的每一層分別實現(xiàn),最終對系統(tǒng)軟硬件進行完整的設(shè)計并測試。
那么大瓶充裝工序的T=X1+X2+X3+X=14.91+18.77+2.90+15.97=52.55,依次求得轉(zhuǎn)盤充裝工序的觀測時間為:3.86s,分揀工1工序的觀測時間為:3.45s,在叉車工序中,卸車工序的觀測時間為:0.87min,上空工序的觀測時間為:1.16min,下重工序的觀測時間為:1.05min 裝車工序的觀測時間為0.84min。
SAE J1939協(xié)議的底層沿用了CAN標(biāo)準(zhǔn),但其通信協(xié)議卻比CAN復(fù)雜得多,針對具體應(yīng)用的高層差別也較大,一般不能將全部協(xié)議內(nèi)容封裝在通信控制器芯片內(nèi),而需要采用軟件的方法來實現(xiàn),即通過通信協(xié)議棧實現(xiàn)通信功能[10]。根據(jù)ISO模型,協(xié)議棧采用分層結(jié)構(gòu)。
SAE J1939協(xié)議棧由3個模塊組成:數(shù)據(jù)鏈路層、傳輸層和網(wǎng)絡(luò)管理層。協(xié)議棧的最底層直接面向硬件(CAN控制器),最頂層則面向用戶應(yīng)用程序。通過修改配置文件和硬件抽象層,可將協(xié)議棧向多種硬件移植,適合特定應(yīng)用的需要[10]。根據(jù)上述分析,可以設(shè)計出SAE J1939協(xié)議棧的軟件框圖如圖2所示。
設(shè)計汽車ECU的開發(fā)平臺,并在其上移植J1939通信協(xié)議棧,可快速實現(xiàn)汽車ECU之間的通信功能,使其方便的接入汽車內(nèi)部網(wǎng)絡(luò)系統(tǒng)中。對于汽車網(wǎng)絡(luò),是一個復(fù)雜的系統(tǒng),各種通信以及功能的實現(xiàn)都需要快速準(zhǔn)確的執(zhí)行,并且可能同時還有幾個任務(wù)的通信和執(zhí)行,所以對這些較復(fù)雜的ECU(如汽車儀表、控制中心等)需要使用操作系統(tǒng)。針對汽車電子的特點,從實時性、經(jīng)濟性、可移植性等方面考慮,嵌入式操作系統(tǒng)μC/OS-II是較合適的選擇[3]。
μC/OS-II是一種簡單、高效、可移植、可固化、可裁剪、搶占式且源代碼公開的嵌入式實時操作系統(tǒng),已經(jīng)被廣泛應(yīng)用到各種嵌入式系統(tǒng)中。μC/OSII最多支持256個任務(wù),其內(nèi)核為占先式,并支持信號量、郵箱、消息隊列等多種進程間通信機制;用戶可以根據(jù)需求對內(nèi)核中的功能模塊裁剪。
通過對SAE J1939協(xié)議棧各層分析,設(shè)計實現(xiàn)整個J1939協(xié)議棧通信所依賴的硬件平臺。微控制器選用NXP公司推出的以ARM Cortex-M3為處理器的32位微控制器LPC1768,其可用于集成度和低功耗的嵌入式應(yīng)用,十分適合本項目的硬件條件。CAN收發(fā)器采用TJA1050,它是控制器區(qū)域網(wǎng)絡(luò)(CAN)協(xié)議控制器和物理總線之間的接口,是一種標(biāo)準(zhǔn)的用于汽車和普通工業(yè)應(yīng)用的先進CAN收發(fā)器。系統(tǒng)硬件框圖如3所示。
主要圍繞協(xié)議棧具體實現(xiàn)過程進行研究和設(shè)計,并且基于μC/OS-II嵌入式操作系統(tǒng),進行整體的程序設(shè)計,以實現(xiàn)協(xié)議棧J1939報文數(shù)據(jù)的傳輸。然后,分別對各個層之間功能以及消息傳遞做具體的實現(xiàn)。
在SAE J1939協(xié)議棧中,消息在μC/OS-II嵌入式操作系統(tǒng)中的接收和發(fā)送的流程如圖4所示。
在消息接收中,CAN控制器將其寄存器中的如CAN幀格式、CAN數(shù)據(jù)幀ID以及CAN消息包含的數(shù)據(jù)等內(nèi)容,通過建立3個郵箱進行各層數(shù)據(jù)傳送,并且在數(shù)據(jù)鏈路層DL(Data Link Layer)、傳輸層TL(Transport Layer)和應(yīng)用層APP(Users Application Layer)分別創(chuàng)建相應(yīng)任務(wù),對數(shù)據(jù)進行處理,以滿足設(shè)計需要[11]。
由于SAE J1939協(xié)議的網(wǎng)絡(luò)管理層包含的地址聲明、地址沖突和地址仲裁內(nèi)容繁瑣復(fù)雜,不是本次課題實現(xiàn)的目標(biāo),故對該層只做了基本分析。故報文的發(fā)送的實現(xiàn)只開始于應(yīng)用層。當(dāng)啟動一個任務(wù),應(yīng)用層就調(diào)用傳輸層發(fā)送報文的函數(shù),將報文發(fā)送到傳輸層;或者當(dāng)應(yīng)用層接收到消息將消息經(jīng)過處理轉(zhuǎn)換成發(fā)送報文傳輸?shù)絋L。TL調(diào)用數(shù)據(jù)鏈路層的報文格式轉(zhuǎn)換函數(shù),將J1939報文轉(zhuǎn)換成CAN數(shù)據(jù)幀格式,并調(diào)用物理抽象層HAL(Hardware Abstraction Layer)發(fā)送函數(shù),將數(shù)據(jù)寫入CAN各類寄存器。
當(dāng)應(yīng)用層將消息發(fā)送到抽象物理層,從CAN寄存器中讀取數(shù)據(jù)有可以開始進行J1939報文的接收,如此循環(huán)。在商用車上面,目前只有發(fā)送機相關(guān)參數(shù)使用了J1939協(xié)議,故對發(fā)送機轉(zhuǎn)速、冷卻液溫度和故障等數(shù)據(jù)進行發(fā)送和接收。當(dāng)給應(yīng)用層發(fā)送的發(fā)送機轉(zhuǎn)速、冷卻液溫度和故障的值做一個動態(tài)的變化時,該協(xié)議棧就可以自動的完成相關(guān)數(shù)據(jù)的發(fā)送和接收。
抽象物理層HAL模塊提供的功能:CAN硬件初始化;CAN數(shù)據(jù)包的發(fā)送和接收。該層利用中斷接收消息,并將消息存入緩沖區(qū)。在發(fā)送報文過程中,HAL建立3個緩沖區(qū)發(fā)送報文。
數(shù)據(jù)鏈路層模塊提供了一種打包應(yīng)用的數(shù)據(jù)成CAN擴展幀格式的方法,并且當(dāng)物理抽象層能夠傳輸CAN包時緩存數(shù)據(jù)包。另外,數(shù)據(jù)鏈路層模塊緩存接收CAN包,根據(jù)目的地址過濾數(shù)據(jù)包,發(fā)送過濾后的數(shù)據(jù)包到傳輸層。
數(shù)據(jù)鏈路層DL在初始化時就在數(shù)據(jù)鏈路層建立了一個任務(wù)。該任務(wù)請求來自抽象物理層HAL的消息發(fā)送,并對報文進行過濾,最后對過濾后的數(shù)據(jù)包進行消息發(fā)送,流程圖見圖5。其中如果不是所要求的CAN的ID值,就忽略該消息。
在數(shù)據(jù)鏈路層消息發(fā)送過程中,DL將發(fā)送報文的J1939報文格式轉(zhuǎn)換成CAN數(shù)據(jù)幀格式,該函數(shù)被傳輸層調(diào)用,重組完畢后調(diào)用物理層消息發(fā)送函數(shù),將消息發(fā)送到HAL。
傳輸層為J1939協(xié)議提供消息的打包、重組和連接管理。長度小于等于8字節(jié)的消息可以直接從傳輸層經(jīng)過處理后發(fā)送或接收。而對于大于8字節(jié)消息則需要對消息進行拆裝和重組。
傳輸層TL在初始化時就在該層建立了一個任務(wù)。該任務(wù)請求來自數(shù)據(jù)鏈路層DL的消息發(fā)送,并對消息的格式從CAN到J1939報文的轉(zhuǎn)換,最后對J1939報文格式的消息發(fā)送,流程圖見圖6。
傳輸層中消息的發(fā)送,主要由應(yīng)用層調(diào)用傳輸層傳輸函數(shù)J1939_Transmit_Message()開始。該函數(shù)調(diào)用數(shù)據(jù)鏈路層中的函數(shù)Build_CAN_Packet()將消息發(fā)送至數(shù)據(jù)鏈路層。
為了達(dá)到軟件部分總體設(shè)計中將SAE J1939協(xié)議棧中數(shù)據(jù)發(fā)送和接收做成一個循環(huán)的流程的要求,在應(yīng)用層分別發(fā)送3個動態(tài)變化的參數(shù),即發(fā)動機轉(zhuǎn)速、發(fā)送機冷卻液溫度和故障指示。
應(yīng)用層報文的發(fā)送是啟動任務(wù)的任務(wù)主體,一直處于就緒狀態(tài)。給發(fā)送機轉(zhuǎn)速、冷卻液溫度和故障指示燈賦值,并使它們處在一個連續(xù)不斷的數(shù)據(jù)發(fā)送過程中。調(diào)用傳輸層函數(shù)將J1939報文消息從應(yīng)用層一直發(fā)送到物理抽象層。
同時,為了便于觀察從應(yīng)用層發(fā)送的J1939報文的數(shù)據(jù),調(diào)用J1939_Send_To_PC()函數(shù),將應(yīng)用層發(fā)出的數(shù)據(jù)輸出到串口上,應(yīng)用在PC機上顯示出來。在上述分析過程知道接收報文的轉(zhuǎn)發(fā)在SAE J1939協(xié)議棧數(shù)據(jù)之間循環(huán)發(fā)送和接收有著重要的作用。該函數(shù)對報文PGN值進行判斷并且相應(yīng)轉(zhuǎn)換,將轉(zhuǎn)換后的報文發(fā)送到傳輸層。
系統(tǒng)測試分為SAE J1939協(xié)議棧報文發(fā)送測試和接收測試。這里講到的軟件調(diào)試準(zhǔn)確的說應(yīng)該是軟硬件的聯(lián)合測試,這些軟件的測試都是基于硬件平臺和輔助軟件調(diào)試助手完成的。
根據(jù)以上分析,整體的測試可以采用如圖7所示方案。PC機上編輯顯示界面,用于監(jiān)視開發(fā)板1所發(fā)出的報文,而開發(fā)板1上的指示燈指示其發(fā)送一個報文就閃爍一次。與此同時,開發(fā)板2接收到開發(fā)板1發(fā)送過來的報文,并且開發(fā)板2上的指示燈2用來指示沒接收到一個報文就閃爍一次。即可驗證J1939報文的接收。之后,開發(fā)板2將報文進行轉(zhuǎn)發(fā),汽車儀表遵循SAE J1939協(xié)議,就可以將相應(yīng)數(shù)據(jù)顯示。
通過深入分析研究SAE J1939協(xié)議各層的具體規(guī)范,然后確立實現(xiàn)了硬件和軟件方案。通過對SAE J1939協(xié)議棧物理層、數(shù)據(jù)鏈路層、傳輸層和應(yīng)用層的報文的發(fā)送和接收,實現(xiàn)車輛ECU之間的相互通信。但是J1939協(xié)議的徹底實現(xiàn)還需進一步研究。比如地址聲明,地址發(fā)生沖突時有地址仲裁,重新聲明地址需要制定SAE J1939協(xié)議報文傳輸?shù)闹俨脵C制,這就是協(xié)議棧的網(wǎng)絡(luò)管理層作用之一。文中沒有對該層進行設(shè)計實現(xiàn),要對SAE J1939協(xié)議棧的實現(xiàn)做更進一步的完善,也是今后研究和設(shè)計發(fā)展的重點方向之一。
[1]高燕,高松,趙明.SAE J1939協(xié)議在客車上的應(yīng)用現(xiàn)狀及展望[J].工業(yè)控制計算機,2006,19(4):68-69.
[2]高松,高燕,王吉華.SAE J1939協(xié)議在車輛上的應(yīng)用[J].拖拉機與農(nóng)用運輸車,2006,33(6):1-2.
[3]夏繼強,李曉君,曹磊,孫進.SAE J1939協(xié)議棧設(shè)計及μC/OS-II系統(tǒng)下的開發(fā)平臺的研究 [J].汽車工程,2008,30(12):1069-1074.
[4]SAE J1939-01,Recommended Practice for Control and Communications Network for On-Highway[S].2000.
[5]SAE J1939-11,Physical Layer,250Kb/s,Shielded Twisted Pair[S].1999.
[6]SAE J1939-21,Data Link Layer[S].2001.
[7]SAE J1939-31,Network Layer[S].2004.
[8]SAE J1939-71,Vehicle Application Layer[S].2008.
[9]SAE J1939-73,Application Layer-Diagnostics[S].2006.
[10]Port GmbH.J1939 Protocol Stack [K/OL].(2010)[2011-01-06].www.port.de.
[11]任哲,潘樹林,房紅征.嵌入式操作系統(tǒng)基礎(chǔ)μC/OS-II和Linux[M].北京:北京航空航天大學(xué)出版社,2006.
[12]丁海濤,楊建森.SAE J1939協(xié)議培訓(xùn)教程[B/OL].(2008-10-30)[2010-12-08].http://www.docin.com/p-33474417.html.
SAE J1939 Protocol and Implementation of Its Protocol Stack
Zhang Tao,Li Zhenzhen,Wang Sishan,Huang Airong
(School of Electrical and Information Engineering,Hubei Automotive Industries Institute,Shiyan 442002,China)
The SAE J1939 protocol of vehicle network communication based on CAN bus is described.The protocol stack based on μCOS-II embedded operating system is designed and implemented.The J1939 messages can be sent and
through it.High-speed communication network between ECUs in the different positions in the vehicle and with real-time closed-loop controlling function is supported by the protocol stack.The protocol stack is verified on the motormeter using the SAE J1939 protocol,the result show that the communication between ECUs of the vehicle is implemented very well.
CAN bus;SAE J1939;μC/OS-II;ECU
TP277
A
1008-5483(2010)01-0025-05
2011-02-22
湖北省高等學(xué)校優(yōu)秀中青年科技創(chuàng)新團隊計劃項目(T200903)
張濤(1976-),男,湖北隨州人,碩士,從事網(wǎng)絡(luò)安全、網(wǎng)絡(luò)應(yīng)用方面的研究。