點擊上方藍字談思實驗室
獲取更多汽車網絡安全資訊

01
LIN總線誕生背景
LIN: Local Interconnect Network,本地連接網絡
由于汽車電子電氣架構很復雜,汽車上的電子ECU非常多。導致汽車局域網絡的線束越來越多。線束增加會導致成本上升以及接線不良等造成的電子故障增加,對汽車的品質和可靠性都有很大影響。所以有些通信速率以及可靠性要求都不高的外圍ECU,引入LIN總線。LIN總線是單線通信,成本比CAN總線更低。
02
LIN總線協議
和大部分通訊總線一樣,LIN總線也是由LIN控制器、LIN收發器組成。LIN的控制器是基于SCI(UART)數據格式,采用單主控制器/多從設備的模式。

LIN和CAN、ETH等通信總線一樣,在AutoSAR上的分層架構基本類似。
2.1、LIN協議格式
LIN的拓撲結構為單線總線,總線電平為12V,傳輸速率最高為20kbps,一個LIN網絡最多可以連接16個節點,主機節點有且只有一個,從機節點有1到15個。

主機任務可以發送幀頭和數據,從機任務不能主動發送數據,需要接收主機發送的幀頭,根據幀頭包含的信息判斷:(1)發送應答;(2)接收應答;(3)忽略應答。
LIN采用UART功能傳輸,傳輸時需要包含一位起始位和一位停止位,共10位數據,按照LSB方式傳輸。

幀包含幀頭和應答兩部分。幀頭包含同步間隔段、同步段以及受保護ID段,應答部分包含數據段和校驗和段。其中值"0"為顯性電平,值"1"為隱形電平,總線上實行"線與":當總線上有大于等于一個節點發送顯性電平時,總線呈顯性電平;所有的節點都發送隱形電平或不發送信息時,總線才呈隱形電平,即顯性電平起主導作用。
2.1.1、同步間隔段
同步間隔段是由至少13位的顯性電平組成,代表一幀的開始,其中同步間隔段的間隔符至少為1位隱形電平。
2.1.2、同步段
LIN同步以下降沿為判斷標志,采用字節0x55(轉換為二進制為01010101b)。從節點可以不使用高精度的時鐘,由此帶來的與主機節點時鐘產生的偏差,需要通過同步段進行調整,調整的結果是使從機節點數據的位速率與主機節點一致。同步段用于同步的基準時鐘為主機節點的時鐘。從機節點通過接收主機節點發出的同步段,計算出主機節點位速率,根據計算結果調整自身的位速率。計算公式為:

2.1.3、受保護ID段
受保護ID段的前六位叫做幀ID,加上兩個奇偶校驗位后稱作PID。

校驗公式如下:

由公式可以看出,PID不會出現全0或者全1的情況,因此,如果從機節點收到了"0xFF"或"0x00"可判斷為傳輸錯誤
幀ID的范圍為0x00~0x3F,共64個。幀ID標識了幀的類別和目的地。

2.1.4、數據段
節點發送的數據位于數據段,包含1-8個字節,采用低位在前的方式發送(小端)。
2.1.5、校驗和段
校驗和段是對幀中所傳輸的內容進行校驗,校驗和分為標準型校驗及增強型校驗。

經典校驗和計算方法:
校驗和場是數據場所有字節的和的反碼。
算法(Classical):累加所有字節。對每次加和進行判斷,如果和大于0xFF,那么就把高八位的1,與低八位相加。得到最后的結果后,取其反碼,我們就得到了最后的校驗和。
計算下邊4字節數據的奇偶校驗和:DATA=0x4A、0x55、0x93、0xE5
0x4A+0x55 = 0x9F,再加0x93 = 0x132,很明顯,超過了0xFF,分解為0x1和0x32,突出的高8位刪除,加到低8位中,0x1+0x32=0x33。再加0xE5 = 0x118,又超了,0x1+0x18=0x19。取反(Not),0xE6。
或者采用下面這種方法也可以:

