簡介本地互聯(lián)網(wǎng)絡(luò) LIN(Local Interconnect Network)總線協(xié)議,是基于UART/SCI(Universal Asynchronous Receiver-Transmitter/SerialCommunication Interface通用異步收發(fā)器/串行通信接口)的低成本串行通信協(xié)議。在車載電子系統(tǒng)中,相對于CAN總線而言,LIN總線協(xié)議較為簡單,對單片機的要求也并不高,基本的串口就可以實現(xiàn),成本較低,可作為CAN總線的輔助總線。LIN總線廣泛應(yīng)用于車門、車窗、車燈以及中控鎖等車身控制領(lǐng)域。
最新的標準:
LIN總線有如下特點:
LIN總線在汽車中一般不獨立存在,通常與上層CAN網(wǎng)絡(luò)相連,形成 LIN網(wǎng)絡(luò)內(nèi)部包括LIN Master Node(主機節(jié)點)和LIN Slave Node(從機節(jié)點),其中,主機節(jié)點可以運行一個主機任務(wù)和一個從機任務(wù),而從機節(jié)點上僅能運行一個從機任務(wù)。整個網(wǎng)絡(luò)中,必須包含一個主機節(jié)點,和最多15個從機節(jié)點。如圖x所示。 注意:LIN協(xié)議對任務(wù)進行建模,約定主機任務(wù)僅為發(fā)送幀首,從機節(jié)點處理應(yīng)答數(shù)據(jù)(發(fā)送或接收)。所以,從機節(jié)點僅實現(xiàn)發(fā)送數(shù)據(jù)和接收數(shù)據(jù)的操作,故僅運行從機任務(wù);主機節(jié)點的主機任務(wù)發(fā)送幀首后,還可交由主機節(jié)點的從機任務(wù)發(fā)送或者接收應(yīng)答任務(wù)。其中,主機任務(wù)發(fā)送的幀ID,就包含了數(shù)據(jù)應(yīng)由哪個節(jié)點發(fā)送上線、哪個節(jié)點捕獲數(shù)據(jù)的約定。由此,還可以設(shè)想一種只有主機任務(wù)的主機節(jié)點,但此時意義不大,主機任務(wù)協(xié)調(diào)網(wǎng)絡(luò)中的各節(jié)點,最終都是為了將本機的數(shù)據(jù)部署至網(wǎng)絡(luò)節(jié)點或從網(wǎng)絡(luò)節(jié)點中取數(shù),如果將主機節(jié)點的主機任務(wù)同自己的從機任務(wù)分類,就需要這兩個任務(wù)做好同步,如此,還不如放在同一個節(jié)點上方便管理。 LIN信號的物理層LIN總線僅使用一根信號線,信號線上傳輸邏輯電平信號,其中“0”為顯性電平、“1”為隱性電平(顯隱性與CAN總線是相同的)。傳輸信號在總線上實行“線-與”:
實際上,在使用LIN總線時,相對于微控制器上集成的LIN協(xié)議控制器(LIN通信引擎外設(shè),例如LINFlexD),還需要搭配一個LIN收發(fā)器芯片,將LIN協(xié)議控制器的Tx和Rx信號,同LIN總線上的顯性信號和隱形信號進行轉(zhuǎn)換。如圖x所示。 協(xié)議控制器主體是一個基于UART/SCI的通信控制器,以半雙工方式工作。協(xié)議控制器既可以使用專用模塊實現(xiàn),也可以用“UART/SCI+定時器”實現(xiàn):
LIN協(xié)議控制器需要產(chǎn)生和識別幀的 協(xié)議控制器需要能夠發(fā)送和捕獲喚醒信號:
LIN總線收發(fā)器總線收發(fā)器的主體是一個雙向工作的電平轉(zhuǎn)換器,完成協(xié)議控制器的高-低電平與LIN總線的隱性-顯性電平之間的轉(zhuǎn)換。 LIN規(guī)范規(guī)定:LIN總線的電平,以總線收發(fā)器的供電作為參考電平。為了克服電源波動和參考點漂移的影響,LIN規(guī)范要求總線收發(fā)器要能承受±11.5%的電源波動和參考點電平波動,并且能承受電源和參考點之間8%的電位差波動。收發(fā)雙方的電平鑒別門限也設(shè)置了較大的冗余度。 總線收發(fā)器還包括一些附加的功能,例如總線阻抗匹配、壓擺率(Slew-rate)控制等。 此外,LIN規(guī)范要求總線收發(fā)器具備這樣一種特性:本地節(jié)點掉電或工作異常時,不能影響總線上其他節(jié)點工作。 一個典型的總線收發(fā)器應(yīng)用電路,如圖x所示。 LIN通信協(xié)議LIN的主機和從機LIN報文幀由幀頭(Hearder)與應(yīng)答(Response)兩部分組成。如下圖所示,傳輸過程中:
注意,圖x中描述的是主機任務(wù)和從機任務(wù),而不是節(jié)點。通常情況下,從機節(jié)點中僅執(zhí)行從機任務(wù),根據(jù)主機任務(wù)發(fā)出的幀頭做出響應(yīng),發(fā)送數(shù)據(jù)和接收數(shù)據(jù)。但主機節(jié)點是包含主機任務(wù)和從機任務(wù),主機節(jié)點把發(fā)送幀頭的工作歸到主機任務(wù)上,把數(shù)據(jù)通信的工作歸到從機任務(wù)上。即,當主機節(jié)點向從機節(jié)點送數(shù)時,先由主機節(jié)點的主機任務(wù)發(fā)出幀頭,再由主機節(jié)點的從機任務(wù)送出數(shù)據(jù);當主機節(jié)點從從機節(jié)點要數(shù)時,先由主機節(jié)點的主機任務(wù)發(fā)出幀頭,再由主機節(jié)點的從機任務(wù)從總線上捕獲數(shù)據(jù)。由此,也可以將主機任務(wù)別稱為“幀頭任務(wù)”,對應(yīng)從機任務(wù)為“數(shù)據(jù)任務(wù)”。 LIN報文幀結(jié)構(gòu)LIN報文分為幀頭和應(yīng)答兩個階段,其中,由主機發(fā)送的幀頭內(nèi)部包含:同步間隔段、同步段和受保護ID段;主機發(fā)送或者從機發(fā)送的應(yīng)答段內(nèi)部包含:最多8個字節(jié)的數(shù)據(jù)段和校驗和。 還需要注意的是,幀頭和應(yīng)答中間是允許有一定的時間間隔的,用于給從機任務(wù)捕獲和解析幀頭,并準備應(yīng)答數(shù)據(jù)留足的時間。如圖x所示。 在LINFlexD引擎中,還可以由軟件配置從幀頭結(jié)束到應(yīng)答開始中間的間隔時間容限,判定超時事件。 同步間隔段(Break field)注意 圖x LIN通信幀結(jié)構(gòu) 中,幀的所有間隙均為隱性電平“1”,總線空閑時,也是保持隱性電平“1”的狀態(tài),并且LIN通信幀中,除了同步間隔段外,任何其它字段都不會出現(xiàn)多于9位的顯性電平。同步間隔段由至少13位(通常選擇13位或14位)顯性電平組成,用于將不同的通信幀相互分隔開來。同步間隔段就用來表示一幀的開始。另外,同步間隔段的間隔符(Break Delimiter) 至少為1位隱性電平。如圖x所示。 同步段(Sync field)在介紹同步段之前,先介紹一下字節(jié)段結(jié)構(gòu)(Byte Field Structure)的概念,字節(jié)段結(jié)構(gòu)包括:1位起始位(Start Bit,顯性)+ 8位數(shù)據(jù)位 + 1位停止位(Stop Bit,隱性),這是一種標準UART數(shù)據(jù)傳輸格式。在 LIN 的一幀當中,除了同步間隔段,后面的各段都是通過字節(jié)域的格式傳輸?shù)?。LIN 幀中的數(shù)據(jù)傳輸都是先發(fā)送LSB(Least Significant Bit,最低有效位),最后發(fā)送 MSB(Most Significant Bit,最高有效位)。LIN總線使用字節(jié)0x55(01010101b)進行同步,在從機節(jié)點上可以采用非高精度時鐘,如果存在偏差,可以通過同步段來調(diào)整。同步段中的就是一個值為 受保護的幀ID(Protected Identifier field)受保護的幀ID中包含兩部分:6個比特的ID編號和2比特的奇偶校驗位。 其中,幀ID的取值范圍為0x00~0x3F,共64個,幀ID標識了幀的類別,從機任務(wù)會根據(jù)幀頭ID作出反應(yīng)(接收/發(fā)送/忽略應(yīng)答)。其中,校驗位P0和P1的計算方式如下: P0 = ID0 xor ID1 xor ID2 xor ID4 特別注意,LIN總線的ID同CAN總線相似,標識的是消息的類型,并不是從機節(jié)點的地址(例如I2C總線)。LIN總線根據(jù)幀ID的不同,將報文分為 應(yīng)答數(shù)據(jù)段(Data field)數(shù)據(jù)段包含1-8個字節(jié)。LIN2.x規(guī)定,可傳輸?shù)腖IN字節(jié)數(shù)為2,4,8,并不是1-8內(nèi)任意一個數(shù)字。一般而言,車內(nèi)會選擇統(tǒng)一字節(jié)數(shù),最常用的是每幀傳遞8個字節(jié)。 與CAN總線(包括DLC字段)不同,LIN協(xié)議中并沒有規(guī)定數(shù)據(jù)長度的信息,數(shù)據(jù)內(nèi)容和長度均由應(yīng)用系統(tǒng)的設(shè)計者根據(jù)幀ID提前設(shè)計??偩€上的數(shù)據(jù)以廣播形式發(fā)出,任何節(jié)點都可收到,但并非對每個節(jié)點有用。具體到發(fā)布與接聽是由哪個節(jié)點完成,這取決于應(yīng)用層的配置。通常情況下,幀的應(yīng)答,總線上只存在一個發(fā)布節(jié)點,否則會出現(xiàn)錯誤。(事件觸發(fā)幀例外,它可能出現(xiàn)0,1和多個發(fā)布節(jié)點。) 校驗和段(Checksum field)效驗和段是為了對幀傳輸?shù)膬?nèi)容進行效驗。校驗和段的1個字節(jié)的值,是將本幀數(shù)據(jù)段和PID段的值按照8位求和,再取反得到的。 效驗分為標準型效驗與增強型效驗:
采用標準型還是增強型是由主機節(jié)點管理,發(fā)布節(jié)點和收聽節(jié)點根據(jù)幀ID來判斷采用哪種效驗和。 在YTM32B1ME微控制器的手冊中描述LINFlexD發(fā)送幀頭時,可以在寄存器 LIN總線的波形上圖展示了LIN總線的通訊方式,可以看出,無論什么時候幀頭都是由主機節(jié)點發(fā)布,當主機節(jié)點要發(fā)布數(shù)據(jù)時,整個幀全部由主機節(jié)點發(fā)送。當從機節(jié)點要發(fā)布數(shù)據(jù)時,幀頭部分由主機節(jié)點發(fā)布,應(yīng)答部分由從機節(jié)點發(fā)布,這樣,其余節(jié)點都能收到完整的報文。所以,LIN總線的通訊都是由主機節(jié)點發(fā)起,只要合理的規(guī)定好每個節(jié)點的配置,這樣就不會存在總線沖突的情況(事件觸發(fā)幀沖突時采用沖突解決進度表)。 參考文獻
|
|