K課堂 | 深入解析CAN總線常見高層協(xié)議J1939標(biāo)準(zhǔn)(上篇)

SAE J19399 (以下簡稱J1939) 是美國汽車工程協(xié)會?(SAE)?的推薦標(biāo)準(zhǔn),也是CAN通訊開發(fā)常用的協(xié)議,用于為中重型道路車輛上電子部件間的通訊提供標(biāo)準(zhǔn)的體系結(jié)構(gòu)。它由“卡車與大型客車電氣與電子委員會”?(Track & Bus Electrical & Electronics Committee)?下屬的“卡車與大型客車控制和通訊網(wǎng)絡(luò)附屬委員會”?(Track & Bus Control and Communications Network Subcommittee)?開發(fā)編寫。
J1939描述了重型車輛現(xiàn)場總線的一種網(wǎng)絡(luò)應(yīng)用,包括CAN網(wǎng)絡(luò)物理層定義、數(shù)據(jù)鏈路層定義、應(yīng)用層定義、網(wǎng)絡(luò)層定義、故障診斷和網(wǎng)絡(luò)管理。在SAE J1939協(xié)議中,不僅僅指定了傳輸類型、報文結(jié)構(gòu)及其分段、流量檢查等,而且報文內(nèi)容本身也做了精確的定義。J1939是在商用車輛、艦船、軌道機(jī)車、農(nóng)業(yè)機(jī)械和大型發(fā)動機(jī)中應(yīng)用最廣泛的應(yīng)用層協(xié)議。
本篇內(nèi)容根據(jù)Kvaser《J1939概述》內(nèi)容進(jìn)行整理,簡要介紹SAE J1939標(biāo)準(zhǔn),深入講述報文架構(gòu)以及SAE規(guī)范指南,希望能對CAN總線技術(shù)的學(xué)習(xí)者有所幫助。
內(nèi)容框架如下:
上篇(本篇內(nèi)容)
J1939 簡介:簡介、特點(diǎn)、SAE J1939標(biāo)準(zhǔn)
J1939 詳述:報文格式和使用方法(J1939/21)、地址和名稱 (J1939/81)、地址聲明、發(fā)送報文(J1939/21 和 J1939/7x)、TP_BAM 報文、TP_CM 報文、報文接收(J1939/21 和 J1939/7x)
下篇(將于3/22發(fā)布)
J1939: 詳述:ECU 設(shè)計(J1939/1x,J1939/21 和 J1939/7x)、接線拓?fù)?- 物理層(J1939/1x)、如何解讀 J1939 報文的示例
其它:獲取完整版 J1939 規(guī)范文件、比較 J1939 兼容軟件套件、訂購 J1939 診斷電纜
附錄 A:J1939/11 物理層、J1939/13 – 非車載診斷連接器、J1939/21 – 數(shù)據(jù)鏈路層、J1939/31 – 網(wǎng)絡(luò)層、J1939/71 – 車輛應(yīng)用層、J1939/73 應(yīng)用層 – 診斷、J1939/81 – 網(wǎng)絡(luò)管理

