基于IEEE802.11b的EPA溫度變送器設計
——
引言
IEEE802.11是IEEE無(wú)線(xiàn)局域網(wǎng)標準,主要用于用戶(hù)終端的無(wú)線(xiàn)接入。IEEE802.11只規定了開(kāi)放式系統互聯(lián)參考模型的物理層和介質(zhì)訪(fǎng)問(wèn)子層,其MAC層利用載波監聽(tīng)多路訪(fǎng)問(wèn)/沖突避免(CSMA/CA)協(xié)議;定義了單一的MAC層和多樣的物理層,其物理層標準主要有IEEE802.11b、IEEE80211a和IEEE80211g。IEEE802.11b標準是IEEE802.11協(xié)議標準的擴展,最高可以支持11 Mbps的數據速率,運行在2.4 GHz的ISM頻段上,采用的調制技術(shù)是CCK,支持數據業(yè)務(wù)。
本文詳細分析了采用S3C2410處理器平臺具體實(shí)現運用于EPA網(wǎng)絡(luò )的IEEE802.11b無(wú)線(xiàn)實(shí)時(shí)溫度采集器的開(kāi)發(fā)流程,并對串口通信的調試手段及常見(jiàn)問(wèn)題進(jìn)行了探討。
1 溫度變送器的硬件設計
溫度變送器系統平臺硬件系統功能如圖1所示。該平臺的核心器件是Samsung公司的處理器S3C2410,外部擴展了16 MB、16位的Flash內存和64 MB、32位的SDRAM。處理器S3C2410通過(guò)UART接口和溫度變送器相連,通過(guò)USB接口和一個(gè)IEEE802.11b網(wǎng)絡(luò )接口卡相連,通過(guò)RS232串口和外部PC相連。溫度變送器采集到的溫度數據輸入系統緩沖區中,處理器S3C2410可對緩沖數據直接進(jìn)行相關(guān)處理;處理后的數據可以通過(guò)RS232串口傳送給外部宿主機PC,也可通過(guò)IEEE802.11b網(wǎng)絡(luò )接口卡發(fā)送到無(wú)線(xiàn)局域網(wǎng)上。
S3C2410處理器功能十分強大,資源豐富。它內部集成了ARM公司的32位微處理器ARM920T,主頻最高可達203 MHz,具有獨立的16 KB指令Cache和16 KB數據Cache,還有LCD控制器、RAM控制器、NAND閃存控制器、3路UART、4路DMA、4路帶PWM的Timer、并行I/O口、8路10位ADC、觸摸屏接口、2個(gè)USB接口控制器和2路SPI。
從外部溫度傳感器采集到的數據經(jīng)S3C2410 CPU數據處理模塊傳回到IEEE802.11b USB接口卡;IEEE802.11b的無(wú)線(xiàn)通信模塊經(jīng)IEEE802.11b的接入點(diǎn)傳到外部以太網(wǎng)絡(luò )中。

圖1硬件系統功能
2 溫度變送器的軟件系統設計
溫度變送器軟件系統設計流程如圖2所示。系統分3步實(shí)現:① 為溫度變送器編寫(xiě)內核驅動(dòng)程序;② 編寫(xiě)溫度數據采集應用程序,通過(guò)串口獲取溫度數據并進(jìn)行相應的EPA報文打包處理;③ 利用無(wú)線(xiàn)網(wǎng)絡(luò )將處理數據發(fā)送給上位機。前面提到系統平臺上運行的是ARM Linux。在啟動(dòng)后啟用了MMU,系統進(jìn)入保護模式,所以應用程序不能直接讀/寫(xiě)外設的I/O區域(包括I/O端口和I/O內存)。這時(shí)一般要借助于該外設的驅動(dòng)來(lái)進(jìn)入內核態(tài)完成這項工作。

