細說汽車電子通信總線之LIN總線協議詳解

內容提要

1. LIN總線概述

1.1 LIN總線特點及發展歷史

1.2 LIN 總線協議的物理層(收發器)

2. LIN總線報文幀結構(Message Frame Structure)詳解

2.1 LIN 總線報文幀的字節場與字節間隔

2.2 LIN 總線報文幀之間隔場(Break Field)

2.3 LIN 總線報文幀之同步場(Sync Field)

2.4 LIN 總線報文幀之標識符場(PID Field)

2.5 LIN 總線報文幀之數據場(Data Field)

2.6 LIN 總線報文幀之校驗和場(Checksum Field)

2.7 LIN 總線報文幀之幀長度

2.8 LIN 總線報文幀之調度表(Schedule Table)

2.9 LIN 總線報文幀之偏移(jitter)

3. LIN總線報文幀類型(Frame Type)詳解

3.1 LIN總線的無條件幀(Unconditional Frame)

3.2 LIN總線的事件幀(Event Frame)

3.3 LIN總線的零星幀(Sporadic Frame)

3.4 LIN總線的診斷幀(Diagnostic Frames)

3.5 保留幀(Reserved Frame)

4. LIN總線網絡拓撲結構與網絡管理

4.1 LIN 總線的主機任務與從機任務

4.2 LIN 2.1 .vs LIN 1.3節點模型

4.3 LIN總線的網絡管理

總結

 

1. LIN總線概述

1.1 LIN總線特點及發展歷史

LIN (Local Interconnect Network,局部互聯網絡總線是針對汽車分佈式電子系統而定義的一種低成本的串行通訊網絡,是對控制器區域網絡(CAN)等其它汽車多路網絡的一種補充,適用於對網絡的帶寬、性能或容錯功能沒有過高要求的應用。LIN總線是基於SCI(UART)數據格式,採用單主控制器/多從設備的模式,是UART中的一種特殊情況。

LIN總線有如下特點:

  • 串行通信:線間干擾小,節省線束,傳輸距離長;

  • 單線傳輸:增強的ISO9141 (ISO 15765-1) , 總線電壓基於VBAT;

  •  最高速率20Kbit/s:滿足車身上大部分的應用需求,常用波特率爲9600bit/s、19200bit/s;

  • 單主多從結構:無需仲裁;

  • 基於通用UART/SCI的低成本接口硬件:幾乎所有MCU有具備LIN總線的硬件基礎;

  • 從節點無須晶振或陶瓷震盪器就可以實現同步:大幅度降低成本;

  • 一條總線最多可連接16個節點:由總線電氣特性決定;

  • 支持診斷功能:支持UDS服務;

LIN發展歷史如下:

1998 的十月,在德國Baden Baden召開的汽車電子會議上LIN 總線的設想首次被提出

1999 LIN 聯盟成立(最初的成員有 奧迪, 寶馬, 克萊斯勒, 摩托羅拉, 博世, 大衆和沃爾沃)

2000 LIN 聯盟開始接收第一批成員

2001 第一輛使用 LIN 總線汽車下線

2002 LIN 規範V.1.3版本發佈

2003 LIN 規範V.2.0 版本發佈

2004 LIN 總線一致性測試規範發佈

2006 LIN 標準規範 V.2.1版發佈

2010 LIN 規範包Specification Package Revision 2.2A 發佈

1.2 LIN 總線協議的物理層(收發器)

LIN總線協議規定其物理層收發器(transceiver)功能爲將MCU SCI串行通信模塊輸出的TX和RX的TTL/CMOS電平信號轉換爲LIN總線的顯性(Dominant, 邏輯“0”,電氣特性爲GND(0V))和隱性電平(Recessive, 邏輯“1”,電氣特性爲VBAT(8~18V)):

從而提高了通信時信號傳輸的抗干擾門限,保證其在強幹擾的汽車電子環境中依然可以正常工作。

LIN總線協議還進一步規定其物理層收發器在LIN Master和Slave節點的終端電路設計要求:

LIN Master節點:需要一個上拉到VBAT的上拉電阻和防反接二極管串接在VBAT與LIN總線上,同時還需一個並聯到地的負載電容;

LIN Slave節點:只需要需一個並聯到地的負載電容接口;

Tips:由以上介紹可知,LIN總線的物理層收發器將全雙工的MCU SCI轉換成了半雙工的LIN總線信號進行傳輸;

常見的LIN收發器有NXP的TJA1021/ TJA1022/TJA1024/TJA1027/TJA1029等,其功能特性比較如下表;

不同的LIN收發器,其集成的LIN通道數、EMC/ESD特性以及低功耗喚醒特性有所不同:

Tips:市面上很多USB轉LIN的工具(比如PEAK LIN),其內部未集成DC-DC將USB的5V電源升壓到LIN收發器工作需要的12V電壓,所以使用時需要通過LIN接口爲其輸入12V VBAT電源,否則將無法工作;

2. LIN總線報文幀結構(Message Frame Structure)詳解

一個完整的LIN總線報文幀(Message Frame)包含報頭(Header)和響應(Response),其中報頭有間隔場、同步場和標識符場構成,而響應由數據場和校驗和場組成。

2.1 LIN 總線報文幀的字節場與字節間隔

LIN 總線報文幀的字節場爲標準串行通信的一個字節:

  • 1)基於SCI/UART的通信格式;

  • 2)發送一個字節需要10個位時間(TBIT);