簡介
J1939 是由美國汽車工程師協(xié)會 (SAE) 定義的一組標(biāo)準(zhǔn)。J1939 標(biāo)準(zhǔn)用于卡車、公共汽車和移動液壓等重型車輛的電氣系統(tǒng)設(shè)計。
J1939 規(guī)范為物理層、診斷連接器和多層報文架構(gòu)提供了方向。在許多方面,J1939 類似于舊版J1708 和 J1587 標(biāo)準(zhǔn),但 J1939 建立在 CAN (控制器區(qū)域網(wǎng)絡(luò),ISO11898) 上。
對于重型車輛行業(yè)也許最重要的是,J1939 規(guī)定了用于在電氣總線上通信的一組標(biāo)準(zhǔn)的報文參數(shù)組 (稱為 PGN) 。一組“自定義”報文參數(shù)也保留給專有第三方使用。這提供了兩個好處:
? 用于更快設(shè)置的標(biāo)準(zhǔn)化系統(tǒng)
??能夠根據(jù)自身需求進(jìn)行定制
特點(diǎn)
J1939具有以下特點(diǎn):
? 基于 CAN 的高層協(xié)議
??用于重型車輛
??傳輸速度穩(wěn)定在 250kbps
??對等和廣播通信
??用于網(wǎng)絡(luò)管理
??包括商用車輛和其它車輛的參數(shù)組的定義
??支持制造商特定的參數(shù)組
SAE J1939 標(biāo)準(zhǔn)
J1939 由以下子標(biāo)準(zhǔn)組成:
? J1939 – 串行控制和通信車輛網(wǎng)絡(luò)的建議實(shí)踐
??J1939/11 – 物理層 – 250kbps,屏蔽雙絞線
??J1939/13 – 非車載診斷連接器
??J1939/21 – 數(shù)據(jù)鏈路層
??J1939/31 – 網(wǎng)絡(luò)層
??J1939/71 – 車輛應(yīng)用層
??J1939/73 – 應(yīng)用層– 診斷
??J1939/81 – 網(wǎng)絡(luò)管理
有關(guān)這些規(guī)范的詳細(xì)信息,請查看“附錄A”。

報文格式和使用方法(J1939/21)
J1939 標(biāo)準(zhǔn)定義的大部分報文均旨為數(shù)據(jù)通信。這意味著網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù)沒有指定目標(biāo)地址。
這樣任何想要使用數(shù)據(jù)的設(shè)備都不需要再額外請求報文。將來的軟件升級也可以方便兼容新設(shè)備 (地址分配) 。當(dāng)報文必須指向特定設(shè)備時,可以在報文標(biāo)識符里包含特定的目標(biāo)地址。例如,請求來自發(fā)動機(jī)的特定扭矩值,而不是來自制動控制器的特定扭矩值。
J1939 使用 CAN 2.0B 協(xié)議中定義的 29 位標(biāo)識符,如圖 1 所示。含有指定目標(biāo)地址的報文 (“PDU1”) 與旨在廣播的報文 (“PDU 2”) 使用的標(biāo)識符略有不同。
PDU 是協(xié)議數(shù)據(jù)單元 (即報文格式) 。
SOF,SRR 和 IDE 位由 CAN 標(biāo)準(zhǔn)定義,這里忽略。RTR 位 (遠(yuǎn)程請求位) 在 J1939 中總是設(shè)置為0。
J1939 中使用的 29 位標(biāo)識符結(jié)構(gòu)如下。

標(biāo)識符的前三位是用于在仲裁過程中控制報文的優(yōu)先級。0 值擁有最高優(yōu)先級。更高優(yōu)先級值通常用于高速控制報文,例如從傳動裝置至發(fā)動機(jī)的轉(zhuǎn)矩控制報文。包含時間不重要的數(shù)據(jù)的報文,例如車輛行駛速度,會被賦予較低優(yōu)先級值。
標(biāo)識符的下一位將保留備用,在報文發(fā)送中應(yīng)設(shè)置為 0。
標(biāo)識符中的下一位是數(shù)據(jù)頁選擇器。此位擴(kuò)展可由標(biāo)識符表示的潛在參數(shù)組的數(shù)目。
協(xié)議數(shù)據(jù)單元格式 (PF) 用于確定是否可以作為包含目標(biāo)地址報文發(fā)送或者報文總是作為廣播報文發(fā)送。
對特定協(xié)議數(shù)據(jù)單元 (PS) 字段變化的解釋以 PF 的值為依據(jù):
??如果 PF 處于 0 和 239 之間,則報文可尋址,且 PS 字段包含目標(biāo)地址。
??如果 PF 處于 240 和 255 之間,則報文只能廣播 (PDU2) ,且 PS 字段包含組擴(kuò)展。
* 組擴(kuò)展擴(kuò)展了可由標(biāo)識符表示的潛在廣播參數(shù)組的數(shù)目。
術(shù)語參數(shù)組編號 (PGN) 適用于將保留位、DP、PF 和 PS 字段的值合并成單個 18 位的值。
例如: 身份 0xcf004ee 可分為表 2 所示字段。

