簡介
本地互聯網絡 LIN(Local Interconnect Network)總線協議,是基于UART/SCI(Universal Asynchronous Receiver-Transmitter/SerialCommunication Interface通用異步收發器/串行通信接口)的低成本串行通信協議。在車載電子系統中,相對于CAN總線而言,LIN總線協議較為簡單,對單片機的要求也并不高,基本的串口就可以實現,成本較低,可作為CAN總線的輔助總線。LIN總線廣泛應用于車門、車窗、車燈以及中控鎖等車身控制領域。
表x LIN總線協議大事記
最新的標準:
- ISO 17897-2016/2019
- SAE J2602-1_202110: LIN Network for Vehicle Applications - SAE International
- ISO 17987-1,Part1: General information and use case definition
- ISO 17987-2,Part2: Transport protocol and network layer services
- ISO 17987-3,Part3: Protocol specification
- ISO 17987-4,Part4: Electrical Physical Layer (EPL) specification 12V/24V
- ISO 17987-5,Part5: Application Programmers Interface (API)
- ISO 17987-6,Part6: Protocol conformance test specification
- ISO 17987-7,Part7: Electrical Physical Layer (EPL) conformance test specification
- ISO 17987-8,Part 8: Electrical physical layer (EPL) specification: LIN over DC powerline (DC-LIN)
LIN總線有如下特點:
- 單主機同多從機通信,無需仲裁機制,所有通信過程由主機主導;
- 低成本,基于通用UART接口,幾乎所有的微控制器都具備LIN必需的硬件;
- 單線信號傳輸,通信協議簡單;
- LIN具有可預測的電磁兼容性能,為了限制EMC的強度,LIN協議規定了最大傳輸速率為20kbps;
- LIN總線提供信號的配置、處理、識別和診斷功能。
LIN總線在汽車中一般不獨立存在,通常與上層CAN網絡相連,形成CAN-LIN
網關節點,通常汽車電子中整車廠會規定該“網關節點”的控制器歸屬。如圖x所示。
圖x CAN-LIN節點在CAN網絡中的角色
LIN網絡內部包括LIN Master Node(主機節點)和LIN Slave Node(從機節點),其中,主機節點可以運行一個主機任務和一個從機任務,而從機節點上僅能運行一個從機任務。整個網絡中,必須包含一個主機節點,和最多15個從機節點。如圖x所示。
圖x LIN網絡中的主機和從機
注意:LIN協議對任務進行建模,約定主機任務僅為發送幀首,從機節點處理應答數據(發送或接收)。所以,從機節點僅實現發送數據和接收數據的操作,故僅運行從機任務;主機節點的主機任務發送幀首后,還可交由主機節點的從機任務發送或者接收應答任務。其中,主機任務發送的幀ID,就包含了數據應由哪個節點發送上線、哪個節點捕獲數據的約定。由此,還可以設想一種只有主機任務的主機節點,但此時意義不大,主機任務協調網絡中的各節點,最終都是為了將本機的數據部署至網絡節點或從網絡節點中取數,如果將主機節點的主機任務同自己的從機任務分類,就需要這兩個任務做好同步,如此,還不如放在同一個節點上方便管理。
LIN信號的物理層
LIN總線僅使用一根信號線,信號線上傳輸邏輯電平信號,其中“0”為顯性電平、“1”為隱性電平(顯隱性與CAN總線是相同的)。傳輸信號在總線上實行“線-與”:
- 當總線有至少一個節點發送顯性電平時,總線呈現顯性電平;
- 所有節點均發送隱性電平或者不發送信息時,總線呈隱性電平,即顯性電平起著主導作用。
實際上,在使用LIN總線時,相對于微控制器上集成的LIN協議控制器(LIN通信引擎外設,例如LINFlexD),還需要搭配一個LIN收發器芯片,將LIN協議控制器的Tx和Rx信號,同LIN總線上的顯性信號和隱形信號進行轉換。如圖x所示。
圖x LIN協議控制器和和LIN收發器
LIN協議控制器
協議控制器主體是一個基于UART/SCI的通信控制器,以半雙工方式工作。協議控制器既可以使用專用模塊實現,也可以用“UART/SCI+定時器”實現:
- 發送數據時,LIN協議控制器把數據以UART的數據格式(8數據位,1停止位,無校驗位)送往LIN總線收發器;
- 接收數據時,LIN總線收發器捕獲來自總線的串行信號流(顯性隱性數據),轉換成UART的數據格式,送回LIN協議控制器。
LIN協議控制器需要產生和識別幀的同步間隔段
。同步間隔段包含一段長度至少為13位的低電平,再加上一段長度至少為1位的高電平的同步間隔隔離段
。產生和識別同步間隔段的機制,雖然增加了硬件設計的復雜度,但是從接收方的角度看,這樣做能把同步間隔段與普通的數據字節區別開,確保了同步信息的準確性。
協議控制器需要能夠發送和捕獲喚醒信號:
- 協議控制器要能執行本地喚醒(Local Wakeup)。當需要喚醒總線時,協議控制器通過總線收發器向 LIN 總線送出喚醒信號。
- 協議控制器要能識別總線喚醒(Bus Wakeup)。當收到來自 LIN 總線的喚醒信號時,協議控制器能夠正確動作,進入規定的通信狀態。
LIN總線收發器
總線收發器的主體是一個雙向工作的電平轉換器,完成協議控制器的高-低電平與LIN總線的隱性-顯性電平之間的轉換。
LIN規范規定:LIN總線的電平,以總線收發器的供電作為參考電平。為了克服電源波動和參考點漂移的影響,LIN規范要求總線收發器要能承受±11.5%的電源波動和參考點電平波動,并且能承受電源和參考點之間8%的電位差波動。收發雙方的電平鑒別門限也設置了較大的冗余度。
總線收發器還包括一些附加的功能,例如總線阻抗匹配、壓擺率(Slew-rate)控制等。
此外,LIN規范要求總線收發器具備這樣一種特性:本地節點掉電或工作異常時,不能影響總線上其他節點工作。
一個典型的總線收發器應用電路,如圖x所示。
圖x EVB-YTM32B1M-Q144開發板上的LIN收發器電路
LIN通信協議
LIN的主機和從機
LIN報文幀由幀頭(Hearder)與應答(Response)兩部分組成。如下圖所示,傳輸過程中:
- 幀頭總是由主機任務發出。幀頭包括:一個幀間隔段、一個同步段,以及一個幀標識號
- 從機任務接收幀頭,作出解析,決定:發送應答數據?接收來自主機或別的從機的應答數據?不回復?
圖x LIN主機和從機的交互
注意,圖x中描述的是主機任務和從機任務,而不是節點。通常情況下,從機節點中僅執行從機任務,根據主機任務發出的幀頭做出響應,發送數據和接收數據。但主機節點是包含主機任務和從機任務,主機節點把發送幀頭的工作歸到主機任務上,把數據通信的工作歸到從機任務上。即,當主機節點向從機節點送數時,先由主機節點的主機任務發出幀頭,再由主機節點的從機任務送出數據;當主機節點從從機節點要數時,先由主機節點的主機任務發出幀頭,再由主機節點的從機任務從總線上捕獲數據。由此,也可以將主機任務別稱為“幀頭任務”,對應從機任務為“數據任務”。
LIN報文幀結構
LIN報文分為幀頭和應答兩個階段,其中,由主機發送的幀頭內部包含:同步間隔段、同步段和受保護ID段;主機發送或者從機發送的應答段內部包含:最多8個字節的數據段和校驗和。
圖x LIN通信幀結構
還需要注意的是,幀頭和應答中間是允許有一定的時間間隔的,用于給從機任務捕獲和解析幀頭,并準備應答數據留足的時間。如圖x所示。
圖x LIN通信幀的響應延遲
在LINFlexD引擎中,還可以由軟件配置從幀頭結束到應答開始中間的間隔時間容限,判定超時事件。
同步間隔段(Break field)
注意 圖x LIN通信幀結構 中,幀的所有間隙均為隱性電平“1”,總線空閑時,也是保持隱性電平“1”的狀態,并且LIN通信幀中,除了同步間隔段外,任何其它字段都不會出現多于9位的顯性電平。同步間隔段由至少13位(通常選擇13位或14位)顯性電平組成,用于將不同的通信幀相互分隔開來。同步間隔段就用來表示一幀的開始。另外,同步間隔段的間隔符(Break Delimiter) 至少為1位隱性電平。如圖x所示。
圖x 同步間隔段與同步間隔段隔離符
同步段(Sync field)
在介紹同步段之前,先介紹一下字節段結構(Byte Field Structure)的概念,字節段結構包括:1位起始位(Start Bit,顯性)+ 8位數據位 + 1位停止位(Stop Bit,隱性),這是一種標準UART數據傳輸格式。在 LIN 的一幀當中,除了同步間隔段,后面的各段都是通過字節域的格式傳輸的。LIN 幀中的數據傳輸都是先發送LSB(Least Significant Bit,最低有效位),最后發送 MSB(Most Significant Bit,最高有效位)。LIN總線使用字節0x55(01010101b)進行同步,在從機節點上可以采用非高精度時鐘,如果存在偏差,可以通過同步段來調整。同步段中的就是一個值為0x55
的字節。
圖x LIN通信幀中的同步段
受保護的幀ID(Protected Identifier field)
受保護的幀ID中包含兩部分:6個比特的ID編號和2比特的奇偶校驗位。
圖x LIN通信幀中的PID段
其中,幀ID的取值范圍為0x00~0x3F,共64個,幀ID標識了幀的類別,從機任務會根據幀頭ID作出反應(接收/發送/忽略應答)。其中,校驗位P0和P1的計算方式如下:
P0 = ID0 xor ID1 xor ID2 xor ID4
P1 = not ( ID1 xor ID3 xor ID4 xor ID5 )
特別注意,LIN總線的ID同CAN總線相似,標識的是消息的類型,并不是從機節點的地址(例如I2C總線)。LIN總線根據幀ID的不同,將報文分為信號攜帶幀
、診斷幀
、保留幀
。此為應用層的約定,此處暫不展開。
應答數據段(Data field)
數據段包含1-8個字節。LIN2.x規定,可傳輸的LIN字節數為2,4,8,并不是1-8內任意一個數字。一般而言,車內會選擇統一字節數,最常用的是每幀傳遞8個字節。
圖x LIN通信幀中的數據段
與CAN總線(包括DLC字段)不同,LIN協議中并沒有規定數據長度的信息,數據內容和長度均由應用系統的設計者根據幀ID提前設計。總線上的數據以廣播形式發出,任何節點都可收到,但并非對每個節點有用。具體到發布與接聽是由哪個節點完成,這取決于應用層的配置。通常情況下,幀的應答,總線上只存在一個發布節點,否則會出現錯誤。(事件觸發幀例外,它可能出現0,1和多個發布節點。)
校驗和段(Checksum field)
效驗和段是為了對幀傳輸的內容進行效驗。校驗和段的1個字節的值,是將本幀數據段和PID段的值按照8位求和,再取反得到的。
效驗分為標準型效驗與增強型效驗:
- 經典款校驗和(Classical Checksum)僅計算數據段的部分,適用于LIN v1.3及更早期的版本。
- 增強型校驗和(Enhanced Checksum)計算數據段和PID部分,適用于LIN v2.0及以后的版本。
采用標準型還是增強型是由主機節點管理,發布節點和收聽節點根據幀ID來判斷采用哪種效驗和。
在YTM32B1ME微控制器的手冊中描述LINFlexD發送幀頭時,可以在寄存器LINFlexD_BIDR[CCS]
中選擇,將發送或者檢測增強型校驗和還是經典款校驗和。
LIN總線的波形
圖x LIN總線上的波形
上圖展示了LIN總線的通訊方式,可以看出,無論什么時候幀頭都是由主機節點發布,當主機節點要發布數據時,整個幀全部由主機節點發送。當從機節點要發布數據時,幀頭部分由主機節點發布,應答部分由從機節點發布,這樣,其余節點都能收到完整的報文。所以,LIN總線的通訊都是由主機節點發起,只要合理的規定好每個節點的配置,這樣就不會存在總線沖突的情況(事件觸發幀沖突時采用沖突解決進度表)。
評論
查看更多