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