2.2、幀的類型
LIN總線根據幀ID不同,將報文分為信號攜帶幀(0x00~0x3B)、診斷幀(0x3C、0x3D)、保留幀(0x3E、0x3F)。LIN總線根據幀ID不同,將報文分為信號攜帶幀(0x00~0x3B)、診斷幀(0x3C、0x3D)、保留幀(0x3E、0x3F)。
2.2.1、無條件幀
無條件幀是具有單一發布節點,無論信號是否發生變化,幀頭都被無條件應答的幀。

2.2.2、事件觸發幀
事件觸發幀是主機節點查詢各從機節點的信號是否發生變化時使用的幀,事件觸發幀允許一幀中只有幀頭無應答,當存在多個發布節點時,通過沖突解決進度表來解決沖突。
當從節點信號發生變化頻率較低的時候,主機任務一次次地輪詢各個信號會占用一定的帶寬,為了減小帶寬,引入了事件觸發幀的概念。
原先用作輪詢的無條件幀,稱為與該事件觸發幀關聯的無條件幀,即事件觸發幀的應答部分是與其關聯的無條件幀所提供的應答。當發生沖突時,需要立刻中斷當前的進度表,啟動沖突解決進度表,重新調用這些關聯的無條件幀,沖突解決進度表要求包含所有的關聯的無條件幀。

與事件觸發幀關聯的多個無條件幀需要滿足以下五個條件:
(1)數據段包含的數據字節數等長;
(2)使用相同的校驗和類型;
(3)數據段的第一個字節為該無條件幀的受保護ID,這樣才能夠知道應答是哪個關聯的無條件幀發送的;
(4)由不同的從機節點發布;
(5)不能與事件觸發幀處于同一個進度表。
2.2.3、偶發幀
偶發幀是當主節點自身信號發生變化時向總線發送的幀。當存在多個關聯的應答信號發生變化時,通過事先設定的優先級來仲裁。
與事件觸發幀一樣,偶發幀的應答也關聯了一組無條件幀,規定偶發幀只能由主機節點作為發布節點。
偶發幀的傳輸可能出現三種情況:1)當關聯的無條件幀沒有信號發生變化時,該時隙保持沉默,主節點連幀頭都不需要發送;2)當其中一個關聯的無條件幀包含的信號發生了變化,則發送該關聯的無條件幀的應答部分;3)如果有兩個或兩個關聯的無條件幀包含的信號發生了變化,則按照事先規定好的優先級,優先級較高的關聯的無條件幀獲得發送權,優先級較低的要等到下一個偶發幀的幀頭到來時才能發送應答。由于主機節點是唯一的發布節點,所以主節點事先就知道各個關聯信號的優先級別,這樣在傳輸時就不會產生沖突。

2.2.4、診斷幀
診斷幀包括主機請求幀和從機應答幀。主機請求幀,幀ID=0x3C,應答部分的發布節點為主節點;從機應答幀,幀ID=0x3D,應答部分的發布節點為從機節點。數據段規定為8個字節,采用標準型校驗和。
2.3、進度表
進度表是幀的調度表,規定總線上幀的傳輸次序以及各幀在總線上的傳輸時間,進度表位于主機節點,根據應用層需要進行調度。進度表可以有多個,一般情況下,輪到某個進度表執行的時候,從該進度表規定的入口處開始順序執行,到進度表的最后一個幀時,如果沒有新的調度表啟動,則返回到當前的進度表第一個幀循環執行;也有可能在執行某個進度表當中發生中斷,執行另一個進度表后再返回,例如事件觸發幀的解決過程。

進度表除規定了幀ID的傳輸次序外,還規定了幀時隙的大小。幀時隙是進度表規定的一個幀的幀頭起始到下一個幀的幀頭起始的時間,每個幀的幀時隙可以不同。

03
LIN協議棧架構圖

3.1、傳輸層
傳輸層的任務單一,把來自 診斷服務 的消息(Message)翻譯成協議層可以處理的PDU,或者反過來,把協議層收到的 PDU翻譯成診斷服務需要的消息。消息到 PDU 的轉換過程稱為拆分 (Packing) , PDU到消息的轉換過程稱為重組 。 PDU 對應著幀結構的數據段,并通過診斷幀發送或接收。
3.2、核心層
信號通過信號攜帶幀通信可以不經過傳輸層,信號處理功能由核心API完成,信號處理功能與API的對應關系如下:

04
API
4.1、核心 API
l_sys_init(void);
調用模塊:應用層
參數:無。
含義:初始化整個Lin節點,包括應用層,傳輸層和協議層,在調用其他API函數前,必須先調用此函數。
l_ifc_init(l_ifc_handle iii);
調用模塊:應用層
參數:要初始化的LIN通道ID。
含義:初始化Lin通道。
l_sch_set(l_ifc_handle iii,l_schedule_handle schedule_iii,l_u8 entry)
調用模塊:應用層
參數:LIN通道ID、要設置的調度表ID、調度表起始入口。
含義:用于選擇當前有效的進度表,可以選擇某個調度表入口。
l_sch_tick(l_ifc_handle iii)
調用模塊:應用層。
參數:LIN通道ID。
含義:遵循調度表來管理和觸發幀的傳輸。
lin_master_update_signal(l_ifc_handle iii)
調用模塊:核心層。
參數:LIN通道ID。
含義:更新LIN主節點的信號數據。
lin_pid_resp_callback_handler(l_ifc_handle iii,const lin_dal_event_id_t event_id, l_u8 id)
調用模塊:驅動抽象層。
參數:iii:LIN通道ID;event_id:LIN事件ID;id:幀ID。
含義:處理不同類型LIN事件的響應,根據不同的事件類型執行相應的處理邏輯,如處理PID響應、更新收發狀態。
lin_process_id(l_ifc_handle iii,l_u8 id)
調用模塊:核心層。
參數:iii:LIN通道ID;id:幀ID。
含義:處理幀ID,根據幀ID類型執行不同操作。
lin_switch_sch_table(l_ifc_handle iii)
調用模塊:核心層。
參數:iii:LIN通道ID。
含義:根據當前調度表類型更新和切換活躍調度表ID。
4.2、傳輸層API
ld_init(l_ifc_handle iii);
調用模塊:應用層
參數:用來指定初始化的傳輸層通道ID。
含義:初始化傳輸層。
ld_send_message(l_ifc_handle iii,l_u16 length,l_u8 NAD,const l_u8 * const data)
調用模塊:應用層
參數:iii:LIN通道ID;length:要發送的數據長度;NAD:節點地址;data:指向數據的指針。
含義:把由數據和長度指定的信息打包進一個或多個診斷幀。
4.3、驅動抽象層API
lin_dal_init(l_ifc_handle iii)
調用模塊:初始化時由l_ifc_init()調用。
參數:iii:LIN通道ID。
含義:初始化驅動抽象層。
lin_dal_timeout_service(l_ifc_handle iii)
調用模塊:每500us由TMR_ISR()調用一次。
參數:iii:LIN通道ID。
含義:獲取Lin Driver的狀態,處理與LIN總線活動相關的超時事件和狀態更新。
lin_dal_tx_header(l_ifc_handle iii,l_u8 id)
調用模塊:核心層。
參數:iii:LIN通道ID;id: 表示要發送的LIN幀的ID。
含義:用于在LIN總線上發送幀頭。
lin_dal_rx_response(l_ifc_handle iii,l_u8 response_length)
調用模塊:核心層。
參數:iii:LIN通道ID;response_length:設置接收的響應數據長度。
含義:設置LIN總線響應數據的參數:響應類型、數據長度。
lin_calculate_pdu_info(l_ifc_handle iii, l_u8 id)
調用模塊:核心層。
參數:iii:LIN通道ID;id:幀ID。
含義:根據幀ID計算PID,確定校驗和類型。
lin_dal_set_response(l_ifc_handle iii,l_u8 response_length)
調用模塊:核心層。
參數:iii:LIN通道ID;response_length:設置響應數據長度。
含義:設置LIN總線響應數據的參數:響應類型、數據長度、指向SDU的指針。
lin_dal_ignore_response(l_ifc_handle iii)
調用模塊:核心層。
參數:iii:LIN通道ID。
含義:忽略響應。
4.4、驅動層API
Lin_43_LPUART_FLEXIO_Init(const Lin_43_LPUART_FLEXIO_ConfigType * Config);
調用模塊:應用層。
參數:指向Lin驅動配置的指針。
含義:初始化Lin驅動。
Lin_43_LPUART_FLEXIO_SendFrame(uint8 Channel, const Lin_PduType * PduInfoPtr)
調用模塊:驅動抽象層。
參數:Channel:LIN硬件通道;PduInfoPtr:指向LIN PDU信息的指針
含義:LIN通信模塊通過LPUART和FLEXIO接口發送幀。
05
模塊設計
5.1、發送數據設計

