紅外通信協(xié)議
紅外接收電路選用Vishay公司生產(chǎn)的專用紅外接收模塊TSOP1738。該接收模塊是一個三端元件,使用單電源+5V電源,具有功耗低、抗干擾能力強、輸入靈敏度高、對其它波長(950nm以外)的紅外光不敏感的特點,其內(nèi)部結(jié)構(gòu)框圖如圖3所示。
紅外通信協(xié)議 - 紅外通信的軟件設(shè)計
通信方式
考慮到紅外光反射的原因,在全雙工方式下發(fā)送的信號也可能會被本身接收,因此紅外通信需采用異步半雙工方式,即通信的某一方發(fā)送和接收是交替進行的。
通信協(xié)議
進行紅外通信之前,通信雙方首先要根據(jù)系統(tǒng)的功能要求制訂某種特定的通信協(xié)議,然后才能編寫相應(yīng)的通信程序。
愛可信發(fā)布新紅外協(xié)議支持4Mbps紅外通訊
無線數(shù)據(jù)業(yè)務(wù)解決方案提供商愛可信公司(ACCESS,東京股票交易所4813)發(fā)布IrDA紅外通信協(xié)議棧的最新版本IrFrontv2.1。
IrFrontv2.1將使普通紅外通信速度提升4至10倍,能夠處理大量的手機數(shù)據(jù)。2005年10月推出支持4Mbps的IrFront版本,而支持高速紅外通信IrSimple*國際協(xié)議的版本也于2006年1月面市。
愛可信總裁兼首席執(zhí)行官ToruArakawa說:“新版IrFront能夠提供高速、大數(shù)量的紅外通信能力。諸如IrFront這類高速紅外解決方案,為當(dāng)今網(wǎng)絡(luò)世界的設(shè)備互聯(lián)和信息互通了提供新的方式,必能為未來生活帶來創(chuàng)新。”
IrFront是一個針對手機及其他資源有限的嵌入設(shè)備的精簡的IrDA通信協(xié)議棧。IrFront由愛可信公司開發(fā),完全符合IrDA*紅外通信協(xié)議規(guī)范。除了支持標(biāo)準(zhǔn)的IrCOMM、IrTran-P,IrFront還提供豐富的可選性能,包括用于紅外金融服務(wù)的IrFM功能,及各種配置的OBEX以及其它選項,如可以用于交換地址薄、Email和其它數(shù)據(jù)的IrMC。迄今為止,已有超過6家手機制造商在他們的手機產(chǎn)品中采用了IrFront;在NTTDoCoMo,IrFront被大規(guī)模用于i-mode手機。IrFront還大量應(yīng)用于各種打印機,如富士膠片公司生產(chǎn)的手提打印機。IrFront還可以通過無網(wǎng)絡(luò)連接設(shè)備的紅外功能,使之接入互聯(lián)網(wǎng)。
IrFrontv2.1主要基于IrSimple開發(fā),IrSimple是用紅外技術(shù)實現(xiàn)高速通信、并通過簡單和標(biāo)準(zhǔn)化的模塊降低客戶開發(fā)成本的國際協(xié)議。IrSimple可以實現(xiàn)靜態(tài)圖像和視頻影像從手機到打印機或電視的瞬時傳送。
IrFrontv2.1在日本羅姆(ROHM)有限公司的紅外發(fā)射/接受控制器(BU92002GU和BU92004GU)上經(jīng)過了測試。IrFrontv2.1能夠穩(wěn)定運行在這些標(biāo)準(zhǔn)芯片上,并提供了可降低CPU功耗、支持大數(shù)據(jù)量交換的接口。
紅外通信協(xié)議 - 在嵌入式系統(tǒng)中的實現(xiàn)
采用Sitronix公司的ST2204電路板為硬件平臺,處理芯片內(nèi)核為65C02。ST2204電路板使用了集成的8位處理器,尋址能力達到了44M字節(jié),并提供了低電壓檢測功能。由于2204集成了上述這些功能,非常適合省電、支持長電池壽命的手持移動設(shè)備嵌入式設(shè)計實現(xiàn)方案。在固件設(shè)計、軟件設(shè)計方面采用了匯編語言。65C02上的匯編采用存儲器映象方式,并廣泛使用了零頁尋址,因此使用起來十分方便、高效。整個設(shè)計實現(xiàn)可分為硬件設(shè)計和軟件設(shè)計兩部分。硬件設(shè)計包括電路設(shè)計和固件程序(Firmware)的編寫;軟件設(shè)計包括CRC數(shù)據(jù)編碼校驗、數(shù)據(jù)收發(fā)及主站(Primary)、輔站(Slave)狀態(tài)要流程實現(xiàn)等。
在硬件設(shè)計方面根據(jù)對設(shè)備的需求和硬件板芯片性能,可以設(shè)計出相應(yīng)的電路在仿真板上進行實驗。固件程序和編寫可采用分塊的方法,例如初始化(Initilize)模塊、中斷處理(Interrupt)模塊、時鐘(Timer)事件處理模塊等。初始化模塊可根據(jù)硬件板的指南說明(Specification)提供的各個寄存器值設(shè)備初始化參數(shù);中斷處理模塊可按照中斷向量表提供的入口地址編寫,其基本要求短小精悍,運行的時鐘周期與微處理器頻率和設(shè)備需求的波特率緊密相關(guān)。時鐘事情處理可根據(jù)硬件板提供的基本時鐘設(shè)備不同的時鐘精度,以滿足不同的需求。在紅外傳輸實際設(shè)計中定時器主要用于三個方向:第一是sniff探查過程中主站發(fā)廣播幀后輔站超時未響應(yīng)的處理;第二是超時重發(fā)控制;最后一個是數(shù)據(jù)傳輸過程中輪轉(zhuǎn)時間片的控制。其中第三個方面要求的精度比較高,紅外協(xié)議制定的標(biāo)準(zhǔn)是在25ms~85ms之間。因此有必要把超時處理放在中斷處理。在程序編寫時使用信號量和程序計數(shù)器進行時間控制。其基本思路得設(shè)備一個程序計數(shù)器進行累加計時,當(dāng)各自事情時間到達時分別設(shè)置三個信號量來標(biāo)志事件處理,當(dāng)事件處理完畢后重置各自信號量,轉(zhuǎn)入重新計時。
在軟件設(shè)計方面,要對發(fā)送的數(shù)據(jù)進行幀包裝(FrameWrapper),添加CRC16校驗,用匯編實現(xiàn)CRC算法比C稍微復(fù)雜些。一個主要的技巧是將要進行校驗的數(shù)據(jù)地址和CRC數(shù)據(jù)表的索引地址置入一個零頁的內(nèi)存地址中,采用通用寄存器對其進行間接尋址。這樣就實現(xiàn)了C語言中的指針效果,可以比較方便地查詢CRC表。在數(shù)據(jù)收發(fā)應(yīng)用中,分為主站(Primarystation)和輔站(slavestation)兩種角度。主站角度負(fù)責(zé)發(fā)起,建立連接,進行時間片輪轉(zhuǎn)調(diào)度等。輔站主要負(fù)責(zé)應(yīng)答,響應(yīng)命令。在一定條件下主站輔站角度可以互換,主輔站均可收發(fā)數(shù)據(jù)。
紅外通信協(xié)議
收發(fā)數(shù)據(jù)的中斷函數(shù)最重要也是底層的核心所在。在接收方首先公進行硬件初始化,設(shè)置UART接收初始化狀態(tài)并進行中斷允許標(biāo)志設(shè)置(具體設(shè)置可以參考所選擇的電路板說明)等。當(dāng)紅外數(shù)據(jù)到達后即會觸發(fā)一個UART中斷,系統(tǒng)處理完當(dāng)前事件后便會根據(jù)中斷向量表提供的入口地址調(diào)用接收中斷處理接收數(shù)據(jù)。在接收過程中,UART會搜索匹配開始位和結(jié)束標(biāo)志。接收完畢后,返回系統(tǒng)調(diào)用程序。在實際應(yīng)用中,當(dāng)接收完數(shù)據(jù)后,即可按裝收幀控制域判斷幀類型,并結(jié)合接收站所處的相應(yīng)狀態(tài)機進行流程處理。下面是紅外接收數(shù)據(jù)的中斷程序源碼:
/*******************************************
*UARTReceiverInterruptServiceRoutine
********************************************/
ISR_URX:
pha
phx;壓棧,保存通用寄存器值
cld;清空十進制標(biāo)志位
ldx#00001100B;允許接收,并設(shè)置可以接收下一字節(jié)
stx< P>
ldxmBagLen
cpx#IrDAb_BAG_LEN;一個包的長度
bcsferr_over;溢出否
lda< P>
stamReadBuff,x;寫數(shù)據(jù)
lda< P>
stamIrdaByteFlag;保存狀態(tài)標(biāo)志位
incmBagLen;計數(shù)器
bra?exit
?err_over;
smb0< P>
?exit;
plx;出棧,恢復(fù)通用寄存器值
pla
rti
該中斷處理程序在硬件收到一個字節(jié)時觸發(fā)。它先將通用寄存器值壓棧保存,接下來進行狀態(tài)寄存器的控制,并檢查一些狀態(tài)標(biāo)志,然后進行數(shù)據(jù)的接收;將數(shù)據(jù)保存在一個緩存里,并進行溢出等狀態(tài)的檢測和控制。最后恢復(fù)通用寄存器的值,返回中斷調(diào)節(jié)函數(shù)。按照類似的原理可以編寫出紅外發(fā)送方程序。編寫數(shù)據(jù)收發(fā)中斷程序有一點要注意,程序代碼量和處理器主頻以及選擇的紅外波特速率是密切相關(guān)的。若不注意就很容易造成“丟中斷”的現(xiàn)象,這是應(yīng)該避免的。還有一點要說明:UART是工作在半雙工模式下,在一些實時系統(tǒng)和時間精度要求較高的應(yīng)用中是不能同時進行收發(fā)數(shù)據(jù)的。但由于其收發(fā)時間片較短(最長為500ms),在一些普通應(yīng)用中可以模擬成同時收發(fā)。
在程序編寫完后對其進行編譯/連接定位,用調(diào)試器以16進制的形式加載在主機開發(fā)系統(tǒng)中即可進行模擬調(diào)試。但是模擬調(diào)式不能百分之百地模擬硬件的全部特性。它主要用于調(diào)試軟件邏輯、狀態(tài)機流程。對于調(diào)試UART數(shù)據(jù)收發(fā)等實時性較強的硬件特征還需到目標(biāo)系統(tǒng)上進行驗證。