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