- 相關推薦
紅外通訊協(xié)議在嵌入式系統(tǒng)中的實現(xiàn)
摘要:從紅外通訊協(xié)議的特點、基本原理對紅外無線通信技術進行了分析,結合實際例程探討了紅外數(shù)據(jù)通信在嵌入式系統(tǒng)中的基本設計要點。關鍵詞:紅外通訊協(xié)議嵌入式系統(tǒng)異步通信收發(fā)器狀態(tài)機
紅外和藍牙協(xié)議是兩種較流行的短距離無線通信協(xié)議。但目前藍牙協(xié)議各大廠商尚未有一個統(tǒng)一的標準規(guī)范,加之硬件價格較為昂貴的缺點,因此市場上紅外通信在手機、筆記本電腦等小型移動設備中仍然應用廣泛,在嵌入式系統(tǒng)中的實際應用有著較高實際意義。
1紅外協(xié)議背景
紅外線是波長在750nm至1mm之間的電磁波,其頻率高于微波而低于可見光,是一種人的眼眼看不到的光線。目前無線電波和微波已被廣泛應用在長距離的無線通信中,但由于紅外線的波長較短,對障礙物的衍射能力差,所以更適合應用在需要短距離無線通信場合點對點的直接線數(shù)據(jù)傳輸。為了使各種設備能夠通過一個紅外接口進行通信,紅外數(shù)據(jù)協(xié)議(InfraredDataAssociation,簡稱IRDA)發(fā)布了一個關于紅外的統(tǒng)一的軟硬件規(guī)范,也就是紅外數(shù)據(jù)通訊標準。
2紅外協(xié)議基本結構
紅外數(shù)據(jù)通訊標準包括基本協(xié)議和特定應用領域的協(xié)議兩類。類似于TCP-IP協(xié)議,它是一個層式結構,其結構形成一個棧,如圖1所示。
其中基本的協(xié)議有三個:①物理層協(xié)議(IrPHY),制定了紅外通信硬件設計上的目標和要求,包括紅外的光特性、數(shù)據(jù)編碼、各種波特率下幀的包括格式等。為達到兼容,硬件平臺以及硬件接口設計必須符合紅外協(xié)議制定的規(guī)范。②連接建立協(xié)議(IrLAP)層制定了底層連接建立的過程規(guī)范,描述了建立一個基本可靠連接的過程和要求。③連接管理協(xié)議(IrLMP)層制定了在單位個IrLAP連接的基礎上復用多個服務和應用的規(guī)范。在IrLMP協(xié)議上層的協(xié)議都屬于特定應用領域的規(guī)范和協(xié)議。④流傳輸協(xié)議(TingTP)在傳輸數(shù)據(jù)時進行流控制。制定把數(shù)據(jù)進行拆分、重組、重傳等的機制。⑤對象交換協(xié)議(IrOBEX)制定了文件和其他數(shù)據(jù)對象傳輸時的數(shù)據(jù)格式。⑥模擬串口層協(xié)議(IrCOMM)允許已存在的使用串口通信的應用象使用串口那樣使用紅外進行通信。⑦局域網(wǎng)訪問協(xié)議(IrLAN)允許通過紅外局域網(wǎng)絡喚醒筆記本電腦等移動設備,實際遠程搖控等功能。
整個紅外協(xié)議棧比較龐大復雜,在嵌入式系統(tǒng)中,由于微處理器速度和存儲器容量等限制,不可能也沒必要實現(xiàn)整個的紅外協(xié)議棧。一個典型的例子就是TinyTP協(xié)議中數(shù)據(jù)的拆分和重組。它采用了信用片(creditcard)機制,這極大地增加了代碼設計的復雜性,而實際在紅外通信中一般不會有太大數(shù)據(jù)量的傳輸,尤其在嵌入式系統(tǒng)中完全可以考慮將數(shù)據(jù)放入單個數(shù)據(jù)包進行傳輸,用超時和重發(fā)機制保證傳輸?shù)目煽啃。因此可以將協(xié)議棧簡化,根據(jù)實際需求,有選擇地實現(xiàn)自己需要的協(xié)議和功能即可。
3紅外協(xié)議數(shù)據(jù)基本傳輸原理
由于硬件接口限制,嵌入式系統(tǒng)中紅外通信的速率基本在9600bps~115.2kbps之間。這里是通過硬件電路板上的異步通信收發(fā)器(UART)進行紅外數(shù)據(jù)編碼和無線傳輸。在115.2kbps速率下紅外采用RZI的編碼調制方案,脈沖周期為3/16位周期。數(shù)據(jù)校驗采用CRC16。其基本思想是將要發(fā)送的數(shù)據(jù)按照CRC16算法(CRC算法可以參考相關資料)進行打包校驗,在接收時進行CRC解包并與常數(shù)OXF0B8比較,若匹配即數(shù)據(jù)校驗無誤。紅外數(shù)據(jù)傳輸以幀為基本單位。幀是一些特定域的組合,其中紅外協(xié)議底層字節(jié)包格式如圖2所示。
各個域含義如下:STA為開始標志,即0x7E、ADDR為8位的地址域;DATA為數(shù)據(jù)域;FSC為16們的CRC校驗碼;STO標志幀結束,在接收兩個連續(xù)的幀時必須至少有3個以上的1后則標志該幀有錯誤,設備會放棄該幀。在紅外數(shù)據(jù)實際傳輸過程中,為了延時控制考慮,一般在數(shù)據(jù)幀頭添加多個STA域,通常采用連續(xù)11個0x7E達到延時目的。在接收時,當收到多個STA域時當作一個來處理,多余的STA域被忽略。紅外數(shù)據(jù)傳輸?shù)臓顟B(tài)機流程如圖3所示。
下面對圖2作幾點說明:(1)數(shù)據(jù)傳輸時首先進行AddressDiscovery過程,在此過程中發(fā)廣播幀,等待對方設備響應,收到響應幀后可以取得對方設備地址。(2)取得對方地址后,進行Connct過程,在此過程中將與對方設備協(xié)商傳輸參數(shù),如波特率、數(shù)據(jù)包大小、輪轉時間片等,之后建立連接。(3)建立完連接即進入InformationTransfer過程,進行數(shù)據(jù)校驗,傳輸。其中按照一定算法進行時間片數(shù)據(jù)幀收發(fā)控制。(4)數(shù)據(jù)傳輸完畢后進入Disconnect過程,斷開連接。(5)在AddressDiscovery過程中,有可能發(fā)現(xiàn)對方設備地址與本機設備地址有沖突,此時進入AddressConflictResolution過程,解決完設備沖突后再返回。
圖3是一個標準的紅外數(shù)據(jù)傳輸狀態(tài)機流程,但在一些嵌入式設計方案中,出于省電等目的,可以不進入AddressDiscovery過程,也就是簡化掉AddressDiscovery過程而轉入Sniff過程。在探查一定時間后,若未收到對方設備響應幀,自動進入休眠狀態(tài),若收到對方設備響應幀,則進入正常的連接過程。同時,在連接過程與對方協(xié)商傳輸參數(shù)的過程中有一項窗口大小(windowssize)參數(shù),它是指定接收方可緩沖多少個幀后再進行接收確認,其數(shù)值為1~7。在嵌入式系統(tǒng)存儲空間有限的情況下,可以采用默認值1進行數(shù)據(jù)的簡單確認,也就是接收到一個數(shù)據(jù)幀后立即進行確認。這樣既節(jié)省了資源又使代碼量更小,運行速度更快。
4嵌入式系統(tǒng)中紅外協(xié)議實現(xiàn)設計
筆者采用Sitronix公司的ST2204電路板為硬件平臺,處理芯片內核為65C02。ST2204電路板使用了集成的8位處理器,尋址能力達到了44M字節(jié),并提供了低電壓檢測功能。由于2204集成了上述這些功能,非常適合省電、支持長電池壽命的手持移動設備嵌入式設計實現(xiàn)方案。在固件設計、軟件設計方面采用了匯編語言。65C02上的匯編采用存儲器映象方式,并廣泛使用了零頁尋址,因此使用起來十分方便、高效。整個設計實現(xiàn)可分為硬件設計和軟件設計兩部分。硬件設計包括電路設計和固件程序(Firmware)的編寫;軟件設計包括CRC數(shù)據(jù)編碼校驗、數(shù)據(jù)收發(fā)及主站(Primary)、輔站(Slave)狀態(tài)要流程實現(xiàn)等。
在硬件設計方面根據(jù)對設備的需求和硬件板芯片性能,可以設計出相應的電路在仿真板上進行實驗。固件程序和編寫可采用分塊的方法,例如初始化(Initilize)模塊、中斷處理(Interrupt)模塊、時鐘(Timer)事件處理模塊等。初始化模塊可根據(jù)硬件板的指南說明(Specification)提供的各個寄存器值設備初始化參數(shù);中斷處理模塊可按照中斷向量表提供的入口地址編寫,其基本要求短小精悍,運行的時鐘周期與微處理器頻率和設備需求的波特率緊密相關。時鐘事情處理可根據(jù)硬件板提供的基本時鐘設備不同的時鐘精度,以滿足不同的需求。在紅外傳輸實際設計中定時器主要用于三個方向:第一是sniff探查過程中主站發(fā)廣播幀后輔站超時未響應的處理;第二是超時重發(fā)控制;最后一個是數(shù)據(jù)傳輸過程中輪轉時間片的控制。其中第三個方面要求的精度比較高,紅外協(xié)議制定的標準是在25ms~85ms之間。因此有必要把超時處理放在中斷處理。在程序編寫時使用信號量和程序計數(shù)器進行時間控制。其基本思路得設備一個程序計數(shù)器進行累加計時,當各自事情時間到達時分別設置三個信號量來標志事件處理,當事件處理完畢后重置各自信號量,轉入重新計時。
在軟件設計方面,要對發(fā)送的數(shù)據(jù)進行幀包裝(FrameWrapper),添加CRC16校驗,用匯編實現(xiàn)CRC算法比C稍微復雜些。一個主要的技巧是將要進行校驗的數(shù)據(jù)地址和CRC數(shù)據(jù)表的索引地址置入一個零頁的內存地址中,采用通用寄存器對其進行間接尋址。這樣就實現(xiàn)了C語言中的指針效果,可以比較方便地查詢CRC表。在數(shù)據(jù)收發(fā)應用中,分為主站(Primarystation)和輔站(slavestation)兩種角度。主站角度負責發(fā)起,建立連接,進行時間片輪轉調度等。輔站主要負責應答,響應命令。在一定條件下主站輔站角度可以互換,主輔站均可收發(fā)數(shù)據(jù)。
收發(fā)數(shù)據(jù)的中斷函數(shù)最重要也是底層的核心所在。在接收方首先公進行硬件初始化,設置UART接收初始化狀態(tài)并進行中斷允許標志設置(具體設置可以參考所選擇的電路板說明)等。當紅外數(shù)據(jù)到達后即會觸發(fā)一個UART中斷,系統(tǒng)處理完當前事件后便會根據(jù)中斷向量表提供的入口地址調用接收中斷處理接收數(shù)據(jù)。在接收過程中,UART會搜索匹配開始位和結束標志。接收完畢后,返回系統(tǒng)調用程序。在實際應用中,當接收完數(shù)據(jù)后,即可按裝收幀控制域判斷幀類型,并結合接收站所處的相應狀態(tài)機進行流程處理。下面是紅外接收數(shù)據(jù)的中斷程序源碼:
/*******************************************
*UARTReceiverInterruptServiceRoutine
********************************************/
ISR_URX:
pha
phx;壓棧,保存通用寄存器值
cld;清空十進制標志位
ldx#00001100B;允許接收,并設置可以接收下一字節(jié)
stx<USTR
ldxmBagLen
cpx#IrDAb_BAG_LEN;一個包的長度
bcsferr_over;溢出否
lda<UDATA
stamReadBuff,x;寫數(shù)據(jù)
lda<USTR
stamIrdaByteFlag;保存狀態(tài)標志位
incmBagLen;計數(shù)器++
bra?exit
?err_over;
smb0<mzIrdaBagFlag;溢出標志位
?exit;
plx;出棧,恢復通用寄存器值
pla
rti
該中斷處理程序在硬件收到一個字節(jié)時觸發(fā)。它先將通用寄存器值壓棧保存,接下來進行狀態(tài)寄存器的控制,并檢查一些狀態(tài)標志,然后進行數(shù)據(jù)的接收;將數(shù)據(jù)保存在一個緩存里,并進行溢出等狀態(tài)的檢測和控制。最后恢復通用寄存器的值,返回中斷調節(jié)函數(shù)。按照類似的原理可以編寫出紅外發(fā)送方程序。編寫數(shù)據(jù)收發(fā)中斷程序有一點要注意,程序代碼量和處理器主頻以及選擇的紅外波特速率是密切相關的。若不注意就很容易造成“丟中斷”的現(xiàn)象,這是應該避免的。還有一點要說明:UART是工作在半雙工模式下,在一些實時系統(tǒng)和時間精度要求較高的應用中是不能同時進行收發(fā)數(shù)據(jù)的。但由于其收發(fā)時間片較短(最長為500ms),在一些普通應用中可以模擬成同時收發(fā)。
在程序編寫完后對其進行編譯/連接定位,用調試器以16進制的形式加載在主機開發(fā)系統(tǒng)中即可進行模擬調試。但是模擬調式不能百分之百地模擬硬件的全部特性。它主要用于調試軟件邏輯、狀態(tài)機流程。對于調試UART數(shù)據(jù)收發(fā)等實時性較強的硬件特征還需到目標系統(tǒng)上進行驗證。
【紅外通訊協(xié)議在嵌入式系統(tǒng)中的實現(xiàn)】相關文章:
基于8051嵌入式系統(tǒng)的GPRS終端實現(xiàn)08-06
嵌入式MPEG—4解碼系統(tǒng)的設計與實現(xiàn)08-06
利用SPD實現(xiàn)嵌入式系統(tǒng)中內存的自動識別和配置08-06
嵌入式系統(tǒng)中的CACHE問題08-06
用GPRS modem實現(xiàn)嵌入式Internet接入系統(tǒng)04-12
嵌入式Linux系統(tǒng)中的GUI系統(tǒng)的研究與移植08-06
嵌入式系統(tǒng)中“軟外設”的研究08-06
嵌入式系統(tǒng)中的內存壓縮技術08-06