摘 要: 設(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 引言
二維條碼具有快速、準(zhǔn)確、成本低、信息容量大、保密防偽性強等優(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è)備的重復(fù)投入,降低了管理復(fù)雜度,節(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)可配置記憶功能,當(dāng)暫時超出無線信號覆蓋范圍時能保證存儲容量范圍內(nèi)的用戶數(shù)據(jù)不丟失。安全認證功能能對接入系統(tǒng)的掃描終端進行鑒權(quán),以保證無線鏈路的數(shù)據(jù)安全。系統(tǒng)可自動適配PC端口,包括標(biāo)準(zhǔn)串口、鍵盤和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模塊采用意法半導(dǎo)體公司(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端口適配模塊相連,若為標(biāo)準(zhǔn)串口,其通信速率可配置,但一般不超過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)配置,當(dāng)多個模組配置成一主多從的組合時,支持多通道藍牙通信。模組支持數(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í)行。當(dāng)S_2DTask和S_MainTask同時向2D模組發(fā)送數(shù)據(jù)時,使用FreeRTOS的互斥量對接口資源進行保護,即只有當(dāng)互斥量解鎖時連接2D模塊的接口資源才可用。
3.2 基座端
數(shù)據(jù)經(jīng)過藍牙無線鏈路傳輸后,C_BTTask任務(wù)解析藍牙模組協(xié)議幀獲得有效用戶數(shù)據(jù),然后經(jīng)過“數(shù)據(jù)接收消息隊列”發(fā)送消息。C_MainTask任務(wù)接收消息后依據(jù)多點無線鏈路管理機制對接入的各掃描終端進行傳輸控制。當(dāng)接收到一筆完整的二維碼數(shù)據(jù)后,通過“PC發(fā)送消息隊列”發(fā)送消息,C_PCTask將數(shù)據(jù)按照PC端口標(biāo)準(zhǔn)發(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)字段表示當(dāng)前數(shù)據(jù)幀長度,最大值為“數(shù)據(jù)幀最大分段長度”;狀態(tài)(STAT)字段以比特為單位指示數(shù)據(jù)包的狀態(tài)信息,包括當(dāng)前數(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ù)分段,拆分標(biāo)準(zhǔn)稱為“數(shù)據(jù)幀最大分段長度”,每個數(shù)據(jù)段獲得相應(yīng)的序號字段。在無線鏈路不穩(wěn)定時,確認機制下的數(shù)據(jù)重傳或幀丟失會導(dǎo)致接收到順序錯亂的數(shù)據(jù)幀。
解決數(shù)據(jù)亂序問題有兩種方法。一是通過使用等待指令,在同一時刻僅允許一個掃描終端發(fā)送數(shù)據(jù),其余掃描終端則等待發(fā)送時隙。但通過藍牙協(xié)議管理無線鏈路會引起應(yīng)答延時(如本系統(tǒng)中,單個藍牙數(shù)據(jù)幀的應(yīng)答延時大約60 ms~80 ms),而且多個掃描終端并發(fā)傳輸時會導(dǎo)致最后輪到發(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ū)域,當(dāng)片內(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ā)送端僅當(dāng)收到數(shù)據(jù)幀相應(yīng)的ACK應(yīng)答幀(攜帶對應(yīng)幀序號)時才確認數(shù)據(jù)發(fā)送成功,否則啟用超時(3 s)重傳(3次)。達到重傳次數(shù)后停止重發(fā)直至鏈路恢復(fù)正常?;藢l碼數(shù)據(jù)的完整性和正確性進行檢測,拋棄超過存儲時限的不完整數(shù)據(jù)。
4.3 流量控制
本系統(tǒng)在兩種情況下會發(fā)生系統(tǒng)存儲溢出。一是當(dāng)PC端采用鍵盤口或低速標(biāo)準(zhǔn)串口接收數(shù)據(jù),以每個終端發(fā)送一個256 B的數(shù)據(jù)包為例,7個終端并發(fā)傳輸時有1 792 B數(shù)據(jù)需要接收,若PC端串口速率為57 600 b/s,則基座需要248 ms才能將這批數(shù)據(jù)發(fā)送完畢。另一種情況是掃描終端記憶功能打開時進行掃描,而無線鏈路在中斷一段時間后又恢復(fù)正常,此時掃描終端存儲的大量數(shù)據(jù)將一次性發(fā)送給基座,容易導(dǎo)致其存儲溢出。
本文采用源抑制技術(shù)進行流量控制。當(dāng)基座端剩余存儲空間少于門限值時,根據(jù)BT模組提供的通道號確定發(fā)送數(shù)據(jù)幀的掃描終端,向其發(fā)送攜帶“等待時間”字段的WAIT應(yīng)答幀,使對方在“等待時間”后再進行下一個數(shù)據(jù)幀的發(fā)送?!暗却龝r間”是綜合考慮基座端剩余存儲空間、接入掃描終端數(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]. 蘇州大學(xué)學(xué)報(工科版), 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]. 北京:清華大學(xué)出版社,2012.