摘 要: 设计了一种基于FreeRTOS嵌入式操作系统的二维条码无线传输系统,描述了系统的软硬件实现方法和多点数据传输的链路控制机制。系统主控芯片采用通用的MCU芯片STM32,结合二维码扫描引擎和蓝牙传输模组实现多个扫描终端与基座间的数据传输。
关键词: 嵌入式;二维码;点对多点
0 引言
二维条码具有快速、准确、成本低、信息容量大、保密防伪性强等优点。随着物联网技术的迅猛发展,在票务、零售、仓储、物流等应用领域,支持多个二维码扫描终端的多点无线传输系统具有非常广阔的应用前景。本文所设计的系统,能快速识别二维条码,并支持多个手持扫描终端(多点)实时传输高密度二维条码数据,在有限的工作空间内,避免了配置多套扫描设备的重复投入,降低了管理复杂度,节约了PC端的接口资源。
1 系统总体方案设计
以本文设计的系统在仓储管理中的应用为例。在物流仓储现场进行进出库登记、货物清点时,往往需要多名人员同时作业。其中某一位人员用手持扫描设备扫描货物上的二维条码,系统提示扫描解码完成并成功发送到PC端后再进行下一个条码的扫描。若解码失败,提示重新扫描;若无线传输失败,则暂存扫描数据,等待无线链路正常后重发。系统正常工作时,条码数据具有突发传输的特性。
除扫描货物条码外,系统还能识别特定的二维设置条码,方便人员对功能进行实时配置。系统可配置记忆功能,当暂时超出无线信号覆盖范围时能保证存储容量范围内的用户数据不丢失。安全认证功能能对接入系统的扫描终端进行鉴权,以保证无线链路的数据安全。系统可自动适配PC端口,包括标准串口、键盘和USB接口,同时接收来自PC端的参数配置指令。
2 系统硬件设计
系统由无线手持扫描终端(Scanner)和基座(Cradle)两部分子设备组成,采用模块化思想划分硬件功能模块。其中扫描终端包括二维码数据采集模块(2D模块)、MCU核心处理模块(MCU模块)和蓝牙无线传输模块(BT模块)。基座则包括BT模块、MCU模块和PC端口适配模块。系统整体结构如图1所示。
2.1 MCU核心处理模块
本系统的MCU模块采用意法半导体公司(ST)生产的基于ARM Contex_M3内核的STM32F103微控制器。其工作频率可达72 MHz,具有3个UART、2个SPI通信接口,以及7通道DMA控制器。扫描终端内MCU的串口1连接2D模块PL3307,使用内置DMA控制器提高数据接收能力;串口2与BT模块相连。基座内MCU的串口1与BT模块相连;通过串口2与PC端口适配模块相连,若为标准串口,其通信速率可配置,但一般不超过57 600 b/s,以匹配各类上位机通信接口的传输能力。扫描终端和基座均配置了SPI接口的16 Mbit Flash存储器,以支持大数据量存储。在扫描终端设计休眠唤醒电路,结合MCU的睡眠和待机模式减少设备电耗,提高待机时间。扫描终端设计电压检测电路,基座设置充电电路和充电卡槽,方便对扫描终端进行电源管理和电池充电。
2.2 2D模块SE3307成像引擎
2D模块是扫描设备的重要组成部分,是传输系统的数据入口,采用摩托罗拉集成PL3307硬件解码芯片的SE3300成像引擎,可以识别目前几乎所有的一维和二维条码。其支持两种方式修改引擎的工作参数:配置条码扫描设置和通信接口(如RS-232)设置。通信速率默认为9 600 b/s,系统正常工作时需设置成115 200 b/s以满足大数据量传输。引擎支持用户交互模式,即解码数据以引擎自有数据帧格式发送,在接收到反馈帧时确认数据发送成功[1]。本系统即采用了这种传输模式。
2.3 蓝牙通信模块[2]
蓝牙通信模块选用基于CSR芯片组的蓝牙模组,内置完整的蓝牙协议栈,支持工作模式(主模式或从模式)动态配置,当多个模组配置成一主多从的组合时,支持多通道蓝牙通信。模组支持数据的协议传输,便于多点通信系统中对多路数据的识别,但蓝牙模组会对用户数据进行分包发送,需在软件设计时解决组包问题。模组可配置是否自动连接。自动连接时,加电启动后主从设备会自动建立连接,并且识别与记忆对方设备;人工连接时,可通过特定指令控制模组的连接过程。模组提供安全认证功能对接入的设备进行鉴权。系统运行时设置模组通信速率为115 200 b/s。
3 软件系统设计
本文采用的FreeRTOS是一个轻量级的嵌入式操作系统,可基本满足传输系统的多任务操作要求,并且其支持STM32系列芯片。根据系统的具体功能特点分析,对扫描终端系统设计了2个任务和1个中断子程序,分别为2D接收任务(S_2DTask)和主任务(S_MainTask),以及“BT串口中断子程序”;对基座端设计了3个任务,分别为BT接收任务(C_BTTask)、PC端发送任务(C_PCTask)和主任务(C_MainTask)。其中S_2DTask和C_BTTask是用户数据的接收任务,所以具有最高优先级,其余任务具有次高优先级。FreeRTOS内核支持轮换调度算法,在没有更高优先级任务就绪的情况下,同一优先级的任务共享CPU的使用时间,同时任务间通过消息队列传递数据[3]。扫描终端和基座端的软件系统总架构如图2所示。
3.1 扫描终端
S_2DTask接收2D模块数据流,解封装后通过“2D接收消息队列”发送消息。S_MainTask接收到消息后,通过DMA通道将数据发送到BT模块。为了在记忆功能打开时对用户数据进行长期存储,或在无线链路不稳定、系统掉电等情况下对用户数据或指令数据暂时存储,S_MainTask利用Flash对数据进行存储保护。因为BT模块接收的无线数据(如链路状态信息、蓝牙反馈信息等)结构简单,处理时间短,所以由“BT串口中断子程序”在每10 ms一次的定时中断中接收并处理;需要转发的指令通过“BT发送消息队列”通知S_MainTask执行。当S_2DTask和S_MainTask同时向2D模组发送数据时,使用FreeRTOS的互斥量对接口资源进行保护,即只有当互斥量解锁时连接2D模块的接口资源才可用。
3.2 基座端
数据经过蓝牙无线链路传输后,C_BTTask任务解析蓝牙模组协议帧获得有效用户数据,然后经过“数据接收消息队列”发送消息。C_MainTask任务接收消息后依据多点无线链路管理机制对接入的各扫描终端进行传输控制。当接收到一笔完整的二维码数据后,通过“PC发送消息队列”发送消息,C_PCTask将数据按照PC端口标准发送到PC。同样采用互斥量对连接BT模块的接口进行资源保护。
4 点对多点无线链路传输控制的实现[4-5]
本文采用基于确认机制的可靠连接传输模式,其传输控制分为顺序控制、可靠性控制和流量控制3部分,主要通过统一的多点通信数据封装协议与应答机制来实现。相应协议帧结构如图3所示。
类型(TYPE)字段指明数据帧是用户数据还是某种指令数据,若为应答帧则用ACK和NAK代表应答成功和失败;长度(LEN)字段表示当前数据帧长度,最大值为“数据帧最大分段长度”;状态(STAT)字段以比特为单位指示数据包的状态信息,包括当前数据包是否拆包传输、指令数据的来源设备和目的设备等;序号(NO)字段是扫描终端为每一个发送的数据帧所作的顺序编号,以长度字段的有效取值范围循环编号,基座接收到数据帧后根据序号字段识别各数据段的顺序;有效数据(DATA)字段携带二维码数据、指令参数或应答参数;校验(CHECKSUM)字段为数据帧的CRC校验码。
4.1 顺序控制
本系统数据涉及高密度二维码,在无线通信环境中适合拆分成多个较小的数据帧传输,即数据分段,拆分标准称为“数据帧最大分段长度”,每个数据段获得相应的序号字段。在无线链路不稳定时,确认机制下的数据重传或帧丢失会导致接收到顺序错乱的数据帧。
解决数据乱序问题有两种方法。一是通过使用等待指令,在同一时刻仅允许一个扫描终端发送数据,其余扫描终端则等待发送时隙。但通过蓝牙协议管理无线链路会引起应答延时(如本系统中,单个蓝牙数据帧的应答延时大约60 ms~80 ms),而且多个扫描终端并发传输时会导致最后轮到发送数据的终端等待时间过长。另一种方式是不干预发送流程,通过开辟数据缓存区,由C_MainTask按照蓝牙模组提供的通道号和数据帧的序号字段将多个扫描终端发送的分散数据包进行按序暂存,等接收完整后进行转发。限于MCU片内存储的容量,需结合片外Flash辅助存储。将数据优先存入片内区域,当片内容量不够时再存入片外区域,从而避免大量小数据包的读写操作消耗Flash的刷写寿命。为便于排序操作,将有效数据的系统格式设置为“完整条码数据长度+有效数据”的结构,同时维护两块存储区域完整的索引表,在发送时仍能按照正确顺序读取数据。
4.2 可靠性控制
本文采用确认的可靠性控制机制,即数据发送端仅当收到数据帧相应的ACK应答帧(携带对应帧序号)时才确认数据发送成功,否则启用超时(3 s)重传(3次)。达到重传次数后停止重发直至链路恢复正常。基座端对条码数据的完整性和正确性进行检测,抛弃超过存储时限的不完整数据。
4.3 流量控制
本系统在两种情况下会发生系统存储溢出。一是当PC端采用键盘口或低速标准串口接收数据,以每个终端发送一个256 B的数据包为例,7个终端并发传输时有1 792 B数据需要接收,若PC端串口速率为57 600 b/s,则基座需要248 ms才能将这批数据发送完毕。另一种情况是扫描终端记忆功能打开时进行扫描,而无线链路在中断一段时间后又恢复正常,此时扫描终端存储的大量数据将一次性发送给基座,容易导致其存储溢出。
本文采用源抑制技术进行流量控制。当基座端剩余存储空间少于门限值时,根据BT模组提供的通道号确定发送数据帧的扫描终端,向其发送携带“等待时间”字段的WAIT应答帧,使对方在“等待时间”后再进行下一个数据帧的发送。“等待时间”是综合考虑基座端剩余存储空间、接入扫描终端数量和PC端接口速率确定的。
5 结论
本文详细阐述了基于ARM和蓝牙无线链路构建的二维码点对多点传输系统,给出了系统软硬件的实现方法,并详细表述了点对多点无线链路的传输控制机制。依据本文设计的二维码无线扫描设备能较快地将条码信息发送到PC端,支持最多7部手持终端同时连接,且各项用户功能均能正常实现。由于采用了高性能微处理器,基于实时性较好的操作系统及成熟的蓝牙通信网络,本系统具有较高的适用性、可靠性和性价比,而且本系统成本低廉,使用体验良好。
参考文献
[1] 摩托罗拉解决方案公司. PL3307 Decoder Integration Guide[EB/OL]. (2012-03)[2014-04-10].http://www.motorolasolutions.com/.
[2] 金宏健,王小宁,胡玉鑫,等. 蓝牙技术在小型嵌入式系统中的应用[J]. 苏州大学学报(工科版), 2012, 32(6):4-7.
(上接第50页)
[3] 李志明,擅永,徐石明,等. STM32嵌入式系统开发实战指南:FreeRTOS与LwIP联合移植[M]. 北京: 机械工业出版社, 2013.
[4] 郝妍娜,洪志良. 基于MCU和nRF905的低功耗远距离无线传输系统[J].电子技术应用, 2007, 33(8):44-47.
[5] 史志才. 计算机网络[M]. 北京:清华大学出版社,2012.