CAN總線(xiàn) CAN(控制器局域網(wǎng)絡(luò ))總線(xiàn),以其高實(shí)時(shí)性、高可靠性、功能完善、高性?xún)r(jià)比、開(kāi)發(fā)周期短、等諸多優(yōu)點(diǎn),被大量應用于車(chē)輛通信及控制,幾乎所有汽車(chē)生產(chǎn)商及其供應商都選則CAN總線(xiàn)做為通信介質(zhì)。 SAEJ1939協(xié)議 SAEJ1939協(xié)議是在CAN2.0B的基礎之上做了進(jìn)一步封裝,相較于七層OSI模型,更加簡(jiǎn)單、易于上手,該協(xié)議主要面向客車(chē)和大中型載重貨車(chē)。SAEJ1939數據幀結構如下:
從上圖可知,一幀CAN數據幀最大可攜帶8 Byte(64bit)數據。而在日常車(chē)輛控制中往往需要傳輸的內容遠大于此數量。在SAEJ1939-21中專(zhuān)門(mén)規定了傳輸協(xié)議功能。 無(wú)線(xiàn)傳輸協(xié)議功能主要分為兩個(gè)部分:消息的拆裝與重組,連接管理。 消息拆裝與重組: 大于8個(gè)字節的數據不能通過(guò)用一個(gè)單獨的CAN 數據幀來(lái)傳輸。它們需要被拆分成多個(gè)小的數據包,使用單獨的數據幀依次傳送。接收者則負責按編號將這個(gè)單獨的數據包重組長(cháng)數據,并傳給應用程序。 連接管理: 連接管理包含三個(gè)過(guò)程:建立連接、數據傳輸、連接關(guān)閉。 1.建立連接:當某個(gè)節點(diǎn)要傳送一組大于8字節的數據時(shí),就會(huì )發(fā)起請求連接,請求中包含整個(gè)數據包的大小,要傳送消息的幀數,以及它設定的參數群編號。然后等待接收方做出相應的響應或者超時(shí)。 2.數據傳輸:當建立連接之后,當發(fā)送者接收到允許發(fā)送的信號后,發(fā)送者將按順序將拆裝好的數據依次發(fā)送到CAN網(wǎng)絡(luò )上。數據幀的第一個(gè)字節用于表示當前數據包的編號。因此,一次批量傳輸的最大數據量為:255 * 7 = 1785字節。 3.連接關(guān)閉:當數據被正確發(fā)送后,接收方會(huì )回傳一個(gè)數據包,數據包內容包括:結束應答標號、整個(gè)消息的大小、接收的幀數以及參數群編號。 整個(gè)傳輸過(guò)程如下圖:
|