rfid具有读取速度快、读取距离远、储存信息量大、标签上数据可加密、使用寿命长、工作环境适应性强等多种优点,已经在各领域广泛应用[1]。
将rfid技术与嵌入式系统相结合,将射频识别模块嵌入到嵌入式系统中,在嵌入式linux下通过设计驱动程序实现射频模块的收发功能。嵌入式rfid系统增加了rfid技术的通用性和可移植性,丰富了嵌入式系统通信接口外设功能,提升了嵌入式技术在无线通信领域的发展空间。
当前的嵌入式系统中并不支持rfid系统,所以要进行硬件和软件两方面的扩展。硬件方面主要根据nrf905无线收发器的电气特性进行接口扩展,利用基于arm9嵌入式平台的扩展口对nrf905进行控制;软件方面利用linux内核良好的移植性和扩展性,编写驱动程序控制射频模块的收发功能,在底层驱动以收集和分组数据并传递给上层应用程序,由上层应用程序与用户进行交互。本文所研究的基于嵌入式系统的rfid驱动,将为嵌入式rfid系统提供底层软硬件接口程序,为嵌入式内核增添rfid管理机制,为上层应用程序提供良好服务,降低嵌入式rfid的开发难度,缩短开发周期,从而降低其成本,使rfid的应用更加普及。
1 硬件电路的实现
图1是nrf905无线收发器接口扩展的硬件电路原理图,硬件电路的实现主要基于s3c2440 arm9微处理器和单片nrf905无线收发器的互联,以及根据nrf905电气特性所做的一些外接电路。
s3c2440是一款采用arm920t内核的高性能32 bit处理器,其主频高达405 mhz,采用5级流水线和哈佛结构。s3c2440包括两个spi接口,每个接口分别有两个8 bit数据移位寄存器用于发送和接收。在spi发送期间,数据同时发送(串行移出)和接收(串行移入)[2]。因此,利用处理器的spi接口,可以很方便地用spi接口与nrf905无线收发模块进行数据传输。
单片nrf905无线收发器工作在433/868/915 mhz的ism频段。由一个完全集成的频率调制器、一个带解调器的接收器、一个功率放大器、一个晶体振荡器和一个调节器组成。其所具有的shockburst工作模式可以自动产生前导码和crc。可以通过spi接口进行编程配置。
nrf905采用nordic公司的vlsi shockburst技术。shockburst技术使nrf905能够提供高速的数据传输而不需要昂贵的高速mcu来进行数据处理/时钟覆盖。通过将与rf协议有关的高速信号处理器放到芯片内,nrf905提供给微控制器一个spi接口,速率由专为控制器设定的接口速度决定。nrf905通过shockburst工作模式在rf以最大速率进行连接时,降低数字应用部分的速率来降低在应用中的平均电流消耗。在shockburst接收模式中,地址匹配(am)和数据准备就绪(dr)信号通知微处理器一个有效的地址和数据包已经各自接收完成。在shockburst发送模式中,nrf905自动产生前导码和crc校验码,数据准备就绪(dr)信号通知微处理器数据传输已经完成[3]。
2 rfid驱动程序设计
2.1 整体驱动设计思想
rfid驱动程序的设计采用自底而上(down-top)的方法。优先设计底层部分即spi接口的驱动程序,然后再设计上层rfid驱动。这种自低而上设计方法可以把大模块分散为几个小模块,把大设计分为小设计,便于开发验证,并且符合linux模块化的设计思想,是一种高效的设计方法。
nrf905采用spi接口与外界进行通信,因此底层spi驱动主要完成nrf905的spi和微处理器s3c2440的spi模块间的通信。上层rf驱动程序通过spi接口向nrf905发送指令和数据,最终由nrf905的主机控制器控制射频收发器完成数据收发,实现射频模块间的无线通信。
2.2 spi驱动程序设计
在硬件电路中,微处理器s3c2440的spi0模块与nrf905中的spi接口相连接。spi驱动的作用即完成主spi与nrf905中从spi的数据传输。为了便于验证功能,提高项目开发效率,底层spi驱动设计为独立的模块,并且进行调试,在spi驱动设计的基础上,完成上层rf驱动。
在arm9嵌入式平台的内核linux2.6.12中,不包含spi驱动程序,而在linux内核之后的版本中包含了spi驱动。这样,就可以移植新版本中的spi驱动到本嵌入式平台linux2.6.12中。虽然这种spi驱动通用性和功能性都较强,但其代码量大,较多功能并不符合本设计的要求。因此,本设计选择重新编写spi底层驱动,简化其功能,建立环形缓冲区,提高数据收发效率。
spi驱动程序作为设备文件,包含write、read、open、release、ioctl等几个操作[4],其中关键性的硬件操作为读写操作,写操作的主要作用是把用户数据拷贝到内核缓冲区,并控制微控制器中的主spi发送数据到nrf905中;读操作与写操作类似,而过程相反,即把主spi接到的数据拷贝到内核缓冲区,再由内核缓冲区拷贝到用户空间申请好的数据结构中。对spi设备数据接收的监控,驱动程序采用中断的方式来通知系统spi数据是否收发完毕,在spi设备每发送完一组数据或接收到一组数据后,就会触发中断,信号由irq线进入,传入cpu进行中断处理。
spi驱动程序的写过程包括建立数据结构、建立环形缓冲区,从用户空间把数据拷贝到数据结构中、调用write函数把数据拷贝进环形缓冲区中、写满后发送第一组数据到发送寄存器。当spi发送寄存器中的数据发送完毕后,会发出中断信号,触发微处理器中断,系统进入中断上下文。为了缩短中断处理时间,提高中断处理效率,驱动程序中采用了顶/底半部的处理方法[5],即中断处理时间尽量地短,在中断处理例程中调用tasklet调度函数,将需要较多时间的中断处理发到tasklet(即底半部)中处理。在tasklet中会把环形缓冲区的数据写入发送寄存器,最终由spi控制器发送出去。
spi驱动程序的读过程和写过程类似,spi接收寄存器接到数据后触发中断。cpu接到中断信号后进入中断处理例程,调度tasklet进入底半部进行中断处理,把接收寄存器中的数据拷贝到环形缓冲区中,然后唤醒正在休眠的进程,由read函数把环形缓冲区中的数据拷贝到申请好的数据结构中,再拷贝至用户空间。
2.3 rfid驱动程序设计
完成spi底层驱动后,上层rfid驱动的内容主要是对nrf905配置寄存器进行配置,包括发送接收数据的字节数、目标地址、工作模式、时钟频率等通过nrf905自定义的spi指令写入寄存器中。因此要对spi驱动中的write/read函数进行封装,通过调用spi驱动中的函数完成整体驱动的寄存器配置和数据传输功能。
rfid驱动程序作为设备文件,同样分为write、read、open、release、ioctl等几个操作。rfid驱动程序的写操作过程:首先将用户空间中的数据拷贝至数据结构中;然后使nrf905进入standby模式,调用spiwrite函数对数据寄存器和地址寄存器进行配置,把发送数据和目标地址写入本地nrf905,之后进入shockburst发送模式,由本地nrf905向目标nrf905发送数据;最后进程进入休眠状态,等待数据准备信号dr触发中断,由中断处理例程唤醒进程,完成数据发送。图2为rfid的发送流程图。
rfid的读操作将判断缓冲区是否为空,如果不为空,就把缓冲区中的数据拷贝至数据结构中,并拷至用户空间中;如果为空,进程就会进入休眠,等待缓冲区接收到数据后,进入中断唤醒进程。在进入shockburst rx模式后,本地nrf905会自动监测空中的信息,在nrf905发现和接收频率相同的载波时,载波检测信号cd被置高,触发中断,在中断例程中只是延时一段时间,等待nrf905接收到有效的目的地址时,地址匹配信号置高。当nrf905接收到有效的数据包后,数据准备就绪信号dr会触发中断,进入中断例程,进入standby模式,把接收到的数据通过spi接口读入缓冲区内,而后唤醒进程,把缓冲区中的数据拷贝至用户空间中。当所有的数据被读出后,nrf905的am和dr信号线会被置低。nrf905切换到下一状态。rfid驱动接收流程如图3所示。
3 功能测试
测试主要分为两部分,首先对底层spi接口部分做调试,然后在此基础上,对rfid驱动进行功能测试。
硬件方面,利用s3c2440开发板的扩展口与nrf905模块连接,扩展口中用到的gpio资源在驱动程序中设置。另外,用rs-232串口将开发板与pc机相连,利用内核的debug功能[6],通过pc机对开发板进行控制,完成驱动加载和应用程序的运行。
软件方面,基于s3c2440的嵌入式平台需要完整的嵌入式操作系统资源,包括bootloader、kernel、文件系统。在对内核进行剪裁后,将bootloader、kernel、文件系统通过jtag烧入nand flash中。操作系统要保证内核、文件系统以及硬件设备正常运行。
3.1 spi驱动功能测试
spi驱动测试主要测试驱动程序的功能,测试驱动程序是否能够控制spi主从设备正确传输数据。资源包括s3c2440开发平台、linux2.6.12内核源码包、示波器。系统运行后,加载spi驱动,运行编写的上层应用程序进行数据收发,并用示波器观察波形。
3.2 rfid驱动程序测试
在测试spi驱动成功后,重新启动系统,待系统成功运行后,加载rfid驱动程序,运行为其编写的测试程序,测试两nrf905无线模块间的通信。s3c2440的gpio资源与nrf905信号线对应关系如下:
power down模式:pwrgpj12
载波检测输出:cdgpg6
地址匹配输出:amgpb9
数据就绪输出:drgpg1
spi主入从出:misogpe11
spi主出从入:mosigpe12
spi时钟:sckgpe13
spi使能:csngpb10
发送/接收使能:trx_cegpg8
发送/接收模式:tx_engpg0
两个平台分别为:arm9嵌入式平台和msp430单片机平台。在arm平台运行发送测试程序,而单片机平台运行接收测试程序,之后交换。接收端将接收到发送端发送的数据,并将数据在pc机终端显示。
当arm发送端的应用程序中发送字符串“aaaaaaaa”时,单片机端的nrf905模块接收寄存器中收到转换后的ascii码“97”;当arm端作为接收端而单片机作为发送端时,arm端运行接收程序后,在用户空间即显示终端上显示了接收到的数据“abcd…”。表明此rfid驱动程序成功实现了控制nrf905无线收发器进行数据接收传输的功能。
本文介绍了一种基于arm9 s3c2440嵌入式平台扩展rfid驱动的设计方案,设计了硬件扩展电路和相应的驱动程序,通过了并测试。实现了嵌入式平台间的rfid短距离即时通信功能。嵌入式rfid驱动将推动rfid技术在应用领域中的发展,将会支持更多的射频硬件,根据此驱动可以开发更多的应用程序,满足多种需求。
参考文献
[1] 董丽华.rfid技术与应用[m]。北京:电子工业出版社,2008.
[2] samsung.s3c2440a user’s manual reltminary[ol]。 revision0,2004.
[3] nordic semiconductor.nrf905_rev1_1[ol].2004:1-36.
[4] 刘淼。嵌入式系统接口设计与linux驱动程序开发[m]。 北京:北京航空航天大学出版社,2006.
[5] jonathan corbet,alessandro rubini,greg kroah-hartman. linux device drivers[m].sebastopol:o’reilly media,2005.
[6] bovert d p,marco c著。深入理解linux内核(第三版)[m]。陈莉君,张琼声,张宏伟,译。北京:中国电力出版社,2007.
周 鹏,侯立刚,彭晓宏,畅 达
三星关闭天津手机厂 新建电池等生产线
携手Seeed Studio拓展全球毫米波雷达蓝海市场
论全球led技术及发展介绍
农业气象观测站是什么,它的作用是什么
AcrelEMS-SEMI电子厂房能效管理平台
基于嵌入式系统的RFID驱动程序设计概述
基于S1D13506芯片的图像控制器的设计
区块链在现时代的作用是什么
Banyan Energy照亮超低成本太阳能組件制造之路
小米6已然发布可是小米6plus缺延后两个月,秘密在这里!
将用户体验放在首位的美的空调 将是你的首选
安科瑞ASJ60剩余电流监测装置在路灯线路
面对自然灾害怎么办,VR技术让你学会逃生技巧
采用2220-30-1可编程三通道直流电源提高输出精度
票据打印机的最高打印速度
转换器怎么用
瑞士初创公司Innolith宣称,其新款高密度锂离子电池取得重大突破
AMD Ryzen线程撕裂者2990X多线程跑分曝光,最好成绩达6399
WT2003H语音芯片,在新能源低速报警器上的运用
大众三款全新插电混合车型亮相 标志着电动出行战略三个阶段的实施