當(dāng)前位置:首頁 > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]基于Linux操作系統(tǒng)的射頻識別安檢設(shè)計方案

引言

  射頻識別(RFID)是一種非接觸式的自動識別技術(shù),它通過射頻信號自動識別目標對象并獲取相關(guān)數(shù)據(jù),識別工作無需人工干預(yù),可工作于各種惡劣環(huán)境下。RFID技術(shù)可識別高速運動物體并可同時識別多個標簽, 操作快捷方便。非接觸IC卡是目前RFID系統(tǒng)中最常用的一種電子標簽,它誕生于20世紀90年代初,是世界上最近幾年發(fā)展起來的一項新技術(shù),它成功地將射頻識技術(shù)和IC卡技術(shù)結(jié)合起來,解決了無源和免接觸這一難題,是電子器件領(lǐng)域的一大突破。由于存在著磁卡和接觸式IC卡不可比擬的優(yōu)點,使之一經(jīng)問世,便立即引起廣泛的關(guān)注,并以驚人的速度得到推廣應(yīng)用,如我國的第二代公民身份證、公交卡、ETC免停車付費卡等??梢哉fRFID技術(shù)越來越多地應(yīng)用到我國身份安檢、質(zhì)量安檢、車輛安檢、執(zhí)法安檢等諸多安檢系統(tǒng)中。由于安檢系統(tǒng)中往往涉及大量重要數(shù)據(jù)的讀取、通信以及實時更新,因此數(shù)據(jù)庫技術(shù)的引入必不可少。在操作系統(tǒng)上,本文選擇了Linux操作系統(tǒng),相比Windows,Linux更安全、更可靠,與其他操作系統(tǒng)相比有著許多獨特的優(yōu)勢,更加適合用作嵌入式操作系統(tǒng)。

  1 系統(tǒng)結(jié)構(gòu)介紹

  RFID安檢系統(tǒng)主要包括RFID前段讀寫器、嵌入式Linux終端兩大部分。

  其中嵌入式終端的CPU采用ARM9內(nèi)核,內(nèi)核執(zhí)行速率達幾百兆赫茲,可以很好地滿足RFID數(shù)據(jù)的讀取和存儲。由于嵌入式系統(tǒng)一般是一個經(jīng)過裁剪、資源極其有限的系統(tǒng),因此對于安檢系統(tǒng)中涉及到的大量數(shù)據(jù)只能存取到外圍存儲設(shè)備中,本方案中的SD卡模塊正是用來存儲數(shù)據(jù)庫的,當(dāng)RFID讀寫器讀取到指定數(shù)據(jù),便在SD卡中的相關(guān)數(shù)據(jù)庫文件中查詢,并根據(jù)查詢結(jié)果做出相關(guān)反應(yīng)并及時更新本地數(shù)據(jù)庫。

  2 Linux下串口的開發(fā)

  在Linux下對串口進行配置、打開、讀寫等一系列的操作其使用方式與文件操作一樣,區(qū)別在于串口是一個終端設(shè)備[1]。Linux中的串口設(shè)備文件存放于/dev目錄下,其中串口1、串口2一般對應(yīng)設(shè)備名依次為“/dev/ttyS0”、“/dev/ttyS1”。在使用串口之前必須設(shè)置相關(guān)配置,包括波特率、數(shù)據(jù)位、校驗位、停止位等。

  串口設(shè)置由下面結(jié)構(gòu)體實現(xiàn):

  按照串口配置流程,對termios結(jié)構(gòu)體設(shè)置相關(guān)參數(shù),當(dāng)串口按自己的設(shè)置要求配置成功后,即可將串口當(dāng)做普通I/O文件,使用read和write函數(shù)對串口進行讀取。

  3 sqlite3數(shù)據(jù)庫的應(yīng)用開發(fā)

  sqlite3數(shù)據(jù)庫是一種嵌入式數(shù)據(jù)庫,其目標是盡量簡單,因此拋棄了傳統(tǒng)企業(yè)級數(shù)據(jù)庫的種種復(fù)雜特性,只實現(xiàn)對于數(shù)據(jù)庫而言必備的功能。盡管簡單性是sqlite3追求的首要目標,但是其功能和性能都非常出色,具有支持SQL92標準、所有數(shù)據(jù)存放到單獨的文件中支持的最大文件可達2 TB、數(shù)據(jù)庫可以在不同字節(jié)的機器之間共享、體積小、系統(tǒng)開銷小、檢索效率高、支持多種計算機語言、源碼開放,并且可以用于任何合法用途等特性。

  3.1 sqlite3數(shù)據(jù)庫的移植

  sqlite3數(shù)據(jù)庫的移植過程如下所述:

  (1)首先從sqlite官網(wǎng)上下載最新的sqlite3源碼包;

 ?。?)解壓源碼包,并進入解壓目錄:

  tar -zxvf sqlite-3.6.23.1.tar.gz

  cd sqlite-3.6.23.1

 ?。?)配置CONfigure腳本,使用相關(guān)選項生成編譯文件Makefile文件:

  ./configure–-enable-share –-prefix=./sqlite-3.6.23.1/result –-hoST=arm-linux

  選項 -enable-share指定使用Linux的共享庫

  選項 -prefix指定了安裝目錄為。/sqlite-3.6.23.1/result

  選項 -host指定了編譯環(huán)境為目標機為arm的交叉編譯環(huán)境[!--empirenews.page--]

 ?。?)交叉編譯,生成嵌入式終端下數(shù)據(jù)庫的管理程序和庫文件, 最終在result目錄下得到數(shù)據(jù)庫管理程序sqlite3(相當(dāng)于Windows下Access程序),提供編程所需的API的動態(tài)庫libsqlite3.so.0.8.6,編程所需的頭文件sqlite3ext.h sqlite3.h。交叉編譯的命令如下:

  Make

  Make install

  (5)將數(shù)據(jù)庫管理程序sqlite3、提供編程所需的API的動態(tài)庫libsqlite3.so.0.8.6及其1個軟鏈接拷貝到開發(fā)板根文件系統(tǒng)相應(yīng)位置,分別在嵌入式終端的/usr/bin和/usr/lib這兩個目錄下,命令如下:

  Cp result/bin/sqlite3  /arm-Linux/usr/bin

  Cp –l result/lib/libsqlite3.so*  /arm-linux/usr/lib

  (6)為了能在開發(fā)機上編譯,調(diào)用了sqlite3數(shù)據(jù)庫的API的應(yīng)用程序,需要將動態(tài)庫libsqlite3.so.0.8.6及其2個軟鏈接、2個頭文件拷貝到交叉編譯工具鏈所在目錄的適當(dāng)位置,至此sqlite3數(shù)據(jù)庫的移植和開發(fā)環(huán)境的配置已完成。只要輸入SQL語言便可以進行相關(guān)操作。

  3.2 Linux下sqlite3的C語言開發(fā)

  sqlite3里最常用到的是sqlite3 *類型。從數(shù)據(jù)庫打開時開始,sqlite3就要為這個類型準備好內(nèi)存,直到數(shù)據(jù)庫關(guān)閉,整個過程都需要用到這個類型。數(shù)據(jù)庫打開時起,這個類型的變量就代表了所要操作的數(shù)據(jù)庫。

 ?。?)打開數(shù)據(jù)庫API接口函數(shù)

  int sqlite3_open(文件名, sqlite3 *);

  用這個函數(shù)開始數(shù)據(jù)庫操作。需要傳入兩個參數(shù),其中之一是數(shù)據(jù)庫文件名,例如:/home/test.db文件名不需要一定存在,如果此文件不存在,sqlite3會自動建立;如果存在,就嘗試把它當(dāng)數(shù)據(jù)庫文件打開。

  sqlite3 * 參數(shù)即前面提到的關(guān)鍵數(shù)據(jù)結(jié)構(gòu)。函數(shù)返回值表示操作是否正確,如果是SQLITE_OK則表示操作正常。相關(guān)的返回值sqlite3定義了一些宏,具體這些宏的含義可以參考sqlite3.h文件。

 ?。?)關(guān)閉數(shù)據(jù)庫API接口函數(shù)

  int sqlite3_close(sqlite3 *);

  如果前面用sqlite3_open開啟了一個數(shù)據(jù)庫,結(jié)尾時不要忘了用這個函數(shù)關(guān)閉數(shù)據(jù)庫。

  (3)執(zhí)行SQL語句API接口

  由于嵌入式sqlite3數(shù)據(jù)庫支持SQL語言,因而調(diào)用C中相關(guān)執(zhí)行函數(shù)就如同在終端下操作數(shù)據(jù)庫一樣方面快捷,下面是具體的API函數(shù):

  這就是執(zhí)行一條sql語句的函數(shù)。

  Int sqlite3_exec(sqlite3 * db, const char *sql,sqlite3_callback,Void * ,char ** errmsg);[!--empirenews.page--]

  參數(shù)1是調(diào)用打開數(shù)據(jù)庫函數(shù)sqlite3_open()打開的數(shù)據(jù)庫對象。

  參數(shù)2 是一條待執(zhí)行的SQL語句,其語法格式同標準SQL語言規(guī)范一樣,如創(chuàng)建 table時插入的記錄如下:

  create table student(id varchar(10) primary key, age smallint);

  此語句創(chuàng)建了名為student的表,表中定義了id(學(xué)號)和年紀兩個變量,其中id是主鍵。

  Insert into student values(12345678,21);

  此語句向student表中插入一組數(shù)據(jù)(12345678,21),其中學(xué)號為12345678,學(xué)生年齡為21。

  對于數(shù)據(jù)庫的其他操作,如數(shù)據(jù)庫更新、修改、查找等用法同上。

  參數(shù)3 sqlite3_callback是自定義的回調(diào)函數(shù),對執(zhí)行結(jié)果的每一行都執(zhí)行一次這個函數(shù)。

  參數(shù)4 void *是調(diào)用者所提供的指針,你可以傳遞任何一個指針參數(shù)到這里,這個參數(shù)最終會傳到回調(diào)函數(shù)里,如果不需要傳遞指針給回調(diào)函數(shù),可以填NULL。

  參數(shù)5 char ** errmsg是錯誤信息。sqlite3里面有很多固定的錯誤信息。執(zhí)行sqlite3_exec之后,如果執(zhí)行失敗則可以查閱這個指針,即可知道執(zhí)行過程中錯誤發(fā)生的位置。

  3.3 串口同sqlite3通信測試與分析

  為了驗證sqlite3數(shù)據(jù)庫在嵌入式Linux[3-4]終端下的執(zhí)行效率和穩(wěn)定性,為此做了一個簡單的測試實驗:通過上位機程序向嵌入式Linux終端的串口定時發(fā)送字符串;嵌入式Linux終端接收到字符串便立即寫入到下位機的數(shù)據(jù)庫中。自后查看數(shù)據(jù)中的數(shù)據(jù),看看有沒有遺漏和誤碼。上位機的程序使用VC6.0開發(fā),整個程序界面只設(shè)了一個按鍵,按下按鍵,上位機就向嵌入式Linux終端不停地發(fā)送字符串?dāng)?shù)據(jù),按鍵響應(yīng)程序設(shè)計如下:


  可見程序是個定時100 ms便發(fā)送一條字符串的循環(huán),而且發(fā)送的每一條字符串事先通過str.Format格式化為固定長度,本例中是11 B。按下按鍵后發(fā)送的第一條字符串為:“第1條記錄”,每發(fā)送一條字符串里面的數(shù)字加“1”,這樣寫到數(shù)據(jù)庫中就可以很清楚地查看有沒有遺漏和誤碼,而且可以通過修改Sleep函數(shù)的延時參數(shù)檢測出嵌入式Linux終端下sqlite3數(shù)據(jù)庫操作的速度。

  下位機嵌入式Linux終端的程序設(shè)計為:先創(chuàng)建一個數(shù)據(jù)庫文件test.db,接著就是一個死循環(huán),串口不停地查找有沒有數(shù)據(jù)寫入,當(dāng)檢測到數(shù)據(jù)時,便寫入到test.db中,若寫入有誤,則立即跳出循環(huán),終止程序。


  4 結(jié)語

  整個測試根據(jù)上位機串口發(fā)送的頻率不同做了多組實驗,每組實驗寫入1 000個數(shù)據(jù),最終結(jié)果分析如下:上位機在定時80 ms左右或大于80 ms的情況下發(fā)送數(shù)據(jù)時,數(shù)據(jù)庫寫入的誤碼率為零;當(dāng)定時時間小于80 ms時,隨著定時時間變小誤碼率會越來越高。通過數(shù)據(jù)分析可知原因有以下幾點:一是數(shù)據(jù)庫本身寫入需用時幾十毫秒,二是SD卡并非高速讀寫設(shè)備,當(dāng)數(shù)據(jù)還未完全寫入數(shù)據(jù)庫時若有新數(shù)據(jù)發(fā)過來,則下次讀寫將會發(fā)生難以估計的錯誤。實驗還得出了當(dāng)把數(shù)據(jù)庫文件寫入到系統(tǒng)Flash上的總耗時約為50 ms,比寫入SD卡中約少30 ms。不過就80 ms左右的一次讀寫速度而言,嵌入式數(shù)據(jù)庫sqlite3執(zhí)行效率和穩(wěn)定性非??捎^,現(xiàn)在一般的RFID讀寫器通過串口執(zhí)行一條指令的時間也需幾十毫秒的時間,因而使用sqlite3數(shù)據(jù)庫在執(zhí)行速率和穩(wěn)定性上對于安檢系統(tǒng)中RFID讀寫數(shù)據(jù)的處理可以很好地達到要求,而且sqlite3還支持數(shù)據(jù)加密,安全性同樣非常出色。


 

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