圖2軟件系統設計流程
2.1 串口的驅動(dòng)實(shí)現
在Linux下,設備驅動(dòng)程序可以看成Linux內核與外部設備之間的接口。設備驅動(dòng)程序向應用程序屏蔽了硬件實(shí)現上的細節,使得應用程序可以像操作普通文件一樣來(lái)操作外部設備,可以使用和操作文件中相同的、標準的系統調用接口函數來(lái)完成對硬件設備的打開(kāi)、關(guān)閉、讀/寫(xiě)以及I/O控制操作; 而驅動(dòng)程序的主要任務(wù)也就是要實(shí)現這些系統調用函數。本系統平臺使用的嵌入式ARM Linux系統在內核主要功能上與Linux操作系統沒(méi)有本質(zhì)區別,所以驅動(dòng)程序要完成的任務(wù)也一樣;只是編譯時(shí)使用的編譯器、部分頭文件和庫文件等要涉及具體處理器體系結構, 這些都可在Makefile文件中具體指定。當應用程序對設備文件進(jìn)行諸如open、close、read、write等系統調用操作時(shí),Linux內核將通過(guò)file_operations結構訪(fǎng)問(wèn)驅動(dòng)程序提供的函數。例如,當應用程序對設備文件執行讀操作時(shí), 內核將調用file_operations結構中的read函數。在系統平臺上對串口數碼攝像頭驅動(dòng),首先把串口驅動(dòng)模塊靜態(tài)編譯進(jìn)內核,使平臺支持串口;再在須使用溫度采集時(shí),使用insmode動(dòng)態(tài)加載其驅動(dòng)模塊。這樣溫度傳感器就可正常工作了,接著(zhù)進(jìn)行下一步——對溫度的采集編程。
2.2 溫度數據采集模塊
在溫度變送器串口被驅動(dòng)后,需要再編寫(xiě)一個(gè)采集溫度的應用程序。根據嵌入式系統開(kāi)發(fā)特征,先在宿主機上流程編寫(xiě)應用程序;再使用交叉編譯器進(jìn)行編譯、鏈接,生成目標平臺的可執行文件。宿主機與目標板通信采用打印終端的方式進(jìn)行交叉調試, 成功后移植到目標平臺。編寫(xiě)采集程序是在安裝Linux操作系統的宿主PC機上進(jìn)行的,其程序流程如圖3所示。

圖3溫度數據采集程序
程序運行流程如下:
?、?nbsp;初始化設備功能,發(fā)送03H給溫度變送器。如果初始化失敗,則重復發(fā)送初始化功能碼2次,若都失敗則返回;若成功則進(jìn)入下一步。
?、?nbsp;進(jìn)行數據查詢(xún),查詢(xún)消息中的功能代碼告之被選中的從設備要實(shí)現何種功能。數據段包含了從設備要實(shí)現功能的任何附加信息,即讀取或修改的起始地址以及數據數量。CRC校驗為從設備提供了一種驗證消息內容是否正確的方法。
?、?nbsp;如果從設備產(chǎn)生一個(gè)正常的響應,則響應消息中的功能代碼是查詢(xún)消息中的功能代碼的回應。數據段包括了從設備收集的數據。如果有錯誤發(fā)生,則從設備將修改功能代碼以表明此回應是一個(gè)異常的回應;同時(shí)數據段中包含相應的錯誤代碼,CRC校驗用于主設備判斷響應幀內容的正確性。
?、?nbsp;將從設備得到的數據運用EPA協(xié)議棧進(jìn)行數據的封裝,然后通過(guò)IEEE802.11b無(wú)線(xiàn)網(wǎng)卡發(fā)送到數據分析設備。
?、?nbsp;根據對數據的處理,將得到返回的數據,程序再將返回數據寫(xiě)入從設備。如果寫(xiě)入失敗,則連續寫(xiě)兩次,若仍失敗則跳出。
系統采用主從通信技術(shù), S3C2410處理器模塊作為主設備,溫度傳感器作為從設備。主設備可以對溫度傳感器進(jìn)行初始化,并發(fā)出查詢(xún)指令;溫度傳感器根據主設備查詢(xún)指令實(shí)現相應的功能。S3C2410處理器模塊查詢(xún)的格式包括功能代碼、所有要發(fā)送的數據和CRC校驗域;從設備回應消息也包括相應的功能代碼、任何要返回的數據和CRC校驗域。如果在消息接收過(guò)程中發(fā)生錯誤,從設備將構造一錯誤幀并將其作為應答回應。程序中構造的幀格式如下:
主設備查詢(xún)幀

從設備響應幀

