细说汽车电子通信总线之LIN总线协议详解
內(nèi)容提要
1. LIN總線概述
1.1 LIN總線特點及發(fā)展歷史
1.2 LIN 總線協(xié)議的物理層(收發(fā)器)
2. LIN總線報文幀結(jié)構(gòu)(Message Frame Structure)詳解
2.1 LIN 總線報文幀的字節(jié)場與字節(jié)間隔
2.2 LIN 總線報文幀之間隔場(Break Field)
2.3 LIN 總線報文幀之同步場(Sync Field)
2.4 LIN 總線報文幀之標(biāo)識符場(PID Field)
2.5 LIN 總線報文幀之?dāng)?shù)據(jù)場(Data Field)
2.6 LIN 總線報文幀之校驗和場(Checksum Field)
2.7 LIN 總線報文幀之幀長度
2.8 LIN 總線報文幀之調(diào)度表(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總線網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)與網(wǎng)絡(luò)管理
4.1 LIN 總線的主機(jī)任務(wù)與從機(jī)任務(wù)
4.2 LIN 2.1 .vs LIN 1.3節(jié)點模型
4.3 LIN總線的網(wǎng)絡(luò)管理
總結(jié)
?
1. LIN總線概述
1.1 LIN總線特點及發(fā)展歷史
LIN?(Local?Interconnect?Network,局部互聯(lián)網(wǎng)絡(luò)總線是針對汽車分布式電子系統(tǒng)而定義的一種低成本的串行通訊網(wǎng)絡(luò),是對控制器區(qū)域網(wǎng)絡(luò)(CAN)等其它汽車多路網(wǎng)絡(luò)的一種補(bǔ)充,適用于對網(wǎng)絡(luò)的帶寬、性能或容錯功能沒有過高要求的應(yīng)用。LIN總線是基于SCI(UART)數(shù)據(jù)格式,采用單主控制器/多從設(shè)備的模式,是UART中的一種特殊情況。
LIN總線有如下特點:
-
串行通信:線間干擾小,節(jié)省線束,傳輸距離長;
-
單線傳輸:增強(qiáng)的ISO9141 (ISO 15765-1) , 總線電壓基于VBAT;
-
?最高速率20Kbit/s:滿足車身上大部分的應(yīng)用需求,常用波特率為9600bit/s、19200bit/s;
-
單主多從結(jié)構(gòu):無需仲裁;
-
基于通用UART/SCI的低成本接口硬件:幾乎所有MCU有具備LIN總線的硬件基礎(chǔ);
-
從節(jié)點無須晶振或陶瓷震蕩器就可以實現(xiàn)同步:大幅度降低成本;
-
一條總線最多可連接16個節(jié)點:由總線電氣特性決定;
-
支持診斷功能:支持UDS服務(wù);
LIN發(fā)展歷史如下:
1998 的十月,在德國Baden Baden召開的汽車電子會議上LIN 總線的設(shè)想首次被提出
1999 LIN 聯(lián)盟成立(最初的成員有 奧迪, 寶馬, 克萊斯勒, 摩托羅拉, 博世, 大眾和沃爾沃)
2000 LIN 聯(lián)盟開始接收第一批成員
2001 第一輛使用 LIN 總線汽車下線
2002 LIN 規(guī)范V.1.3版本發(fā)布
2003 LIN 規(guī)范V.2.0 版本發(fā)布
2004 LIN 總線一致性測試規(guī)范發(fā)布
2006 LIN 標(biāo)準(zhǔn)規(guī)范 V.2.1版發(fā)布
2010 LIN 規(guī)范包Specification Package Revision 2.2A 發(fā)布
1.2 LIN 總線協(xié)議的物理層(收發(fā)器)
LIN總線協(xié)議規(guī)定其物理層收發(fā)器(transceiver)功能為將MCU SCI串行通信模塊輸出的TX和RX的TTL/CMOS電平信號轉(zhuǎn)換為LIN總線的顯性(Dominant, 邏輯“0”,電氣特性為GND(0V))和隱性電平(Recessive, 邏輯“1”,電氣特性為VBAT(8~18V)):
從而提高了通信時信號傳輸?shù)目垢蓴_門限,保證其在強(qiáng)干擾的汽車電子環(huán)境中依然可以正常工作。
LIN總線協(xié)議還進(jìn)一步規(guī)定其物理層收發(fā)器在LIN Master和Slave節(jié)點的終端電路設(shè)計要求:
LIN Master節(jié)點:需要一個上拉到VBAT的上拉電阻和防反接二極管串接在VBAT與LIN總線上,同時還需一個并聯(lián)到地的負(fù)載電容;
LIN Slave節(jié)點:只需要需一個并聯(lián)到地的負(fù)載電容接口;
Tips:由以上介紹可知,LIN總線的物理層收發(fā)器將全雙工的MCU SCI轉(zhuǎn)換成了半雙工的LIN總線信號進(jìn)行傳輸;
常見的LIN收發(fā)器有NXP的TJA1021/ TJA1022/TJA1024/TJA1027/TJA1029等,其功能特性比較如下表;
不同的LIN收發(fā)器,其集成的LIN通道數(shù)、EMC/ESD特性以及低功耗喚醒特性有所不同:
Tips:市面上很多USB轉(zhuǎn)LIN的工具(比如PEAK LIN),其內(nèi)部未集成DC-DC將USB的5V電源升壓到LIN收發(fā)器工作需要的12V電壓,所以使用時需要通過LIN接口為其輸入12V VBAT電源,否則將無法工作;
2. LIN總線報文幀結(jié)構(gòu)(Message Frame Structure)詳解
一個完整的LIN總線報文幀(Message Frame)包含報頭(Header)和響應(yīng)(Response),其中報頭有間隔場、同步場和標(biāo)識符場構(gòu)成,而響應(yīng)由數(shù)據(jù)場和校驗和場組成。
2.1 LIN 總線報文幀的字節(jié)場與字節(jié)間隔
LIN 總線報文幀的字節(jié)場為標(biāo)準(zhǔn)串行通信的一個字節(jié):
-
1)基于SCI/UART的通信格式;
-
2)發(fā)送一個字節(jié)需要10個位時間(TBIT);
LIN 總線報文幀的字節(jié)間隔用于區(qū)分LIN報文幀中的同步場與標(biāo)識符場,以及數(shù)據(jù)場的各個字節(jié)以及最后的校驗和場:
-
字節(jié)間隔位于每個字節(jié)之間;
-
響應(yīng)間隔位于報頭與響應(yīng)之間;
-
留給MCU足夠的處理時間;
-
幀長度可能增長;
2.2 LIN 總線報文幀之間隔場(Break Field)
LIN總線報文幀的間隔場(Break Filed)用于區(qū)別串行通信(SCI/UART)數(shù)據(jù)幀,開始一幀LIN報文的傳輸,其具有如下特點:
-
1)表示一幀報文的起始,由主節(jié)點發(fā)出;
-
2)間隔信號至少由13個顯性位組成;
-
3)隔界定符至少由1個隱形位組成;
-
4)間隔場是唯一一個不符合字節(jié)場格式的場;
2.3 LIN 總線報文幀之同步場(Sync Field)
LIN總線報文幀的同步場(Sync Field)用于確保所有從節(jié)點(Slave Node)使用與主節(jié)點(Master Node)相同的波特率發(fā)送和接收數(shù)據(jù)。其為一個字節(jié),結(jié)構(gòu)固定為0x55,以產(chǎn)生一個方波信號給從節(jié)點做時鐘同步:
2.4 LIN 總線報文幀之標(biāo)識符場(PID Field)
LIN總線報文幀的標(biāo)識符場(PID Field)用于標(biāo)識一幀LIN報文,其由6-bit 標(biāo)識符(ID)?+ 2-bit?ID的奇偶校驗符(P0/P1)組成:
-
ID的范圍從0到63(0x3F);
-
奇偶校驗符(Parity)P0,P1計算方法如下:
2.5 LIN 總線報文幀之?dāng)?shù)據(jù)場(Data Field)
LIN總線報文幀的數(shù)據(jù)場(Data Field)用于主節(jié)點發(fā)送數(shù)據(jù)/命令或者接收從節(jié)點的響應(yīng)數(shù)據(jù):
-
1)數(shù)據(jù)場長度1到8個字節(jié);
-
2)低字節(jié)先發(fā),低位先發(fā);
-
3)如果某信號長度超過1個字節(jié)采用低位在前的LSB方式發(fā)送(小端);
2.6 LIN 總線報文幀之校驗和場(Checksum Field)
LIN總線報文幀的校驗和場(Checksum ?Field)用于校驗接收的數(shù)據(jù)是否正確,其可以使用兩種校驗和計算方法:
-
1)經(jīng)典校驗(Classic Checksum)僅校驗數(shù)據(jù)場(LIN1.3)
-
2)增強(qiáng)校驗(Enhance Checksum)校驗標(biāo)識符場與數(shù)據(jù)場內(nèi)容(LIN2.0、LIN2.1及LIN2.2)
標(biāo)識符為0x3C和0x3D的幀只能使用經(jīng)典校驗。
計算方法:反轉(zhuǎn)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 總線報文幀之調(diào)度表(Schedule Table)
LIN報文幀調(diào)度表功能如下:
-
負(fù)責(zé)調(diào)度網(wǎng)絡(luò)各報文發(fā)送的順序;
-
為每幀報文分配發(fā)送時隙(slot);
-
發(fā)送時隙:報文可以被發(fā)送的時間;
-
不同報文的發(fā)送時隙可能不同;
-
調(diào)度表在網(wǎng)絡(luò)系統(tǒng)設(shè)計階段確定;
-
調(diào)度表使得LIN通信具有可預(yù)測性;
如何切換調(diào)度表?
主任務(wù)可以擁有多個調(diào)度表,并在不同的調(diào)度表之間切換,該處理方式增加通信的靈活性。
2.9?LIN 總線報文幀之偏移(jitter)
偏移(jitter)是指一幀報文實際開始發(fā)送的時刻與幀時隙起點的時間差(該值在LDF文件中定義)。
TFrame_Slot> jitter + TFrame_Maximum
3. LIN總線報文幀類型(Frame Type)詳解
介紹完LIN總線的報文幀,接下來,本章節(jié)來介紹一下LIN總線報文的幀類型。
總來說,LIN總線包括無條件幀(Unconditional Frame)、事件幀(Event Frame)、診斷幀(Diagnostic Frames)、零星幀(Sporadic Frame)和保留幀(Reserved Frame)5中幀類型:
3.1 LIN總線的無條件幀(Unconditional Frame)
無條件幀(Unconditional Frame)使用頻度最高的幀類型,顧名思義,其無任何發(fā)送條件;標(biāo)識符(ID)為0到59(0x3B);由主任務(wù)發(fā)出報頭,一個任務(wù)響應(yīng),一個或多個任務(wù)接收如下圖:
-
幀?ID =?0x30應(yīng)答部分的發(fā)布節(jié)點為從機(jī)節(jié)點1,收聽節(jié)點為主機(jī)節(jié)點。典型應(yīng)用如從機(jī)節(jié)點1向主機(jī)節(jié)點報告自身某信號的狀態(tài);
-
幀?ID =?0x31應(yīng)答部分的發(fā)布節(jié)點為主機(jī)節(jié)點,收聽節(jié)點為從機(jī)節(jié)點1和從機(jī)節(jié)點2。典型應(yīng)用如主機(jī)節(jié)點向從機(jī)節(jié)點發(fā)布信息;
-
幀?ID =?0x32應(yīng)答部分的發(fā)布節(jié)點為從機(jī)節(jié)點2,收聽節(jié)點為從機(jī)節(jié)點1。典型應(yīng)用如從機(jī)節(jié)點之間彼此通信;
3.2 LIN總線的事件幀(Event Frame)
引入事件觸發(fā)幀的目的是節(jié)省帶寬。
下面來考慮一個真實的應(yīng)用場景,車輛的BCM(LIN Master Node)需要獲取4個車門(Door, LIN Slave Node))的狀態(tài),該如何實現(xiàn)?
方法1:使用上面介紹的無條件幀,每次向四個車門請求狀態(tài),浪費帶寬,因為車門狀態(tài)不是經(jīng)常發(fā)生:
方法2:將請求四個車門狀態(tài)的幀合并為一個事件觸發(fā)幀,Master不需要每次發(fā)送四個幀請求車門的狀態(tài),只需要發(fā)送一個事件觸發(fā)幀即可,哪個車門狀態(tài)發(fā)生變化,對應(yīng)的車門將響應(yīng)該事件觸發(fā)幀。
事件觸發(fā)幀的響應(yīng)會出現(xiàn)如下三種情況:
第一種:沒有車門狀態(tài)變化,無任何車門從節(jié)點響應(yīng),無沖突:
第二種:一個車門狀態(tài)發(fā)生變化,僅發(fā)生狀態(tài)改變的車門從節(jié)點響應(yīng),無沖突:
第三種:多個車門狀態(tài)發(fā)生變化,此時將出現(xiàn)沖突。沖突處理時,Master需要像第一種處理方式一樣,重新發(fā)送四幀分別請求單個車門狀態(tài)。
Tips:LIN1.3與LIN2.0、LIN2.1處理方式有所區(qū)別,區(qū)別在于LIN1.3不切換調(diào)度表,占用事件觸發(fā)幀的時隙發(fā)送,LIN2.0、LIN2.1將切換沖突調(diào)度表處理,如下圖:
3.3 LIN總線的零星幀(Sporadic Frame)
零星幀(Sporadic Frame)也叫偶發(fā)幀,引入零星幀的目的也是為了節(jié)省帶寬,如:BCM(Master)需要發(fā)送對4個車窗的控制指令,但是,兩個車窗的控制命令很少被同時執(zhí)行,同樣大量的帶寬被浪費。
此時就可以使用零星幀,將四個車門的控制的無條件幀,組合為一幀零星幀發(fā)送,從而節(jié)省了LIN總線帶寬:
3.4 LIN總線的診斷幀(Diagnostic Frames)
診斷幀(Diagnostic Frames)用來傳輸診斷或配置信息,一般包含8個字節(jié)。
診斷幀(Diagnostic Frames)標(biāo)識符分配如下:
-
60(0x3C):主節(jié)點請求(request)幀
-
61(0x3D):從節(jié)點響應(yīng)(reponse)幀
具體診斷幀傳輸方式如下圖所示:
3.5 保留幀(Reserved Frame)
使用標(biāo)識符:?62(0x3E),?63(0x3F);
在LIN 2.x總線協(xié)議中未對保留幀(Reserved Frame)進(jìn)行定義,?留給用戶自定義或?qū)淼陌姹旧墶?/p>
4. LIN總線網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)與網(wǎng)絡(luò)管理
一個LIN總線網(wǎng)絡(luò),至少包含一個主節(jié)點(master node)和一個或多個從節(jié)點(salve node),總線網(wǎng)絡(luò)拓?fù)錇樾切途W(wǎng)絡(luò)。
下圖為包含了一個主節(jié)點,兩個從節(jié)點的實際LIN總線網(wǎng)絡(luò)架構(gòu):
4.1 LIN 總線的主機(jī)任務(wù)與從機(jī)任務(wù)
LIN總線的主節(jié)點需要實現(xiàn)主機(jī)任務(wù)(master task)和從機(jī)任務(wù)(slave task),而從節(jié)點則只需要實現(xiàn)從機(jī)任務(wù)即可:
在LIN總線通信中,主機(jī)任務(wù)決定了在LIN總線上傳送的是哪一幀,即實現(xiàn)總線調(diào)度表切換,LIN報文幀頭產(chǎn)生和發(fā)送,從機(jī)任務(wù)提供每一LIN報文幀響應(yīng)數(shù)據(jù)/狀態(tài),其中主節(jié)點實現(xiàn)的從機(jī)任務(wù)主要目的是向從節(jié)點發(fā)送控制命令。
-
單主機(jī)任務(wù),多從機(jī)任務(wù);
-
主節(jié)點包含主機(jī)任務(wù)和從機(jī)任務(wù);
-
從節(jié)點只包含從機(jī)任務(wù);
-
主機(jī)任務(wù)決定總線上的報文,從任務(wù)發(fā)送數(shù)據(jù);
完整的主機(jī)任務(wù)功能實現(xiàn)狀態(tài)機(jī)如下:
完整的從機(jī)任務(wù)功能實現(xiàn)狀態(tài)機(jī)如下:
4.2 LIN 2.1 .vs LIN 1.3節(jié)點模型
LIN2.1與LIN1.3節(jié)點模型的差別在于LIN1.3沒有Transport layer(傳輸層),所以也就沒有流控、傳輸時間控制的功能,LIN1.3協(xié)議中沒有對診斷及節(jié)點配置進(jìn)行規(guī)范,所以在LIN1.3中完成相應(yīng)的功能都放在自定義診斷中完成。
4.3 LIN總線的網(wǎng)絡(luò)管理
LIN網(wǎng)絡(luò)中的所有節(jié)點都有初始化狀態(tài)、工作模式和睡眠模式三種狀態(tài),默認(rèn)LIN節(jié)點復(fù)位中會自動進(jìn)入初始化狀態(tài),完成節(jié)點初始化,初始化結(jié)束后,必須在100ms內(nèi)進(jìn)入工作模式,在工作模式,LIN節(jié)點可以正常收發(fā)數(shù)據(jù),若LIN總線空閑4~10s(可靈活配置)或者接收到睡眠命令(從節(jié)點),LIN節(jié)點將進(jìn)入低功耗睡眠模式。進(jìn)入睡眠模式后,LIN節(jié)點將停止數(shù)據(jù)收發(fā),直到接收到到喚醒信號(從節(jié)點)或者內(nèi)部事件產(chǎn)生喚醒請求(主節(jié)點)將其喚醒,然后重新進(jìn)節(jié)點初始化:
4.4 LIN總線網(wǎng)絡(luò)睡眠與喚醒
睡眠指令只有主節(jié)點可以發(fā)送,從節(jié)點在接到睡眠指令之后,也可以選擇不進(jìn)入睡眠狀態(tài)而繼續(xù)工作,這根據(jù)應(yīng)用層協(xié)議而定。
在一個處于睡眠狀態(tài)的LIN網(wǎng)絡(luò)中,任何一個節(jié)點都可以發(fā)送喚醒信號。
喚醒信號是一個250us(在20Kbit/s波特率下的0x0F)到5ms(在1Kbit/s波特率下的0x0F)的顯性電平:
LIN網(wǎng)絡(luò)管理規(guī)定,每一個從節(jié)點都需要實現(xiàn)以下功能:
-
檢測喚醒信號(持續(xù)150us以上的顯性位)
-
當(dāng)檢測到喚醒信號后,在100ms以內(nèi)完成初始化工作
主節(jié)點除了需要完成喚醒功能外,還需要檢查出發(fā)送喚醒信號的節(jié)點(利用信號)。
當(dāng)從節(jié)點發(fā)出喚醒信號之后150ms,主節(jié)點仍未發(fā)送報文,從節(jié)點可以再次發(fā)送喚醒信號。當(dāng)連續(xù)發(fā)送了3次喚醒信號之后如果主節(jié)點仍未發(fā)送報文,則從節(jié)點必須等待1.5s,才可以再次發(fā)送喚醒信號。
總結(jié)
本文詳細(xì)介紹了首先低速汽車總線--LIN總線協(xié)議的應(yīng)用特點和發(fā)展歷史以及物理層收發(fā)器;然后詳細(xì)介紹了LIN報文的幀結(jié)構(gòu)和幀類型及其特點和應(yīng)用場景,并在此基礎(chǔ)上介紹了LIN總線網(wǎng)絡(luò)管理的一些基本知識,可以作為汽車電子工程師學(xué)習(xí)LIN總線的一個入門參考資料。
在汽車ECU開發(fā)中要真正使用LIN總線,還需要實現(xiàn)完整的LIN協(xié)議棧(stack),其牽涉的知識較多較廣,這里不展開介紹:
如下為NXP為其汽車MCU(S08, S12(X),MagniV S12Z, KEA和S32K1xx系列)提供的免費LIN協(xié)議棧實現(xiàn)架構(gòu):
該協(xié)議棧(LIN2.x and SAE J2602 Stack)是嚴(yán)格按照LIN Spec 2.2開發(fā)的,提供源代碼下載,感興趣的讀者可以通過以下鏈接下載學(xué)習(xí)/使用:
https://www.nxp.com/webapp/Download?colCode=FSL_LIN_2.X_DRIVER&location=null
總結(jié)
以上是生活随笔為你收集整理的细说汽车电子通信总线之LIN总线协议详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 视频异常行为检测网络
- 下一篇: 气源站护士站区域气体监控解决方案