基于普通單片機的LIN協(xié)議實(shí)現方案
1 概述
LIN協(xié)議是新出現的一種新型低成本串行通信總線(xiàn),其全稱(chēng)是Local Interconnect Network,即局部互聯(lián)網(wǎng)絡(luò )。它最開(kāi)始出現于汽車(chē)行業(yè),是為解決汽車(chē)智能化和網(wǎng)絡(luò )化的發(fā)展要求和降低汽車(chē)制造成本的矛盾而提出來(lái)的一種串行總線(xiàn)協(xié)議,主要用于車(chē)門(mén)、車(chē)燈等需要簡(jiǎn)單控制但又要求智能控制的場(chǎng)合。它的主要特點(diǎn)是:采用單個(gè)主控制器/多從設備通信模式;基于普通UART/SCI接口硬件實(shí)現,協(xié)議簡(jiǎn)單;網(wǎng)絡(luò )傳輸速率不高,最高可達20kb/s。由于LIN協(xié)議的突出特點(diǎn)是協(xié)議對硬件的依賴(lài)程度低,可以基于普通單片機的通用串口等硬件資源以軟件方式實(shí)現,成本低廉,因此可廣泛應用于汽車(chē)行業(yè)以外的其他領(lǐng)域,如智能家庭網(wǎng)絡(luò )內部的數據傳輸、節點(diǎn)控制等場(chǎng)合。
本文依據對LIN協(xié)議的分析,對其協(xié)議在普通單片機上的具體實(shí)現,即如何利用單片機有限的硬件資源實(shí)現LIN的主節點(diǎn)、從節點(diǎn),進(jìn)行可行性方案的研究、探討。
2 LIN協(xié)議的簡(jiǎn)介
LIN協(xié)議的最新版本是LIN Specification Package Revision 2.O,包括協(xié)議規范、節點(diǎn)診斷配置規范、物理層規范、API規范等幾個(gè)方面,從硬件配置到節點(diǎn)配置語(yǔ)言都作了詳細的規定。下面就其協(xié)議規范作一簡(jiǎn)要介紹和分析。
LIN的數據傳輸是采用報文幀的形式進(jìn)行的。一個(gè)完整的報文幀由1個(gè)主機節點(diǎn)發(fā)送的報文頭(header)和1個(gè)主機或從機節點(diǎn)發(fā)送的響應(response)組成,如圖1所示。報文頭包括1個(gè)間隔場(chǎng)(break)、1個(gè)同步字節場(chǎng)(synch)和1個(gè)保護標識符字節場(chǎng)PID(Protected IDentifier)。間隔場(chǎng)是由持續了至少13個(gè)位時(shí)的顯性電平和至少1個(gè)位時(shí)的隱性電平組成;由主機節點(diǎn)產(chǎn)生,標志著(zhù)一次數據通信過(guò)程報文幀的開(kāi)始。同步字節場(chǎng)包含時(shí)鐘同步信息。同步字節場(chǎng)的格式是0x55,表現在8個(gè)位定時(shí)中有5個(gè)下降沿,即隱性跳變到顯性的邊沿。
所有從機節點(diǎn)在主機節點(diǎn)發(fā)布報文頭之后都應能檢測到間隔場(chǎng)的存在,并且在正確地接收同步字節場(chǎng)后,準確計算出主機節點(diǎn)將要發(fā)送數據的波特率,并以此波特率作為下一步要發(fā)送或接收數據的波特率的設定值。這樣,經(jīng)過(guò)了間隔場(chǎng)和同步字節場(chǎng)的接收,所有的從機節點(diǎn)達到了與主機節點(diǎn)的同步。
下一步,所有的從機節點(diǎn)以計算得到的波特率來(lái)接收報文頭的保護標識符字節場(chǎng)。
保護標識符字節場(chǎng)PID(Protected IDentifier)與標準的串行通信數據幀格式相同,由1位起始位和1位停止位及8位數據位組成,屬于數據場(chǎng),如圖2所示。
保護標識符字節場(chǎng)由兩部分組成:標識符和標識符奇偶校驗。ID0~ID5屬標識符,確定了標識符的內容,可從0~63取值。其中,0~59(0x3b)用于信號傳送幀,60(0x3c)和61(0x3d)用于傳送診斷數據,62(0x3e)保留用于用戶(hù)定義的擴展,63(0x3f)保留用于將來(lái)協(xié)議升級。奇偶校驗位P0和P1則是對標識符位ID0~ID5的奇校驗和偶校驗,作為對接收到ID的校驗措施,以確保接收ID的正確性。
報文幀的響應(response)由3~9個(gè)字節場(chǎng)(data field)組成,包括2、4或8字節的數據場(chǎng)(data field)和1個(gè)校驗和場(chǎng)(checksum)。它們是由要發(fā)送數據的節點(diǎn)(主機節點(diǎn)或從機節點(diǎn))所發(fā)送的數據和校驗場(chǎng)所組成,都屬于數據場(chǎng)。
校驗和場(chǎng)(checksum)有兩種:一般的校驗和場(chǎng)與增強的校驗和場(chǎng)。一般的校驗和是數據場(chǎng)所有字節數據和的反碼。和是按帶進(jìn)位加(ADDC)方式計算,所有數據字節和的補碼與校驗和字節相加的和必須是“0xFF”。增強的校驗和與一般的校驗和的區別在于計算數據場(chǎng)和時(shí)加上了保護標識符字節場(chǎng)。
3 LlN協(xié)議在普通單片機上的實(shí)現
現在單片機種類(lèi)繁多,硬件資源各不相同,功能也千差萬(wàn)別??傮w來(lái)講,基于普通單片機軟件實(shí)現LIN協(xié)議的方法可分為兩大類(lèi):一種是基于單片機通用串口的實(shí)現方式,另一種是基于單片機兩個(gè)普通端口位的位操作實(shí)現方法。
3. 1基于單片機通用串口LlN協(xié)議的實(shí)現
基于單片機通用串口的LIN協(xié)議的實(shí)現方法主要是針對具有通用串口的單片機來(lái)講的。這類(lèi)單片機的代表當屬最常用的51系列單片機,如Atmel公司的AT89C51/52。
(1)基于單片機串口LlN主節點(diǎn)的實(shí)現
由LIN協(xié)議的分析可知,在一次幀通信過(guò)程中,主從節點(diǎn)在大部分時(shí)間里是以標準的串行通信數據幀的形式交換數據的,這也是LIN協(xié)議可以基于單片機通用串口實(shí)現的原因。幀通信的關(guān)鍵是要實(shí)現主節點(diǎn)和從節點(diǎn)的同步。在同步過(guò)程中,主、從節點(diǎn)所執行的操作是不同的:主機節點(diǎn)的任務(wù)是要發(fā)送報文頭,從節點(diǎn)的任務(wù)是接收和判斷報文頭,實(shí)現與主節點(diǎn)的同步。報文頭的間隔場(chǎng)是一個(gè)基于主機節點(diǎn)時(shí)鐘頻率的13個(gè)以上位時(shí)(bit time)和至少1個(gè)位時(shí)的間隔界定符。對主節點(diǎn)來(lái)講,這一部分是實(shí)現主節點(diǎn)功能的關(guān)鍵。間隔場(chǎng)和間隔界定符的實(shí)現可采用改變串口波特率,用串口輸出特定數據的方法來(lái)實(shí)現。例如在一般情況下,單片機采用19.2kb/s波特率的速率傳輸數據,可先將串口的波特率設置為9.6kb/s,則傳輸0xc0這樣一個(gè)數據就可以實(shí)現按照19.2kb/s的波特率來(lái)計算位時(shí)的同步間隔和同步間隔界定符的位時(shí)長(cháng)度要求(因若采用19.2kb/s的傳輸率傳輸00數據只能實(shí)現10個(gè)位時(shí)的同步間隔符,無(wú)法達到13個(gè)位時(shí)的要求)。隨后的PID場(chǎng)的發(fā)送和數據場(chǎng)的發(fā)送或接收,可以基于單片機的通用串口以正常的19.2.kb/s的波特率來(lái)操作。
基于串口LlN主節點(diǎn)硬件原理如圖3所示。
主節點(diǎn)在一次幀通信過(guò)程中,要根據通信過(guò)程中不同的階段,將串口設置成不同波特率的發(fā)送或者接收狀態(tài),以完成報文頭間隔場(chǎng)、同步字節場(chǎng)的發(fā)送,保護標識符字節場(chǎng)的發(fā)送,及下一個(gè)階段的接收或者發(fā)送數據過(guò)程。
(2)基于單片機串口LlN從節點(diǎn)的實(shí)現
從節點(diǎn)實(shí)現的關(guān)鍵是能夠正確實(shí)時(shí)地接收報文頭,達到與主節點(diǎn)的同步,為下一步的數據交換做好準備?;趩纹瑱C通用串口構成的LIN從節點(diǎn)的實(shí)現方案有兩種:一種是查詢(xún)方式,另一種是中斷方式。兩種方法的區別在于報文頭接收判斷方法的不同。查詢(xún)方式硬件原理如圖4所示。
同樣,從節點(diǎn)也要求準確的波特率和計時(shí),對時(shí)鐘要求較高。建議采用22.1184MHz晶振。
在查詢(xún)方式的硬件電路中,為了能及時(shí)感受到主節點(diǎn)報文頭的起始階段,可以將串口接收數據端,RXD端與單片機的一個(gè)外部中斷觸發(fā)端口(INTl或INT0)相連。這樣,當主節點(diǎn)發(fā)送過(guò)來(lái)的間隔場(chǎng)的下降沿到來(lái)時(shí),就可以實(shí)時(shí)地觸發(fā)從節點(diǎn)進(jìn)入對報文頭的接收查詢(xún)程序段。在報文頭的接收查詢(xún)過(guò)程中,從節點(diǎn)自總線(xiàn)電平下降沿到來(lái)之際,就對總線(xiàn)顯性電平(低電平)持續的時(shí)間進(jìn)行累積計算,直到發(fā)現總線(xiàn)恢復為隱性電平(高電平)為止。如果此段持續時(shí)間大于11個(gè)主節點(diǎn)工作位時(shí)時(shí)間,那么從節點(diǎn)就斷定是一次幀通信的開(kāi)始。接著(zhù)從節點(diǎn)對同步字節場(chǎng)的接收作好準備,在同步字節場(chǎng)開(kāi)始位的第一個(gè)下降沿起,連續對同步字節場(chǎng)的后4個(gè)下降沿進(jìn)行計時(shí)累加,最后將得到的計時(shí)時(shí)間除以8,得到主節點(diǎn)發(fā)送數據的位時(shí)時(shí)間,即主節點(diǎn)下一步將要進(jìn)行數據通信的波特率。從節點(diǎn)以此作為串口波特率設定值,通過(guò)串口與主節點(diǎn)交換數據。隨后的串口發(fā)送或接收數據可采用串口查詢(xún)或中斷的方式進(jìn)行。
間隔場(chǎng)和同步字節場(chǎng)的計時(shí)方法有兩種:一種方法是采用軟件模擬一個(gè)位時(shí)時(shí)間,在各階段通過(guò)計算調用位時(shí)程序次數間接計算出時(shí)間;另一種方法是將定時(shí)器TO設定成定時(shí)一個(gè)位時(shí)時(shí)間后中斷,在各個(gè)階段查詢(xún)定時(shí)器T0中斷次數,通過(guò)計算TO中斷次數的差值,也可以間接算出各個(gè)階段的持續時(shí)間長(cháng)度。
查詢(xún)方式硬件電路簡(jiǎn)單,系統中斷的種類(lèi)和次數少,程序運行比較穩定;但不足之處是系統大部分時(shí)間都花費在對幀報文頭的等待查詢(xún)上,系統資源利用率低。
中斷方式則是對查詢(xún)方式的不足之處改進(jìn)和提高,其硬件原理如圖5所示。
中斷方式對間隔場(chǎng)和同步字節場(chǎng)的接收則完全采用中斷方式進(jìn)行。由于普通單片機的外部中斷觸發(fā)端只有下降沿和低電平兩種觸發(fā)方式,所以報文頭間隔場(chǎng)開(kāi)始階段和同步字節場(chǎng)的下降沿可以觸發(fā)從節點(diǎn),但報文信號的上升沿卻無(wú)法讓從節點(diǎn)感知。改進(jìn)方法是,讓接收數據流分別經(jīng)過(guò)1個(gè)三態(tài)門(mén)和1個(gè)三態(tài)非門(mén)再進(jìn)入單片機的串口,2個(gè)三態(tài)門(mén)由單片機的兩個(gè)端口來(lái)控制。一般情況下,三態(tài)門(mén)導通,三態(tài)非門(mén)截止,數據流正常進(jìn)入單片機串口。當間隔場(chǎng)的下降沿觸發(fā)單片機后,程序控制三態(tài)門(mén)截止,三態(tài)非門(mén)導通,數據流反相進(jìn)入單片機,間隔場(chǎng)的上升沿經(jīng)過(guò)三態(tài)非門(mén)后變成下降沿,同樣也可以觸發(fā)單片機中斷。在隨后的同步字節場(chǎng)的接收中,可以按照正常中斷方式進(jìn)行,即可由同步字節場(chǎng)的5個(gè)下降沿觸發(fā)單片機中斷5次接收。由于采用中斷方式,所以各個(gè)階段的計時(shí)就只能采用查詢(xún)定時(shí)器T0中斷次數的方法來(lái)實(shí)現。
中斷方式的優(yōu)點(diǎn)是,對主程序運行的影響比較小,系統的資源利用率高。不足之處是增加了單片機的外圍電路,硬件稍顯復雜。
3.2基于單片機普通端口位LIN協(xié)議的實(shí)現
對于沒(méi)有通用串口的單片機來(lái)講,必須采用端口位位操作的方法來(lái)實(shí)現LIN協(xié)議。這類(lèi)單片機的硬件資源一般很有限,有的只有一個(gè)定時(shí)器,還不具備外部中斷能力,如Microchip的PIC18F200系列。這種單片機的突出特點(diǎn)是價(jià)格低廉,做出的LIN節點(diǎn)將具有無(wú)可比擬的價(jià)格優(yōu)勢。
(1)基于普通端口位LIN主節點(diǎn)的實(shí)現
基于單片機普通端口位的1IN主節點(diǎn),在報文頭和數據場(chǎng)的實(shí)現上都要采用位操作的方法來(lái)實(shí)現。其硬件構成原理圖和基于單片機通用串口LIN主節點(diǎn)硬件原理圖完全相同,區別在于前者數據收發(fā)端RXD和TXD端可以是任意的單片機普通端口位,而后者則必須采用單片機通用串口。
報文頭間隔場(chǎng)的實(shí)現可以將定時(shí)器TO設置為定時(shí)一個(gè)位時(shí)中斷的工作方式,置LIN數據發(fā)送端TXD為顯性電平(低電位),啟動(dòng)定時(shí)器T0對顯性電平持續時(shí)間進(jìn)行計時(shí),當達到13個(gè)以上位時(shí)后置LIN發(fā)送數據端TXD為隱性電平(高電位),這樣就完成了間隔場(chǎng)的發(fā)送。在隨后的間隔場(chǎng)界定符和同步場(chǎng)的實(shí)現上,也采用同樣的方法。在數據場(chǎng)的接收和發(fā)送中,同樣需要定時(shí)器TO的配合來(lái)完成。發(fā)送數據時(shí),從待發(fā)數據存儲區中依次取出一個(gè)個(gè)數據,轉換成10個(gè)bit類(lèi)型的位數據。定時(shí)器T0同樣是1個(gè)位時(shí)中斷1次,在中斷處理程序中改變計時(shí)變量值。發(fā)送數據程序根據計時(shí)變量的差值將lO個(gè)bit類(lèi)型的位數據依次按照持續1個(gè)位時(shí)時(shí)間從數據發(fā)送端TXD端發(fā)出;接收數據時(shí),則需要先用定時(shí)器T0計時(shí)半個(gè)位時(shí)時(shí)間,以檢測1個(gè)字節的開(kāi)始位,然后恢復定時(shí)器TO的一個(gè)位時(shí)計時(shí)中斷設定。這樣,在隨后的數據位檢測中就能保證在數據位的中間時(shí)刻檢測該數據位,從而保證數據位接收的正確性。在10個(gè)bit類(lèi)型的位數據接收完畢后,還要將其轉換為一個(gè)byte類(lèi)型的數據,存入相應的數據緩沖區。
(2)基于普通端口位LIN從節點(diǎn)的實(shí)現
基于單片機普通端口位LIN從節點(diǎn)硬件電路和基于單片機通用串口查詢(xún)方式的從節點(diǎn)硬件電路基本相同,區別同樣也是沒(méi)有用到單片機的通用串口。
由于沒(méi)有外部中斷的功能,因此對主節點(diǎn)發(fā)送過(guò)來(lái)的報文頭的接收只能靠從節點(diǎn)主動(dòng)地等待查詢(xún)??紤]到從節點(diǎn)程序不可能一直在查詢(xún)等待與主節點(diǎn)同步,因此從節點(diǎn)應該不定時(shí)地去查詢(xún)等待主節點(diǎn)的報文頭。開(kāi)始階段設置定時(shí)器為不定長(cháng)時(shí)間中斷方式,時(shí)間到后從節點(diǎn)去查詢(xún)等待主節點(diǎn)發(fā)送的報文幀。當檢測到同步信息后,設置定時(shí)器為標準位時(shí)時(shí)間中斷方式,對從節點(diǎn)接收或發(fā)送數據過(guò)程進(jìn)行位時(shí)界定。從節點(diǎn)按照上述提到的位操作方法接收PID場(chǎng),并轉換為byte類(lèi)型的數據,判斷下一步數據場(chǎng)的發(fā)送或接收方向,接著(zhù)按照位操作的方法實(shí)現數據的發(fā)送或接收。定時(shí)器的兩種工作方式在查詢(xún)等待和報文通信過(guò)程中輪流轉換,在報文通信過(guò)程結束后,重新設置定時(shí)器為不定長(cháng)時(shí)間中斷方式,等待下一次的報文通信過(guò)程,以此類(lèi)推。
從節點(diǎn)由于采用不定期查詢(xún)等待方法與主節點(diǎn)的同步,因此通信成功率不高;但對于數據通信速率和實(shí)時(shí)性要求不是很高的場(chǎng)合,還可以滿(mǎn)足要求。如果單片機有外部中斷能力,則可以改從節點(diǎn)不定期查詢(xún)?yōu)閺墓濣c(diǎn)用外部中斷查詢(xún)主節點(diǎn)發(fā)送來(lái)的報文,這樣通信的成功率就可以大大提高。
結 語(yǔ)
相對于增強型單片機,普通單片機的功能顯得簡(jiǎn)單多了,資源也很有限,但它有一個(gè)價(jià)格低廉的優(yōu)勢。而LIN總線(xiàn)的特點(diǎn)是協(xié)議簡(jiǎn)單,可用軟件方式實(shí)現,特別適合于數據通信速率要求不高、控制簡(jiǎn)單的場(chǎng)合。如果能以普通單片機有限的資源實(shí)現LIN通信協(xié)議,無(wú)疑會(huì )為低端串行通信領(lǐng)域提供一個(gè)很好的選擇。以普通單片機為硬件基礎構成的LIN節點(diǎn)也一定會(huì )在生產(chǎn)和生活的相關(guān)應用領(lǐng)域大有作為。
pid控制相關(guān)文章:pid控制原理
單片機相關(guān)文章:單片機教程
單片機相關(guān)文章:單片機視頻教程
單片機相關(guān)文章:單片機工作原理
pid控制器相關(guān)文章:pid控制器原理
晶振相關(guān)文章:晶振原理
評論