當主設備查詢(xún)從設備時(shí),它希望得到從設備的正常響應,但可能有3種處理情形:
?、?nbsp;從設備收到了主設備的查詢(xún),且全部校驗正確,從設備就產(chǎn)生正確的響應。
?、?nbsp;從設備由于通信錯誤等沒(méi)有收到主設備的查詢(xún),因此也就無(wú)法產(chǎn)生響應。這時(shí)主設備將通過(guò)超時(shí)判斷查詢(xún)的錯誤。
?、?nbsp;從設備收到了主設備的查詢(xún),但檢測出通信幀內容出錯(如CRC校驗出錯或非法的起始地址等),這時(shí)從設備將產(chǎn)生異常響應通知主設備相關(guān)的錯誤信息。
最后將采集數據用EPA協(xié)議棧打包,并利用無(wú)線(xiàn)網(wǎng)絡(luò )進(jìn)行傳輸。
2.3 無(wú)線(xiàn)網(wǎng)絡(luò )模塊
無(wú)線(xiàn)溫度變換器的實(shí)時(shí)數據無(wú)線(xiàn)網(wǎng)絡(luò )模塊是將無(wú)線(xiàn)網(wǎng)卡注入內核,“插槽”驅動(dòng)層通過(guò)API為PC卡服務(wù)層提供服務(wù),編寫(xiě)“插槽”層驅動(dòng)就是實(shí)現這些API函數。PC卡服務(wù)層維護著(zhù)一張函數表,記錄已登記的“插槽”驅動(dòng)層的API函數,相應地提供了兩個(gè)接口函數用來(lái)登記和取消登記一個(gè)“插槽”驅動(dòng)層的API函數。定義如下:
int register_ss_entry(int nsock, ss_entry_t ss_entry);
int unregister_ss_entry(int nsock, ss_entry_t ss_entry);
typedef int (*ss_entry_t)(u_int sock, u_int cmd, void *arg);
◆ 函數register_ss_entry: 用來(lái)登記一個(gè)“插槽”驅動(dòng)層服務(wù)函數。
◆ 函數unregister_ss_entry: 用來(lái)取消指定函數的登記,表明“插槽”層不再提供該服務(wù)。
◆ 具體服務(wù)函數ss_sentry: 該函數的編寫(xiě)是核心。它包括3個(gè)參數: 第1個(gè)參數sock是插槽編號;第2個(gè)參數cmd是命令,即服務(wù)函數的編碼;第3個(gè)參數是一個(gè)void類(lèi)型的指針,用來(lái)傳遞任意的參數。
PCMCIA“卡和插槽服務(wù)”(Card and Socket Services)軟件規范要求插槽層提供的服務(wù)共有12項,Linux操作系統定義在include\pcmcia\ss.h文件里。
enum ss_service {
SS_RegisterCallback, SS_InquireSocket,
SS_GetStatus, SS_GetSocket, SS_SetSocket,
SS_GetIOMap, SS_SetIOMap, SS_GetMemMap, SS_SetMemMap,
SS_GetBridge, SS_SetBridge, SS_ProcSetup
};
3 測試
首先在宿主機PC上使用交叉編譯器編譯、鏈接溫度數據采集程序,使之生成可執行代碼,然后移植到目標平臺上。為了進(jìn)一步觀(guān)察采集的溫度數據效果,可在目標平臺帶網(wǎng)絡(luò )支持的基礎上編寫(xiě)一個(gè)網(wǎng)絡(luò )通信程序,把采集到并處理成浮點(diǎn)型的溫度數據通過(guò)網(wǎng)絡(luò )傳輸到PC機上進(jìn)行顯示。搭建無(wú)線(xiàn)溫度變送器的測試系統如圖4所示。

圖4IEEE802.11b
無(wú)線(xiàn)溫度變送器的測試系統無(wú)線(xiàn)監控系統采集的基于S3C2410的IEEE802.11b無(wú)線(xiàn)溫度變送器的實(shí)時(shí)數據如圖5所示。

圖5IEEE802.11b
4 結論
實(shí)際的溫度測量數據表明,基于IEEE802.11b的EPA溫度數據采集器可以很好地完成溫度數據的采集處理,并通過(guò)無(wú)線(xiàn)接入點(diǎn)與相關(guān)設備進(jìn)行通信。另外,在基于EPA標準的無(wú)線(xiàn)局域網(wǎng)系統應用中,驗證了此設計的可行性。
參考文獻
[1] Tanenbaum Andrew S. Modern Operating System. 北京:機械工業(yè)出版社,2002.
[2] 鄒思軼. 嵌入式Linux設計與應用. 北京:清華大學(xué)出版社,2002.
[3] Karim Yagbmour. 構建嵌入式Linux系統. 北京:中國電力出版社, 2004.
[4] Sloss Anddrew N. Dominic Symes. ARM嵌入式系統開(kāi)發(fā)——軟件設計與優(yōu)化. 北京:北京航空航天大學(xué)出版社,2005.
[5] 毛德操,胡希明. Linux內核源代碼情景分析. 杭州:浙江大學(xué)出版社,2001.
[6] Mark Ciampa. 無(wú)線(xiàn)局域網(wǎng)設計與實(shí)現. 北京:科學(xué)出版社,2003.
[7] 國家質(zhì)量技術(shù)監督局. 中華人民共和國國家標準“用于工業(yè)測量與控制系統的EPA系統結構與通信規范”(報批稿). 2005.
出處:《單片機與嵌入式系統應用》
評論