?PGN = R,DP, PF 和 PS 字段 – 在本例中為 0x0F004。
??PF = 0xF0 = 240,即這是 PDU2 (廣播) 報文
??PS = 0×04,即組擴(kuò)展 = 4
標(biāo)識符的最后 8 位包含發(fā)送報文的設(shè)備的地址。地址是被分配以提供唯一地訪問網(wǎng)絡(luò)上的給定設(shè)備的方式的標(biāo)簽或“句柄”。對于給定的網(wǎng)絡(luò),每個地址必須是唯一的 (可以有 254 個) 。這意味著兩個不同的設(shè)備 (ECU) 不能使用相同的地址。
地址和名稱 (J1939/81)
名稱是一個 64 位 (8 字節(jié)) 長的標(biāo)簽,賦予每個 ECU 一個獨(dú)特的身份。名稱由 10 個字段組成,并具有表 3 所示的以下結(jié)構(gòu)。


? 任意地址位
??行業(yè)組,長度 3 位
??車輛系統(tǒng)實(shí)例,長度 4 位
??車輛系統(tǒng),長度 7 位
??保留位
??函數(shù),長度 8 位
??函數(shù)實(shí)例,長度 5 位
??ECU 實(shí)例,長度 3 位
??制造商代碼,長度 11 位
??身份號碼,長度 21 位
名稱的主要目的是描述 ECU。較低的函數(shù)字段值,0 到 127,預(yù)分配給“標(biāo)準(zhǔn)”函數(shù)或設(shè)備。128至254 的值取決于工業(yè)組和車輛系統(tǒng)值。這種依賴性使得不同車輛可能具有相同的函數(shù)配置。該系統(tǒng)還允許諸如拖車和農(nóng)用車輛等設(shè)備限制對可用地址的搜索,且因此盡可能縮短動態(tài)聲明地址的時間以及降低其難度。當(dāng)聲明地址時,名稱用于確定哪個 ECU 具有更高的優(yōu)先級,因此將獲得聲明的地址。
網(wǎng)絡(luò)上的每個設(shè)備將與至少一個名稱和一個地址相關(guān)聯(lián)。然而,多個設(shè)備名稱和多個地址可以在單個 ECU 中共存。例如,駐留在具有單個物理總線連接的公共設(shè)備中的發(fā)動機(jī)和發(fā)動機(jī)制動器 (減速器) 。設(shè)備地址定義報文的特定通信源或目標(biāo)。名稱可標(biāo)識功能,當(dāng)網(wǎng)絡(luò)中有多個同類設(shè)備共存時,可為功能添加一個唯一的實(shí)例編號。受地址限制,只有 254 個相同類型的不同設(shè)備可以共存于網(wǎng)絡(luò)上。地址 255 被保留作為用于廣播的全局地址,而地址 254 被保留作為尚未聲明地址或未能聲明地址的設(shè)備所使用的“空地址”。
地址聲明
通常,大多數(shù)地址被預(yù)分配并在接通電源時立即使用。為了允許 J1939 兼容未定義的未來設(shè)備和功能,已經(jīng)規(guī)定了用于動態(tài)分配地址的過程。每臺設(shè)備需表明與之相關(guān)聯(lián)的地址。這便是標(biāo)識 (地址聲明) 屬性。有兩種選擇:
??發(fā)送地址聲明報文以聲明地址
當(dāng)設(shè)備發(fā)送地址聲明報文以聲明地址時,所有設(shè)備都會將該新聲明的地址與其自身網(wǎng)絡(luò)上的設(shè)備列表進(jìn)行比較。如果該地址已被有更高優(yōu)先級的設(shè)備聲明,設(shè)備會發(fā)送一條包含地址已被使用的地址聲明報文。名稱,在地址聲明報文中以數(shù)據(jù)的形式發(fā)送,用于確定哪個設(shè)備具有更高的優(yōu)先級。
??發(fā)送地址聲明請求
當(dāng)設(shè)備發(fā)送地址聲明請求時,所有設(shè)備通過發(fā)送其地址已聲明報文進(jìn)行響應(yīng)。這允許過渡設(shè)備 (工具,追蹤器等) 或即將工作的設(shè)備獲得當(dāng)前的地址表,使其可以選擇和聲明可用地址。如圖 2。
可選擇支持動態(tài)地址分配,只有那些可能會遇到地址沖突的設(shè)備必須支持此功能。為了消除支持動態(tài)地址分配和加速該“身份過程”的需要,大多數(shù) ECU 與首選地址相關(guān)聯(lián)。這些首選地址在J1939/71 文件中有描述。如果首選地址已經(jīng)被另一個 ECU 使用,則如果設(shè)備支持自配置,設(shè)備可以嘗試聲明另一個地址。

