LIN總線簡介
背景
本地互聯網絡(LIN)協議基於Volvo衍生公司Volcano通信技術公司(VCT)開發的Volcano-Lite技術。因為其他汽車企業也對CAN的低成本替代協議感興趣,所以建立了LIN辛迪加聯合組織。該辛迪加組織於1999年中發布了LIN協議(1.0)。此協議在2000年經歷了兩次更新。2002年11月,發布了LIN 1.3,主要是對物理層進行了變動。最新的版本LIN 2.0發布於2003年。LIN 2.0有一些重大的改變,同時引入了一些新特性(例如診斷功能)。這些改變的主要目標是簡化量產從節點的使用。
應用領域
LIN是CAN和SAE J1850協議的補充性協議,針對時間要求不高或不需要精確容錯的應用(因為LIN沒有CAN協議那樣可靠)。LIN的目標是易於使用,作為CAN協議的低成本替代品。LIN在車輛中可以使用的場合包括車窗升降器、后視鏡、雨刷和雨量傳感器。
協議簡介
按照OSI模型,LIN涉及整個網絡協議棧。規范涵蓋物理層、數據鏈路層、網絡層和應用層。
- LIN物理層基於ISO 9141(K-line)
- 主從式結構
- 單線加上地線
- 時間觸發的調度
- 1-20 kb/s
- 顯性/隱性位
- 按字節的串行通信
- 線長不得超過40米
- 標准由LIN組織(http://www.lin-subbus.org)定義
LIN網絡通過LDF(LIN描述文件)進行描述,LDF包含關於幀和信號的信息。這個文件同時用於主節點和從節點中的軟件創建。
主節點為控制方,確保以正確的時間間隔和周期發送數據幀,並且每個幀都在總線上獲得足夠的時間片。這種時間調度方法基於下載到主節點軟件的LCF(LIN配置文件)。
所有數據都通過一個包含幀頭、響應和一些響應間隔的幀進行發送,因此從節點有時間進行應答。每個幀都發送到LCF確定的數據幀槽中。
主節點發送包含幀頭的幀時,創建新的報文。然后從節點根據主節點發送的幀頭在幀中填充數據。

圖3:LIN幀的例子
有三種不同的方法可以在總線上傳輸幀:無條件幀、事件觸發幀和零星幀。
無條件幀
這是“常規”類型的LIN通信。主節點在設置好的幀槽中發送一個幀頭,然后指定的從節點為該幀填充數據。
事件觸發幀
這種方法的目的是在不令總線上幀過載的情況下從從節點接受極可能多的信息。可以在事件觸發幀中填充來自多個從節點的數據。從節點僅在值發生改變時才更新事件觸發幀中的數據。如果多個從節點想要更新幀中的數據,會發生沖突。這種情況下,主節點應向每個從節點發送無條件幀(從優先級最高的節點開始)。
零星幀
這種方法為本來靜態的LIN協議提供一些動態行為。僅當主節點知道從節點中信號發生更新時,才發送零星幀的幀頭。通常,主節點填充幀本身的數據字節,從節點是信息的接收方。
字節字段的定義
協議面向字節,這表示數據的發送方式是每次一個字節。一個字節字段包含一個起始位(顯性),8個數據位和一個結束位(隱性)。數據位的發送方式為LSB優先(最低有效位優先)。數據傳輸可以划分成一個主節點任務和一個從節點任務。

圖4:字節字段的結構
主節點任務
主節點發送的幀(頭)包含三個部分:同步間隔字段、同步字節字段和一個標識符字段。每個部分都以一個起始位開始,以一個結束位結束。
同步間隔字段表示報文的開始,至少13個顯性位(包括起始位)。同步間隔以一個“間隔分隔符”結束,該分隔符至少包含一個隱性位。

圖5:同步間隔字段
發送同步字節字段來確定兩個下降沿之間的時間,從而確定主節點使用的傳輸速率。位模式是0x55(01010101,最大下降沿數量)。這對於兼容量產從節點尤其有用。

圖6:同步字節字段
標識符字段包含6位長的標識符和兩個奇偶校驗位。6位標識符包含關於發送方和接收方的信息,以及響應中要求的字節數。奇偶校驗位如下進行計算:校驗位P0是ID0、ID1、ID2和ID4之間進行邏輯“或”運算的結果。校驗位P1是ID1、ID3、ID4和ID5之間邏輯“或”運算后在進行反轉的結果。

圖7:標識符字段

圖9:幀長取決於標識符
根據主節點發送的標識符的兩個MSB(最高有效位),從節點的響應(數據字段)可以是2、4或8字節長。在LIN 2.0中才提供這個能力,以前的版本只有8字節的靜態長度。

圖8:響應數據字段
從節點任務
從節點等待同步間隔字段,然后通過同步字節字段開始主從節點之間的同步。根據主節點發送的標識符,從節點將進行接收、發送或什么都不做。應該進行發送的從節點發送主節點請求的字節數,然后以一個檢驗和字段結束傳輸。
有兩種不同類型的檢驗和。LIN 1.3中使用傳統的檢驗和,包含報文中所有數據字節(8個字節)的反轉八位和。LIN 2.0中使用的新檢驗和在檢驗和計算中加入了保護的標識符。反轉八位和與modulo-256不同。每次所得和大於256時,就減去255。例如,對於240+32=272,和為272,然后執行272-255=17,得到的檢驗和為17。
為了節約電力,總線4秒鍾沒有活動或者主節點發送休眠命令后,從節點將進入休眠模式。通過總線上的顯性位(所有節點都可創建)把從節點從休眠模式中喚醒。
診斷
LIN 2.0中的一項新功能是可以從主從節點讀出診斷信息。為了這個目的,使用了兩個幀標識符。這兩個幀標識符都需要8個數據字節:主節點用標識符60(0x3c)請求幀,從節點用標識符61(0x3d)進行響應。診斷幀的第一個字節是NAD(診斷用節點地址),這是一個字節長的診斷用節點地址。值范圍從1到127,0被保留,128到255可以自由使用。有三種診斷方法:基於信號的診斷、用戶定義的診斷或使用診斷傳輸層。
基於信號的診斷
基於信號的診斷是最簡單的方法,在普通幀中使用標准信號,有以下特性:
- 從節點上負載較低
- 標准化的概念
- 靜態,沒有靈活性
用戶定義的診斷
用戶定義的診斷可用來滿足特定設備的要求,但是這同時表示它不能用作通用目的。這種方法使用128到255范圍的NAD。
診斷傳輸層
對於基於CAN的系統(使用ISO診斷)之上構建的LIN網絡,可以使用這種方法。此方法使用NAD 1到127。有以下特性:
- 主設備上負載較低
- 為LIN從節點提供ISO診斷
- 用於更復雜和強大的LIN節點
診斷幀被稱為PDU(包數據單元),以包含特定節點地址的NAD開始。后面是PCI(協議控制信息),用於處理流控制。如果PCI類型是單幀(SF),則整個診斷請求命令將放在單個PDU中。如果PCI類型是第一幀(FF),則下一個字節(LEN)將說明后面的字節數。沒有放入第一幀的數據字節將在后續幀中發送,PCI類型是后續幀(CF)。服務標識符(SID)指定請求以及后續的數據字節。
NAD |
PCI |
SID |
Data1 |
Data2 |
Data3 |
Data4 |
Data5 |
圖10:請求幀PCI類型 = SF
NAD |
PCI |
LEN |
SID |
Data1 |
Data2 |
Data3 |
Data4 |
圖11:請求幀PCI類型 = FF
NAD |
PCI |
Data |
Data2 |
Data3 |
Data4 |
Data5 |
Data6 |
圖12:請求幀PCI類型 = CF
診斷響應幀以類似的方式構建。響應服務標識符(RSID)指定響應的內容。
NAD |
PCI |
RSID |
Data1 |
Data2 |
Data3 |
Data4 |
Data5 |
圖13:響應幀PCI類型 = SF
NAD |
PCI |
LEN |
RSID |
Data1 |
Data2 |
Data3 |
Data4 |
圖14:響應幀PCI類型 = FF
與老版本(LIN 1.3)兼容
LIN 2.0主節點與LIN 1.3從節點向后兼容(有限制)。LIN 2.0和LIN 1.3從節點可以在網絡中並存,但是必須避免一些新特性(例如改進的檢驗和自動波特率檢測)。