5.2、PDU數據填充設計

5.3、調度表切換設計

5.4、接收數據設計

06
示波器波形采樣

來源:本文為CSDN博主「咸魚嵌入式」
鏈接:
https://blog.csdn.net/LLLJW_/article/details/143431591
談思AutoSec10周年年會
交流群
談思10周年年會將深度挖掘汽車網絡安全技術、數據安全合規難點、智能網聯安全新挑戰,通過實戰案例拆解、沉浸式技術演示、圓桌對話,為行業提供更系統的安全解決方案與更精準的資源對接平臺。

談思-汽車出海安全合規(歐洲)
交流群
談思 AutoSec Europe 峰會旨在搭建一個能融匯全球視野與中國實踐、連接技術前沿與落地應用的國際性專業平臺,以助力中國汽車應對在出海過程中面臨的網絡與數據安全合規痛點。從前沿技術研討、合規要點解析到經驗交流,都將通過本平臺為您提供持續支持。社群已超過200人,需邀請加入,如需入群,歡迎添加社群小助手微信taaslabs01。

談思-SDV&AIDV技術出海
交流群
誠邀行業同仁加入談思SDV&AIDV出海技術交流群,聚焦軟件定義汽車、AI定義汽車、下一代EEA、智能座艙、智能駕駛、軟件架構、域控制器開發、芯片技術、軟件工具等核心議題,歡迎大家加群交流探討~~

end

精品活動推薦

AutoSec系列沙龍

專業社群
部分入群專家來自:
新勢力車企:
特斯拉、合眾新能源-哪吒、理想、極氪、小米、賓理汽車、極越、零跑汽車、阿維塔汽車、智己汽車、小鵬、嵐圖汽車、蔚來汽車、吉祥汽車、賽力斯......
外資傳統主流車企代表:
大眾中國、大眾酷翼、奧迪汽車、寶馬、福特、戴姆勒-奔馳、通用、保時捷、沃爾沃、現代汽車、日產汽車、捷豹路虎、斯堪尼亞......
內資傳統主流車企:
吉利汽車、上汽乘用車、長城汽車、上汽大眾、長安汽車、北京汽車、東風汽車、廣汽、比亞迪、一汽集團、一汽解放、東風商用、上汽商用......
全球領先一級供應商:
博世、大陸集團、聯合汽車電子、安波福、采埃孚、科世達、舍弗勒、霍尼韋爾、大疆、日立、哈曼、華為、百度、聯想、聯發科、普瑞均勝、德賽西威、蜂巢轉向、均聯智行、武漢光庭、星紀魅族、中車集團、贏徹科技、濰柴集團、地平線、紫光同芯、字節跳動、......
二級供應商(500+以上):
Upstream、ETAS、BlackDuck、NXP、TUV、上海軟件中心、Deloitte、奇安信、為辰信安、云馳未來、信大捷安、信長城、澤鹿安全、紐創信安、復旦微電子、天融信、奇虎360、中汽中心、中國汽研、上海汽檢、加特蘭微電子、浙江大學......
人員占比

公司類型占比

文章
關于涉嫌仿冒AutoSec會議品牌的律師聲明
一文帶你了解智能汽車車載網絡通信安全架構
網絡安全:TARA方法、工具與案例
汽車數據安全合規重點分析
淺析汽車芯片信息安全之安全啟動
域集中式架構的汽車車載通信安全方案探究
系統安全架構之車輛網絡安全架構
車聯網中的隱私保護問題
智能網聯汽車網絡安全技術研究
AUTOSAR 信息安全框架和關鍵技術分析
AUTOSAR 信息安全機制有哪些?
信息安全的底層機制
汽車網絡安全
Autosar硬件安全模塊HSM的使用
首發!小米雷軍兩會上就汽車數據安全問題建言:關于構建完善汽車數據安全管理體系的建議