基于Linux的便携式RFID信息采集处理系统
2 系统软件设计
系统软件是整个系统的灵魂, 其设计的好坏直接影响系统的稳定性和可扩展性等性能。系统设计将软件分为两层结构, 如图5 所示。最下面一层为操作系统层, 主要实现对Linux 操作系统的移植和各种设备驱动程序的编写, 包括OLED 模块、USB Device、红外、键盘等设备驱动程序。上一层为应用程序层, 主要实现卡信息显示、键盘扫描、电子标签卡读写、文件传输、时钟以及电池电量检测等功能。
2 .1 嵌入式Linux
Linux 是一种公开源码的多任务操作系统, 具有开放度高、安全性好、稳定性强、可移植性好等特点, 在嵌入式操作系统中被大量采用。
本设计采用的Linux 内核是在ARM- Linux 的基础上, 编写了OLED 显示模块、USB 设备、红外收发器及键盘的设备驱动程序。在Linux 系统中, 设备驱动程序占有很重要的位置, 它提供了在用户空间操作硬件设备的接口。Linux 系统将设备分为字符设备、块设备及网络设备三种, 并给出针对不同设备的数据结构及注册函数。
当用户开发设备驱动程序时, 只需按硬件操作的方法填充设备数据结构, 并将它注册到内核中即可。
为了方便用户应用程序的编写, 把USB 设备实现为CDC( Communication Device Class ) 类设备, 其驱动程序分为两层, 最底层操作AT91RM9200 上的USB 设备控制器, 如处理硬件中断、读写寄存器及操作I/O 口来检测设备的插拔; 上层实现了底层与TCP/IP 协议层的连接,主要是模拟物理网卡, 并注册到内核。这样, 在应用程序的USB 设备就是一个标准的网络设备, 用户不需要了解驱动程序的接口, 而直接使用Linux 提供的套接字进行网络通信程序的开发。当用户进行二次开发时, 可以不加修改地将上位机开发好的网络通信程序直接移植到本系统中, 而且可以通过上位机的Telnet 等工具对嵌入式系统进行一定的操作。
其他驱动程序( 如OLED 显示模块、键盘、红外收发器)都作为Linux 下的标准字符设备编写, 使用register_chrdev( )函数进行注册, 提供了读、写和控制操作。在Linux 系统中, 应用程序对字符设备的操作与文件的操作相同。
Linux 中设备驱动程序可以通过模块方式动态地加载和卸载, 也可以直接编译到内核中。前者使用灵活, 可以减小内核, 但因嵌入式系统要求所有设备在初始化后全部就绪, 不能在使用时加载设备的驱动模块。所以, 本系统中所有的设备驱动程序都直接编译进内核。
每个设备驱动程序在用户空间对应一个设备文件,由文件系统管理。本系统使用ext2 作为根文件系统。为了开发和升级方便, 首先将根文件系统做成RAMDISK 格式, 所谓RAMDISK 就是系统启动后将压缩的文件解压到内存, 形成一个虚拟硬盘; 然后, 将引导程序、内核映像及根文件系统烧写到Flash 中。
系统加电后, 引导程序将内核映像从Flash 中调入内存, 然后从核入口开始执行: 首先初始化CPU, 然后加载各个设备驱动程序, 最后挂载文件系统, 执行应用程序。
2 .2 应用程序设计
Linux 是多任务系统, 支持多线程及多进程。多线程的优点是线程比进程小, 可以使应用更轻便, 线程间通信方便; 缺点是所有线程使用同一个地址空间, 如果一个线程出现问题, 整个系统将受影响; 而进程各自占有一份内存空间, 可以增强系统的稳定性, 但是多进程增加了系统开销, 进程间通信复杂。为此, 根据实际情况,考虑到系统稳定性, 本系统采取两者相结合的方式分别完成数据采集处理及文件传输功能。
2 .2 .1 数据采集处理
数据采集处理是一个进程, 它包括主线程和辅线程。主线程完成电子标签卡信息的读取、写入、实时显示及查询; 辅线程实现一个时钟以提供用户当前时间, 并定时对电池的电量进行检测和动态显示, 在电量过低时发出警告。
应用程序用MAIL 命令方式完成电子标签卡的读写。该进程首先初始化屏幕, 然后等待按键中断, 当有键按下时, 根据键值执行相应的工作; 当指定时间内没有键按下, 系统则进入休眠状态, 从而达到省电的目的。程序流程图如图6。
当成功采集到标签卡信息后, 应用程序将卡信息(包括卡号、卡状态、用户数据及当前时间)通过OLED 显示屏提供给用户, 并写入一个文件进行记录。由于文件传输进程会将该文件传输到上位机, 所以当读写文件时要将文件上锁。Linux 提供了文件锁以防止不同进程同时访问同一个文件。本文使用flock ( ) 函数对文件上锁和解锁。
由于OLED 是图形点阵式显示屏, 而且Flash 容量有限, 所以不可能直接使用汉字字库。系统预先提取所有用到的汉字、数字及字母的点阵数据, 然后建立自己的字库文件, 从而使应用程序可以对汉字、数字及字母进行显示。
2 .2 .2 文件传输
文件传输是一个进程, 完成卡信息的上传及其他数据的下载。与上位机通信采用Clinet/Server 模型。该进程实质上是一个服务器端( 本系统) 的应用程序, 它循环等待客户端( 上位机) 的连接请求。当请求到达时, 首先判断请求来自哪个接口(USB 或者红外接口), 然后根据请求的类型执行相应的上传或下载。考虑到实际应用中可能会使用多台手持式阅读器, 为了方便上位机对信息的管理, 规定文件名由手持式阅读器编号和文件上传序号组成, 程序在上传文件时自动将其编号及上传序号加入文件名。该进程的流程如图7。
- 基于嵌入式Linux的便携式RFID信息采集与处理系统(07-01)
- 无线动物识别和跟踪管理系统的设计(02-14)
- 基于SOA的RFID中间件设计(07-16)
- 基于DSP技术的RFID读写器设计(08-14)
- 基于μC/OS-Ⅱ和GPRS的无线RFID 读写器的研究与开发(07-16)
- 基于PDA的RFID手持机开发研究(08-19)