LIN总线协议
LIN,Interconnect Network,適用于速度和可靠性要求不高、低成本的場(chǎng)合,LIN的使用場(chǎng)景包括車窗、天窗、座椅、門鎖、空調(diào)、照明等舒適性相關(guān)的地方
LIN網(wǎng)絡(luò)
主機(jī)節(jié)點(diǎn)/從機(jī)節(jié)點(diǎn)
不同協(xié)議的網(wǎng)絡(luò)需要網(wǎng)關(guān)相連接,所以LIN網(wǎng)絡(luò)與CAN總線相連時(shí),需要加入CAN-LIN網(wǎng)關(guān),這個(gè)網(wǎng)關(guān)一般由LIN網(wǎng)絡(luò)的主機(jī)節(jié)點(diǎn)充當(dāng)
LIN是單線總線,最大傳輸速率為20kbps,它采用的是一主多從的概念,就是一個(gè)LIN網(wǎng)絡(luò)只會(huì)有一個(gè)主機(jī),多個(gè)從機(jī)
由于物理層限制,一個(gè)LIN網(wǎng)絡(luò)最多有16個(gè)節(jié)點(diǎn),那么除去一個(gè)主機(jī)節(jié)點(diǎn)是有且唯一,從機(jī)節(jié)點(diǎn)的數(shù)量就是1到15個(gè)
主機(jī)任務(wù)/從機(jī)任務(wù)
主機(jī)節(jié)點(diǎn)(Master Node)包含主機(jī)任務(wù)(Master Task)和從機(jī)任務(wù)(Slave Task),從機(jī)節(jié)點(diǎn)(Slave Node)只有從機(jī)任務(wù)(Slave Task)
主機(jī)任務(wù)負(fù)責(zé)
-
調(diào)度總線上幀的傳輸次序
-
監(jiān)測(cè)數(shù)據(jù),處理錯(cuò)誤
-
作為標(biāo)準(zhǔn)時(shí)鐘參考
-
接收從機(jī)節(jié)點(diǎn)發(fā)出的總線喚醒命令
從機(jī)任務(wù)不能夠主動(dòng)發(fā)送數(shù)據(jù),需要接收主機(jī)發(fā)送的幀頭,根據(jù)幀頭所包含的信息判斷:
-
發(fā)送應(yīng)答
-
接收應(yīng)答
-
既不接收也不發(fā)送應(yīng)答
幀的結(jié)構(gòu)
幀包括幀頭和應(yīng)答兩個(gè)部分,主機(jī)節(jié)點(diǎn)里的主機(jī)任務(wù)負(fù)責(zé)發(fā)送幀頭,主機(jī)節(jié)點(diǎn)或從機(jī)節(jié)點(diǎn)里的從機(jī)任務(wù)接收幀頭,并對(duì)幀頭所包含的信息進(jìn)行解析,然后決定是發(fā)送應(yīng)答,還是接收應(yīng)答,還是不作任何反應(yīng)
幀的結(jié)構(gòu)
幀頭
幀頭包括同步間隔段、同步段和PID段
同步間隔段
同步間隔段的作用:
這里就要講到LIN總線的顯性電平和隱性電平
上圖中,值0為顯性電平,值1為隱性電平,當(dāng)總線上有大于等于一個(gè)節(jié)點(diǎn)發(fā)送顯性電平時(shí),總線呈顯性電平;當(dāng)所有的節(jié)點(diǎn)都發(fā)送隱性電平或不發(fā)送信息時(shí),總線呈隱性電平,所以能看出顯性電平起主導(dǎo)作用
同步間隔段由同步間隔和同步間隔段間隔符組成,同步間隔是至少13位的顯性電平,除了同步間隔段,沒有任何其他情況會(huì)發(fā)出大于9個(gè)的顯性電平,那么13個(gè)顯性電平的同步間隔段,就可以作為一個(gè)幀的開始的標(biāo)志
同步間隔段間隔符是一個(gè)隱性電平
同步段
在講同步段之前,先了解一個(gè)概念,字節(jié)域
字節(jié)域以顯性電平開始,以隱性電平結(jié)束,是一種標(biāo)準(zhǔn)的UART數(shù)據(jù)傳輸格式
在LIN的幀中,除了同步間隔段以外,其他各段都是以字節(jié)域的格式傳輸?shù)?/p>
這里也可以看到數(shù)據(jù)段里的各byte字節(jié),也是按照字節(jié)域的格式傳輸?shù)?/p>
LIN總線為了節(jié)約成本,沒有采用高精度時(shí)鐘,采用了精度和成本相對(duì)較低的時(shí)鐘,這樣就會(huì)導(dǎo)致從機(jī)節(jié)點(diǎn)與主機(jī)節(jié)點(diǎn)的時(shí)鐘誤差,而同步段就是為了調(diào)整從機(jī)節(jié)點(diǎn)數(shù)據(jù)的位速率與主機(jī)節(jié)點(diǎn)一致
PID
“PID,Protected Identifier Field,受保護(hù)的ID
”為什么叫受保護(hù)的ID?
PID有8個(gè)bit,其中只有前6個(gè)bit是實(shí)際位,叫幀ID,后面兩個(gè)bit是前6個(gè)bit奇偶校驗(yàn)后得到的值,叫奇偶校驗(yàn)位
從機(jī)任務(wù)是根據(jù)收到的幀ID作出反應(yīng)的,所以需要驗(yàn)證幀ID是否正確,就是根據(jù)奇偶校驗(yàn)位,這也就是為什么叫作PID的原因
校驗(yàn)位P0 = ID0 @ ID1 @ ID2 @ ID3 @ ID4
校驗(yàn)位P1 = ~(ID1 @ ID2 @ ID3 @ ID4 @ ID5)
@表示異或運(yùn)算,~表示取反
“由此可以看出,PID不可能出現(xiàn)全0或全1的情況,如果從機(jī)任務(wù)收到了0xFF或0x00,可以判斷為傳輸錯(cuò)誤
”根據(jù)幀ID的不同,將LIN幀分為
應(yīng)答
應(yīng)答包括數(shù)據(jù)段和校驗(yàn)和段
數(shù)據(jù)段
數(shù)據(jù)段是節(jié)點(diǎn)發(fā)送的數(shù)據(jù),1到8個(gè)字節(jié)不等,它承載著信號(hào)或診斷消息兩種數(shù)據(jù)類型
信號(hào)由信號(hào)攜帶幀傳遞,一個(gè)幀ID對(duì)應(yīng)的數(shù)據(jù)段可能包含一個(gè)或多個(gè)信號(hào),發(fā)送信號(hào)的節(jié)點(diǎn)稱為發(fā)布節(jié)點(diǎn),接收信號(hào)的節(jié)點(diǎn)稱為收聽節(jié)點(diǎn)
一般情況下,對(duì)于一個(gè)幀中的應(yīng)答,總線上只存在一個(gè)發(fā)布節(jié)點(diǎn),否則就會(huì)出現(xiàn)錯(cuò)誤
但是對(duì)于事件觸發(fā)幀,可能存在0個(gè)、1個(gè)或多個(gè)發(fā)布節(jié)點(diǎn)
診斷消息由診斷幀傳遞
校驗(yàn)和段
校驗(yàn)和段是對(duì)數(shù)據(jù)段內(nèi)容進(jìn)行校驗(yàn),它只有1個(gè)字節(jié)
校驗(yàn)和根據(jù)不同的場(chǎng)景分為:標(biāo)準(zhǔn)型校驗(yàn)和、增強(qiáng)型校驗(yàn)和
采用哪種校驗(yàn)和是由主機(jī)節(jié)點(diǎn)管理的,發(fā)布節(jié)點(diǎn)和收聽節(jié)點(diǎn)根據(jù)幀ID判斷采用哪種校驗(yàn)和
計(jì)算方法很簡(jiǎn)單:數(shù)據(jù)段內(nèi)的各字節(jié)依次相加,如果有進(jìn)位,則加到低位,最終得出的值取反
收聽節(jié)點(diǎn)如何校驗(yàn)?zāi)?#xff1f;同樣地,把數(shù)據(jù)段內(nèi)的各字節(jié)依次相加,如果有進(jìn)位,則加到低位,得到的值不取反,與接收到的校驗(yàn)和相加,最終得到0xFF,校驗(yàn)無誤
幀傳輸時(shí)間的計(jì)算
這里有幾個(gè)需要注意的時(shí)間,由于幀里面的各段間有間隔,這也是要花掉時(shí)間的
所以
幀頭的余量T_Header_Rest包含字節(jié)間間隔,規(guī)定為T_Header_Nominal的百分之40
應(yīng)答的余量T_Response_Rest包含應(yīng)答間隔以及字節(jié)間間隔,規(guī)定為T_Response_Nominal的百分之40。
N_data為數(shù)據(jù)段內(nèi)的字節(jié)數(shù)
幀的類型
無條件幀
無條件幀的幀頭從主機(jī)任務(wù)發(fā)出后,必定有從機(jī)任務(wù)應(yīng)答,也就是說必定有從機(jī)任務(wù)發(fā)出無條件幀中的信號(hào),無論信號(hào)是否發(fā)生變化
有且只有一個(gè)從機(jī)任務(wù)對(duì)無條件幀的幀頭作出應(yīng)答,發(fā)出信號(hào)
從這里是否可以明白一些東西
“主機(jī)節(jié)點(diǎn)里的主機(jī)任務(wù)負(fù)責(zé)發(fā)送幀頭,主機(jī)節(jié)點(diǎn)和從機(jī)節(jié)點(diǎn)里從機(jī)任務(wù)根據(jù)事先設(shè)計(jì)好的規(guī)則,負(fù)責(zé)對(duì)接收到的幀頭信息進(jìn)行分析,以確定自己是否要把這個(gè)幀的數(shù)據(jù)發(fā)出去,或是否要接收這個(gè)幀的數(shù)據(jù)(來自其他從機(jī)任務(wù)的)
”這和CAN總線通信還是很不一樣的,后面我會(huì)進(jìn)行分析和總結(jié)
無條件幀的典型應(yīng)用場(chǎng)景如下
這里其實(shí)有很多的細(xì)節(jié)沒畫出來
第一個(gè)場(chǎng)景
“-
主機(jī)節(jié)點(diǎn)的主機(jī)任務(wù)發(fā)送了一條LIN幀的幀頭給所有的從機(jī)任務(wù)(包括主機(jī)節(jié)點(diǎn)里的從機(jī)任務(wù)),所有的從機(jī)任務(wù)收到幀頭后分析幀ID=0x30,判斷是要發(fā)這個(gè)幀的數(shù)據(jù),還是收這個(gè)幀的數(shù)據(jù),或者是不作處理
-
從機(jī)節(jié)點(diǎn)1的從機(jī)任務(wù)收到幀ID 0x30,發(fā)現(xiàn)自己需要把某些信號(hào)值發(fā)出去,這些信號(hào)值就是屬于幀ID 0x30的
-
主機(jī)節(jié)點(diǎn)的從機(jī)任務(wù)收到幀ID 0x30,發(fā)現(xiàn)自己需要接收別人發(fā)來的信號(hào)值并作處理
-
從機(jī)節(jié)點(diǎn)2的從機(jī)任務(wù)收到幀ID 0x30,發(fā)現(xiàn)自己既不需要發(fā)送信號(hào),也不需要接收信號(hào)
-
這個(gè)場(chǎng)景的典型應(yīng)用就是從機(jī)節(jié)點(diǎn)1向主機(jī)節(jié)點(diǎn)報(bào)告自身某信號(hào)的狀態(tài)
從上面的分析中我們能總結(jié)出LIN總線通信方式
“一條幀的幀頭和數(shù)據(jù)段不是一起發(fā)出的,也不一定是同一個(gè)節(jié)點(diǎn)發(fā)出的
幀頭必定是由主機(jī)節(jié)點(diǎn)的主機(jī)任務(wù)發(fā)給從機(jī)任務(wù),從機(jī)任務(wù)根據(jù)幀ID判斷是要發(fā)出信號(hào)值,還是接收信號(hào)值,或是不作反應(yīng)
由此看出從機(jī)任務(wù)負(fù)責(zé)發(fā)送數(shù)據(jù)、接收數(shù)據(jù)或不作反應(yīng),一切都是根據(jù)收到的幀ID做判斷
雖然幀ID和數(shù)據(jù)是分開發(fā)送的,但是它們?cè)贚IN數(shù)據(jù)庫(kù)內(nèi)也是一條完整的幀,只是幀ID由主機(jī)任務(wù)發(fā)送,數(shù)據(jù)放在某個(gè)節(jié)點(diǎn)里由從機(jī)任務(wù)發(fā)送
主機(jī)節(jié)點(diǎn)除了主機(jī)任務(wù)以外,還有從機(jī)任務(wù),因?yàn)橹鳈C(jī)節(jié)點(diǎn)也是節(jié)點(diǎn),它也是需要發(fā)送信號(hào)和接收信號(hào)的
不管是幀頭還是數(shù)據(jù),除了發(fā)送節(jié)點(diǎn)以外的其他節(jié)點(diǎn)都會(huì)收到,只是是否要做處理,需要根據(jù)幀ID按照自己的內(nèi)部規(guī)則作出判斷
第二個(gè)場(chǎng)景
“-
主機(jī)節(jié)點(diǎn)的主機(jī)任務(wù)把幀頭(幀ID 0x31)發(fā)給主機(jī)節(jié)點(diǎn)、從機(jī)節(jié)點(diǎn)1和從機(jī)節(jié)點(diǎn)2的從機(jī)任務(wù),它們收到幀頭后分析幀ID 0x31發(fā)現(xiàn)
-
主機(jī)節(jié)點(diǎn)的從機(jī)任務(wù)需要發(fā)出幀ID 0x31的數(shù)據(jù)
-
從機(jī)節(jié)點(diǎn)1的從機(jī)任務(wù)需要接收發(fā)來的數(shù)據(jù)
-
從機(jī)節(jié)點(diǎn)2的從機(jī)任務(wù)需要接收發(fā)來的數(shù)據(jù)
-
這個(gè)場(chǎng)景的典型應(yīng)用就是主機(jī)節(jié)點(diǎn)向從機(jī)節(jié)點(diǎn)發(fā)布信息
第三個(gè)場(chǎng)景
“-
主機(jī)節(jié)點(diǎn)的主機(jī)任務(wù)把幀頭(幀ID 0x32)發(fā)給主機(jī)節(jié)點(diǎn)、從機(jī)節(jié)點(diǎn)1和從機(jī)節(jié)點(diǎn)2的從機(jī)任務(wù),它們收到幀頭后分析幀ID 0x32發(fā)現(xiàn)
-
主機(jī)節(jié)點(diǎn)的從機(jī)任務(wù)不作反應(yīng)
-
從機(jī)節(jié)點(diǎn)1的從機(jī)任務(wù)需要接收發(fā)來的數(shù)據(jù)
-
從機(jī)節(jié)點(diǎn)2的從機(jī)任務(wù)需要發(fā)出幀ID 0x32的數(shù)據(jù)
-
這個(gè)場(chǎng)景的典型應(yīng)用就是從機(jī)節(jié)點(diǎn)間的通信
事件觸發(fā)幀
當(dāng)節(jié)點(diǎn)里的信號(hào)發(fā)生變化的頻率較低時(shí),再用無條件幀一遍又一遍地讓它應(yīng)答,這樣做很不合適,因?yàn)闀?huì)占用LIN總線的帶寬
與無條件幀不論信號(hào)是否發(fā)生變化必定有從機(jī)任務(wù)應(yīng)答不同,事件觸發(fā)幀只有信號(hào)發(fā)生變化才需要應(yīng)答,所以事件觸發(fā)幀允許無節(jié)點(diǎn)應(yīng)答(只有幀頭無應(yīng)答),也允許兩個(gè)以上的節(jié)點(diǎn)對(duì)幀頭作應(yīng)答
當(dāng)兩個(gè)以上的節(jié)點(diǎn)同時(shí)應(yīng)答時(shí),不會(huì)被視為錯(cuò)誤,但是主機(jī)節(jié)點(diǎn)需要解決這個(gè)沖突,怎么辦呢?
主機(jī)節(jié)點(diǎn)的主機(jī)任務(wù)需要立刻中斷當(dāng)前的進(jìn)度表,然后啟動(dòng)沖突解決進(jìn)度表,調(diào)用這些沖突信號(hào)關(guān)聯(lián)的無條件幀,發(fā)送幀頭,獲得應(yīng)答
由上圖可以看出
“-
主機(jī)節(jié)點(diǎn)的主機(jī)任務(wù)發(fā)送事件觸發(fā)幀的幀頭0x10,請(qǐng)求從機(jī)任務(wù)的應(yīng)答,但是由于信號(hào)沒有變化,從機(jī)任務(wù)不應(yīng)答
-
下一個(gè)循環(huán),主機(jī)節(jié)點(diǎn)的主機(jī)任務(wù)又發(fā)送幀頭0x10,只有從機(jī)節(jié)點(diǎn)1的信號(hào)發(fā)生變化,從機(jī)節(jié)點(diǎn)1的從機(jī)任務(wù)作應(yīng)答
-
下一個(gè)循環(huán),主機(jī)節(jié)點(diǎn)的主機(jī)任務(wù)又發(fā)送幀頭0x10,從機(jī)節(jié)點(diǎn)1和2的信號(hào)同時(shí)變化,同時(shí)應(yīng)答,造成沖突
-
中斷當(dāng)前進(jìn)度表,啟動(dòng)沖突解決進(jìn)度表
-
主機(jī)任務(wù)發(fā)送從機(jī)節(jié)點(diǎn)1的事件觸發(fā)幀的信號(hào)相關(guān)聯(lián)的無條件幀的幀頭0x11,從機(jī)節(jié)點(diǎn)1的從機(jī)任務(wù)就會(huì)把信號(hào)發(fā)給主機(jī)節(jié)點(diǎn)的從機(jī)任務(wù)
-
主機(jī)任務(wù)發(fā)送從機(jī)節(jié)點(diǎn)2的事件觸發(fā)幀的信號(hào)相關(guān)聯(lián)的無條件幀的幀頭0x12,從機(jī)節(jié)點(diǎn)2的從機(jī)任務(wù)就會(huì)把信號(hào)發(fā)給主機(jī)節(jié)點(diǎn)的從機(jī)任務(wù)
可以總結(jié)出
“事件觸發(fā)幀的信號(hào)必須有變化,信號(hào)所屬的從機(jī)任務(wù)才會(huì)發(fā)送
事件觸發(fā)幀的信號(hào),也和無條件幀相關(guān)聯(lián),換句話說,也是無條件幀里的信號(hào),這樣做的目的是當(dāng)事件觸發(fā)幀的應(yīng)答沖突時(shí),還可以用無條件幀去請(qǐng)求信號(hào)值
事件觸發(fā)幀的每一個(gè)應(yīng)答節(jié)點(diǎn)對(duì)應(yīng)一個(gè)不同的無條件幀
事件觸發(fā)幀的信號(hào)發(fā)生變化才應(yīng)答的特點(diǎn),很適合應(yīng)用在對(duì)車門的開關(guān)狀態(tài)進(jìn)行檢測(cè)的場(chǎng)景
對(duì)于事件觸發(fā)幀來說,由于有可能有多個(gè)節(jié)點(diǎn)應(yīng)答,如何知道是哪個(gè)節(jié)點(diǎn)發(fā)來的應(yīng)答呢?
這個(gè)其實(shí)也簡(jiǎn)單
“既然應(yīng)答沖突時(shí)會(huì)輪詢調(diào)用事件觸發(fā)幀的所有對(duì)應(yīng)的無條件幀,說明一個(gè)無條件幀代表一個(gè)節(jié)點(diǎn),那么只需要把事件觸發(fā)幀的應(yīng)答中第一個(gè)字節(jié)設(shè)置為無條件幀的PID即可
”由于事件觸發(fā)幀的長(zhǎng)度固定,所以各節(jié)點(diǎn)的應(yīng)答固定,那么對(duì)應(yīng)的無條件幀的應(yīng)答長(zhǎng)度也就固定了
所以
與事件觸發(fā)幀對(duì)應(yīng)的所有無條件幀需要滿足
-
數(shù)據(jù)段長(zhǎng)度相同
-
數(shù)據(jù)段的校驗(yàn)和類型相同
-
數(shù)據(jù)段的第一個(gè)字節(jié)為該無條件幀的PID
-
由不同的從機(jī)節(jié)點(diǎn)發(fā)布
-
不能與事件觸發(fā)幀處于同一個(gè)進(jìn)度表
偶發(fā)幀
事件觸發(fā)幀是主機(jī)節(jié)點(diǎn)為了獲取從機(jī)節(jié)點(diǎn)的信號(hào)狀態(tài)而發(fā)送的幀
那么主機(jī)節(jié)點(diǎn)里的信號(hào)狀態(tài)又要如何讓從機(jī)節(jié)點(diǎn)知道呢
這里就引入了偶發(fā)幀,偶發(fā)幀可以當(dāng)作是主機(jī)節(jié)點(diǎn)的事件觸發(fā)幀
當(dāng)主機(jī)節(jié)點(diǎn)的信號(hào)發(fā)生變化時(shí),主機(jī)節(jié)點(diǎn)的主機(jī)任務(wù)就會(huì)發(fā)送偶發(fā)幀的幀頭,主機(jī)節(jié)點(diǎn)的從機(jī)任務(wù)收到幀頭后,發(fā)送信號(hào),其他從機(jī)節(jié)點(diǎn)根據(jù)自身需要選擇是否接收(其實(shí)也是分析幀ID后判斷的)
上面說的是一個(gè)應(yīng)答,一個(gè)偶發(fā)幀可能對(duì)應(yīng)多個(gè)應(yīng)答信號(hào),如果同時(shí)有多個(gè)應(yīng)答時(shí),怎么辦?
和解決事件觸發(fā)幀的應(yīng)答沖突一樣,一個(gè)偶發(fā)幀也關(guān)聯(lián)多個(gè)無條件幀,每個(gè)無條件幀對(duì)應(yīng)一個(gè)應(yīng)答,當(dāng)同時(shí)有多個(gè)應(yīng)答時(shí),主機(jī)節(jié)點(diǎn)會(huì)根據(jù)LDF(LIN的數(shù)據(jù)庫(kù)文件)中定義好的優(yōu)先級(jí)順序,依次在同一時(shí)隙時(shí)發(fā)送
偶發(fā)幀的無條件幀的發(fā)送方式,和事件觸發(fā)幀的還有所不同
事件觸發(fā)幀的無條件幀是啟用的沖突解決進(jìn)度表來發(fā)送,會(huì)一個(gè)挨著一個(gè)發(fā)送,沖突解決進(jìn)度表中的所有無條件幀發(fā)送完畢后,才會(huì)重新回到主進(jìn)度表中繼續(xù)調(diào)度
而偶發(fā)幀的應(yīng)答沖突時(shí),并不會(huì)啟動(dòng)沖突解決進(jìn)度表,還是在主表內(nèi),在這個(gè)偶發(fā)幀的時(shí)隙時(shí),調(diào)用優(yōu)先級(jí)最高的無條件幀,然后等下一個(gè)輪詢,又輪到了偶發(fā)幀的機(jī)會(huì)時(shí),再調(diào)用優(yōu)先級(jí)次高的無條件幀
由于是主機(jī)節(jié)點(diǎn)的信號(hào),如果它的信號(hào)沒有變化,偶發(fā)幀都沒必要發(fā)出去,因?yàn)樾盘?hào)沒變化,從機(jī)節(jié)點(diǎn)也沒必要判斷是否要接收,那主機(jī)節(jié)點(diǎn)也沒必要發(fā)偶發(fā)幀的幀頭,那么這個(gè)時(shí)隙就會(huì)保持沉默
診斷幀
診斷幀分為:主機(jī)請(qǐng)求幀、從機(jī)應(yīng)答幀
主機(jī)請(qǐng)求幀
幀ID = 0x3C
應(yīng)答由主機(jī)節(jié)點(diǎn)的從機(jī)任務(wù)發(fā)布
從機(jī)應(yīng)答幀
幀ID = 0x3D
應(yīng)答由從機(jī)節(jié)點(diǎn)的從機(jī)任務(wù)發(fā)布
保留幀
保留幀的幀ID為0x3E和0x3F,為將來擴(kuò)展用
總結(jié)
- 上一篇: 全景视频资源网(VR),可下载全景视频
- 下一篇: 芯片制造流程