《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 通信與網(wǎng)絡(luò) > 設(shè)計(jì)應(yīng)用 > 用于汽車網(wǎng)絡(luò)的LIN協(xié)議分析
用于汽車網(wǎng)絡(luò)的LIN協(xié)議分析
摘要: LIN協(xié)議適用于汽車內(nèi)進(jìn)行低成本,、短距離,、低速網(wǎng)絡(luò)通信,其用途是傳輸開關(guān)設(shè)置狀態(tài)以及對開關(guān)變化響應(yīng),。本文詳細(xì)分析了LIN總線協(xié)議的特性,、消息協(xié)議的組成,、檢錯機(jī)制等,并介紹如何基于PICmicro器件來實(shí)現(xiàn)LIN總線從節(jié)
Abstract:
Key words :

LIN協(xié)議適用于汽車內(nèi)進(jìn)行低成本,、短距離,、低速網(wǎng)絡(luò)通信,其用途是傳輸開關(guān)設(shè)置狀態(tài)以及對開關(guān)變化響應(yīng),。本文詳細(xì)分析了LIN總線協(xié)議的特性,、消息協(xié)議的組成、檢錯機(jī)制等,,并介紹如何基于PICmicro器件來實(shí)現(xiàn)LIN總線從節(jié)點(diǎn),。 

  LIN協(xié)議是由歐洲車輛制造商協(xié)會開發(fā)用來進(jìn)行低成本、短距離,、低速網(wǎng)絡(luò)通信,,其用途是傳輸開關(guān)設(shè)置狀態(tài)以及對開關(guān)變化響應(yīng),因此通信事件是在百毫秒以上時間內(nèi)發(fā)生,,而不像引擎管理等其它速度快得多的汽車應(yīng)用,。此協(xié)議支持在單根線上進(jìn)行雙向通信,使用由RC振蕩器驅(qū)動的低成本微控制器,,這樣可以省去晶振或陶瓷振蕩器的成本,。另外,此協(xié)議實(shí)際上是以時間和軟件上的代價換取硬件上成本的節(jié)約,。LIN協(xié)議的每一條消息都包含自動波特率步進(jìn)的數(shù)據(jù),,最高可以支持波特率為20k,同時低功耗睡眠模式可以關(guān)斷總線,,以避免產(chǎn)生不必要的功耗,。總線可以由任意一個節(jié)點(diǎn)提供電源,。 

LIN總線特性 

  LIN總線融合了I2CRS232的特性:像I2C總線那樣,,LIN總線通過一個電阻上拉到高電平,而每一個節(jié)點(diǎn)又都可以通過集電極開路驅(qū)動器將總線拉低,;像RS232那樣通過起始位和停止位標(biāo)識出每一個字節(jié),,每一位在時鐘上異步傳輸,。 

  圖1給出了典型的LIN協(xié)議配置。當(dāng)任意一個節(jié)點(diǎn)將總線拉低時,,總線處于低電平,,標(biāo)識著總線進(jìn)入占用狀態(tài);而當(dāng)所有節(jié)點(diǎn)都使總線浮空時總線處于電池的電壓(9-18V),,則意味著總線處于非占用狀態(tài)(Recessive state),;在空閑狀態(tài)下浮空的總線通過電阻被上拉到高電平。 

  總線工作在9到18伏的電壓下,,但所有連接到總線上的器件必須能承受40V的電壓。一般情況下,,微控制器通過線路驅(qū)動器或接收器與總線隔離,。總線在每一個節(jié)點(diǎn)上被端接到Vbat,,主節(jié)點(diǎn)通過一個1kΩ的電阻端接而從節(jié)點(diǎn)則通過一個20kΩ到47kΩ的電阻端接,。總線最大長度為40米,。 

  總線上傳輸?shù)拿恳粋€字節(jié)都是與起始位和停止位一起組成幀,。起始位的狀態(tài)與空閑狀態(tài)相反(即為0),而停止位則與空閑狀態(tài)同為1,。在每個字節(jié)中,,首先傳輸?shù)氖亲畹陀行弧?nbsp;