LIN 總線報文幀的字節間隔用於區分LIN報文幀中的同步場與標識符場,以及數據場的各個字節以及最後的校驗和場:

  • 字節間隔位於每個字節之間;

  • 響應間隔位於報頭與響應之間;

  • 留給MCU足夠的處理時間;

  • 幀長度可能增長;

2.2 LIN 總線報文幀之間隔場(Break Field)

LIN總線報文幀的間隔場(Break Filed)用於區別串行通信(SCI/UART)數據幀,開始一幀LIN報文的傳輸,其具有如下特點:

  • 1)表示一幀報文的起始,由主節點發出;

  • 2)間隔信號至少由13個顯性位組成;

  • 3)隔界定符至少由1個隱形位組成;

  • 4)間隔場是唯一一個不符合字節場格式的場;

2.3 LIN 總線報文幀之同步場(Sync Field)

LIN總線報文幀的同步場(Sync Field)用於確保所有從節點(Slave Node)使用與主節點(Master Node)相同的波特率發送和接收數據。其爲一個字節,結構固定爲0x55,以產生一個方波信號給從節點做時鐘同步:

2.4 LIN 總線報文幀之標識符場(PID Field)

LIN總線報文幀的標識符場(PID Field)用於標識一幀LIN報文,其由6-bit 標識符(ID) + 2-bit ID的奇偶校驗符(P0/P1)組成:

  • ID的範圍從0到63(0x3F);

  • 奇偶校驗符(Parity)P0,P1計算方法如下:

2.5 LIN 總線報文幀之數據場(Data Field)

LIN總線報文幀的數據場(Data Field)用於主節點發送數據/命令或者接收從節點的響應數據:

  • 1)數據場長度1到8個字節;

  • 2)低字節先發,低位先發;

  • 3)如果某信號長度超過1個字節採用低位在前的LSB方式發送(小端);

2.6 LIN 總線報文幀之校驗和場(Checksum Field)

LIN總線報文幀的校驗和場(Checksum  Field)用於校驗接收的數據是否正確,其可以使用兩種校驗和計算方法:

  • 1)經典校驗(Classic Checksum)僅校驗數據場(LIN1.3)

  • 2)增強校驗(Enhance Checksum)校驗標識符場與數據場內容(LIN2.0、LIN2.1及LIN2.2)

標識符爲0x3C和0x3D的幀只能使用經典校驗。

計算方法:反轉8位求和(inverted eight bit sum)

比如:Data=0x4A、0x55、0x93、0xe5,其計算過程如下:

2.7 LIN 總線報文幀之幀長度

由以上介紹可知,一幀LIN總線報文的幀長度如下:

最小幀長度

  • Theader_nominal=34*Tbit

  • Tresponse_nominal=10*(ndata+1)*Tbit   

  • Tframe_nominal=Theader_nominal+Tresponse_nominal

最大幀長度(考慮串口波特率時鐘的最大抖動)

  • Theader_max=1.4*Theader_nominal

  • Tresponse_max=1.4*Tresponse_nominal

  • Tframe max=Theader max+Tresponse max

