J1939簡介
J1939協議簡介
J1939協議是由美國汽車工程師協會(SAE) (SAE協會簡介)定義的一組標準。J1939標準用於卡車、公共汽車和移動液壓等重型車輛。在許多方面,J1939標準類似於舊版J1708和J1587標準,但J1939標準協議建立在CAN(控制器區域網絡,ISO11898)上。
物理層(J1939/11)描述了針對客車的電氣接口。數據鏈路層描述了構建報文、訪問總線以及診斷傳送故障的規則。應用層(J1939/71和J1939/73)定義了在網絡中傳送的每條報文的具體數據。
J1939主要特性
- J1939協議標準基於CAN的高層協議
- J1939協議應用於重型車輛
- J1939協議傳送速度穩定在250kbps
報文格式及使用方法(J1939/21)
MJ1939標準定義的大部分報文均旨在廣播。這意味着網絡中傳輸的數據沒有指定目標地址。這樣任何想要使用數據的設備都不需要再額外請求報文。將來的軟件升級也可以方便兼容新設備(地址分配)。當報文必須指向特定設備時,可以在報文標識符裏包含特定的目標地址。例如,請求來自發動機的特定扭矩值,而不是來自制動控制器的特定扭矩值。
J1939使用CAN 2.0B協議中定義的29位標識符,如圖1所示。含有指定目標地址的報文(“PDU 1”)與旨在廣播的報文(“PDU 2”)使用的標識符略有不同。
PDU是協議數據單元(即報文格式)。
SOF,SRR和IDE位由CAN標準定義,這裏忽略。RTR位(遠程請求位)在J1939中總是設置爲0。
J1939協議中使用的29位標識符結構如下。
優先權位 | 保留位 | 數據頁位 | PDU格式 | 特定PDU | 源地址 |
---|---|---|---|---|---|
3個位 | 1個位 | 1個位 | 8個位 | 8個位 | 8個位 |
標識符的前三位是用於在仲裁過程中控制報文的優先級。0值擁有最高優先級。更高優先級值通常用於高速控制報文,例如從傳動裝置至發動機的轉矩控制報文。包含時間不重要的數據的報文,例如車輛行駛速度,會被賦予較低優先級值。
標識符的下一位將保留備用,在報文發送中應設置爲0。
標識符中的下一位是數據頁選擇器。此位擴展可由標識符表示的潛在參數組的數目。
協議數據單元格式(PF)用於確定是否可以作爲包含目標地址報文發送或者報文總是作爲廣播報文發送。
對特定協議數據單元(PS)字段變化的解釋以PF的值爲依據:
- 如果PF處於0和239之間,則報文可尋址,且PS字段包含目標地址。
- 如果PF處於240和255之間,則報文只能廣播(PDU2),且PS字段包含組擴展。
組擴展擴展了可由標識符表示的潛在廣播參數組的數目。
術語參數組編號(PGN)適用於將保留位、DP、PF和PS字段的值合併成單個18位的值。
例如: 身份0xcf004ee可分爲表2所示字段。
0x0C | 0xF0 | 0x04 | 0xEE | |||
---|---|---|---|---|---|---|
000 | 011 | 0 | 0 | 11110000 | 00000100 | 11101110 |
— | Prio | R | DP | PF | PS | SA |
表2. PGN示例
- PGN = R,DP, PF和PS字段 – 在本例中爲0x0F004。
- PF = 0xF0 = 240,即這是PDU2(廣播)報文
- PS = 0×04,即組擴展 = 4
標識符的最後8位包含發送報文的設備的地址。地址是被分配以提供唯一地訪問網絡上的給定設備的方式的標籤或“句柄”。對於給定的網絡,每個地址必須是唯一的(可以有254個)。這意味着兩個不同的設備(ECU)不能使用相同的地址。
地址和名稱 (J1939/81)
名稱是64位(8字節)長的標籤,給每個ECU一個獨特的身份。 名稱由10個字段組成,並具有表3所示的以下結構。
表3. 名稱的結構
- 隨機存取位
- 行業組,長度3位
- 車輛系統實例,長度4位
- 車輛系統,長度7位
- 保留位
- 函數,長度8位
- 函數實例,長度5位
- ECU實例,長度3位
- 製造商代碼,長度11位
- 身份號碼,長度21位
CAN報文中的字節號碼 | 內容/意義 |
---|---|
0 | 身份號碼, LSB |
1 | 身份號碼 |
2 | 0-4位: 身份號碼,MSB 5-7位: 製造商代碼,LSB |
3 | 製造商代碼,MSB |
4 | 0-2位: ECU實例 3-7位: 函數實例 |
5 | 函數 |
6 | 0位: 保留位 1-7位: 車輛系統 |
7 | 0-3位: 車輛系統實例 4-6位: 行業組 7位: 隨機存取位 |
名稱的主要目的是描述ECU。低函數字段的值,0到127,被預先分配給“標準的”函數或設備。值128至254則依賴於行業組和車輛系統的值。這種依賴性使得不同的車輛可以擁有相同配置的函數。該系統還允許諸如拖車和農用車輛等設備限制對可用地址的搜索,且因此儘可能縮短動態聲明地址的時間以及降低其難度。當請求地址時, 名稱被用來決定哪一個ECU擁有更高的優先權,並以此獲得請求的地址。
網絡中的每一個設備都會至少與一個名稱和地址相關聯。然而,多個設備名稱和多個地址可能會在單個ECU中共存。例如,一個發動機和發動機制動(減速器)通過一個物理總線連接共存在同一個設備中。設備地址定義了報文的特定訊息來源或目的地。名稱能識別功能,當網絡中有多個同類設備共存時,可以爲功能分配一個特定編號。受地址限制,一個網絡中最多可同時包含254個同類設備。地址255被留作廣播的全局地址,地址254被留作“空地址”,當設備還未獲得地址或獲得地址失敗時使用。
地址請求
一般來說,大多數地址都是提前分配好的,接通電源即可使用。爲了允許J1939 容納後來的設備和未被定義的功能,需設定一個程序,允許動態分配地址。每臺設備需表明和它相關的地址。這便是識別(地址請求)屬性。有兩種選擇:
1. 發送地址請求指令申請地址。
當設備發送地址請求報文申請地址時,所有設備都會將這條報文與它們在網絡中的設備地址比較。如果該地址已被有更高優先權的設備申請,具有優先權的設備會發送一條包含地址已被使用的地址請求報文。設備名稱,在地址請求報文中以數據的形式發送,決定哪個設備具有更高的優先權。
2.發送申請地址請求。
當一個設備發出申請地址的請求時,所有設備通過傳遞已申請到地址的報文來回復。這保證了過渡中的設備(工具,追蹤器等)或即將工作的設備獲得當前的地址表,選擇並申請可獲得的地址。如圖表2。
動態地址分配支持是有選擇的,只有當設備可能遇到地址衝突時才使用該支持。爲了減少動態地址分配支持,加快“識別”速度,大部分ECU 都與一個推薦地址聯繫到一起。這些推薦地址在J1939/71文件中有描述。如果推薦地址已被其他ECU使用,設備的自配置得到了其他設備的支持的話,則可以申請另一個地址。
報文傳遞(J1939/21和J1939/7x)
爲完成特定的數據傳送,報文中必須有描述待傳數據的控制報文。爲減少控制報文,相關數據應放在一條報文中。J1939/71文件定義了一些標準的PGN,可以描述報文中待傳的參數。此外,J1939/71文件還包括關於報文優先性和傳輸速率的信息。應該注意的是,當設備不能提供指定參數的數據時,本該包含此參數的字節被設定爲“無法獲得”(0xFF),接收器便能知道數據丟失了。報文中的數據多於八個字節時,可被作爲多數據包報文傳輸。多數據包報文通過傳輸協議功能傳輸,參見J1939/21中的定義。但是傳輸多數據包報文有兩種方式:
- 廣播通知報文(TP_BAM)
- 連接管理(TP_CM)
TP_BAM報文
TP_BAM報文使用全局地址,意味着網絡中的所有設備都能接收到報文。傳輸通過連接管理(CM)報文PGN = 0x00EC00開始,其中有一個表明TP_BAM的控制字節。報文數據接着在數據傳輸(DT)報文,PGN = 0x00EB00中。
TP_CM報文
TP_CM報文在兩個設備間點到點傳輸。傳輸從帶有表示請求發送(RTS)的控制字節的CM 報文開始。接收設備回覆一個帶有表示清除發送(CTS)的控制字節的CM報文。然後傳輸設備使用DT報文發送CTS中表示的數據。CTS和DT報文持續進行信號交換直到全部數據傳送完成。當報文傳送完成,接收設備傳輸一個帶有表示報文結束確認(EOM)的控制字節的CM報文,連接終止。要注意的是,在工作的過程中,CM報文會根據控制字節的種類帶有額外數據。RTS包括:字節的數目,數據包的數量和數據已運輸的PGN。CTS包括接收設備下次預期的數據包的數量和起初的數據包數量。
報文接收(J1939/21和J1939/7x)
從網絡中捕捉選中的信息有不同的技術手段(和芯片)。可使用一般的觀察方法,但基於接收到的信息而有所不同:
- 如果一則報文請求特定的地址,設備必須確認目標地址是否與設備請求的地址匹配。如果匹配,接收設備必須處理報文,並進行某種確認。
- 如果報文是一個全局請求,那每個設備,包括髮起設備都必須處理請求,並回複數據是否可得。
- 如果報文是廣播,每個設備必須確認內容是否相關。
ECU設計(J1939/1x,J1939/21和J1939/7x)
儘管每個製造商對產品中的電子控制單元(ECU)的性能有不同的要求,還是需要觀察一下支持J1939的幾種資源。J1939目前的數據速率是250Kbps.一個典型的包含8個數據字節的報文長度是128位(包含用於填充的位),也就是約500微秒。最短的報文有64位。這意味着,每250微秒可以發送一個新報文。儘管並不是所有報文都是相關的,總線負載也不會超過50%,接收處理器必須能在很短的時間內處理(或緩衝)反饋信息。這需要一些內存空間和傳輸內存的處理時間。
接線佈局 - 物理層(J1939/1x)
J1939網絡是一對線型屏蔽雙絞線,環繞在車身,連在每個ECU上。在ECU和總線之間允許有一個短的末梢網絡。這樣簡化了總線的接線,總線可以不用直接連到ECU上。線型總線的數據速率要達到250Kbps,以使得電子信號反射最小化。總線每個終端的終端電子也能降低反射。
其實,J1939網絡可能由幾個段組成,由一箇中繼設備作爲連接橋。這些段互相不需要直接兼容。比如,這些段的數據速率可能不同,或使用不同的物理媒介。網橋的主要功能是在各段間起到電絕緣作用。在牽引機和拖車間的線中斷的情況下,牽引機上主要的J1939段也能繼續發揮功能。網橋還可以有選擇的過濾需要存儲的報文和將報文從一個段轉送到另一個。
如何解讀J1939報文的示例
這個例子旨在解釋解讀J1939報文的準則。
我們來看一條內容如下的J1939報文:
CAN標識符: | 0xCF00401 |
數據字節: | 0xFF FF 82 DF 1A FF FF FF |
CAN-ID 提供了什麼信息?
前兩個字節=0x0C = 00001100二進制。由於標識符只有29個位,所以前三個位不使用。接着的3個位代表優先報文,在這個例子中是3。接着是一個保留位,然後是決定完整PGN的數據頁。
CAN-ID的最後一個位是源地址(發送設備的地址),在這個例子中是1。
PGN= 0x0F004,根據J1939/71文件,它與電子引擎控制器#1 (EEC1)相對應。J1939/71文件還對數據字節中的參數和位置做了描述。在這個例子中,數據區包含以下字節:
數據字節 | FF | FF | 82 | DF | 1A | FF | FF | FF |
位置 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
該例子中數據字節1,2,6,7和8無法獲得,因此設爲0xFF。源參數值(單個字節)的不能爲0xFF。
數據字節3是實際發動機轉矩百分比參數。源參數值0×82是十進制的130。根據J1939/71文件的每比特縮放比爲1%, 偏移-125.因此,該參數的實際值爲5%。
數據字節4和5構成引擎轉速參數。第一個字節(4)是最不重要的一個(內部字節順序)。源參數值0x1ADF = 十進制中的6879。縮放比例爲每比特0.125 rpm, 偏移爲0.所以該參數的實際值低於859.875 rpm。