新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于嵌入式Linux的便攜式RFID信息采集與處理系統(tǒng)

基于嵌入式Linux的便攜式RFID信息采集與處理系統(tǒng)

作者:武國強,呂柏權(quán) 時間:2008-07-30 來源:電子技術(shù)應(yīng)用 收藏

2 系統(tǒng)軟件設(shè)計

本文引用地址:http://butianyuan.cn/article/86410.htm

  系統(tǒng)軟件是整個系統(tǒng)的靈魂,其設(shè)計的好壞直接影響系統(tǒng)的穩(wěn)定性和可擴展性等性能。系統(tǒng)設(shè)計將軟件分為兩層結(jié)構(gòu),如圖5所示。最下面一層為操作系統(tǒng)層,主要實現(xiàn)對操作系統(tǒng)的移植和各種設(shè)備驅(qū)動程序的編寫,包括OLED模塊、USB Device、紅外、鍵盤等設(shè)備驅(qū)動程序。上一層為應(yīng)用程序?qū)樱饕獙崿F(xiàn)卡信息顯示、鍵盤掃描、電子標(biāo)簽卡讀寫、文件傳輸、時鐘以及電池電量檢測等功能。

  2.1

  是一種公開源碼的多任務(wù)操作系統(tǒng),具有開放度高、安全性好、穩(wěn)定性強、可移植性好等特點,在操作系統(tǒng)中被大量采用。

  本設(shè)計采用的Linux內(nèi)核是在ARM-Linux的基礎(chǔ)上,編寫了OLED顯示模塊、USB 設(shè)備、紅外收發(fā)器及鍵盤的設(shè)備驅(qū)動程序。在Linux系統(tǒng)中,設(shè)備驅(qū)動程序占有很重要的位置,它提供了在用戶空間操作硬件設(shè)備的接口。Linux系統(tǒng)將設(shè)備分為字符設(shè)備、塊設(shè)備及網(wǎng)絡(luò)設(shè)備三種,并給出針對不同設(shè)備的數(shù)據(jù)結(jié)構(gòu)及注冊函數(shù)。當(dāng)用戶開發(fā)設(shè)備驅(qū)動程序時,只需按硬件操作的方法填充設(shè)備數(shù)據(jù)結(jié)構(gòu),并將它注冊到內(nèi)核中即可。

  為了方便用戶應(yīng)用程序的編寫,把USB設(shè)備實現(xiàn)為CDC(Communication Device Class)類設(shè)備,其驅(qū)動程序分為兩層,最底層操作AT91RM9200上的USB設(shè)備控制器,如處理硬件中斷、讀寫寄存器及操作I/O口來檢測設(shè)備的插拔;上層實現(xiàn)了底層與TCP/IP協(xié)議層的連接,主要是模擬物理網(wǎng)卡,并注冊到內(nèi)核。這樣,在應(yīng)用程序的USB設(shè)備就是一個標(biāo)準(zhǔn)的網(wǎng)絡(luò)設(shè)備,用戶不需要了解驅(qū)動程序的接口,而直接使用Linux提供的套接字進行網(wǎng)絡(luò)通信程序的開發(fā)。當(dāng)用戶進行二次開發(fā)時,可以不加修改地將上位機開發(fā)好的網(wǎng)絡(luò)通信程序直接移植到本系統(tǒng)中,而且可以通過上位機的Telnet等工具對系統(tǒng)進行一定的操作。

  其他驅(qū)動程序(如OLED顯示模塊、鍵盤、紅外收發(fā)器)都作為Linux下的標(biāo)準(zhǔn)字符設(shè)備編寫,使用register_chrdev( )函數(shù)進行注冊,提供了讀、寫和控制操作。在Linux系統(tǒng)中,應(yīng)用程序?qū)ψ址O(shè)備的操作與文件的操作相同。

  Linux中設(shè)備驅(qū)動程序可以通過模塊方式動態(tài)地加載和卸載,也可以直接編譯到內(nèi)核中。前者使用靈活,可以減小內(nèi)核,但因嵌入式系統(tǒng)要求所有設(shè)備在初始化后全部就緒,不能在使用時加載設(shè)備的驅(qū)動模塊。所以,本系統(tǒng)中所有的設(shè)備驅(qū)動程序都直接編譯進內(nèi)核。

  每個設(shè)備驅(qū)動程序在用戶空間對應(yīng)一個設(shè)備文件,由文件系統(tǒng)管理。本系統(tǒng)使用ext2作為根文件系統(tǒng)。為了開發(fā)和升級方便,首先將根文件系統(tǒng)做成RAMDISK格式,所謂RAMDISK就是系統(tǒng)啟動后將壓縮的文件解壓到內(nèi)存,形成一個虛擬硬盤;然后,將引導(dǎo)程序、內(nèi)核映像及根文件系統(tǒng)燒寫到Flash中。

  系統(tǒng)加電后,引導(dǎo)程序?qū)?nèi)核映像從Flash中調(diào)入內(nèi)存,然后從核入口開始執(zhí)行:首先初始化CPU,然后加載各個設(shè)備驅(qū)動程序,最后掛載文件系統(tǒng),執(zhí)行應(yīng)用程序。

  2.2 應(yīng)用程序設(shè)計

  Linux是多任務(wù)系統(tǒng),支持多線程及多進程。多線程的優(yōu)點是線程比進程小,可以使應(yīng)用更輕便,線程間通信方便;缺點是所有線程使用同一個地址空間,如果一個線程出現(xiàn)問題,整個系統(tǒng)將受影響;而進程各自占有一份內(nèi)存空間,可以增強系統(tǒng)的穩(wěn)定性,但是多進程增加了系統(tǒng)開銷,進程間通信復(fù)雜。為此,根據(jù)實際情況,考慮到系統(tǒng)穩(wěn)定性,本系統(tǒng)采取兩者相結(jié)合的方式分別完成數(shù)據(jù)采集處理及文件傳輸功能。

  2.2.1 數(shù)據(jù)采集處理
  數(shù)據(jù)采集處理是一個進程,它包括主線程和輔線程。主線程完成電子標(biāo)簽卡信息的讀取、寫入、實時顯示及查詢;輔線程實現(xiàn)一個時鐘以提供用戶當(dāng)前時間,并定時對電池的電量進行檢測和動態(tài)顯示,在電量過低時發(fā)出警告。

  應(yīng)用程序用MAIL命令方式完成電子標(biāo)簽卡的讀寫。該進程首先初始化屏幕,然后等待按鍵中斷,當(dāng)有鍵按下時,根據(jù)鍵值執(zhí)行相應(yīng)的工作;當(dāng)指定時間內(nèi)沒有鍵按下,系統(tǒng)則進入休眠狀態(tài),從而達到省電的目的。程序流程圖如圖6。


  當(dāng)成功采集到標(biāo)簽卡信息后,應(yīng)用程序?qū)⒖ㄐ畔?包括卡號、卡狀態(tài)、用戶數(shù)據(jù)及當(dāng)前時間)通過OLED顯示屏提供給用戶,并寫入一個文件進行記錄。由于文件傳輸進程會將該文件傳輸?shù)缴衔粰C,所以當(dāng)讀寫文件時要將文件上鎖。Linux提供了文件鎖以防止不同進程同時訪問同一個文件。本文使用flock()函數(shù)對文件上鎖和解鎖。

  由于OLED是圖形點陣式顯示屏,而且Flash容量有限,所以不可能直接使用漢字字庫。系統(tǒng)預(yù)先提取所有用到的漢字、數(shù)字及字母的點陣數(shù)據(jù),然后建立自己的字庫文件,從而使應(yīng)用程序可以對漢字、數(shù)字及字母進行顯示。

  2.2.2 文件傳輸
  文件傳輸是一個進程,完成卡信息的上傳及其他數(shù)據(jù)的下載。與上位機通信采用Clinet/Server模型。該進程實質(zhì)上是一個服務(wù)器端(本系統(tǒng))的應(yīng)用程序,它循環(huán)等待客戶端(上位機)的連接請求。當(dāng)請求到達時,首先判斷請求來自哪個接口(USB或者紅外接口),然后根據(jù)請求的類型執(zhí)行相應(yīng)的上傳或下載??紤]到實際應(yīng)用中可能會使用多臺手持式閱讀器,為了方便上位機對信息的管理,規(guī)定文件名由手持式閱讀器編號和文件上傳序號組成,程序在上傳文件時自動將其編號及上傳序號加入文件名。該進程的流程如圖7。

