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