劉 明
(中國(guó)航空計(jì)算技術(shù)研究所 第18研究室,陜西 西安 710119)
J1939協(xié)議在ECU通信中的應(yīng)用研究
劉 明
(中國(guó)航空計(jì)算技術(shù)研究所 第18研究室,陜西 西安 710119)
J1939協(xié)議是目前在大型汽車(chē)中應(yīng)用廣泛的通信協(xié)議,被應(yīng)用于以CAN為基礎(chǔ)的嵌入式網(wǎng)絡(luò)中。闡述了J1939協(xié)議和CAN的對(duì)應(yīng)關(guān)系,介紹了在ECU通信中的功能應(yīng)用、通信過(guò)程及數(shù)據(jù)包組織方式,以及常用參數(shù)組含含義,并給出示例說(shuō)明通信過(guò)程。通過(guò)對(duì)J1939協(xié)議使用的介紹有效推進(jìn)了J1939協(xié)議在汽車(chē)行業(yè)的發(fā)展和應(yīng)用。
J1939;CAN;通信;數(shù)據(jù)包;參數(shù)組
相比早期SAE J1587的串行通信方法,采用SAE J1939協(xié)議的CAN總線(xiàn)通信具有通信速度快、傳遞數(shù)據(jù)量多等優(yōu)勢(shì),被廣泛應(yīng)用于車(chē)載電子系統(tǒng)中。國(guó)內(nèi)對(duì)J1939的研究起步較晚,雖目前已有部分芯片、產(chǎn)品的研發(fā)達(dá)到國(guó)際先進(jìn)水平,但在J1939協(xié)議的研究方面還存在一定的差距,在自主研發(fā)和汽車(chē)電子網(wǎng)絡(luò)開(kāi)發(fā)方面還不夠?qū)I(yè),且多項(xiàng)技術(shù)還存在“空心化”問(wèn)題,核心技術(shù)未掌握,以上問(wèn)題嚴(yán)重制約了CAN總線(xiàn)和J1939協(xié)議在我國(guó)汽車(chē)產(chǎn)業(yè)中的發(fā)展。本文通過(guò)J1939協(xié)議在ECU通信中的應(yīng)用,詳細(xì)介紹了在不同通信功能中的通信過(guò)程和數(shù)據(jù)包組織方式,對(duì)J1939協(xié)議使用關(guān)鍵技術(shù)進(jìn)行了詳細(xì)說(shuō)明,有效推動(dòng)了J1939協(xié)議的使用和推廣。
SAE J1939是在CAN總線(xiàn)的基礎(chǔ)上定義了OSI各層,在其技術(shù)文檔中介紹各層相應(yīng)子標(biāo)準(zhǔn)的功能,其中較為重要的是數(shù)據(jù)鏈路層與應(yīng)用層。
1.1 數(shù)據(jù)鏈路層
SAE J1939對(duì)數(shù)據(jù)鏈路層的定義詳盡,提供了完全的網(wǎng)絡(luò)定義。該定義使用在CAN協(xié)議中定義的29位標(biāo)識(shí)符,如表1所示。29位標(biāo)識(shí)符的前3位被用來(lái)決定仲裁過(guò)程中的信息優(yōu)先權(quán),值000具有最高優(yōu)先權(quán)。較高優(yōu)先權(quán)的信息將被用作高速控制信息,較低優(yōu)先級(jí)的信息將被不關(guān)鍵的數(shù)據(jù)使用。該標(biāo)識(shí)符的下一位(R)被保留。對(duì)于被傳送的信息,該位應(yīng)置0,這個(gè)缺省將允許該位將來(lái)用作其他目的。這個(gè)標(biāo)識(shí)符的下一組9位是數(shù)據(jù)頁(yè)(DP)位和PDU格式(PF)域。PDU代表協(xié)議數(shù)據(jù)單元,PDU有兩種格式,如表2所示,分別代表不同的含義。DP位被用作頁(yè)選擇器,頁(yè)0包含所有的當(dāng)前正被定義的信息;頁(yè)1為將來(lái)提供了附加的擴(kuò)展能力,在頁(yè)0被完成后將被分配。PF域確定兩個(gè)PDU格式中的一個(gè)能夠被傳送。
表1 CAN和J1939信息幀
表2 PDU格式
PDU1格式:報(bào)文向特定目標(biāo)地址發(fā)送,此時(shí)參數(shù)群編號(hào)(Parameter Group Number,PGN)的最低字節(jié)為0,PS域不表示PGN的有效數(shù)值,用于填充目標(biāo)地址。
PDU2格式:報(bào)文作為全局報(bào)文發(fā)送,PS域表示PGN的有效數(shù)值。
PS域:網(wǎng)絡(luò)中一個(gè)特定源地址只能匹配一個(gè)應(yīng)用控制器(Control Application,CA)。
1.2 應(yīng)用層
應(yīng)用層定義了針對(duì)車(chē)輛應(yīng)用的信號(hào)和報(bào)文。應(yīng)用層通過(guò)參數(shù)描述信號(hào),給每個(gè)參數(shù)分配了一個(gè)19位的可疑參數(shù)編號(hào)(SPN);此外還通過(guò)參數(shù)組描述報(bào)文,給每個(gè)參數(shù)組分配了一個(gè)24位的參數(shù)組編號(hào)(PGN)。SPN用來(lái)標(biāo)識(shí)與ECU相關(guān)的故障診斷元素、部件或參數(shù)組中參數(shù);PGN用來(lái)唯一標(biāo)識(shí)一個(gè)特定參數(shù)組。除已分配的參數(shù)和參數(shù)組外,用戶(hù)還可通過(guò)分配未使用的SPN給自定義參數(shù)和定義專(zhuān)有報(bào)文對(duì)應(yīng)用層進(jìn)行補(bǔ)充。關(guān)于SPN和PGN的具體描述如下:
PGN:參數(shù)群編號(hào),3 Byte,24位,包含了保留位、數(shù)據(jù)頁(yè)、PDU格式和群擴(kuò)展域等信息。參數(shù)群編號(hào)唯一的標(biāo)識(shí)了一個(gè)確定的參數(shù)群。
SPN:可疑參數(shù)編號(hào),19位,用于識(shí)別與某個(gè)ECU相關(guān)的特定元素、部件或參數(shù),經(jīng)分析認(rèn)為SPN按照一定順序分布在數(shù)據(jù)包的數(shù)據(jù)段。
SPN與PGN關(guān)系:(1)應(yīng)用層參數(shù)組的每個(gè)參數(shù)(數(shù)據(jù))都分配一個(gè)SPN。(2)部分參數(shù)可具有SPN,但不屬于任何參數(shù)組(PG),沒(méi)有PGN。
在ECU通信中,主要有以下功能應(yīng)用:
(1)地址聲明。在進(jìn)行通信之前,要先進(jìn)行地址聲明。即首先由一個(gè)控制器應(yīng)用程序CA發(fā)送地址聲明請(qǐng)求消息,此消息為廣播消息,其他CA在接收到地址聲明請(qǐng)求消息后回復(fù)自身地址消息。這樣,每個(gè)CA在為自己聲明地址時(shí),都不能使用已被其他CA使用的地址,當(dāng)出現(xiàn)地址沖突時(shí)要采用仲裁算法按照CA的優(yōu)先級(jí)進(jìn)行仲裁。
(2)通信握手。通信握手指通信連接的建立和斷開(kāi)。通信節(jié)點(diǎn)開(kāi)始通信之前,先進(jìn)行通信連接以確保通信線(xiàn)路暢通。主通信節(jié)點(diǎn)先向目標(biāo)通信節(jié)點(diǎn)發(fā)送建立連接消息,目標(biāo)通信節(jié)點(diǎn)收到建立連接消息后根據(jù)自身通信狀態(tài)是否正?;貜?fù)主通信節(jié)點(diǎn),若通信節(jié)點(diǎn)通信正常,則主通信節(jié)點(diǎn)與目標(biāo)通信節(jié)點(diǎn)開(kāi)始進(jìn)行消息通信,否則主通信節(jié)點(diǎn)不斷發(fā)送建立連接消息直到收到目標(biāo)消息節(jié)點(diǎn)回復(fù)的通信正常消息。斷開(kāi)時(shí),主通信節(jié)點(diǎn)連續(xù)發(fā)3次請(qǐng)求消息,若均未回應(yīng),則認(rèn)為通信連接已經(jīng)斷開(kāi)。
(3)廣播消息。在J1939協(xié)議中使用最多的就是廣播消息,通過(guò)廣播消息可以將ECU中的參數(shù)周期性發(fā)出,通過(guò)參數(shù)測(cè)試界面顯示ECU在運(yùn)行過(guò)程中的參數(shù)當(dāng)前值以及數(shù)值變化過(guò)程。廣播消息直接發(fā)出,無(wú)需通信握手,任何通信節(jié)點(diǎn)均可接收。廣播消息一般主要用于在系統(tǒng)運(yùn)行過(guò)程中監(jiān)控系統(tǒng)中重要參數(shù)值及其變化,以了解心態(tài)運(yùn)行狀況。
(4)點(diǎn)對(duì)點(diǎn)通信。兩個(gè)通信節(jié)點(diǎn)之間進(jìn)行通信,一般是監(jiān)控工具和目標(biāo)板之間進(jìn)行通信用于完成參數(shù)的查詢(xún),修改和設(shè)置等功能,即在系統(tǒng)運(yùn)行過(guò)程中,可人為干預(yù)設(shè)置運(yùn)行條件檢測(cè)系統(tǒng)功能的健壯性。點(diǎn)對(duì)點(diǎn)通信通常應(yīng)用在以下情況中:1)參數(shù)值請(qǐng)求。監(jiān)控工具發(fā)送參數(shù)值請(qǐng)求消息,ECU在接收到參數(shù)值請(qǐng)求消息后對(duì)請(qǐng)求參數(shù)的值進(jìn)行數(shù)據(jù)消息組包并回復(fù),監(jiān)控工具將接收到的參數(shù)值數(shù)據(jù)包解析并通過(guò)界面顯示請(qǐng)求參數(shù)當(dāng)前數(shù)據(jù)值。通過(guò)參數(shù)值請(qǐng)求功能,可實(shí)時(shí)顯示ECU運(yùn)行過(guò)程中所有參數(shù)的當(dāng)前值。2)參數(shù)值修改請(qǐng)求。在ECU運(yùn)行過(guò)程中,當(dāng)需要修改某些設(shè)定參數(shù)值以檢測(cè)系統(tǒng)在不同工況下的運(yùn)行狀態(tài)時(shí),可通過(guò)監(jiān)控工具向ECU發(fā)送請(qǐng)求參數(shù)修改消息以及修改值,ECU接收到參數(shù)值修改請(qǐng)求消息后,修改對(duì)應(yīng)參數(shù)值并將修改參數(shù)當(dāng)前值進(jìn)行數(shù)據(jù)組包返回給監(jiān)控工具,表示修改完成,監(jiān)控工具接收到ECU發(fā)回的數(shù)據(jù)包后將修改后的參數(shù)值在界面上顯示,以方便查看修改后的值與設(shè)置值是否一致,從而確認(rèn)修改是否正確進(jìn)行。參數(shù)修改可以對(duì)某個(gè)獨(dú)立的參數(shù)進(jìn)行,也可以對(duì)一塊數(shù)據(jù)進(jìn)行修改。3)數(shù)據(jù)塊傳輸。兩個(gè)通信節(jié)點(diǎn)之間可進(jìn)行大數(shù)據(jù)塊傳輸。在數(shù)據(jù)塊傳輸時(shí),主通信節(jié)點(diǎn)首先要向目標(biāo)節(jié)點(diǎn)發(fā)送數(shù)據(jù)塊配置信息消息,包括數(shù)據(jù)傳輸長(zhǎng)度、格式、校驗(yàn)等信息并請(qǐng)求相應(yīng)的數(shù)據(jù)信息,目標(biāo)節(jié)點(diǎn)收到消息后按照配置信息進(jìn)行數(shù)據(jù)組織,然后將組織好的數(shù)據(jù)塊進(jìn)行組包,并傳輸給主通信節(jié)點(diǎn)。一般在數(shù)據(jù)塊傳輸過(guò)程中,由于數(shù)據(jù)量比較多,要將數(shù)據(jù)塊進(jìn)行分塊并在塊頭添加塊標(biāo)識(shí)信息。數(shù)據(jù)塊傳輸采用的是J1939協(xié)議的自定義參數(shù)組0xEF00。
(5)故障消息。ECU在運(yùn)行過(guò)程中產(chǎn)生的故障信息均記錄在故障參數(shù)中,如故障發(fā)生次數(shù),故障發(fā)生狀態(tài),故障碼等信息。若需要查看當(dāng)前故障發(fā)生情況,監(jiān)控工具向ECU發(fā)送故障請(qǐng)求消息,ECU在收到故障請(qǐng)求消息后將當(dāng)前故障信息組包回復(fù),在監(jiān)控工具中顯示,并可周期的進(jìn)行實(shí)時(shí)更新。
(6)多路通信。多路通信功能為汽車(chē)提供了多一種數(shù)據(jù)采集方法,通過(guò)J1939協(xié)議將多路通信數(shù)據(jù)傳輸?shù)紼CU,有效代替了通過(guò)傳感器提供信號(hào)的方法,在工程應(yīng)用上具有較大的靈活性。
多路通信參數(shù)一般可采用多路通信和非多路通信方式進(jìn)行采集,通過(guò)開(kāi)關(guān)控制,其采集過(guò)程如圖1所示。
圖1 多路通信和非多路通信
3.1 參數(shù)組
J1939通信協(xié)議采用的通信參數(shù)組主要包含以下幾類(lèi):
(1)PGN以F開(kāi)頭,如0xFE00,0xFF00等,用于廣播消息。
(2)PGN值為0xEC00,用于多于8 Byte的數(shù)據(jù)傳輸控制字段數(shù)據(jù)組幀。
(3)PGN值為0xEB00,用于多于8 Byte的數(shù)據(jù)傳輸數(shù)據(jù)字段組幀。
(4)PGN值為0xEA00,用于地址聲明請(qǐng)求,從網(wǎng)絡(luò)設(shè)備中請(qǐng)求參數(shù)組。
(5)PGN值為0xEE00,用于地址聲明報(bào)文組幀。
(6)PGN值為0xEF00,使用PDU1格式,允許制造商將專(zhuān)用通訊信息定向到目標(biāo)節(jié)點(diǎn),自定義幀,常用于大數(shù)據(jù)量數(shù)據(jù)傳輸組幀。
3.2 通信過(guò)程
如圖2所示的通信過(guò)程,說(shuō)明了點(diǎn)對(duì)點(diǎn)的通用通信過(guò)程,其他通信過(guò)程基本是點(diǎn)對(duì)點(diǎn)通信過(guò)程的變化形式。圖2所示的數(shù)據(jù)傳輸過(guò)程分為發(fā)送請(qǐng)求、請(qǐng)求應(yīng)答、數(shù)據(jù)發(fā)送、通信結(jié)束4個(gè)過(guò)程,除了數(shù)據(jù)發(fā)送其他過(guò)程采用TP.CM幀格式,即PGN為0xEC00的幀。
圖2 傳輸協(xié)議示意圖
通信過(guò)程詳解:
(1)TP.CM_RTS,16,23,4,255,65 259 為發(fā)送請(qǐng)求幀,16為發(fā)送請(qǐng)求控制字節(jié),23為總字節(jié)數(shù),4為總包數(shù),最多包數(shù)為255,PGN為65 259(0xfeeb)。
(2)TP.CM_CTS,17,2,1,255,255,65 259為請(qǐng)求應(yīng)答幀,17為允許發(fā)送控制字節(jié),允許包數(shù)為2,接收包開(kāi)始序號(hào)為1,保留字節(jié)255、255,PGN為65 259。
(3)TP.DT,1,data1~7 表示為發(fā)送數(shù)據(jù)幀,幀編號(hào)為1。
(4)TP.DT,2,data8~14 表示為發(fā)送數(shù)據(jù)幀,幀編號(hào)為2。
(5)TP.CM_CTS,17,0,255,255,255,65 259 表示不允許接收數(shù)據(jù)。
(6)TP.CM_CTS,17,2,255,255,255,65 259為請(qǐng)求應(yīng)答幀,17為允許發(fā)送控制字節(jié),允許包數(shù)為2,接收包開(kāi)始序號(hào)為3,保留字節(jié)255、255,PGN為65 259。
(7)TP.DT,3,data1~7 表示為發(fā)送數(shù)據(jù)幀,幀編號(hào)為3。
(8)TP.DT,4,data8~14 表示為發(fā)送數(shù)據(jù)幀,幀編號(hào)為4。
(9)TP.CM_EndOfMsgACK,19,23,4,255,65 259為報(bào)文結(jié)束應(yīng)答幀,19為報(bào)文結(jié)束應(yīng)答控制字節(jié),23為整個(gè)報(bào)文的總字節(jié)數(shù),4為總報(bào)數(shù),255為保留字節(jié),65 259為PGN。
通過(guò)自編寫(xiě)監(jiān)測(cè)工具ZLGCANTest可讀取ECU程序中CAN口接收的數(shù)據(jù)包,并給出數(shù)據(jù)包各字段解析值,接收數(shù)據(jù)包界面如圖3所示。
圖3 CAN總線(xiàn)接收數(shù)據(jù)包
介紹了J1939數(shù)據(jù)鏈路層和應(yīng)用層信息幀格式以及和CAN的對(duì)應(yīng)關(guān)系,J1939在數(shù)據(jù)通信中的功能應(yīng)用以及主要協(xié)議功能,最后以一個(gè)通信示例介紹了數(shù)
據(jù)通信時(shí)數(shù)據(jù)幀的傳輸過(guò)程,組織方式和含義。
[1] 馮桑,康迂福,康林權(quán).車(chē)載智能終端的CAN協(xié)議設(shè)計(jì)及軟件實(shí)現(xiàn)[J].公路與汽運(yùn),2010(5):30-32.
[2] 楊良義,甘海云,趙向陽(yáng).基于SAE J1939協(xié)議的天然氣發(fā)動(dòng)機(jī)傳感器故障診斷技術(shù)[J].車(chē)用發(fā)動(dòng)機(jī),2011(2):90-92.
[3] 龔光華,宮輝,安鵬.MPC5554/5553微處理器揭秘[M].北京:北京航空航天大學(xué)出版社,2010.
[4] 鐘祥麟,李孟良,王務(wù)林.SAE J1939協(xié)議在重型車(chē)OBD中的應(yīng)用[J].汽車(chē)電器,2009(7):1-3,7.
[5] 徐江富,謝紅兵.基于J1939的ABS數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)[J].重慶科技學(xué)院學(xué)報(bào):自然科學(xué)版,2010(5):168-170.
[6] 余韻律,王建,王啟慧.基于SAE J1939協(xié)議的發(fā)動(dòng)機(jī)總線(xiàn)數(shù)據(jù)模擬器開(kāi)發(fā)[J].電子設(shè)計(jì)工程,2010,18(4):48-50,54.
[7] 韓偉偉,王建,王明玉.基于SAE J1939協(xié)議的發(fā)動(dòng)機(jī)模擬系統(tǒng)開(kāi)發(fā)[J].電子設(shè)計(jì)工程,2009,17(2):72-74.
Application of J1939 Protocol in ECU Communications
LIU Ming
(Eighteenth Laboratory,Aeronautical Computing Technique Research Institute,Xi’an 710119,China)
J1939 protocol is a communication protocol widely used in large-scale automobiles currently.It is applied to the embedded CAN-based networks.This paper mainly expounds the relationship between the CAN and J1939 protocol,focusing on details of the function application in the ECU communication,the communication process and how to organize data packets.It also describes the meaning of the commonly used parameter set and gives examples to explain the communication process.Detailed instructions on how to use the J1939 protocol effectively promote the further development and application of J1939 protocol in the automotive industry.
J1939;CAN;communications;data packets;parameter set
2014- 09- 10
劉明(1983—),男,碩士,工程師。研究方向:計(jì)算機(jī)軟件。E-mail:xiangirl2005@126.com
10.16180/j.cnki.issn1007-7820.2015.05.011
TN915.04;U
A