LIN匯流排基礎知識(一)
來自專欄汽車CAN匯流排6 人贊了文章
LIN匯流排是目前常見的一種A類網路協議。LIN的全稱為Local Interconnect Network。LIN主要功能是為CAN匯流排網路提供輔助功能,應用場合有智能感測節點、自動車窗節點等。目前最新的LIN協議是LIN2.2,制定於2010年。LIN的一大優點是成本低,但其最大傳輸速率為20Kbps。建議的通信速率如下,低速2400bps,中速9600bps,高速19200bps。根據OSI參考模型,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 的位元組場格式就是通常的「SCI」或「UART」串列數據格式(N81編碼)。即每個位元組場的長度是10個位定時(BIT TIME):1bit起始位+8bits數據位+1bit停止位。起始位(START BIT)是一個「顯性」位,它標誌著位元組場的開始。接著是8個數據位,首先發送最低位。停止位(STOP BIT)是一個「隱性」位,它標誌著位元組場的結束。LIN報文幀中的同步場、標識符場、數據場、校驗和場的格式都符合上述位元組場的格式。
下面對幾個重要的部分詳細說明。
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個位元組。P0和P1為奇偶校驗位,演算法如下:
#include <stdio.h>#include <windows.h>int main(){ short p0=0,p1=0; short LIN_ID=0x22,PID=0x00; p0 = (LIN_ID & 0x01) ^ ((LIN_ID & 0x02) >> 1) ^ ((LIN_ID & 0x04) >> 2) ^ ((LIN_ID & 0x10) >> 4); //按位異或 p0 = p0 & 0x01; p1 = ~(((LIN_ID & 0x02) >> 1) ^ ((LIN_ID & 0x08) >> 3) ^ ((LIN_ID & 0x10) >> 4) ^ ((LIN_ID & 0x20) >> 5)); p1 = p1 & 0x01; PID = (p1 << 7) | (p0 << 6) | LIN_ID; printf("p0=%#x,p1=%#x,PID=%#X
",p0,p1,PID); system("pause"); return 0;}
所謂奇偶校驗就是在發送的每一個位元組後都加上一位,使得每個位元組中1的個數為奇數個或偶數個。接收方通過計算數據中1的個數是否滿足奇偶性來確定數據是否有錯。這個不用背,用的時候可以查表。
數據場
數據場主要需注意每個位元組先傳輸的是最低位。
校驗和場(checksum)
校驗和場是數據場所有位元組的和的反碼。所有數據位元組的和的補碼,與校驗和位元組相加所得的和必須是0xFF。
演算法:累加所有位元組。對和進行判斷,如果和大於0xFF,那麼去掉最高位的1,其餘部分加1(此說法可能有出入,需要考證)。得到最後的結果後,取其反碼,我們就得到了最後的校驗和。參照下圖理解一下。
練習:下圖是一些LIN匯流排數據,以最後一組為例,2個0xFF之和為0x1FE,處理後仍然為0xFF。故8個0xFF加和之後仍為0xFF,取反碼為0x00。
校驗和場的兩種類型
校驗和場通常會有兩種不同的類型,英文簡稱為CST(Checksum Type)。一種是classic,一種是Enhanced。上文講到的校驗和場演算法實際上是classic的,即只對Data(數據場)進行校驗和的計算。
下圖是CST為Enhanced時的報文形態。此時校驗和的計算需要包含前面的PID位元組。舉例,下圖中第一幀報文,ID為0x02,PID通過查表(參考文獻5)可得到對應的PID是0x42,0x42的反碼是0xBD。原理上一樣,只不過計算校驗和的時候,需要把PID也放進去。
LIN匯流排的布線組網
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為從響應幀。
用戶自定義幀標識符為0x3E,可以傳輸任何用戶自定義的信息。
保留幀的標識符為0x3F。略。
關於LIN的版本
LIN2.0新增加了下列屬性:「增強校驗和(Enhanced)」、「重新配置和診斷」、「波特率自動探測」、「響應錯誤狀態監控」。LIN2.0從機節點無法與LIN1.3主機節點操作。
關於LIN的基礎知識先介紹到這裡。推薦一個帖子:《白話LIN匯流排》,很生動形象!
白話 LIN匯流排, 晚會開始啦 - 汽車電子 - 電子工程世界-論壇
思考題:
1.對於LIN而言,邏輯0時電平為多少,邏輯1時電平為多少?
2.LIN的報文頭由哪三個部分組成?
3.如何計算classic類型的校驗和場?
參考資料:
1.汽車協議LIN匯流排最新中文版_百度文庫
2.LIN匯流排基本知識及LIN匯流排分析控制工具_圖文_百度文庫
3.【圖文】LIN匯流排培訓_百度文庫
4.說一說LIN匯流排
5.http://www.microchip.com.cn/newcommunity/Uploads/Download/Library/00002059a_cn.pdf
6.Lin匯流排應用層代碼 - CSDN博客
7.LIN匯流排:汽車氛圍燈控制 - CSDN博客
8.LIN匯流排開發:STM32F0 TJA1020
9.lin介面_圖文_百度文庫
10.LIN 主節點用串口實現_圖文_百度文庫
11.【圖文】第11章LIN匯流排收發器TJA1020_百度文庫
12.【圖文】LIN匯流排技術原理基礎_百度文庫
13.【圖文】LIN2.1_快速入門_百度文庫
推薦閱讀:
※如何理解ISO15765-4協議——一個OBD診斷協議
※UDS診斷入門
※汽車匯流排診斷——高速CAN匯流排(一)
※基於CAN匯流排實現的UDS診斷(DoCAN)