LIN 总线入门
目錄
一.?LIN總線概述
二.LIN總線WORK FLOW
三.LIN總線主節點和從節點
四、LIN報文幀
LIN 報文幀結構
間隔場
同步場
?PID
校驗場
?LIN報文幀類型
五.調度表
六 網絡管理
一.?LIN總線概述
LIN總線(Local Interconnect Network)是一種低成本車輛總線,主要特點如下:
1.一個主節點(master),多個從節點(slave),由于物理層的限制,一個LIN網絡最多可以連接16個節點(1主15從)
2.基于UART/SCI(Universal Asynchronous Receiver-Transmitter/SerialCommunication Interface通用異步收發器/串行通信接口)的低成本串行通信協議。
3.從節點自同步
4.確定的信號傳輸,可預估的信號傳輸時間
5.單線傳輸,成本低
6.速度可達20kbit/s
7.基于信號的應用交互
8.可預知的行為
9.可配置
10.支持傳輸層和診斷
二.LIN總線WORK FLOW
1個主節點與多個從節點連接構成一個?LIN cluster,在LIN cluster設計階段,LIN cluster 設計工具解析關聯節點兼容性文件來生成LDF文件(LIN description file). LIN cluster generator 解析LDF文件來自動生成對應LIN節點的功能(如圖中所示的Master節點和Slave 3節點)。LDF還可用于LIN總線分析/仿真工具做cluster 的debugging.
三.LIN總線主節點和從節點
主節點包括主節點和從節點的任務,其它從節點只包括一個從節點的任務。1個節點可能參與多個cluster。主節點決定總線發送哪幀報文和發送時間,從節點提供各幀報文傳輸的數據。
主節點任務基于調度表傳輸幀頭,調度表定義幀和幀之間的發送間隔,主節點應用可能使用多個不同的調度表。
四、LIN報文幀
報文幀包括幀頭(主節點任務提供)和應答(從節點任務提供)。
幀頭由幀ID、間隔場(break field)和同步場(sync field)組成。幀頭唯一地定義了這幀報文的含義。指定的從節點基于幀ID發送應答,應答包括數據場和校驗和場,如下圖所示:
從節點任務關注幀頭對應的數據,驗證校驗和并使用該數據。
LIN報文特點:
系統靈活性:新的節點可以被添加到LIN cluster,且不需要改變其它從節點的硬件和軟件
消息路由:消息的內容基于幀ID定義
廣播:基于單幀報文,多個節點可以同時接收和響應
LIN報文傳輸數據類型
信號:標量值或者字節數組打包進一幀報文的數據場,對于ID相同的報文,信號總是在數據場的相同位置。
診斷信息:診斷消息采用兩個基于保留幀ID的報文傳輸。
LIN 報文幀結構
幀頭包括同步間隔場、同步場、PID場(受保護ID)場,應答部分包括數據場與效驗和場。
發送1幀報文的時間是發送各byte的時間加上Response space和inter-byte spaces.
幀頭從間隔場的下降沿開始到PID的終止位結束。應答部分從PID的終止位開始到校驗和場的終止位結束。
inter-byte space位于前一個場終止位和下一個字節起始位之間,Response space位于PID場和數據場第一個字節之間。
在 LIN 的一幀當中,除了間隔場,后面的各段都是通過字節域的格式傳輸的。字節域包括1位起始位(Start Bit,顯性) + 8位數據位 + 1位停止位(Stop Bit,隱性),在 LIN 幀中,數據傳輸都是先發送LSB(Least Significant Bit,最低有效位),最后發送 MSB(Most Significant Bit,最高有效位)。起始位為0(顯性),終止位為1(隱性).
?間隔場
間隔場用來表示一幀報文的開始,由主節點任務生成,主值有至少13個標稱位時間,后面跟著1個間隔符,間隔符至少有1個標稱位時間長。
?同步場
同步場是值為0x55的字節域,如下圖所示?
PID
受保護的ID場PID(protected identifier field)由2個子場組成:幀ID和奇偶校驗碼,0-5 bit 為幀ID,6-7 bit 為奇偶校驗碼。
幀ID
幀ID共6個bit, 取值范圍0-63可以使用。
| 幀ID | 類型 |
| 0-59(0x3B) | 信號攜帶幀(無條件幀,事件觸發幀,偶發幀) |
| 60(0x3C)-61(0x3D) | 診斷和配置幀,只能使用classic 標準校驗 |
| 62(0x3E)-63(0x3F) | 保留幀(不能用于LIN 2.X cluster) |
奇偶檢驗碼
奇偶校驗碼基于幀ID bits 計算,如下方公式所示:
P0 = ID0 ⊕ ID1 ⊕ ID2 ⊕ ID4
P1 = ?(ID1 ⊕ ID3 ⊕ ID4 ⊕ ID5)
其中“⊕”代表“異或”運算,異或邏輯的關系是:當AB不同時,輸出1;當AB相同時,輸出0。“?”代表“取非”運算。
幀ID和奇偶校驗碼在PID的mapping
PID和幀ID對照表
數據場
一幀報文數據場字節數范圍為1個字節-8個字節,一個幀ID下的數據場字節數應由報文的發布方和所有訂閱方協商一致確定。數據采用廣播形式發送,總線上任何節點都能接收,節點的應用層如果需要該信號,則節點接收該幀的應答,如果不需要該信號,節點將忽略幀應答部分。發布和收聽由哪個節點進行完全根據應用層的需要由軟件或配置工具實現。
一個數據字節是字節域的一部分,如下圖所示:
對于超過1個字節的數據實體,采用小端傳輸的方式,數據傳輸都是LSB(Least Significant Bit,最低有效位)在第1個傳輸字節, MSB(Most Significant Bit,最高有效位)在最后1個傳輸字節。
小端傳輸一般采用Motolora格式,詳情參見以下專題:
【DBC專題】-4-DBC文件中的Signal信號字節順序Motorola和Intel介紹_汽車電子助手的博客-CSDN博客_dbc大端小端
校驗場
校驗分為標準校驗和增強型校驗,采用標準型校驗和還是增強型校驗和由主機節點管理,發布節點和各收聽節點根據幀 ID 來判斷采用哪種校驗和。標準校驗和只保護數據段,增強型校驗和同時保護數據段和幀PID段。LIN1.X?的節點只支持標準型校驗和,LIN 2.X開始支持增強型校驗和。另外,幀ID為?60(0x3C)/61(0x3D)?的診斷幀只支持標準校驗和。
LIN報文幀類型
LIN報文幀類型影響報文幀傳輸的有效前置條件,一個節點或者cluster無需支持所有的報文幀類型。一幀報文中所有未被使用和定義的bit應設置為隱性(值為1)。
無條件幀
無條件幀是信號攜帶幀,幀ID范圍從0(0x0)-59(0x3B),?無條件幀具有單一發布節點和單個或多個從節點,無論信號是否發生變化,幀頭均會被無條件應答的幀。無條件幀在主機任務分配給它的幀時隙中傳輸。總線上一旦有幀頭發送出去,必須有從機任務作應答(即無條件發送應答),如下圖所示。
幀 ID = 0x30 應答部分的發布節點為從機節點 1,收聽節點為主機節點。典型應用如從機節點 1 向主機節點報告自身某信號的狀態。
幀 ID = 0x31 應答部分的發布節點為主機節點,收聽節點為從機節點 1 和從機節點 2。典型應用如主機節點向從機節點發布信息。
幀 ID = 0x32 應答部分的發布節點為從機節點 2,收聽節點為從機節點 1。典型應用如從機節點之間彼此通信(參考一文看懂LIN總線 - 知乎)
事件觸發幀
事件觸發幀旨在避免分配過多帶寬用來輪詢多個從節點來提高低頻率事件LIN cluster響應度 。主機節點在一個幀時隙中查詢各從機節點的信號是否發生變化(事件),當存在多個發布節點時,通過沖突解決調度表來解決沖突。當從機節點信號發生變化的頻率較低時,主機任務一次次地輪詢各個信號會占用一定的帶寬。為了減小帶寬的占用,引入了事件觸發幀的概念。
與事件觸發幀關聯的多個無條件幀需要滿足以下5個條件:
1.數據場所包含的數據字節數等長
2.使用相同的效驗(LIN1.X和LIN2.X幀混用是不允許的)
3.數據場的第一個字節為該無條件幀的PID,
4.由不同的從機節點發布
5.不能與事件觸發幀處于同一個進度表中
?事件觸發幀的幀頭在分配的幀時隙傳輸,關聯的無條件幀發送方如果其中的信號已更新應僅發送應答部分,如果應答成功傳輸,該信號不再被認為待更新。
如果沒有從節點應答幀頭,其它的幀時隙保持靜默并且幀頭將被忽略。
如果在同一個幀時隙,有多個從節點對幀頭應答,沖突將會發生,主節點將會調用沖突解決調度表來依次向各個節點發送無條件幀(無條件幀只能有1個節點應答)來確定從機節點的信息狀態,每個事件觸發幀均有1個關聯沖突解決調度表。當沖突發生后,在下個幀時隙開始時主節點會自動跳轉到沖突解決調度表。
沖突解決調度表應包含所有的相關聯無條件幀,此外還可能會有其它無條件幀,這些無條件幀可能數據長度不同。
在沖突解決調度表被調用一次后,主節點應切換回之前的調度表。
?舉例如下圖:1個調度表僅包含1個事件觸發幀(ID=0x10).該事件觸發幀關聯2個無條件幀:ID=0x11來自slave 1,另一個ID=0x12來自slave 2,沖突解決調度表包含以上2個無條件幀。
事件觸發幀的典型應用就是中控鎖系統監控四個車門的開關情況。與其利用無條件幀每個車門輪詢一遍,不如同時對四個車門進行詢問,如果其中一個車門打開(事件發生),該車門要對詢問作應答,即事件觸發。這樣做可以減小帶寬,但同時會導致兩種現象,其一就是沒有車門被打開,即無節點應答——事件觸發幀允許一幀中只有幀頭無應答;另外一種情況就是沖突,即同時有大于等于兩個車門被打開,對于同時應答的問題——事件觸發幀允許兩個以上的節點對幀頭作應答而不視為錯誤。當發生沖突時,主機節點重新輪詢,這樣會增加一些響應時間,但由于事件觸發幀本身就用來處理低概率事件,總的來說還是節省了帶寬。(參考LIN Bus – 第22條軍規)
偶發幀
偶發幀是主機節點在同一幀時隙中當自身信號發生變化時向總線啟動發送的幀。當存在多個關聯的應答信號變化時,通過事先設定的優先級來仲裁。偶發幀主要用于主機發送不經常變化的信息,可以理解為主機用的事件觸發幀。與事件觸發幀一樣,偶發幀的應答也關聯了一組無條件幀。
偶發幀的傳輸可能出現?3?種狀況:
1.當關聯的無條件幀沒有信號發生變化時,該時隙保持沉默,主機節點連幀頭都不需要發送;
2.當其中一個關聯的無條件幀包含的信號發生了變化, 則發送該關聯的無條件幀的應答部分;
3.如果有兩個或以上關聯的無條件幀包含的信號發生了變化,則按照事先規定好的優先級,優先級較高的關聯的無條件幀獲得發送權,優先級較低的要等到下一個偶發幀的幀頭到來時才能發送應答。由于主機節點是唯一的發布節點,所以主機節點事先就知道各個關聯信號的優先級別,這樣在傳輸時不會產生沖突。
引入偶發幀和事件觸發幀是為了讓LIN總線的通信機制更加靈活,只在信號變化或未變化時傳輸消息可有效提高總線的通信效率。?(參考LIN Bus – 第22條軍規)
診斷幀
診斷幀包括主機請求幀和從機應答幀,主要用于配置、識別和診斷。診斷基于?ISO 15765-2?傳輸標準和?ISO 14229?UDS?(Uniform?Diagnostic?Services)標準。主機請求幀的幀 ID =?0x3C,應答部分的發布節點為主機節點,一般用于診斷請求或配置從機;從機應答幀的幀 ID =?0x3D, 應答部分的發布節點為從機節點,一般為診斷應答。數據段規定為?8?個字節,一律采用標準型校驗和。?(參考LIN Bus – 第22條軍規)
五.調度表
以下調度表內容來自https://www.csdn.net/tags/OtTaMg1sMDg2MTctYmxvZwO0O0OO0O0O.html
調度表規定總線上幀的傳輸次序以及各幀在總線上的傳輸時間。
進度表位于主機節點,主機任務根據應用層需要進行調度。
進度表可以有多個,一般情況下,輪到某個進度表執行的時候,從該進度表規定的入口處開始順序執行,到進度表的最后一個幀時,如果沒有新的進度表啟動,則返回到當前的進度表第一個幀循環執行;也有可能在執行某個進度表當中發生中斷,執行另一個進度表后再返回,如事件觸發幀的沖突解決過程就是一個典型的例子,如下圖?所示。
?
??進度表除規定了幀 ID 的傳輸次序外,還規定了幀時隙(Frame Slot)的大小。幀時隙是進度表規定的一個幀的幀頭起始到下一個的幀的幀頭起始的時間。每個幀的幀時隙都可以不同,一個幀時隙對應了進度表的一個入口,如圖所示,其中?i = 1~8。
?其中T?Frame_Maximum?為幀在總線上傳輸的最大時間?。?抖動(Jitter)為幀的同步間隔段的下降沿與幀時隙起始時刻相差的時間?。?時基(Time Base)為LIN子網的最小計時單位,通常設定為 5ms或 10ms。幀時隙必須為時基的整數倍?,?并且起始于時基的開始時刻(稱為時基的節拍(Tick)),切換到另外一個進度表時一定要等到當前幀時隙的結束。
由于調度表規定了幀的發送順序和幀時隙,使得LIN通信具有可預測性。
六 網絡管理
一、喚醒
? ? ? ? ?當總線處于休眠狀態時,主/從機節點都可以向總線上發送喚醒信號,喚醒信號持續 250μs~5ms。其余節點(除發送喚醒信號以外的節點)以大于 150μs 為閾值判定喚醒信號。每個從機節點必須在喚醒信號顯性脈沖的結束處算起 100ms 以內準備接收來自主機的命令(幀頭);主機節點也必須被喚醒,100ms 之內主機節點發送幀頭開始通信。主機節點的同步間隔段也可以充當喚醒信號,由于從機節點需要作初始化處理,因此主機節點所發的這個幀有可能不會被正常接收。
?
? ? ? ? 如果節點發送出喚醒信號后,在 150ms~250ms 之內沒有接收到總線上的任何命令(幀頭),則可以重新發送一次喚醒信號。喚醒信號最多可以發送 3 次,3 次之后,必須等待至少 1.5s 之后才可以再次發送喚醒信號。
?
二、休眠?
總線可以在兩種情況下進入休眠:
? ? ? ? (1) 利用診斷幀中的主機請求幀 0x3C 作休眠命令,要求數據段的第一個字節為 0x00,其余字節為 0xFF。 休眠命令由主機節點發出,總線上的從機節點只判斷數據段的第一個字節,其余字節忽略。從機節點在接收到休眠命令后,不一定要進入低功耗模式,根據應用層需要設置。
? ? ? ? ?(2) 當總線靜默(沒有顯性和隱性電平之間的切換)4s~10s 時,節點自動進入休眠狀態。
?以上網絡管理內容來自LIN總線協議詳解5(網絡管理)_dailbing的博客-CSDN博客_lin協議 休眠喚醒
參考文獻:
LIN Specification Package Revision 2.1
【DBC專題】-4-DBC文件中的Signal信號字節順序Motorola和Intel介紹_汽車電子助手的博客-CSDN博客_dbc大端小端
LIN Bus – 第22條軍規
一文看懂LIN總線 - 知乎
https://www.csdn.net/tags/OtTaMg1sMDg2MTctYmxvZwO0O0OO0O0O.html
LIN總線協議詳解5(網絡管理)_dailbing的博客-CSDN博客_lin協議 休眠喚醒
總結
- 上一篇: Lin协议开发流程
- 下一篇: 07.第八章、质量管理