以下內(nèi)容來源于《汽車電子與軟件》
一、引 言
J1939Tp是我學(xué)習(xí)AUTOSAR CP諸多BSW模塊的起點(diǎn),其分層架構(gòu)完美體現(xiàn)了AUTOSAR規(guī)范的精髓,掌握J(rèn)1939Tp有助于深入理解通信(COM)相關(guān)模塊的程序執(zhí)行過程。
本文依舊從傳統(tǒng)的手工編程入手,講述J1939Tp工具鏈編程的操作步驟,對(duì)模塊的內(nèi)部機(jī)理僅做簡單介紹,感興趣的讀者可參考相應(yīng)AUTOSAR規(guī)范。
二、J1939Tp模塊介紹
美國汽車工程師協(xié)會(huì)(SAE)制定的主要針對(duì)商用車的CAN總線通訊協(xié)議,其基于CAN 2.0B協(xié)議。
表2-1列出了J1939協(xié)議的主要內(nèi)容和對(duì)應(yīng)文檔。
表2-1: J1939內(nèi)容和參考資料匯總
表中的“SAE J1939-21”描述了數(shù)據(jù)鏈路和傳輸層,包括2種傳輸協(xié)議類型:BAM用于廣播消息,CMDT用于點(diǎn)對(duì)點(diǎn)連接。
J1939Tp為“SAE J1939-21”在AUTOSAR架構(gòu)中的實(shí)現(xiàn),主要完成下列功能。
(1)直接或分段發(fā)送數(shù)據(jù)
(2)直接或重組接收數(shù)據(jù)
(3)數(shù)據(jù)流控制
(4)超時(shí)管理
(5)分段和組包過程中的錯(cuò)誤檢測(cè)
2.1 數(shù)據(jù)鏈路層
數(shù)據(jù)鏈路層為物理連接之間提供可靠的數(shù)據(jù)傳輸,包括發(fā)送CAN數(shù)據(jù)幀所必須的同步、順序控制、出錯(cuò)控制和流控制。本節(jié)主要介紹數(shù)據(jù)分段收發(fā)過程。
傳輸多于8字節(jié)的數(shù)據(jù)須采用多幀傳輸機(jī)制,即采用多包報(bào)文,在連接管理報(bào)文的協(xié)調(diào)下進(jìn)行多幀傳輸。
長度大于8字節(jié)的報(bào)文無法用單個(gè)CAN數(shù)據(jù)幀來裝載。因此,它們必須被拆分為若干個(gè)小的數(shù)據(jù)包,然后使用單個(gè)的數(shù)據(jù)幀對(duì)其逐一傳送。而接收方必須能夠接收這些單個(gè)的數(shù)據(jù)幀,然后解析各個(gè)數(shù)據(jù)包并重組成原始的信息。
CAN數(shù)據(jù)幀包含一個(gè)8字節(jié)的數(shù)據(jù)域。由于組成長信息的單個(gè)數(shù)據(jù)包必須能被識(shí)別出來以便正確重組,因此把數(shù)據(jù)域的首字節(jié)定義為數(shù)據(jù)包的序列編號(hào)。每個(gè)數(shù)據(jù)包都會(huì)被分配到一個(gè)從1到255的序列編號(hào)。由此可知,多幀傳輸最大的數(shù)據(jù)長度是(255包×7字節(jié)/包=)1785字節(jié)(雖然協(xié)議理論上支持1785 字節(jié),但大多數(shù) ECU 實(shí)際不會(huì)發(fā)送如此大長度,可能因內(nèi)存或總線負(fù)載需限制更小最大長度)。
序列編號(hào)是在數(shù)據(jù)拆裝時(shí)分配給每個(gè)數(shù)據(jù)包,然后通過網(wǎng)絡(luò)傳送給接收方。接收方接收后,利用這些編號(hào)把數(shù)據(jù)包重組成原始信息。
序列編號(hào)從1開始,依次分配給每個(gè)數(shù)據(jù)包,直到整個(gè)數(shù)據(jù)都被拆裝和傳送完畢。這些數(shù)據(jù)包從編號(hào)為1的數(shù)據(jù)包開始按編號(hào)的遞增順序發(fā)送。
第一個(gè)數(shù)據(jù)傳送包包含序列編號(hào)1 和字符串的頭7個(gè)字節(jié),其后的7個(gè)字節(jié)跟隨序列編號(hào)2存放在另一個(gè)CAN數(shù)據(jù)幀中,再隨后的7個(gè)字節(jié)與編號(hào)3一起,直到原始信息中所有的字節(jié)都被存放到CAN數(shù)據(jù)幀中并被傳送。
傳送的每個(gè)數(shù)據(jù)包(除了傳送隊(duì)列中的最后一個(gè)數(shù)據(jù)包)都裝載著原始數(shù)據(jù)中的7個(gè)字節(jié)。而最后一個(gè)數(shù)據(jù)包的數(shù)據(jù)域的8個(gè)字節(jié)包含:數(shù)據(jù)包的序列編號(hào)和參數(shù)組至少一個(gè)字節(jié)的數(shù)據(jù),余下未使用的字節(jié)全部設(shè)置為“0xFF”。
數(shù)據(jù)包被順序接收。按照序列編號(hào)的順序把多包消息的數(shù)據(jù)包重新組合成一多字節(jié)字符串。這個(gè)字符串被作為長信息的應(yīng)答傳送給應(yīng)用程序模塊。
2.2 協(xié)議數(shù)據(jù)單元
協(xié)議數(shù)據(jù)單元由七部分組成,分別是優(yōu)先級(jí)、保留位、數(shù)據(jù)頁、PDU格式、PDU特定域(可作為目標(biāo)地址、組擴(kuò)展或?qū)S茫⒃吹刂泛蛿?shù)據(jù)域。PDU被封裝在一個(gè)或多個(gè)CAN數(shù)據(jù)幀中,通過物理介質(zhì)傳送到其他網(wǎng)絡(luò)設(shè)備。每個(gè)CAN數(shù)據(jù)幀只能有一個(gè)PDU。
其中,優(yōu)先權(quán)、擴(kuò)展數(shù)據(jù)頁、數(shù)據(jù)頁、PDU格式、PDU特定域和源地址構(gòu)成29位標(biāo)志符;擴(kuò)展數(shù)據(jù)頁、數(shù)據(jù)頁、PDU格式和PDU特定域構(gòu)成參數(shù)組編號(hào)PGN;整體構(gòu)成協(xié)議數(shù)據(jù)單元PDU。
2.2.1 請(qǐng)求PGN報(bào)文
定義:用于從一個(gè)或多個(gè)網(wǎng)絡(luò)設(shè)備請(qǐng)求參數(shù)組
傳輸速率:用戶子定義,推薦每秒請(qǐng)求不多于2或3次
數(shù)據(jù)長度:3字節(jié)
數(shù)據(jù)頁:0
PDU格式:0xEA
PDU特定域:目標(biāo)地址(全局或特定)
缺省優(yōu)先級(jí):0x06
參數(shù)組編號(hào):0xEA00
參數(shù)定義:
0-2字節(jié):被請(qǐng)求的參數(shù)組編號(hào)
對(duì)于特定目標(biāo)地址的請(qǐng)求,目標(biāo)地址必須做出響應(yīng)。如果目標(biāo)地址不支持請(qǐng)求的PGN,也必須發(fā)出一個(gè)NACK的響應(yīng)以表明它不支持該P(yáng)GN。有些PGN是多包的,因此一個(gè)單幀請(qǐng)求的響應(yīng)可能有多個(gè)CAN數(shù)據(jù)幀。如果是全局請(qǐng)求,當(dāng)一個(gè)節(jié)點(diǎn)不支持某個(gè)PGN時(shí),不能發(fā)出NACK響應(yīng)。
2.2.2 確認(rèn)報(bào)文
定義:用來提供發(fā)送方與接收方之間的握手機(jī)制
傳輸速率:收到需要此類型的確認(rèn)的PGN時(shí)
數(shù)據(jù)長度:8字節(jié)
數(shù)據(jù)頁:0
PDU格式:0xE8
PDU特定域:目標(biāo)地址 = 全局(0xFF)
缺省優(yōu)先級(jí):0x06
參數(shù)組編號(hào):0xE800
參數(shù)定義:
0字節(jié):控制字節(jié)。0表示肯定確認(rèn)(ACK);1表示否定確認(rèn)(NACK);2表示拒絕訪問;3表示無法響應(yīng)
1字節(jié):組功能值(若適用)
2-4字節(jié):0xFF
5-7字節(jié):被請(qǐng)求報(bào)文的參數(shù)組編號(hào)
2.2.3 連接管理報(bào)文(TP.CM)
定義:用于9字節(jié)及以上數(shù)據(jù)參數(shù)組的傳輸
傳輸速度:由傳送的參數(shù)組編號(hào)決定
數(shù)據(jù)長度:8字節(jié)
數(shù)據(jù)頁:0
PDU格式:0xEC
PDU特定域:目標(biāo)地址
缺省優(yōu)先級(jí):0x07
參數(shù)組編號(hào):0xEC00
參數(shù)定義:第0字節(jié)為控制字,其它字節(jié)的定義依賴于第0字節(jié)控制字的值
(1)連接模式下的請(qǐng)求發(fā)送(TP.CM_RTS):指定目標(biāo)地址
0字節(jié):0x10,指定目標(biāo)地址的請(qǐng)求發(fā)送(RTS)
1-2字節(jié):整個(gè)報(bào)文大小的字節(jié)數(shù)
3字節(jié):全部數(shù)據(jù)包數(shù)
4字節(jié):每次CTS 中允許發(fā)送的最大幀數(shù)(Packets per block)
5-7字節(jié):PGN(Parameter Group Number)
打包報(bào)文的參數(shù)組編號(hào)
(2)連接模式下的準(zhǔn)許發(fā)送(TP.CM_CTS):指定目標(biāo)地址
0字節(jié):0x11,指定目標(biāo)地址的準(zhǔn)許發(fā)送(CTS)
1字節(jié):可發(fā)送的數(shù)據(jù)包數(shù)
2字節(jié):下一個(gè)要發(fā)送的數(shù)據(jù)包編號(hào)
3-4字節(jié):保留 (通常 0xFF)
5-7字節(jié):PGN打包報(bào)文的參數(shù)組編號(hào)
(3)報(bào)文結(jié)束應(yīng)答
(TP.CM_EndofMsgAck):指定目標(biāo)地址
0字節(jié):0x13,報(bào)文結(jié)束應(yīng)答
1-2字節(jié):整個(gè)報(bào)文的字節(jié)數(shù)
3字節(jié):全部數(shù)據(jù)包個(gè)數(shù)
4字節(jié):0xFF
5-7字節(jié):打包報(bào)文的參數(shù)組編號(hào)
(4)放棄連接(TP.CM_Abort):指定目標(biāo)地址
0字節(jié):0xFF,放棄連接
1-4字節(jié):0xFF
5-7字節(jié):打包報(bào)文的參數(shù)組編號(hào)
(5)廣播公告報(bào)文(TP.CM_BAM):全局目標(biāo)地址
0字節(jié):0x20,廣播公告報(bào)文(BAM)
1-2字節(jié):整個(gè)報(bào)文的字節(jié)數(shù)
3字節(jié):全部數(shù)據(jù)包數(shù)
4字節(jié):0xFF
5-7字節(jié):打包報(bào)文的參數(shù)組編號(hào)
2.2.4 數(shù)據(jù)發(fā)送報(bào)文
定義:用于9字節(jié)及以上數(shù)據(jù)參數(shù)組的傳輸
傳輸速度:由傳送的參數(shù)組編號(hào)決定
數(shù)據(jù)長度:8字節(jié)
數(shù)據(jù)頁:0
PDU格式:0xEB
PDU特定域:目標(biāo)地址
缺省優(yōu)先級(jí):0x07
參數(shù)組編號(hào):0xEB00
參數(shù)定義:
0字節(jié):數(shù)據(jù)包編號(hào)
1-7字節(jié):報(bào)文數(shù)據(jù)
三、手寫代碼實(shí)現(xiàn)方法
下面簡要介紹J1939數(shù)據(jù)鏈路層手工編程的實(shí)現(xiàn)要點(diǎn)。
3.1 多幀傳輸機(jī)制—接收
接收多于8字節(jié)的數(shù)據(jù)流有單播(特定目標(biāo)地址)和廣播(全局目標(biāo)地址)兩種情況,下面分別進(jìn)行說明。
3.1.1 單播方式
單播方式接收多于8字節(jié)的數(shù)據(jù)流按照下列步驟進(jìn)行。
(1)接收發(fā)送方的“連接模式下的請(qǐng)求發(fā)送(TP.CM_RTS):指定目標(biāo)地址”報(bào)文
收到這類報(bào)文后,首先檢查其是否同時(shí)滿足下面兩個(gè)條件,若滿足繼續(xù)下面的操作。
·參數(shù)組編號(hào)為0xD700或符合本地指定CA的要求(參數(shù)組編號(hào)、發(fā)送CA的地址或名字)
·接收到的“整個(gè)報(bào)文的字節(jié)數(shù)”和“全部數(shù)據(jù)包數(shù)”匹配
該檢查通過后,獲取CAN接收控制節(jié)點(diǎn)并對(duì)其初始化,再將該節(jié)點(diǎn)設(shè)置為“分段接收起始狀態(tài)”。
若在上述過程中出現(xiàn)了任何異常,發(fā)送“放棄連接(TP.CM_Abort):指定目標(biāo)地址”報(bào)文。
(2)回發(fā)“連接模式下的準(zhǔn)許發(fā)送(TP.CM_CTS):指定目標(biāo)地址”報(bào)文
在接收并處理RTS報(bào)文之后進(jìn)行,要求對(duì)方一次性將數(shù)據(jù)發(fā)完。報(bào)文發(fā)送成功后將對(duì)應(yīng)CAN接收控制節(jié)點(diǎn)設(shè)置為“連續(xù)接收”狀態(tài)。
(3)接收并整合數(shù)據(jù)
連續(xù)接收PGN為0xEB00的包并將有效數(shù)據(jù)依次存放到相應(yīng)CAN接收控制節(jié)點(diǎn)中,待報(bào)文中的所有數(shù)據(jù)接收完畢后,發(fā)送“報(bào)文結(jié)束應(yīng)答(TP.CM_EndofMsgAck):指定目標(biāo)地址”并將對(duì)應(yīng)CAN接收控制節(jié)點(diǎn)設(shè)置為“接收終止”狀態(tài)。
數(shù)據(jù)接收過程中須滿足以下幾個(gè)要求,否則將發(fā)送“放棄連接(TP.CM_Abort):指定目標(biāo)地址”報(bào)文并將對(duì)應(yīng)CAN接收控制節(jié)點(diǎn)設(shè)置為“接收終止”狀態(tài)。
·數(shù)據(jù)包編號(hào)正確
·收到相鄰兩個(gè)數(shù)據(jù)包的時(shí)間間隔小于750ms
·發(fā)送CTS消息到收到第1個(gè)數(shù)據(jù)包的時(shí)間間隔小于1250ms
(4)處理接收到的報(bào)文
根據(jù)接收?qǐng)?bào)文的參數(shù)組編號(hào)對(duì)其做出相應(yīng)處理并將對(duì)應(yīng)CAN接收控制節(jié)點(diǎn)還原。
3.1.2 廣播方式
廣播方式接收多于8字節(jié)的數(shù)據(jù)流按照下列步驟進(jìn)行。
(1)接收發(fā)送方的“廣播公告報(bào)文(TP.CM_BAM):全局目標(biāo)地址”
收到這類報(bào)文后,首先檢查其是否同時(shí)滿足下面三個(gè)條件,若滿足繼續(xù)下面的操作。
·參數(shù)組編號(hào)為0xFED8或符合本地任何一個(gè)CA的要求(參數(shù)組編號(hào)、發(fā)送CA的地址或名字)
·目標(biāo)地址為0xFF且源地址與接收?qǐng)?bào)文匹配的CAN接收控制節(jié)點(diǎn)不存在
·接收到的“整個(gè)報(bào)文的字節(jié)數(shù)”和“全部數(shù)據(jù)包數(shù)”匹配
該檢查通過后,獲取CAN接收控制節(jié)點(diǎn)并對(duì)其初始化,再將該節(jié)點(diǎn)設(shè)置為“連續(xù)接收”狀態(tài)。
(2)接收并整合數(shù)據(jù)
連續(xù)接收PGN為0xEB00的包并將有效數(shù)據(jù)依次存放到相應(yīng)CAN接收控制節(jié)點(diǎn)中,待報(bào)文中的所有數(shù)據(jù)接收完畢后,將對(duì)應(yīng)CAN接收控制節(jié)點(diǎn)設(shè)置為“接收終止”狀態(tài)。
數(shù)據(jù)接收過程中須滿足以下幾個(gè)要求,否則將對(duì)應(yīng)CAN接收控制節(jié)點(diǎn)設(shè)置為“接收終止”狀態(tài)。
·數(shù)據(jù)包編號(hào)正確
·收到相鄰兩幀數(shù)據(jù)的時(shí)間間隔小于750ms
(3)處理接收到的報(bào)文
根據(jù)接收?qǐng)?bào)文的參數(shù)組編號(hào)對(duì)其做出相應(yīng)處理并將對(duì)應(yīng)CAN接收控制節(jié)點(diǎn)還原。
3.2 多幀傳輸機(jī)制-發(fā)送
發(fā)送多于8字節(jié)的數(shù)據(jù)流有單播(特定目標(biāo)地址)和廣播(全局目標(biāo)地址)兩種情況,下面分別進(jìn)行說明。
3.2.1 單播方式
單播方式發(fā)送多于8字節(jié)的數(shù)據(jù)流按照下列步驟進(jìn)行。
(1)準(zhǔn)備工作
獲取一個(gè)CAN發(fā)送控制節(jié)點(diǎn),將其初始化并設(shè)置為“初始狀態(tài)”。
(2)發(fā)送“連接模式下的請(qǐng)求發(fā)送(TP.CM_RTS):指定目標(biāo)地址”報(bào)文
該報(bào)文發(fā)送成功后將對(duì)應(yīng)CAN發(fā)送控制節(jié)點(diǎn)設(shè)置為“準(zhǔn)許發(fā)送等待狀態(tài)”。
(3)接收“連接模式下的準(zhǔn)許發(fā)送(TP.CM_CTS):指定目標(biāo)地址”報(bào)文
發(fā)送RTS后的1250ms內(nèi)必須收到此報(bào)文,否則將發(fā)送“放棄連接(TP.CM_Abort):指定目標(biāo)地址”報(bào)文并將對(duì)應(yīng)CAN發(fā)送控制節(jié)點(diǎn)設(shè)置為“發(fā)送終止”狀態(tài)。
這里稱“可發(fā)送的數(shù)據(jù)包數(shù)”為0的CTS為“保持連接報(bào)文”,接收到此類報(bào)文后的1050ms內(nèi)必須再次收到CTS,否則也將發(fā)送Abort報(bào)文并將對(duì)應(yīng)CAN發(fā)送控制節(jié)點(diǎn)設(shè)置為“發(fā)送終止”狀態(tài)。
注意:如果Abort報(bào)文發(fā)送失敗,須將對(duì)應(yīng)CAN發(fā)送控制節(jié)點(diǎn)設(shè)置為“放棄連接報(bào)文發(fā)送”狀態(tài),這樣下一個(gè)周期將再次發(fā)送Abort報(bào)文。
如果在規(guī)定的時(shí)間內(nèi)收到正確的CTS且其“可發(fā)送的數(shù)據(jù)包數(shù)”不為0,則發(fā)送第一個(gè)數(shù)據(jù)幀,同時(shí)將對(duì)應(yīng)CAN發(fā)送控制節(jié)點(diǎn)設(shè)置為“連續(xù)發(fā)送”狀態(tài)。
(4)連續(xù)發(fā)送數(shù)據(jù)
程序?qū)⒚總€(gè)發(fā)出的數(shù)據(jù)幀添加至CAN接收處理緩沖區(qū),該操作完成后才繼續(xù)發(fā)送下一個(gè)數(shù)據(jù)幀,直到本次CTS要求的數(shù)據(jù)包全部發(fā)完為止。在此過程中連續(xù)兩個(gè)數(shù)據(jù)幀的發(fā)送時(shí)間間隔不能超過750ms,否則將發(fā)送Abort報(bào)文并將對(duì)應(yīng)CAN發(fā)送控制節(jié)點(diǎn)設(shè)置為“發(fā)送終止”狀態(tài)。
在連續(xù)發(fā)送數(shù)據(jù)的過程中不允許接收到除“保持連接報(bào)文”之外的CTS(收到此類報(bào)文后應(yīng)停止數(shù)據(jù)幀的發(fā)送轉(zhuǎn)而等待下一個(gè)CTS),否則也將發(fā)送Abort報(bào)文并將對(duì)應(yīng)CAN發(fā)送控制節(jié)點(diǎn)設(shè)置為“發(fā)送終止”狀態(tài)。
本次CTS要求的數(shù)據(jù)包發(fā)送完畢后,將對(duì)應(yīng)CAN發(fā)送控制節(jié)點(diǎn)設(shè)置為“準(zhǔn)許發(fā)送等待狀態(tài)”,然后重復(fù)(3)和(4)的步驟,直到所有數(shù)據(jù)發(fā)送完成。這時(shí)將對(duì)應(yīng)CAN發(fā)送控制節(jié)點(diǎn)設(shè)置為“報(bào)文結(jié)束應(yīng)答等待狀態(tài)”。
(5)接收“報(bào)文結(jié)束應(yīng)答(TP.CM_EndofMsgAck):指定目標(biāo)地址”
發(fā)送最后一個(gè)數(shù)據(jù)幀后的1250ms內(nèi)必須收到此報(bào)文,否則將發(fā)送Abort報(bào)文并將對(duì)應(yīng)CAN發(fā)送控制節(jié)點(diǎn)設(shè)置為“發(fā)送終止”狀態(tài)。如果EndofMsgAck的“整個(gè)報(bào)文大小的字節(jié)數(shù)”和“全部數(shù)據(jù)包數(shù)”匹配,說明發(fā)送圓滿完成,此時(shí)將對(duì)應(yīng)CAN發(fā)送控制節(jié)點(diǎn)設(shè)置為“發(fā)送終止”狀態(tài)并還原該節(jié)點(diǎn)。
3.2.2 廣播方式
廣播方式發(fā)送多于8字節(jié)的數(shù)據(jù)流按照下列步驟進(jìn)行。
(1)準(zhǔn)備工作
獲取一個(gè)CAN發(fā)送控制節(jié)點(diǎn),將其初始化并設(shè)置為“初始狀態(tài)”。
(2)自發(fā)自收“廣播公告報(bào)文(TP.CM_BAM):全局目標(biāo)地址”
發(fā)送BAM并將對(duì)應(yīng)CAN發(fā)送控制節(jié)點(diǎn)設(shè)置為“廣播公告報(bào)文等待狀態(tài)”。如果在之后的750ms內(nèi)接收到自發(fā)的BAM,將節(jié)點(diǎn)設(shè)置為“連續(xù)發(fā)送”狀態(tài),并在50ms后啟動(dòng)數(shù)據(jù)幀發(fā)送;否則將節(jié)點(diǎn)設(shè)置為“發(fā)送終止”狀態(tài)。
(3)連續(xù)發(fā)送數(shù)據(jù)
每個(gè)發(fā)出的數(shù)據(jù)幀都將被接收并添加至CAN接收處理緩沖區(qū),該操作完成后延時(shí)50ms才繼續(xù)發(fā)送下一個(gè)數(shù)據(jù)幀,直到全部數(shù)據(jù)包發(fā)完為止。每個(gè)數(shù)據(jù)幀發(fā)送和接收的時(shí)間間隔不能超過750ms,在此過程中對(duì)應(yīng)CAN發(fā)送控制節(jié)點(diǎn)處于“數(shù)據(jù)報(bào)文等待狀態(tài)”。
當(dāng)所有數(shù)據(jù)包發(fā)送完成或出現(xiàn)任何異常時(shí),將對(duì)應(yīng)CAN發(fā)送控制節(jié)點(diǎn)設(shè)置為“發(fā)送終止”狀態(tài)并還原該節(jié)點(diǎn)。
3.3 請(qǐng)求PGN報(bào)文
這里主要介紹接收到“請(qǐng)求PGN”報(bào)文時(shí)的處理方式,被請(qǐng)求的參數(shù)組編號(hào)分為“0xEE00”和“其它”兩類。
3.3.1 請(qǐng)求PGN為0xEE00的參數(shù)組
收到此種報(bào)文后將對(duì)本地所有CA的狀態(tài)進(jìn)行判斷,對(duì)于已經(jīng)成功聲明過地址的CA,立即發(fā)送“地址聲明報(bào)文”;對(duì)于狀態(tài)異常的CA,在0-153ms的隨機(jī)時(shí)間后發(fā)送“不能聲明地址報(bào)文”。
3.3.2 請(qǐng)求PGN為非0xEE00的參數(shù)組
如果請(qǐng)求參數(shù)組的PGN和SA滿足本地CA的要求,發(fā)送“肯定確認(rèn)”報(bào)文;否則發(fā)送“拒絕訪問”報(bào)文(僅限于特定目標(biāo)地址)。
四、AUTOSAR工具鏈實(shí)現(xiàn)方法
下面描述J1939數(shù)據(jù)鏈路層工具鏈實(shí)現(xiàn)的基本步驟,整個(gè)過程在ETAS的ISOLAR_AB 4.0和EB公司的EB Tresos工具下完成。
4.1 模塊介紹
下面介紹J1939Tp的設(shè)計(jì)步驟和目標(biāo)。
4.1.1 設(shè)計(jì)步驟
J1939Tp設(shè)計(jì)主要在ISOLAR-AB環(huán)境下進(jìn)行。
(1)ARXML創(chuàng)建
在ISOLAR-AB中創(chuàng)建J1939Tp_EcucValues.arxml文件,再在其中創(chuàng)建如表4-1所示的AR Package。
表4-1: ARXML文件內(nèi)容
(2)模塊配置
依次配置Can、EcuC、J1939DcmCDD、PduR、CanIf、J1939Tp模塊(如表4-2所列),圖4-1為不同模塊間的層級(jí)關(guān)系。
表 4-2: ARXML文件內(nèi)容
圖 4-1: J1939Tp相關(guān)模塊層級(jí)關(guān)系
4.1.2 設(shè)計(jì)目標(biāo)
本文實(shí)現(xiàn)符合J1939協(xié)議的多字節(jié)發(fā)送和接收的協(xié)議棧。
(1)數(shù)據(jù)發(fā)送
發(fā)送一幀18字節(jié)的數(shù)據(jù),如圖4-2所示。
圖 4-2: 多字節(jié)數(shù)據(jù)發(fā)送執(zhí)行結(jié)果
(2)數(shù)據(jù)接收
實(shí)時(shí)接收一幀數(shù)據(jù)并將其存儲(chǔ)至緩沖區(qū)中,如圖4-3所示。
圖 4-3: 多字節(jié)數(shù)據(jù)接收?qǐng)?zhí)行結(jié)果
4.2 J1939Tp模塊創(chuàng)建和通用配置
首先需要在ISOLAR-B中創(chuàng)建J1939Tp模塊及其ARXML文件,再對(duì)其進(jìn)行“通用配置”,這是后續(xù)一系列配置操作的基礎(chǔ)。
4.2.1 J1939Tp模塊創(chuàng)建
按照?qǐng)D4-4和圖4-5所示的步驟創(chuàng)建J1939Tp模塊。
圖 4-4: J1939Tp模塊創(chuàng)建啟動(dòng)
圖 4-5: J1939Tp模塊創(chuàng)建操作
下面對(duì)J1939Tp模塊創(chuàng)建過程做幾點(diǎn)說明。
(1)AR Package路徑現(xiàn)階段必須為“/ETAS_Project/...”,否則在生成“RTA-BSW”后程序工程的許多配置項(xiàng)需要手動(dòng)修改;后續(xù)新建ISOLAR-AB項(xiàng)目可嘗試將該路徑改為“/Foton_Project/...”。
(2)新建的ARXML文件存儲(chǔ)至“StaticCfg”文件夾下,圖3-2中步驟④和⑤的次序不能改變。
4.2.2 J1939Tp通用配置
按照?qǐng)D4-6所示進(jìn)入J1939Tp通用配置界面,表4-3為其配置情況。
圖 4-6: J1939Tp通用配置界面進(jìn)入
表 4-3: J1939Tp通用參數(shù)配置
4.3 Can配置
Can模塊執(zhí)行硬件操作并為上層模塊提供與硬件無關(guān)的API接口。唯一一個(gè)能訪問Can模塊的上層模塊是CanIf模塊。
4.3.1 Can模塊創(chuàng)建
按照?qǐng)D4-7和圖4-8所示創(chuàng)建Can模塊,用于J1939Tp模塊相關(guān)報(bào)文的配置。
圖 4-7: Can模塊創(chuàng)建啟動(dòng)
圖 4-8: Can模塊創(chuàng)建配置
這樣在ISOLAR-B中出現(xiàn)了2個(gè)Can模塊(可能需要刷新操作),如圖4-9所示。
圖 4-9: Can模塊創(chuàng)建后的效果
(1)統(tǒng)一路徑操作
從圖4-9可以看出,CanEcucValues.arxml和J1939Tp_EcucValues.arxml中各有一個(gè)Can模塊,為統(tǒng)一配置,須將兩者的路徑設(shè)定為一致,這個(gè)操作在“AUTOSAR Explorer”中完成,具體參見圖4-10和圖4-11。
圖 4-10: 進(jìn)入”AUTOSAR Explorer”的操作
圖 4-11: 在J1939Tp_EcucValues.arxml中創(chuàng)建Ar Package
將新建的“Ar Package”命名為“Can”,并將前面創(chuàng)建的Can模塊拖入其中,執(zhí)行效果如圖4-12所示。
圖 4-12: Can模塊路徑更改執(zhí)行效果
(2)多余配置項(xiàng)刪除
原有Can模塊的配置參數(shù)存放在CanEcucValues.arxml中,新創(chuàng)建Can模塊的配置參數(shù)存放在J1939Tp_EcucValues.arxml中,它們分別為Can模塊的一部分。為防止BSW代碼生成時(shí)產(chǎn)生重復(fù)性錯(cuò)誤,需要把新創(chuàng)建Can模塊下的“CanConfigSet”和“CanGeneral”刪除,如圖4-13所示。
圖 4-13: Can模塊多余配置項(xiàng)刪除
(3)配置文件選擇
在配置Can模塊的參數(shù)時(shí),雙擊“Can “Can” [CanEcucValues.arxml]”配置將改變CanEcucValues.arxml的內(nèi)容,雙擊“Can “Can” [J1939Tp_EcucValues.arxml]”配置將改變J1939Tp_EcucValues.arxml的內(nèi)容。由于本文希望將J1939Tp相關(guān)的配置存放在J1939Tp_EcucValues.arxml中,故需要雙擊“Can “Can” [J1939Tp_EcucValues.arxml]”來配置Can模塊。
4.3.2 添加和配置硬件對(duì)象
添加J1939通信所需的3個(gè)“CanHardwareObjects”,如表4-4所列。
表4-4: CAN硬件對(duì)象
圖4-14為添加Can硬件對(duì)象的方法,表4-5、表4-6和表4-7分別列出各硬件對(duì)象的配置參數(shù)。
圖4-14: Can硬件對(duì)象添加方法
表4-5:連接管理報(bào)文接收硬件對(duì)象配置
表 4-6: 數(shù)據(jù)傳輸報(bào)文接收硬件對(duì)象配置
? 4-7:?連接管理報(bào)文或數(shù)據(jù)傳輸報(bào)文發(fā)送硬件對(duì)象配置 ?
4.4 Ecuc配置
在ECU配置時(shí)有一些信息需要多個(gè)BSW模塊共享,在不好確定這些共享信息屬于哪個(gè)模塊的情況下,使用虛擬Ecuc模塊來進(jìn)行ECU配置參數(shù)定義。
4.4.1 Ecuc模塊創(chuàng)建
按照?qǐng)D4-15和圖4-16所示創(chuàng)建Ecuc模塊,用于添加和配置J1939通信所用到的協(xié)議數(shù)據(jù)單元。
圖 4-15: Ecuc模塊創(chuàng)建啟動(dòng)
圖 4-16: Ecuc模塊創(chuàng)建配置
后續(xù)需要依次進(jìn)行Ecuc模塊的多余配置項(xiàng)刪除和配置文件選擇(無需統(tǒng)一路徑操作),這些步驟與前文的Can模塊操作基本相同。
4.4.2 添加和配置協(xié)議數(shù)據(jù)單元
添加J1939通信所需的8個(gè)“Pdus”,如表4-8所列。圖4-17繪制出這些協(xié)議數(shù)據(jù)單元的功用。
表 4-8: Ecuc模塊須添加的協(xié)議數(shù)據(jù)單元
圖 4-17: Ecuc創(chuàng)建協(xié)議數(shù)據(jù)單元功用示意圖
圖4-18為添加Pdus的方法,表4-9、表4-10、表4-11、表4-12、表4-13、表4-14、表4-15和表4-16分別列出各協(xié)議數(shù)據(jù)單元的配置參數(shù)。
圖 4-18: Ecuc協(xié)議數(shù)據(jù)單元添加方法
表 4-9: 發(fā)送連接管理幀從J1939Tp到CanIf配置
表4-10: 發(fā)送數(shù)據(jù)傳輸幀從J1939Tp到CanIf配置
表4-11: 發(fā)送幀從PduR到J1939Tp配置
表4-12: 發(fā)送幀從J1939Dcm到PudR配置
表4-13: 接收連接管理幀從CanIf到J1939Tp配置
表4-14: 接收數(shù)據(jù)傳輸幀從CanIf到J1939Tp配置
表4-15: 接收幀從J1939Tp到PduR配置
表4-16: 接收幀從PduR到J1939Dcm配置
4.5 J1939DcmCDD配置
J1939DcmCDD模塊用于測(cè)試J1939協(xié)議棧,即多于8字節(jié)數(shù)據(jù)的收發(fā)。
4.5.1 Cdd模塊創(chuàng)建
按照?qǐng)D4-19和圖4-20所示創(chuàng)建Cdd模塊,并將其更名為J1939DcmCDD。
圖 4-19: Cdd模塊創(chuàng)建啟動(dòng)
圖 4-20: Cdd模塊創(chuàng)建配置
為剛剛創(chuàng)建的Cdd模塊添加“CddComStackContribution -> CddPduRUpperLayerContribution”,再配置RxPdu和TxPdu各1個(gè)。
4.5.2 通信棧分配配置
Cdd模塊的配置參數(shù)如表4-17所列。
表 4-17: J1939DcmCDD通信棧分配配置
4.6 PduR配置
PDU路由器模塊為I-PDUs的路由提供服務(wù)。
4.6.1 PduR模塊創(chuàng)建
按照?qǐng)D4-21和圖4-22所示創(chuàng)建PduR模塊。
圖 4-21: PduR模塊創(chuàng)建啟動(dòng)
圖 4-22: PduR模塊創(chuàng)建配置
后續(xù)需要依次進(jìn)行PduR模塊的多余配置項(xiàng)刪除和配置文件選擇(無需統(tǒng)一路徑操作),這些步驟與前文的Can模塊操作基本相同。
4.6.2 Bsw模塊配置
需要對(duì)PduR上層或下層的BSW模塊(與PduR有接口)進(jìn)行配置,這里添加J1939Tp和J1939DcmCDD兩個(gè)模塊,圖4-23為BSW模塊的添加方法。
圖 4-23: PduR相關(guān)BSW模塊添加
J1939Tp和J1939DcmCDD模塊的配置方法如表4-18和表4-19所列
表 4-18: J1939Tp模塊配置
表4-19: J1939DcmCDD模塊配置
4.6.3 PduR路由路徑配置
這里配置J1939DcmCDD和J1939Tp收發(fā)2個(gè)路由路徑,如圖4-24所示。
圖 4-24: J1939DcmCDD和J1939Tp路由路徑
圖4-25為PduR添加路由路徑的方法,表4-20和表4-21為收發(fā)2個(gè)方向的路由配置參數(shù)。
圖 4-25: PduR路由路徑添加
表 4-20: 發(fā)送路由路徑配置
表4-21: NPDU接收路由路徑配置
4.7 CanIf配置
CanIf模塊位于底層CAN設(shè)備驅(qū)動(dòng)和上層通信服務(wù)層之間,提供CAN驅(qū)動(dòng)服務(wù)向上層通信層的接口。
4.7.1 CanIf模塊創(chuàng)建
按照?qǐng)D4-26和圖4-27所示創(chuàng)建CanIf模塊。
圖 4-26: CanIf模塊創(chuàng)建啟動(dòng)
圖 4-27: CanIf模塊創(chuàng)建配置
后續(xù)需要依次進(jìn)行CanIf模塊的多余配置項(xiàng)刪除和配置文件選擇(無需統(tǒng)一路徑操作),這些步驟與前文的Can模塊操作基本相同。
表4-22列出了CanIf模塊包含的配置箱。
表 4-22: CanIf模塊所含配置箱
4.7.2 CanIf私有配置
這個(gè)配置箱包含了CanIf的私有配置參數(shù),如表4-23所列。
表 4-23: CanIf私有配置
4.7.3 CanIf公有配置
這個(gè)配置箱包含了CanIf的公共配置參數(shù),如表4-24所列。
表 4-24: CanIf公共配置
①在重新生成RTA-BSW后可能需要手動(dòng)重配
4.7.4 CanIf初始化配置
表4-25列出了CanIf初始化包含的子配置箱。
表 4-25: CanIf初始化所含子配置箱
(1)CanIf初始化硬件對(duì)象句柄配置
添加2個(gè)接收句柄和1個(gè)發(fā)送句柄,如表4-26、表4-27和表4-28所列。
表 4-26: CanIf連接管理報(bào)文接收句柄配置
表4-27: CanIf數(shù)據(jù)傳輸報(bào)文接收句柄配置
表4-28: CanIf發(fā)送句柄配置
(3)CanIf緩沖區(qū)配置
添加1個(gè)CanIf緩沖區(qū),如表4-29所列。
表4-29: CanIf緩沖區(qū)配置
(3)CanIf接收Pdu配置
添加2個(gè)接收Pdu,如表4-30和表4-31所列。
表 4-30: CanIf接收連接管理Pdu配置
表4-31: CanIf接收數(shù)據(jù)傳輸Pdu配置
(4)CanIf發(fā)送Pdu配置
添加2個(gè)發(fā)送Pdu,如表4-32和表4-33所列。
表 4-32: CanIf發(fā)送連接管理Pdu配置
表4-33: CanIf發(fā)送數(shù)據(jù)傳輸Pdu配置
4.7.5 CanIf控制驅(qū)動(dòng)配置
無需配置。
4.7.6 CanIf處理配置
無需配置。
4.8 J1939Tp配置
前文已經(jīng)進(jìn)行了J1939Tp模塊的創(chuàng)建和通用配置,下面進(jìn)行其收發(fā)通道的配置。
4.8.1 J1939Tp接收通道配置
按照?qǐng)D4-28和圖4-29所示進(jìn)入J1939Tp接收通道配置界面,可以配置1個(gè)或多個(gè)接收通道。
圖 4-28: J1939Tp配置界面進(jìn)入
圖 4-29: J1939Tp接收通道或發(fā)送通道添加
(1)接收通道通用配置
表4-34列出J1939Tp接收通道通用配置參數(shù)。
表 4-34: J1939Tp接收通道通用參數(shù)配置
(2)接收連接管理報(bào)文
配置J1939傳輸協(xié)議的TP.CM幀,用于BAM和CMDT初始化連接,配置參數(shù)如表4-35所列。
表 4-35: J1939Tp接收通道接收連接管理報(bào)文參數(shù)配置
(3)接收數(shù)據(jù)報(bào)文
配置J1939傳輸協(xié)議的TP.DT幀,用于BAM和CMDT數(shù)據(jù)傳輸,配置參數(shù)如表4-36所列。
表 4-36: J1939Tp接收通道接收數(shù)據(jù)報(bào)文參數(shù)配置
(4)接收參數(shù)組
配置被J1939傳輸層接收的參數(shù)組,配置參數(shù)如表4-37、表4-38和表4-39所列。
表 4-37: J1939Tp接收通道接收參數(shù)組配置
表 4-38: J1939Tp接收通道接收直接NPdu配置
表4-39: J1939Tp接收通道接收NSdu配置
(5)發(fā)送連接管理報(bào)文
配置使用CMDT協(xié)議類型時(shí)接收方發(fā)送的TP.CM幀,配置參數(shù)如表4-40所列。
表 4-40: J1939Tp接收通道發(fā)送連接管理報(bào)文參數(shù)配置
4.8.2 J1939Tp發(fā)送通道配置
可以配置1個(gè)或多個(gè)發(fā)送通道。
(1)發(fā)送通道通用配置
表4-41列出J1939Tp發(fā)送通道通用配置參數(shù)。
表 4-41: J1939Tp發(fā)送通道通用參數(shù)配置
(2)接收連接管理報(bào)文
配置J1939傳輸協(xié)議的TP.CM幀,僅適用于CMDT協(xié)議類型(J1939TpTxProtocolType配置為“J1939TP_PROTOCOL_CMDT”或不配置),配置參數(shù)如表4-42所列。
表 4-42: J1939Tp發(fā)送通道接收連接管理報(bào)文參數(shù)配置
(3)發(fā)送連接管理報(bào)文
配置J1939傳輸協(xié)議的TP.CM幀,用于BAM和CMDT初始化連接,配置參數(shù)如表4-43所列。
表 4-43: J1939Tp發(fā)送通道發(fā)送連接管理報(bào)文參數(shù)配置
(4)發(fā)送數(shù)據(jù)報(bào)文
配置J1939傳輸協(xié)議的TP.DT幀,用于BAM和CMDT數(shù)據(jù)傳輸,配置參數(shù)如表4-44所列。
表 4-44: J1939Tp發(fā)送通道發(fā)送數(shù)據(jù)報(bào)文參數(shù)配置
(5)發(fā)送參數(shù)組
配置被J1939傳輸層發(fā)送的參數(shù)組,配置參數(shù)如表4-45、表4-46和表4-47所列。
表 4-45: J1939Tp發(fā)送通道發(fā)送參數(shù)組配置
表4-46: J1939Tp發(fā)送通道發(fā)送直接NPdu配置
表4-47: J1939Tp發(fā)送通道發(fā)送NSdu配置
4.9 相關(guān)模塊配置
在J1939Tp及其相關(guān)模塊配置完成后,還需要在程序中調(diào)用J1939Tp的初始化和執(zhí)行函數(shù)。
4.9.1 BswM
J1939Tp模塊的初始化函數(shù)是J1939Tp_Init,其調(diào)用在BswM中配置。
(1)BswM行為創(chuàng)建
新建1個(gè)名為“BswM_AI_J1939TpInit”的行為,再為其添加1個(gè)“BswMUserCallOut”,在其中調(diào)用J1939Tp_Init()函數(shù)。
(2)BswM行為列表添加
將“BswM_AI_J1939TpInit”添加到“BswM_AL_BswMSwitchRun”行為列表中。
4.9.2 任務(wù)調(diào)度
須以10ms為周期循環(huán)調(diào)用J1939Tp_MainFunction,圖4-30為其操作方法。
圖 4-30: J1939Tp主函數(shù)周期性調(diào)用配置
4.9.3 CanIf
每次生成RTA-BSW后,需按照表4-48所列配置CanIf。
表 4-48: 生成RTA-BSW后CanIf模塊配置項(xiàng)
4.10 MCAL配置
由于J1939Tp新增了3個(gè)CAN硬件對(duì)象,故需要配置MCAL的CAN模塊。
4.10.1 CAN過濾掩碼增加
在CAN4通道增加1路過濾掩碼,如圖4-31所示。
圖 4-31: CAN4通道過濾掩碼添加
4.10.2 CAN硬件對(duì)象配置
手動(dòng)添加3路“CanHardwareObject”,如圖4-32所示;注意更改2個(gè)接收硬件對(duì)象的“CanFilterMaskRef”。
圖 4-32: CAN硬件對(duì)象添加
4.11 軟件集成
下面列出軟件集成和代碼編寫的步驟。
4.11.1 靜態(tài)代碼移植
在ISOLAR-AB環(huán)境下生成J1939Tp模塊的靜態(tài)代碼并將其拷貝到“...srcBSWsrcBSWGenJ1939Tp”路徑下,如圖4-33所示。
圖4-33: BSW靜態(tài)代碼生成
4.11.2 集成文件移植
在ISOLAR-AB環(huán)境下生成J1939Tp模塊的集成代碼并將J1939Tp_Cfg_SchM.h文件拷貝到“...srcINFRAschminc”路徑下。
4.11.3 內(nèi)存映射文件移植
將J1939Tp_MemMap.h和J1939Tp_Cfg_MemMap.h內(nèi)存映射頭文件拷貝到“...srcINFRAmemmap”文件夾下,這類文件在生成RTE時(shí)輸出程序文件模板,需要手動(dòng)優(yōu)化。
4.11.4 生成操作系統(tǒng)代碼
在“RTA-OS”工具中重新生成OS代碼。
4.11.5 J1939DcmCDD代碼實(shí)現(xiàn)
創(chuàng)建J1939DcmCDD.c和J1939DcmCDD.h程序文件并在其中完成下列函數(shù)的實(shí)現(xiàn):
J1939DcmCDD_StartOfReception;
J1939DcmCDD_CopyRxData;
J1939DcmCDD_CopyTxData;
J1939DcmCDD_TpRxIndication;
J1939DcmCDD_TpTxConfirmation。
4.11.6 Hightec配置
在Hightec中添加下列頭文件路徑。
...srcCDDJ1939Dcminc;
...srcBSWsrcBSWGenJ1939Tpapi;
...srcBSWsrcBSWGenJ1939Tpsrc;
...srcBSWsrcBSWGenJ1939Tp。
4.12 軟件調(diào)試
這里記錄J1939Tp協(xié)議棧的調(diào)試過程,調(diào)試環(huán)境為PCAN,CAN通道為CAN4,波特率250K。
4.12.1 調(diào)試代碼編寫
數(shù)據(jù)發(fā)送:在J1939DcmCDD.c中編寫J1939DcmCDD_MainFunction函數(shù),實(shí)現(xiàn)18字節(jié)數(shù)據(jù)的CAN發(fā)送;再在Os_SWC中以500ms為周期調(diào)用之。
數(shù)據(jù)接收:禁止上述18字節(jié)數(shù)據(jù)的周期性發(fā)送。
4.12.2 J1939發(fā)送調(diào)試
圖4-34為J1939數(shù)據(jù)發(fā)送調(diào)試截圖。VCU以500ms為周期發(fā)送18字節(jié)數(shù)據(jù),包括1個(gè)連接管理報(bào)文和3個(gè)數(shù)據(jù)報(bào)文,這4個(gè)報(bào)文之間的發(fā)送間隔為60ms(這個(gè)時(shí)間間隔沒有搞明白原因)。
圖 4-34: J1939發(fā)送調(diào)試截圖
盡管多于8字節(jié)數(shù)據(jù)的報(bào)文發(fā)送正確,但在調(diào)試少于或等于8字節(jié)報(bào)文的發(fā)送時(shí)出現(xiàn)了問題,數(shù)據(jù)無法發(fā)出。
經(jīng)過研讀AUTOSAR規(guī)范和分析靜態(tài)代碼,找到了出現(xiàn)上述問題的原因,是由于J1939Tp_Transmit函數(shù)的缺陷導(dǎo)致的,如圖4-35所示。
圖 4-35: J1939Tp發(fā)送函數(shù)問題分析
經(jīng)過進(jìn)一步分析,發(fā)現(xiàn)J1939TpTxPgDynLength配置項(xiàng)的功用并沒有體現(xiàn)在J1939Tp的靜態(tài)代碼中,故對(duì)J1939Tp_Transmit函數(shù)進(jìn)行了如下改動(dòng)(見圖4-36)。
圖 4-36: J1939Tp發(fā)送函數(shù)修改后的代碼
4.13 J1939接收調(diào)試
圖4-37為J1939數(shù)據(jù)接收調(diào)試截圖,第1、3、4、5個(gè)報(bào)文為PC機(jī)發(fā)送,第2、6個(gè)報(bào)文為VCU回饋。
圖 4-37: J1939接收調(diào)試截圖
修改靜態(tài)代碼前后,VCU均能正確接收到多于8字節(jié)和少于或等于8字節(jié)報(bào)文的數(shù)據(jù)。
五、下期預(yù)告
在AUTOSAR規(guī)范中,內(nèi)存映射(Memory Map)似乎是非核心的模塊,但在解決各類工程問題(如數(shù)據(jù)標(biāo)定區(qū)增加了幾個(gè)標(biāo)定量就越界)的過程中,往往發(fā)揮著至關(guān)重要的作用。
在下期中,我們討論下內(nèi)存映射的功用和實(shí)現(xiàn)方法,著重分享內(nèi)存映射在AUTOSAR CP工程實(shí)踐中的妙用。
-
CAN總線
+關(guān)注
關(guān)注
145文章
1981瀏覽量
132713 -
AUTOSAR
+關(guān)注
關(guān)注
10文章
378瀏覽量
22610 -
通訊協(xié)議
+關(guān)注
關(guān)注
10文章
289瀏覽量
20827
原文標(biāo)題:從手寫代碼到AUTOSAR工具鏈(J1939Tp應(yīng)用篇)
文章出處:【微信號(hào):ETASChina,微信公眾號(hào):ETAS易特馳】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
基于J1939協(xié)議的組合儀表的設(shè)計(jì)與實(shí)現(xiàn)
J1939基礎(chǔ)入門知識(shí)分享
SAE J1939 協(xié)議源代碼分享
基于J1939協(xié)議的組合儀表的設(shè)計(jì)與實(shí)現(xiàn)
基于J1939的汽車CAN總線教學(xué)實(shí)驗(yàn)系統(tǒng)
SAE J1939協(xié)議分析指南
基于SAE J1939協(xié)議的車輛網(wǎng)絡(luò)通信

CAN高層協(xié)議J1939的基礎(chǔ)和應(yīng)用以及開發(fā)介紹

基于恩智浦MPC5744P的SAE J1939協(xié)議棧開發(fā)

從手寫代碼到AUTOSAR工具鏈_MCAL應(yīng)用篇

AUTOSAR之實(shí)時(shí)環(huán)境RTE

盟通方案|如何集成J1939協(xié)議

評(píng)論