消息協(xié)議 

  主節(jié)點(diǎn)控制總線的方式是輪詢各個從節(jié)點(diǎn)并與總線上其余部分共享從節(jié)點(diǎn)的數(shù)據(jù)。從節(jié)點(diǎn)僅在接到主節(jié)點(diǎn)的命令時才進(jìn)行數(shù)據(jù)傳輸,,這樣就可以進(jìn)行雙向傳輸并且無需進(jìn)一步的仲裁,。消息傳輸是以主節(jié)點(diǎn)發(fā)出一次同步中斷開始,緊接著是消息的同步字段和消息字段,。通過在每條消息的起始處傳送的同步字段還設(shè)定了整個總線的時鐘,,每個從節(jié)點(diǎn)用該字節(jié)來調(diào)整其波特率。 

  同步中斷使總線進(jìn)入占用狀態(tài),,該狀態(tài)保持時間為13位數(shù)據(jù)的傳輸時間,,緊接著是一個停止位(非占用狀態(tài)),這告知從節(jié)點(diǎn)即將有消息傳輸,。主節(jié)點(diǎn)與從節(jié)點(diǎn)的時鐘漂移最大允許在15%,,因此從節(jié)點(diǎn)接收的同步中斷可能只有11位或長達(dá)15位數(shù)據(jù)位的傳輸時間。 

  每一條消息的第二個字節(jié)是標(biāo)示字節(jié),,用來告知總線在該字節(jié)后面?zhèn)鬏數(shù)氖鞘裁磾?shù)據(jù)和哪一個節(jié)點(diǎn)應(yīng)該應(yīng)答,,以及應(yīng)答的長度(標(biāo)示字段如圖2所示)。一條命令僅會有一個從節(jié)點(diǎn)對其進(jìn)行響應(yīng),,從節(jié)點(diǎn)僅在主節(jié)點(diǎn)的指示下才發(fā)送數(shù)據(jù),。數(shù)據(jù)只要出現(xiàn)在總線上,每一個節(jié)點(diǎn)都可以接收到。因此,,無須主節(jié)點(diǎn)專門控制從節(jié)點(diǎn)之間的通信,。 

  由于設(shè)計(jì)中采用廉價的RC振蕩器,從節(jié)點(diǎn)必須在每一次傳輸時檢測主節(jié)點(diǎn)的波特率并調(diào)整其自身當(dāng)前的波特率,。因此,,每一次通信都由一個由交替的“0”和“1”組成的同步字節(jié)開始。標(biāo)識字段緊跟在同步字段的后面,,它告知總線后面?zhèn)鬏數(shù)膬?nèi)容是什么,。標(biāo)識字段又分為三個子字段,最低4位(0-3位)是尋址總線上的器件,,中間兩位(4-5位)是后面?zhèn)鬏數(shù)南⒌拈L度,,最高兩位(6-7)用作奇偶校驗(yàn)位。 

  除了睡眠命令,,LIN協(xié)議并沒有定義每一條消息的內(nèi)容,。其它命令是由具體應(yīng)用來定義的。 

檢錯機(jī)制 

  下面描述的錯誤必須被檢測出,,并且在每個節(jié)點(diǎn)內(nèi)進(jìn)行計(jì)數(shù),。 

  位錯誤-傳輸節(jié)點(diǎn)必須將它認(rèn)為應(yīng)該傳輸?shù)臄?shù)據(jù)位與總線上實(shí)際出現(xiàn)的數(shù)據(jù)位進(jìn)行比較。由于總線需要響應(yīng)時間,,控制器必須在檢測數(shù)據(jù)位之前等待足夠長的時間,。假設(shè)最小的電壓翻轉(zhuǎn)速率為1V/μs,而總線最高電壓為18V,,則發(fā)送器必須等待18μs才能檢測總線上的數(shù)據(jù)位是否正確,。 

  校驗(yàn)和錯誤-每一條消息的內(nèi)容都是由校驗(yàn)和字節(jié)進(jìn)行保護(hù)。 

  奇偶校驗(yàn)錯-命令字節(jié)的6個數(shù)據(jù)位由兩個奇偶校驗(yàn)位進(jìn)行保護(hù),,需要重新進(jìn)行計(jì)算這些位并比較,。如果錯誤出現(xiàn),應(yīng)當(dāng)忽略當(dāng)前命令并且記錄下錯誤,。LIN協(xié)議中沒有直接的錯誤報(bào)告機(jī)制,,但每一個從節(jié)點(diǎn)應(yīng)當(dāng)跟蹤其自身的錯誤,主節(jié)點(diǎn)可以要求從節(jié)點(diǎn)將錯誤狀態(tài)作為正常消息協(xié)議的一部分來傳輸,。 

LIN總線與CAN總線 

  LIN協(xié)議并不直接與CAN總線兼容,,但人們期望兩者進(jìn)行相互操作。CAN總線可能用在整個汽車內(nèi)來實(shí)現(xiàn)通信,,而LIN總線僅用在汽車的局部電路內(nèi),,如車門。為了連接兩種總線,,需要采用CAN-LIN協(xié)議接口節(jié)點(diǎn),,該節(jié)點(diǎn)從LIN總線節(jié)點(diǎn)收集信息然后傳送到CAN總線上,。 

