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