用于汽車網(wǎng)絡(luò)的LIN協(xié)議分析

2013-08-08 18:01 來源:電子信息網(wǎng) 作者:蒲公英

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

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

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

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

1

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

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

消息協(xié)議

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

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

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

2

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

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

檢錯(cuò)機(jī)制

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

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

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

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

1 2 > 
汽車網(wǎng)絡(luò) LIN協(xié)議

相關(guān)閱讀

暫無數(shù)據(jù)

一周熱門