低功耗睡眠模式 

  主節(jié)點(diǎn)通過發(fā)送標(biāo)識碼0x80指示所有節(jié)點(diǎn)進(jìn)入睡眠模式,睡眠命令后面跟隨的數(shù)據(jù)字節(jié)的內(nèi)容沒有定義,。收到睡眠命令的從節(jié)點(diǎn)應(yīng)當(dāng)對本身進(jìn)行設(shè)置,,以便當(dāng)總線發(fā)生改變時能喚醒,并關(guān)閉自身的電壓以使電流消耗最低,。當(dāng)處于睡眠模式時總線將處于高電平并且不消耗電流,。 

  任意一個節(jié)點(diǎn)都可以通過發(fā)送喚醒信號來喚醒總線。當(dāng)收到喚醒信號后,,一般情況下所有的節(jié)點(diǎn)應(yīng)當(dāng)激活并等待主節(jié)點(diǎn)開始總線輪詢,。 

硬件示例 

  圖3給出了有兩個按鈕和三個LED組成的硬件示例。每按動十下按鈕1 LED1改變一次狀態(tài),。同樣,,每按動十下按鈕2,LED2改變一次狀態(tài),。作為標(biāo)識為ID1的響應(yīng),按鈕的按動次數(shù)被傳送到總線上,。作為標(biāo)識為ID4的響應(yīng),,按鈕的按動次數(shù)的刷新被傳送到總線上。 

軟件操作 

  LIN協(xié)議程序工作在由RB0觸發(fā)的中斷下以實(shí)現(xiàn)總線的睡眠/喚醒,。在觸發(fā)中斷時,,程序?qū)Φ碗娖綌?shù)據(jù)位的長度進(jìn)行計(jì)數(shù),然后讀同步字節(jié)并確定數(shù)據(jù)位時間,,最后再將其與最初的數(shù)據(jù)位時間進(jìn)行比較,,以確定最初的低電平時間是否大于10個數(shù)據(jù)位的時間,大于10為同步中斷,,小于10為喚醒信號,。如果是喚醒信號,程序退出并繼續(xù)等待同步中斷,;如果是同步中斷,,程序就讀取命令字節(jié),檢查奇偶位并檢查動作表(action table)來確定接下來的動作,。動作表定義了總線上數(shù)據(jù)的來源或目的地,。 

  為了初始化LIN協(xié)議的從節(jié)點(diǎn)句柄(Slavehandler),用戶必須調(diào)用InitLinSlave程序,,這個程序初始化RB0中斷引腳和TMR0寄存器,。TMR0寄存器用來測量數(shù)據(jù)位的長度并生成波特率。初始化完成之后,,用戶可以執(zhí)行自己的程序,。一旦檢測到RB0引腳上的下降沿,,用戶程序就將被中斷。當(dāng)檢測到下降沿時,,程序就跳轉(zhuǎn)到中斷服務(wù)程序,。必須禁止除了TMR0和RB0中斷之外所有的中斷源,以便對同步字段進(jìn)行精確測量,。計(jì)算出波特率之后,,中斷服務(wù)程序就退出執(zhí)行。 

  在下一次RB0中斷發(fā)生時,,LIN協(xié)議Slavehandler自動進(jìn)入接收模式,,以接收標(biāo)識字段或數(shù)據(jù)字節(jié)。如果檢測到標(biāo)識字段的起始位,,就對標(biāo)識字段進(jìn)行接收和解碼,。然后,根據(jù)收到的標(biāo)識執(zhí)行相應(yīng)的代碼,,例如存儲數(shù)據(jù)或點(diǎn)亮LED,。總線上一個幀傳輸完成之后,,標(biāo)志FCOMPLETE被置位,。這個標(biāo)志指示所有的數(shù)據(jù)都已正確接收完畢并可以進(jìn)行后續(xù)的處理。此標(biāo)志由用戶固件清除,。 

  LIN協(xié)議從節(jié)點(diǎn)句柄Slavehandler最高可以工作在20K的波特率下,,需要420字的程序存儲空間以及23字節(jié)的數(shù)據(jù)存儲空間。 

  由于其低成本,,LIN協(xié)議具有在汽車應(yīng)用中廣泛采用的潛力,。可以使用內(nèi)置的RC振蕩器并且運(yùn)行在4MHz的時鐘頻率下的諸如Microchip的各種器件的微處理器,,使得設(shè)計(jì)師們能以最低的可能成本設(shè)計(jì)應(yīng)用系統(tǒng),。
 

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載,。