摘 要: 設(shè)計了一種基于FreeRTOS嵌入式操作系統(tǒng)的二維條碼無線傳輸系統(tǒng),描述了系統(tǒng)的軟硬件實現(xiàn)方法和多點數(shù)據(jù)傳輸?shù)逆溌房刂茩C制,。系統(tǒng)主控芯片采用通用的MCU芯片STM32,,結(jié)合二維碼掃描引擎和藍牙傳輸模組實現(xiàn)多個掃描終端與基座間的數(shù)據(jù)傳輸。
關(guān)鍵詞: 嵌入式,;二維碼,;點對多點
0 引言
二維條碼具有快速、準確,、成本低,、信息容量大、保密防偽性強等優(yōu)點,。隨著物聯(lián)網(wǎng)技術(shù)的迅猛發(fā)展,,在票務(wù)、零售,、倉儲,、物流等應(yīng)用領(lǐng)域,支持多個二維碼掃描終端的多點無線傳輸系統(tǒng)具有非常廣闊的應(yīng)用前景,。本文所設(shè)計的系統(tǒng),,能快速識別二維條碼,并支持多個手持掃描終端(多點)實時傳輸高密度二維條碼數(shù)據(jù),,在有限的工作空間內(nèi),,避免了配置多套掃描設(shè)備的重復投入,降低了管理復雜度,,節(jié)約了PC端的接口資源,。
1 系統(tǒng)總體方案設(shè)計
以本文設(shè)計的系統(tǒng)在倉儲管理中的應(yīng)用為例。在物流倉儲現(xiàn)場進行進出庫登記,、貨物清點時,,往往需要多名人員同時作業(yè)。其中某一位人員用手持掃描設(shè)備掃描貨物上的二維條碼,,系統(tǒng)提示掃描解碼完成并成功發(fā)送到PC端后再進行下一個條碼的掃描,。若解碼失敗,提示重新掃描,;若無線傳輸失敗,,則暫存掃描數(shù)據(jù),等待無線鏈路正常后重發(fā),。系統(tǒng)正常工作時,,條碼數(shù)據(jù)具有突發(fā)傳輸?shù)奶匦浴?/p>
除掃描貨物條碼外,,系統(tǒng)還能識別特定的二維設(shè)置條碼,方便人員對功能進行實時配置,。系統(tǒng)可配置記憶功能,,當暫時超出無線信號覆蓋范圍時能保證存儲容量范圍內(nèi)的用戶數(shù)據(jù)不丟失。安全認證功能能對接入系統(tǒng)的掃描終端進行鑒權(quán),,以保證無線鏈路的數(shù)據(jù)安全,。系統(tǒng)可自動適配PC端口,包括標準串口,、鍵盤和USB接口,,同時接收來自PC端的參數(shù)配置指令。
2 系統(tǒng)硬件設(shè)計
系統(tǒng)由無線手持掃描終端(Scanner)和基座(Cradle)兩部分子設(shè)備組成,,采用模塊化思想劃分硬件功能模塊,。其中掃描終端包括二維碼數(shù)據(jù)采集模塊(2D模塊)、MCU核心處理模塊(MCU模塊)和藍牙無線傳輸模塊(BT模塊),?;鶆t包括BT模塊、MCU模塊和PC端口適配模塊,。系統(tǒng)整體結(jié)構(gòu)如圖1所示,。
2.1 MCU核心處理模塊
本系統(tǒng)的MCU模塊采用意法半導體公司(ST)生產(chǎn)的基于ARM Contex_M3內(nèi)核的STM32F103微控制器。其工作頻率可達72 MHz,,具有3個UART,、2個SPI通信接口,以及7通道DMA控制器,。掃描終端內(nèi)MCU的串口1連接2D模塊PL3307,,使用內(nèi)置DMA控制器提高數(shù)據(jù)接收能力;串口2與BT模塊相連,?;鶅?nèi)MCU的串口1與BT模塊相連;通過串口2與PC端口適配模塊相連,,若為標準串口,,其通信速率可配置,但一般不超過57 600 b/s,,以匹配各類上位機通信接口的傳輸能力,。掃描終端和基座均配置了SPI接口的16 Mbit Flash存儲器,以支持大數(shù)據(jù)量存儲,。在掃描終端設(shè)計休眠喚醒電路,結(jié)合MCU的睡眠和待機模式減少設(shè)備電耗,,提高待機時間,。掃描終端設(shè)計電壓檢測電路,,基座設(shè)置充電電路和充電卡槽,方便對掃描終端進行電源管理和電池充電,。
2.2 2D模塊SE3307成像引擎
2D模塊是掃描設(shè)備的重要組成部分,,是傳輸系統(tǒng)的數(shù)據(jù)入口,采用摩托羅拉集成PL3307硬件解碼芯片的SE3300成像引擎,,可以識別目前幾乎所有的一維和二維條碼,。其支持兩種方式修改引擎的工作參數(shù):配置條碼掃描設(shè)置和通信接口(如RS-232)設(shè)置。通信速率默認為9 600 b/s,,系統(tǒng)正常工作時需設(shè)置成115 200 b/s以滿足大數(shù)據(jù)量傳輸,。引擎支持用戶交互模式,即解碼數(shù)據(jù)以引擎自有數(shù)據(jù)幀格式發(fā)送,,在接收到反饋幀時確認數(shù)據(jù)發(fā)送成功[1],。本系統(tǒng)即采用了這種傳輸模式。
2.3 藍牙通信模塊[2]
藍牙通信模塊選用基于CSR芯片組的藍牙模組,,內(nèi)置完整的藍牙協(xié)議棧,,支持工作模式(主模式或從模式)動態(tài)配置,當多個模組配置成一主多從的組合時,,支持多通道藍牙通信,。模組支持數(shù)據(jù)的協(xié)議傳輸,便于多點通信系統(tǒng)中對多路數(shù)據(jù)的識別,,但藍牙模組會對用戶數(shù)據(jù)進行分包發(fā)送,,需在軟件設(shè)計時解決組包問題。模組可配置是否自動連接,。自動連接時,,加電啟動后主從設(shè)備會自動建立連接,并且識別與記憶對方設(shè)備,;人工連接時,,可通過特定指令控制模組的連接過程。模組提供安全認證功能對接入的設(shè)備進行鑒權(quán),。系統(tǒng)運行時設(shè)置模組通信速率為115 200 b/s,。
3 軟件系統(tǒng)設(shè)計
本文采用的FreeRTOS是一個輕量級的嵌入式操作系統(tǒng),可基本滿足傳輸系統(tǒng)的多任務(wù)操作要求,,并且其支持STM32系列芯片,。根據(jù)系統(tǒng)的具體功能特點分析,對掃描終端系統(tǒng)設(shè)計了2個任務(wù)和1個中斷子程序,,分別為2D接收任務(wù)(S_2DTask)和主任務(wù)(S_MainTask),,以及“BT串口中斷子程序”;對基座端設(shè)計了3個任務(wù),分別為BT接收任務(wù)(C_BTTask),、PC端發(fā)送任務(wù)(C_PCTask)和主任務(wù)(C_MainTask),。其中S_2DTask和C_BTTask是用戶數(shù)據(jù)的接收任務(wù),所以具有最高優(yōu)先級,,其余任務(wù)具有次高優(yōu)先級,。FreeRTOS內(nèi)核支持輪換調(diào)度算法,在沒有更高優(yōu)先級任務(wù)就緒的情況下,,同一優(yōu)先級的任務(wù)共享CPU的使用時間,,同時任務(wù)間通過消息隊列傳遞數(shù)據(jù)[3]。掃描終端和基座端的軟件系統(tǒng)總架構(gòu)如圖2所示,。
3.1 掃描終端
S_2DTask接收2D模塊數(shù)據(jù)流,,解封裝后通過“2D接收消息隊列”發(fā)送消息。S_MainTask接收到消息后,,通過DMA通道將數(shù)據(jù)發(fā)送到BT模塊,。為了在記憶功能打開時對用戶數(shù)據(jù)進行長期存儲,或在無線鏈路不穩(wěn)定,、系統(tǒng)掉電等情況下對用戶數(shù)據(jù)或指令數(shù)據(jù)暫時存儲,,S_MainTask利用Flash對數(shù)據(jù)進行存儲保護。因為BT模塊接收的無線數(shù)據(jù)(如鏈路狀態(tài)信息,、藍牙反饋信息等)結(jié)構(gòu)簡單,,處理時間短,所以由“BT串口中斷子程序”在每10 ms一次的定時中斷中接收并處理,;需要轉(zhuǎn)發(fā)的指令通過“BT發(fā)送消息隊列”通知S_MainTask執(zhí)行,。當S_2DTask和S_MainTask同時向2D模組發(fā)送數(shù)據(jù)時,使用FreeRTOS的互斥量對接口資源進行保護,,即只有當互斥量解鎖時連接2D模塊的接口資源才可用,。
3.2 基座端
數(shù)據(jù)經(jīng)過藍牙無線鏈路傳輸后,C_BTTask任務(wù)解析藍牙模組協(xié)議幀獲得有效用戶數(shù)據(jù),,然后經(jīng)過“數(shù)據(jù)接收消息隊列”發(fā)送消息,。C_MainTask任務(wù)接收消息后依據(jù)多點無線鏈路管理機制對接入的各掃描終端進行傳輸控制。當接收到一筆完整的二維碼數(shù)據(jù)后,,通過“PC發(fā)送消息隊列”發(fā)送消息,,C_PCTask將數(shù)據(jù)按照PC端口標準發(fā)送到PC。同樣采用互斥量對連接BT模塊的接口進行資源保護,。
4 點對多點無線鏈路傳輸控制的實現(xiàn)[4-5]
本文采用基于確認機制的可靠連接傳輸模式,,其傳輸控制分為順序控制、可靠性控制和流量控制3部分,,主要通過統(tǒng)一的多點通信數(shù)據(jù)封裝協(xié)議與應(yīng)答機制來實現(xiàn),。相應(yīng)協(xié)議幀結(jié)構(gòu)如圖3所示。
類型(TYPE)字段指明數(shù)據(jù)幀是用戶數(shù)據(jù)還是某種指令數(shù)據(jù),若為應(yīng)答幀則用ACK和NAK代表應(yīng)答成功和失??;長度(LEN)字段表示當前數(shù)據(jù)幀長度,最大值為“數(shù)據(jù)幀最大分段長度”,;狀態(tài)(STAT)字段以比特為單位指示數(shù)據(jù)包的狀態(tài)信息,包括當前數(shù)據(jù)包是否拆包傳輸,、指令數(shù)據(jù)的來源設(shè)備和目的設(shè)備等,;序號(NO)字段是掃描終端為每一個發(fā)送的數(shù)據(jù)幀所作的順序編號,以長度字段的有效取值范圍循環(huán)編號,,基座接收到數(shù)據(jù)幀后根據(jù)序號字段識別各數(shù)據(jù)段的順序,;有效數(shù)據(jù)(DATA)字段攜帶二維碼數(shù)據(jù)、指令參數(shù)或應(yīng)答參數(shù),;校驗(CHECKSUM)字段為數(shù)據(jù)幀的CRC校驗碼,。
4.1 順序控制
本系統(tǒng)數(shù)據(jù)涉及高密度二維碼,在無線通信環(huán)境中適合拆分成多個較小的數(shù)據(jù)幀傳輸,,即數(shù)據(jù)分段,,拆分標準稱為“數(shù)據(jù)幀最大分段長度”,每個數(shù)據(jù)段獲得相應(yīng)的序號字段,。在無線鏈路不穩(wěn)定時,,確認機制下的數(shù)據(jù)重傳或幀丟失會導致接收到順序錯亂的數(shù)據(jù)幀。
解決數(shù)據(jù)亂序問題有兩種方法,。一是通過使用等待指令,,在同一時刻僅允許一個掃描終端發(fā)送數(shù)據(jù),其余掃描終端則等待發(fā)送時隙,。但通過藍牙協(xié)議管理無線鏈路會引起應(yīng)答延時(如本系統(tǒng)中,,單個藍牙數(shù)據(jù)幀的應(yīng)答延時大約60 ms~80 ms),而且多個掃描終端并發(fā)傳輸時會導致最后輪到發(fā)送數(shù)據(jù)的終端等待時間過長,。另一種方式是不干預(yù)發(fā)送流程,,通過開辟數(shù)據(jù)緩存區(qū),由C_MainTask按照藍牙模組提供的通道號和數(shù)據(jù)幀的序號字段將多個掃描終端發(fā)送的分散數(shù)據(jù)包進行按序暫存,,等接收完整后進行轉(zhuǎn)發(fā),。限于MCU片內(nèi)存儲的容量,需結(jié)合片外Flash輔助存儲,。將數(shù)據(jù)優(yōu)先存入片內(nèi)區(qū)域,,當片內(nèi)容量不夠時再存入片外區(qū)域,從而避免大量小數(shù)據(jù)包的讀寫操作消耗Flash的刷寫壽命,。為便于排序操作,,將有效數(shù)據(jù)的系統(tǒng)格式設(shè)置為“完整條碼數(shù)據(jù)長度+有效數(shù)據(jù)”的結(jié)構(gòu),同時維護兩塊存儲區(qū)域完整的索引表,在發(fā)送時仍能按照正確順序讀取數(shù)據(jù),。
4.2 可靠性控制
本文采用確認的可靠性控制機制,,即數(shù)據(jù)發(fā)送端僅當收到數(shù)據(jù)幀相應(yīng)的ACK應(yīng)答幀(攜帶對應(yīng)幀序號)時才確認數(shù)據(jù)發(fā)送成功,否則啟用超時(3 s)重傳(3次),。達到重傳次數(shù)后停止重發(fā)直至鏈路恢復正常,。基座端對條碼數(shù)據(jù)的完整性和正確性進行檢測,,拋棄超過存儲時限的不完整數(shù)據(jù),。
4.3 流量控制
本系統(tǒng)在兩種情況下會發(fā)生系統(tǒng)存儲溢出。一是當PC端采用鍵盤口或低速標準串口接收數(shù)據(jù),,以每個終端發(fā)送一個256 B的數(shù)據(jù)包為例,,7個終端并發(fā)傳輸時有1 792 B數(shù)據(jù)需要接收,若PC端串口速率為57 600 b/s,,則基座需要248 ms才能將這批數(shù)據(jù)發(fā)送完畢,。另一種情況是掃描終端記憶功能打開時進行掃描,而無線鏈路在中斷一段時間后又恢復正常,,此時掃描終端存儲的大量數(shù)據(jù)將一次性發(fā)送給基座,,容易導致其存儲溢出。
本文采用源抑制技術(shù)進行流量控制,。當基座端剩余存儲空間少于門限值時,,根據(jù)BT模組提供的通道號確定發(fā)送數(shù)據(jù)幀的掃描終端,向其發(fā)送攜帶“等待時間”字段的WAIT應(yīng)答幀,,使對方在“等待時間”后再進行下一個數(shù)據(jù)幀的發(fā)送,。“等待時間”是綜合考慮基座端剩余存儲空間,、接入掃描終端數(shù)量和PC端接口速率確定的,。
5 結(jié)論
本文詳細闡述了基于ARM和藍牙無線鏈路構(gòu)建的二維碼點對多點傳輸系統(tǒng),給出了系統(tǒng)軟硬件的實現(xiàn)方法,,并詳細表述了點對多點無線鏈路的傳輸控制機制,。依據(jù)本文設(shè)計的二維碼無線掃描設(shè)備能較快地將條碼信息發(fā)送到PC端,支持最多7部手持終端同時連接,,且各項用戶功能均能正常實現(xiàn),。由于采用了高性能微處理器,基于實時性較好的操作系統(tǒng)及成熟的藍牙通信網(wǎng)絡(luò),,本系統(tǒng)具有較高的適用性,、可靠性和性價比,而且本系統(tǒng)成本低廉,,使用體驗良好,。
參考文獻
[1] 摩托羅拉解決方案公司. PL3307 Decoder Integration Guide[EB/OL]. (2012-03)[2014-04-10].http://www.motorolasolutions.com/.
[2] 金宏健,王小寧,胡玉鑫,等. 藍牙技術(shù)在小型嵌入式系統(tǒng)中的應(yīng)用[J]. 蘇州大學學報(工科版), 2012, 32(6):4-7.
?。ㄉ辖拥?0頁)
[3] 李志明,擅永,,徐石明,,等. STM32嵌入式系統(tǒng)開發(fā)實戰(zhàn)指南:FreeRTOS與LwIP聯(lián)合移植[M]. 北京: 機械工業(yè)出版社, 2013.
[4] 郝妍娜,洪志良. 基于MCU和nRF905的低功耗遠距離無線傳輸系統(tǒng)[J].電子技術(shù)應(yīng)用, 2007, 33(8):44-47.
[5] 史志才. 計算機網(wǎng)絡(luò)[M]. 北京:清華大學出版社,,2012.