2.8 LIN 總線報文幀之調度表(Schedule Table)

LIN報文幀調度表功能如下:

  • 負責調度網絡各報文發送的順序;

  • 爲每幀報文分配發送時隙(slot);

  • 發送時隙:報文可以被髮送的時間;

  • 不同報文的發送時隙可能不同;

  • 調度表在網絡系統設計階段確定;

  • 調度表使得LIN通信具有可預測性;

如何切換調度表?

主任務可以擁有多個調度表,並在不同的調度表之間切換,該處理方式增加通信的靈活性。

2.9 LIN 總線報文幀之偏移(jitter)

偏移(jitter)是指一幀報文實際開始發送的時刻與幀時隙起點的時間差(該值在LDF文件中定義)。

TFrame_Slot> jitter + TFrame_Maximum

3. LIN總線報文幀類型(Frame Type)詳解

介紹完LIN總線的報文幀,接下來,本章節來介紹一下LIN總線報文的幀類型。

總來說,LIN總線包括無條件幀(Unconditional Frame)、事件幀(Event Frame)、診斷幀(Diagnostic Frames)、零星幀(Sporadic Frame)和保留幀(Reserved Frame)5中幀類型:

3.1 LIN總線的無條件幀(Unconditional Frame)

無條件幀(Unconditional Frame)使用頻度最高的幀類型,顧名思義,其無任何發送條件;標識符(ID)爲0到59(0x3B);由主任務發出報頭,一個任務響應,一個或多個任務接收如下圖:

  • 幀 ID = 0x30應答部分的發佈節點爲從機節點1,收聽節點爲主機節點。典型應用如從機節點1向主機節點報告自身某信號的狀態;

  • 幀 ID = 0x31應答部分的發佈節點爲主機節點,收聽節點爲從機節點1和從機節點2。典型應用如主機節點向從機節點發布信息;

  • 幀 ID = 0x32應答部分的發佈節點爲從機節點2,收聽節點爲從機節點1。典型應用如從機節點之間彼此通信;

3.2 LIN總線的事件幀(Event Frame)

引入事件觸發幀的目的是節省帶寬。

下面來考慮一個真實的應用場景,車輛的BCM(LIN Master Node)需要獲取4個車門(Door, LIN Slave Node))的狀態,該如何實現?

方法1:使用上面介紹的無條件幀,每次向四個車門請求狀態,浪費帶寬,因爲車門狀態不是經常發生:

方法2:將請求四個車門狀態的幀合併爲一個事件觸發幀,Master不需要每次發送四個幀請求車門的狀態,只需要發送一個事件觸發幀即可,哪個車門狀態發生變化,對應的車門將響應該事件觸發幀。

事件觸發幀的響應會出現如下三種情況:

第一種:沒有車門狀態變化,無任何車門從節點響應,無衝突:

第二種:一個車門狀態發生變化,僅發生狀態改變的車門從節點響應,無衝突:

第三種:多個車門狀態發生變化,此時將出現衝突。衝突處理時,Master需要像第一種處理方式一樣,重新發送四幀分別請求單個車門狀態。

Tips:LIN1.3與LIN2.0、LIN2.1處理方式有所區別,區別在於LIN1.3不切換調度表,佔用事件觸發幀的時隙發送,LIN2.0、LIN2.1將切換衝突調度表處理,如下圖:

3.3 LIN總線的零星幀(Sporadic Frame)

零星幀(Sporadic Frame)也叫偶發幀,引入零星幀的目的也是爲了節省帶寬,如:BCM(Master)需要發送對4個車窗的控制指令,但是,兩個車窗的控制命令很少被同時執行,同樣大量的帶寬被浪費。

此時就可以使用零星幀,將四個車門的控制的無條件幀,組合爲一幀零星幀發送,從而節省了LIN總線帶寬:

3.4 LIN總線的診斷幀(Diagnostic Frames)

診斷幀(Diagnostic Frames)用來傳輸診斷或配置信息,一般包含8個字節。

診斷幀(Diagnostic Frames)標識符分配如下:

  • 60(0x3C):主節點請求(request)幀

  • 61(0x3D):從節點響應(reponse)幀

具體診斷幀傳輸方式如下圖所示:

3.5 保留幀(Reserved Frame)

使用標識符: 62(0x3E), 63(0x3F);