3 系統(tǒng)電源管理

  本系統(tǒng)使用鋰電池為系統(tǒng)供電。為了延長電池的續(xù)航能力,將應(yīng)用程序設(shè)計為三種運行狀態(tài):上電空閑狀態(tài)、程序執(zhí)行狀態(tài)及系統(tǒng)睡眠狀態(tài)。當(dāng)用戶不進行任何操作時,系統(tǒng)將進入睡眠狀態(tài)以達到省電目的。系統(tǒng)的睡眠是基于微處理器的電源管理功能實現(xiàn)的,進入睡眠的步驟如下:

  (1)關(guān)閉所有外設(shè);
  (2)保存當(dāng)前系統(tǒng)狀態(tài);
  (3)使SDRAM進入自刷新模式;
  (4)設(shè)置喚醒事件,使微處理器進入睡眠狀態(tài)。

  當(dāng)喚醒事件發(fā)生時,如有鍵按下,則執(zhí)行系統(tǒng)復(fù)位。過程如下:

  (1)恢復(fù)部分微處理器的寄存器;
  (2)喚醒外部設(shè)備,系統(tǒng)開始運行。

  本文介紹了在AT91RM9200高性能ARM芯片上運行嵌入式Linux,結(jié)合TagMaster AB公司功能強大的射頻識別模塊S1510實現(xiàn)式標(biāo)簽卡的信息采集和處理。系統(tǒng)使用方便、靈活。另外,為克服LCD低溫?zé)o法工作、亮度不夠及耗電大的缺點,采用OLED顯示模塊使系統(tǒng)可以在惡劣環(huán)境下應(yīng)用,并增加了電池的續(xù)航能力;為使系統(tǒng)與上位機通信方便,采用了支持熱插拔的USB接口。

參考文獻

1 Rubini A著,魏永明譯.LINUX設(shè)備驅(qū)動程序(第二版)[M].北京:中國電力出版社,2002
2 張 娟,吳大偉.應(yīng)用式數(shù)據(jù)采集與處理系統(tǒng)的研究[J].微型電腦應(yīng)用,2005;21(6)
3 蔡 震,蔣輝柏,周利華.Linux系統(tǒng)下USB設(shè)備驅(qū)動程序的開發(fā)[J].計算機測量與控制,2003;11(2)
4 TagMaster AB. Sweden.Handheld Confi Talk Reference Manual[Z].2003
5 TagMaster AB.Programmer′s Guide LockTag Handheld[Z].2005
6 Robert Love.Linux Kernel Development(Second Edition)[M].北京:機械工業(yè)出版社,2005

linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

上一頁 1 2 下一頁

關(guān)鍵詞: RFID 嵌入式 Linux 便攜

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