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