LIN總線是目前常見的一種A類網(wǎng)絡(luò)協(xié)議。LIN的全稱為Local Interconnect Network。LIN主要功能是為CAN總線網(wǎng)絡(luò)提供輔助功能,應(yīng)用場合有智能傳感節(jié)點、自動車窗節(jié)點等。目前最新的LIN協(xié)議是LIN2.2,制定于2010年。LIN的一大優(yōu)點是成本低,但其最大傳輸速率為20Kbps。建議的通信速率如下,低速2400bps,中速9600bps,高速19200bps。根據(jù)OSI參考模型,LIN總線僅規(guī)范了數(shù)據(jù)鏈路層和物理層。
LIN的部分應(yīng)用LIN的特點如下:
1.采用單主多從的組網(wǎng)方式,無CAN總線那樣的仲裁機制,最多可連接16個節(jié)點(1主15從)。
2.對硬件要求簡單,僅需UART/SCI 接口,輔以簡單驅(qū)動程序便可實現(xiàn) LIN 協(xié)議。故幾乎所有的MCU均支持LIN。
3.不需要單獨的晶振,便能完成主、從節(jié)點的同步,硬件成本大幅降低。
4.僅使用一根信號線便可完成信息的傳輸,即所謂的單總線設(shè)備。
5.傳輸速率最高可達20Kbps,符合A類網(wǎng)絡(luò)標(biāo)準(zhǔn),滿足車身控制需要。
6.LIN 網(wǎng)絡(luò)中新節(jié)點的加入,對網(wǎng)絡(luò)中其他原有節(jié)點的軟硬件設(shè)計不會造成影響。
LIN網(wǎng)絡(luò)主從節(jié)點的功能
LIN網(wǎng)絡(luò)中的節(jié)點任務(wù)分為主機任務(wù)和從機任務(wù)兩類。其中,主機任務(wù)只在主機節(jié)點上運行,而從機任務(wù)在主機節(jié)點和從機節(jié)點上均可運行。也就是說,主機節(jié)點可以實現(xiàn)主機任務(wù)和從機任務(wù)。
A.主機任務(wù)主要執(zhí)行以下功能:
1.定義總線上的通信速率。(同步場?待考)
2.發(fā)送報文幀頭,包含同步間隔場、同步場和標(biāo)識符場三個部分。
3.監(jiān)控總線通信,通過校驗和確定數(shù)據(jù)正確性與否。
4.使從機進入喚醒或睡眠狀態(tài),并響應(yīng)從機的喚醒要求。
B.從機任務(wù)既可運行于主機又可運行于從機,它主要完成以下功能:
1.等待主機任務(wù)發(fā)送的同步間隔,使從機與主機于同步場中獲得同步。
2.分析標(biāo)識符場,若與自己相關(guān),則接收或發(fā)送數(shù)據(jù),若與自己無關(guān)則什么都不做。
3.檢查和發(fā)送校驗和。
4.接受主機任務(wù)的喚醒和睡眠請求。
綜上,主機報文的標(biāo)識符能觸發(fā)與之對應(yīng)的不同從機之間的通信。
LIN報文的幀結(jié)構(gòu)
LIN 總線上具有“顯性”和“隱性”兩種互補的邏輯電平。其中,顯性電平(參考地電壓)是邏輯 0,隱性電平(電源電壓)是邏輯1。
LIN在總線上以具有固定格式的報文進行傳遞,但是這種報文數(shù)據(jù)段的長度是可以調(diào)整的。LIN網(wǎng)絡(luò)中的所有節(jié)點(包括主機節(jié)點)都具有從機任務(wù),當(dāng)接到主機任務(wù)的報文信息時,它們中的某一個要對報文做出響應(yīng)。
報文頭僅可以由主機節(jié)點發(fā)出
LIN總線的一幀主要由兩部分組成,即報文頭(Header)和報文響應(yīng)(Response)。其中,報文頭是由一個主機節(jié)點的主機任務(wù)發(fā)出的,而報文響應(yīng)(以下簡稱響應(yīng))是由一個主機節(jié)點或從機節(jié)點的從機任務(wù)發(fā)出的。其中報文頭由同步間隔場(最小13個顯性位)、同步場(1個字節(jié),數(shù)據(jù)不變,0x55)、和PID場(1個字節(jié))三部分組成;報文響應(yīng)由2/4/8個字節(jié)的數(shù)據(jù)場、校驗和場(1個字節(jié))所組成。報文頭和響應(yīng)之間有一個幀內(nèi)空間分隔,最小空間為0。
LIN的幀結(jié)構(gòu)(英文版)
LIN的幀結(jié)構(gòu)(彩圖版)
LIN的幀結(jié)構(gòu)
示波器采出來的LIN波形,能看出0x00和0x55
LIN 的字節(jié)場格式就是通常的“SCI”或“UART”串行數(shù)據(jù)格式(N81編碼)。即每個字節(jié)場的長度是10個位定時(BIT TIME):1bit起始位+8bits數(shù)據(jù)位+1bit停止位。
起始位(START BIT)是一個“顯性”位,它標(biāo)志著字節(jié)場的開始。接著是8個數(shù)據(jù)位,首先發(fā)送最低位。停止位(STOP BIT)是一個“隱性”位,它標(biāo)志著字節(jié)場的結(jié)束。LIN報文幀中的同步場、標(biāo)識符場、數(shù)據(jù)場、校驗和場的格式都符合上述字節(jié)場的格式。
下面對幾個重要的部分詳細說明。
同步間隔場
間隔場是唯一一個不符合字節(jié)場格式的場。從節(jié)點需要檢測到至少連續(xù)11個顯性位才認為是間隔信號。
同步場
一個字節(jié),即0x55。
LIN的被保護標(biāo)識符場(PID場)
PID場定義了報文的內(nèi)容和長度。如圖,PID場分為6個標(biāo)識符位和2個ID奇偶校驗位。6個標(biāo)識符位我們稱之為ID。如果加上2個奇偶校驗位就變成PID了,即Protected ID。6個標(biāo)識符位中,標(biāo)識符后兩位為數(shù)據(jù)長度控制位。總的來看,ID的范圍是0-0x3F。注意是ID,不是PID。要區(qū)分開。這一段要講的是我們需要將LIN的ID與PID分清楚,不能混淆。
上圖中的ID4和ID5為數(shù)據(jù)長度控制位(ID4是低位)。值為00或10時,數(shù)據(jù)長度為2個字節(jié)。值為01時,數(shù)據(jù)長度為4個字節(jié)。值為11時,數(shù)據(jù)長度為8個字節(jié)。在實際應(yīng)用中,我并沒有發(fā)現(xiàn)ID4和ID5與真實的數(shù)據(jù)長度有什么關(guān)系。接觸到的LIN報文均為8個字節(jié)的數(shù)據(jù)。
P0和P1為奇偶校驗位,算法如下:
#include
所謂奇偶校驗就是在發(fā)送的每一個字節(jié)后都加上一位,使得每個字節(jié)中1的個數(shù)為奇數(shù)個或偶數(shù)個。接收方通過計算數(shù)據(jù)中1的個數(shù)是否滿足奇偶性來確定數(shù)據(jù)是否有錯。這個不用背,用的時候可以查表。
數(shù)據(jù)場
數(shù)據(jù)場主要需注意每個字節(jié)先傳輸?shù)氖亲畹臀弧<慈绻骋恍盘栭L度超過1個字節(jié),采用低位在前的方式發(fā)送(小端)。
校驗和場(checksum)
校驗和場是數(shù)據(jù)場所有字節(jié)的和的反碼。所有數(shù)據(jù)字節(jié)的和的補碼,與校驗和字節(jié)相加所得的和必須是0xFF。
算法(Classical):累加所有字節(jié)。對每次加和進行判斷,如果和大于0xFF,那么就把高八位的1,與低八位相加,其實就是低八位加1(翻轉(zhuǎn)八位和)。得到最后的結(jié)果后,取其反碼,我們就得到了最后的校驗和。參照下圖理解一下。
如何算出LIN的校驗和場
講解一下上面的圖,0x4A+0x55 = 0x9F這個沒有疑問,再加0x93 = 0x132,很明顯,超過了0xFF,分解為0x1和0x32,突出的高8位刪除,加到低8位中,0x1+0x32=0x33。再加0xE5 = 0x118,又超了,0x1+0x18=0x19。取反(Not),0xE6。
練習(xí):下圖是一些LIN總線數(shù)據(jù),以最后一組為例,2個0xFF之和為0x1FE,處理后仍然為0xFF。故8個0xFF加和之后仍為0xFF,取反碼為0x00。
一組LIN報文校驗和場的兩種類型
校驗和場通常會有兩種不同的類型,英文簡稱為CST(Checksum Type)。一種是classic checksum(LIN 1.3),一種是enhanced checksum(LIN 2.0及以上)。上文講到的校驗和場算法實際上是classic的,即只對Data(數(shù)據(jù)場)進行校驗和的計算。Enhanced Checksum在計算時需要把PID也加入到計算隊列中。
9600波特率下,ChecksumType為classic
下圖是CST(校驗和類型)為Enhanced時的報文形態(tài)。此時校驗和的計算需要包含前面的PID字節(jié)。舉例,下圖中第一幀報文,ID為0x02,PID通過查表(參考文獻5)可得到對應(yīng)的PID是0x42,0x42的反碼是0xBD。原理上一樣,只不過計算校驗和的時候,需要把PID也放進去。
PLIN-USB收到的LIN報文,很詳細
這里有個知識點一定要注意:標(biāo)識符為0x3C和0x3D的幀只能使用經(jīng)典校驗,這兩組幀是LIN的診斷幀。即LIN 2.0及以上才有的診斷幀,需要使用經(jīng)典校驗,不能將PID也加入到校驗計算序列。自己寫LIN驅(qū)動的小伙伴要格外注意。
用Kvaser收到的第一個LIN報文
LIN總線的布線組網(wǎng)
LIN網(wǎng)絡(luò)的節(jié)點數(shù)量不應(yīng)超過16個,否則節(jié)點增加將減少網(wǎng)絡(luò)阻抗,會導(dǎo)致環(huán)境條件變差,從而不能進行正常的無錯誤通訊。BOSCH汽車電氣與電子中這樣描述,“LIN總線規(guī)范中沒有規(guī)定總線允許的最大節(jié)點數(shù)。......但實際應(yīng)用中,為了保證數(shù)據(jù)傳輸?shù)目煽啃裕偩€允許的最大節(jié)點數(shù)為16個。“
實驗證明(該實驗需要考證),每增加一個節(jié)點,就會減少約3%的阻抗;網(wǎng)絡(luò)中的通訊導(dǎo)線長度應(yīng)小于或等于40m;主機節(jié)點的總線端電阻典型值是1k?,從機節(jié)點是30 k?。
LIN總線的應(yīng)用
LIN總線上可以傳輸?shù)膬深悢?shù)據(jù),信號報文和診斷報文。
診斷報文的輸送是在具有兩個保留標(biāo)識符的幀里面完成的。數(shù)據(jù)場的判讀取決于數(shù)據(jù)場本身以及通訊節(jié)點的狀態(tài)。
LIN具有調(diào)度表機制。調(diào)度表負責(zé)調(diào)度網(wǎng)絡(luò)各報文發(fā)送的順序。調(diào)度表在網(wǎng)絡(luò)系統(tǒng)設(shè)計階段確定。調(diào)度表使得LIN通信具有可預(yù)測性。主任務(wù)可以擁有多個調(diào)度表,并在不同的調(diào)度表之間切換。
LIN的描述文件叫做LDF文件,可以設(shè)置報文幀,信號和調(diào)度表等。
LIN幀的分類
LIN幀按照幀類型來分類可以分為普通幀、事件觸發(fā)幀、零星幀、診斷幀、用戶自定義幀和保留幀。
普通幀的標(biāo)識符(ID)為0到0x3B。主任務(wù)發(fā)出報文頭,一個任務(wù)響應(yīng),一個或多個任務(wù)接收。
事件觸發(fā)幀的標(biāo)識符為0到0x3B。事件觸發(fā)幀必須有一個獨立的ID,該ID可以與多個普通幀相關(guān)聯(lián)。在事件觸發(fā)幀時隙內(nèi)發(fā)送幀頭,只有當(dāng)相關(guān)聯(lián)的無條件幀內(nèi)有信號被更新時,才發(fā)送幀響應(yīng)。幀響應(yīng)的第一個數(shù)據(jù)字節(jié)等于標(biāo)識符,即響應(yīng)最多可以傳輸7個字節(jié)的數(shù)據(jù);如果沒有幀響應(yīng),幀頭被忽略。幀響應(yīng)可由多個節(jié)點發(fā)送,發(fā)生沖突時切換到“沖突解決調(diào)度表”,之后再切換回到原來的調(diào)度表。
零星幀表示共用一個時隙、在需要時才被發(fā)送的一組普通幀。標(biāo)識符為0到0x3B。
診斷幀用來傳輸診斷或配置信息,一般包含8個字節(jié)數(shù)據(jù)。0x3C為主請求幀,0x3D為從響應(yīng)幀(注意校驗方式是classic!)。診斷響應(yīng)基于ISO15765-2傳輸層和ISO14229應(yīng)用層。
診斷幀
用戶自定義幀標(biāo)識符為0x3E,可以傳輸任何用戶自定義的信息。
保留幀的標(biāo)識符為0x3F。略。
關(guān)于LIN的版本
LIN2.0新增加了下列屬性:“增強校驗和(Enhanced)”、“重新配置和診斷”、“波特率自動探測”、“響應(yīng)錯誤狀態(tài)監(jiān)控”。LIN2.0從機節(jié)點無法與LIN1.3主機節(jié)點操作。
關(guān)于睡眠
主節(jié)點可以發(fā)送一幀ID為0x3c,第一個字節(jié)為零的主請求幀來使處于工作狀態(tài)的從節(jié)點進入睡眠。這幀報文稱為睡眠指令。
從節(jié)點在接到睡眠指令之后,也可以選擇不進入睡眠狀態(tài)而繼續(xù)工作,這根據(jù)應(yīng)用層協(xié)議而定。
當(dāng)總線空閑4到10秒的時候,所有從節(jié)點必須進入睡眠狀態(tài)。(注:空閑的定義是沒有顯性位和隱性位之間的轉(zhuǎn)換。)
關(guān)于喚醒
在一個處于睡眠狀態(tài)的LIN網(wǎng)絡(luò)中,任何一個節(jié)點都可以發(fā)送喚醒信號。
喚醒信號是一個250us到5ms的顯性電平。
問題:這里的喚醒信號可否按照恒潤的教程理解為在20Kbit/s波特率下的0x0F,或在1Kbit/s波特率下的0x0F?
當(dāng)從節(jié)點發(fā)出喚醒信號之后150ms,主節(jié)點仍未發(fā)送報頭時,從節(jié)點可以再次發(fā)送喚醒信號。當(dāng)連續(xù)發(fā)送了3次喚醒信號之后如果主節(jié)點仍未發(fā)送報頭,從節(jié)點要等待1.5秒以后才可以再次發(fā)送喚醒信號。
關(guān)于LIN的基礎(chǔ)知識先介紹到這里。推薦一個帖子:《白話LIN總線》,很生動形象!
白話 LIN總線, 晚會開始啦 - 汽車電子 - 電子工程世界-論壇
www.LIN-SUBBUS.org上的消息顯示稱,LIN2.2A為最后一版非ISO的LIN總線標(biāo)準(zhǔn)。
LIN總線最新的specification(規(guī)范)將會是ISO 17987 Part 1-7 中的一部分。
編輯:hfy
-
CAN總線
+關(guān)注
關(guān)注
145文章
1952瀏覽量
130859 -
LIN總線
+關(guān)注
關(guān)注
19文章
109瀏覽量
27513 -
網(wǎng)絡(luò)協(xié)議
+關(guān)注
關(guān)注
3文章
268瀏覽量
21569
發(fā)布評論請先 登錄
相關(guān)推薦
評論