在LIN 2.x總線協議中未對保留幀(Reserved Frame)進行定義, 留給用戶自定義或將來的版本升級。

4. LIN總線網絡拓撲結構與網絡管理

一個LIN總線網絡,至少包含一個主節點(master node)和一個或多個從節點(salve node),總線網絡拓撲爲星型網絡。

下圖爲包含了一個主節點,兩個從節點的實際LIN總線網絡架構:

4.1 LIN 總線的主機任務與從機任務

LIN總線的主節點需要實現主機任務(master task)和從機任務(slave task),而從節點則只需要實現從機任務即可:

在LIN總線通信中,主機任務決定了在LIN總線上傳送的是哪一幀,即實現總線調度表切換,LIN報文幀頭產生和發送,從機任務提供每一LIN報文幀響應數據/狀態,其中主節點實現的從機任務主要目的是向從節點發送控制命令。

  • 單主機任務,多從機任務;

  • 主節點包含主機任務和從機任務;

  • 從節點只包含從機任務;

  • 主機任務決定總線上的報文,從任務發送數據;

完整的主機任務功能實現狀態機如下:

完整的從機任務功能實現狀態機如下:

4.2 LIN 2.1 .vs LIN 1.3節點模型

LIN2.1與LIN1.3節點模型的差別在於LIN1.3沒有Transport layer(傳輸層),所以也就沒有流控、傳輸時間控制的功能,LIN1.3協議中沒有對診斷及節點配置進行規範,所以在LIN1.3中完成相應的功能都放在自定義診斷中完成。

4.3 LIN總線的網絡管理

LIN網絡中的所有節點都有初始化狀態、工作模式和睡眠模式三種狀態,默認LIN節點復位中會自動進入初始化狀態,完成節點初始化,初始化結束後,必須在100ms內進入工作模式,在工作模式,LIN節點可以正常收發數據,若LIN總線空閒4~10s(可靈活配置)或者接收到睡眠命令(從節點),LIN節點將進入低功耗睡眠模式。進入睡眠模式後,LIN節點將停止數據收發,直到接收到到喚醒信號(從節點)或者內部事件產生喚醒請求(主節點)將其喚醒,然後重新進節點初始化:

4.4 LIN總線網絡睡眠與喚醒

睡眠指令只有主節點可以發送,從節點在接到睡眠指令之後,也可以選擇不進入睡眠狀態而繼續工作,這根據應用層協議而定。

在一個處於睡眠狀態的LIN網絡中,任何一個節點都可以發送喚醒信號。

喚醒信號是一個250us(在20Kbit/s波特率下的0x0F)到5ms(在1Kbit/s波特率下的0x0F)的顯性電平:

LIN網絡管理規定,每一個從節點都需要實現以下功能:

  • 檢測喚醒信號(持續150us以上的顯性位)

  • 當檢測到喚醒信號後,在100ms以內完成初始化工作

主節點除了需要完成喚醒功能外,還需要檢查出發送喚醒信號的節點(利用信號)。

當從節點發出喚醒信號之後150ms,主節點仍未發送報文,從節點可以再次發送喚醒信號。當連續發送了3次喚醒信號之後如果主節點仍未發送報文,則從節點必須等待1.5s,纔可以再次發送喚醒信號。

總結

本文詳細介紹了首先低速汽車總線--LIN總線協議的應用特點和發展歷史以及物理層收發器;然後詳細介紹了LIN報文的幀結構和幀類型及其特點和應用場景,並在此基礎上介紹了LIN總線網絡管理的一些基本知識,可以作爲汽車電子工程師學習LIN總線的一個入門參考資料。

在汽車ECU開發中要真正使用LIN總線,還需要實現完整的LIN協議棧(stack),其牽涉的知識較多較廣,這裏不展開介紹:

如下爲NXP爲其汽車MCU(S08, S12(X),MagniV S12Z, KEA和S32K1xx系列)提供的免費LIN協議棧實現架構:

該協議棧(LIN2.x and SAE J2602 Stack)是嚴格按照LIN Spec 2.2開發的,提供源代碼下載,感興趣的讀者可以通過以下鏈接下載學習/使用:

https://www.nxp.com/webapp/Download?colCode=FSL_LIN_2.X_DRIVER&location=null

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章