發(fā)送報文(J1939/21 和 J1939/7x)
要發(fā)送特定數(shù)據(jù)項(xiàng),報文中必須有描述待發(fā)送數(shù)據(jù)的間接費(fèi)用。相關(guān)數(shù)據(jù)項(xiàng)通常打包在報文內(nèi)以減少間接費(fèi)用。J1939/71 文件定義了一些標(biāo)準(zhǔn) PGN,用于描述報文中待發(fā)送的參數(shù)。J1939/71文件還包括關(guān)于報文優(yōu)先級和傳輸速率的信息。注意,當(dāng)設(shè)備沒有可用于給定參數(shù)的數(shù)據(jù)時,應(yīng)該包含該參數(shù)的字節(jié)被設(shè)置為“不可用” (0xFF) ,使得接收方獲知數(shù)據(jù)丟失。需要多于 8 字節(jié)數(shù)據(jù)的報文可以作為多包報文發(fā)送。多包報文通過 J1939/21 文件中定義的傳輸協(xié)議函數(shù)傳輸。
然而傳輸多包報文有兩種方式:
??廣播通知報文(TP_BAM)
??連接管理(TP_CM)
TP_BAM 報文
TP_BAM 報文使用全局目標(biāo)地址,意味著網(wǎng)絡(luò)中的所有設(shè)備都能接收到這些報文。使用連接管理 (CM) 報文 (PGN = 0x00EC00) 開始傳輸,控制字節(jié)指示 TP_BAM。緊隨其后的報文數(shù)據(jù)是數(shù)據(jù)傳輸 (DT) 報文,PGN = 0x00EB00。
TP_CM 報文
TP_CM 報文在兩個設(shè)備間點(diǎn)到點(diǎn)發(fā)送。傳輸開始于具有指示請求發(fā)送 (RTS) 的控制字節(jié)的 CM報文。接收設(shè)備以指示清除發(fā)送 (CTS) 的控制字節(jié)的連接管理 (CM) 報文響應(yīng)。然后傳輸設(shè)備使用數(shù)據(jù)傳輸 (DT) 報文發(fā)送 CTS 中指示的數(shù)據(jù)部分。CTS 和 DT 報文持續(xù)進(jìn)行握手直到全部報文傳送完成。在報文完成時,接收設(shè)備發(fā)送具有指示報文結(jié)束應(yīng)答結(jié)束 (EOM) 的控制字節(jié)的 CM報文,連接被終止。注意,為了使該過程運(yùn)作,CM 報文會根據(jù)控制字節(jié)內(nèi)容帶有附加數(shù)據(jù)。RTS包括:傳送數(shù)據(jù)的字節(jié)數(shù)、分組數(shù)和 PGN。CTS 包括接收設(shè)備所預(yù)期的分組數(shù)和開始的分組號。
報文接收(J1939/21 和 J1939/7x)
從網(wǎng)絡(luò)中捕獲所選擇的報文可以使用不同的技術(shù)手段 (和芯片) 。然而,關(guān)于所接收的報文,可以使用幾種普通的觀察方法:
??如果報文是目標(biāo)特定請求或命令,則設(shè)備必須確定目標(biāo)地址是否與設(shè)備聲明的地址匹配。
如果匹配,則接收設(shè)備必須處理報文,并提供某種類型的應(yīng)答。
??如果報文是全局請求,則每個設(shè)備,包括發(fā)起設(shè)備,都必須處理請求,并在數(shù)據(jù)可用時做出響應(yīng)。
??如果報文是廣播,則每個設(shè)備必須確認(rèn)內(nèi)容是否相關(guān)。
