浅析ARM9的超高频读写器基带编解码设计

引言
普通的uhf读写器主控芯片使用fpga较多,其优点是fpga对时序逻辑处理速度快,使用hdl语言很容易实现协议的编码与解码,但fpga芯片本身很少具备串口、网口等通信接口模块,功能扩展较麻烦。由于arm9芯片集成了很多扩展接口,同时进行操作系统移植等更高层次的设计也变得很容易,但对时序逻辑处理较难。因而本文提出了基于arm9的uhf rfid读写器基带编解码方法,并加以实现。
1 基本原理
uhf rfid国际标准协议规定读写器到电子标签的通信应采用dsb—ask、ssb—ask或者pr—ask调制方式。本文使用arm9芯片s3c2440的pwm(脉宽调制)控制模块进行pie编码,通过编码信号控制射频开关实现ook调制。电子标签接收到命令后反向散射副载波应答,经过射频模块的天线接收后被解调电路还原成miller2数据。构造miller2解码状态机,使用s3c2440的外部中断对miller2时序序列进行上升沿捕捉,捕捉到的两次中断的时间间隔作为状态机输入,进而解调出标签反射回来的数据。系统的硬件框图如图1所示。
读写器射频模块的工作流程为:发送命令时,pie编码电平控制射频芯片开关,当开关开启时输出射频载波,关闭则不输出,以达到ook调制载波的目的。接收机采用零中频接收机方案,直接对天线接收到的标签反向散射信号进行解调,解调完毕得到相位相差90°的i、q两路信号,通过差分放大器放大处理后,输出到比较器,经过比较后电路输出miller2编码时序信号。
2 pie编码
2.1 pie码简介
epc gne2协议规定uhf读卡器向标签发送命令时,数据应采用pie编码。pie码通过高低电平的时间长度不同来规定数据是“1”还是“0”。协议使用tari代表数据“0”,时间长度在6.25~25μs范围内,容差为±1%,数据“1”的宽度在为1.5tari~2.5tari,如图2所示。本次编码中,tari值为6.4μs,数据“1”的长度为11.4μs,pw的长度为3.2μs。
协议规定,完整的pie码需在有效数据前加上前同步码或帧同步码。前同步码由定界符、tari、rtcal以及trcal这4段组成,用在query命令上。帧同步码省去了trcal而直接由前三项组成,用在其他命令上。前同步码示意如图3所示。
2.2 pwm实现pie编码
s3c2440有5个16位的定时器,其中定时器1~4具有pwm(脉宽调制)功能,定时器使用经过分频后的系统时钟pclk作为时钟输入。本设计中100 mhz的pclk经过2分频得到50 mhz频率的定时器输入时钟,定时器每计数一次耗时0.02μs。定时器使用两个16位的缓冲寄存器tcntb和tcmpb来实现pwm功能,tcntb为一次pwm输出计数次数,采用递减的方式计数,当计数减为tcmpb的时候,pwm输出电平反转。以数据“0”为例,其脉冲总宽度为6.4μs,低电平持续时间3.2 μs,则可计算出tcntb=6.4/0.02=320次,tcmtb=3.2/0.02=160次。
为实现连续的pwm输出,需要让定时器工作在自动重载模式,即当定时器计数器减为0的时候,在定时器中断处理函数里更新tcntb及tcnmpb,让定时器重新开始一次脉宽输出。定时器1初始化时经过以下步骤:
①tcnmb以及tcmpb寄存器赋非零初值;
②tcon中人工装载位配置为1,tcntb和tcmpb更新到内部计数器;
③tcon中自动重载位配置为1,为实现连续的pwm功能;
④tcon中输出翻转位配置为1,脉冲以高电平开始;
⑤tcon置为启动位;
⑥tcon设置关闭人工装载,定时器开始启动。
经过以上配置后,将定时器i/o引脚配置为pwm输出模式就可以进行pwm输出。以一个query命令的编码为例,query命令是由前同步码和22位数据构成,先将这22位数据计算好并保存在全局数组data[]中,发送query命令时开启定时器1并允许定时器1中断,在中断处理函数里面更新tcntb以及tcmpb的值来决定下一个脉冲的pwm输出。编码程序流程如图4所示。
正确的query命令会让标签返回16位伪随机数rn16。为了测试query命令是否发送正确,使用示波器观察比较器输出,如果有miller2编码的16位数据输出,则表明query命令正确。使用示波器观察的结果如图5所示,可以看出是miller2编码的序列,详细分析其位数后确认是16位,验证了pie编码的正确性。
3 miller2解码
3.1 miller2码介绍
epc gen2协议中规定标签反向散射的数据应该采用fm0或者miller的编码方式。miller定义在两个数据“0”之间变换相位,在数据“1”中间放置一个相转化,miller2码则表示每一位数据重复两个副载波周期。完整的miller2编码,需要在有效数据前加上前同步码。前同步码可编程选择格式,在query命令中将m和trext这两位设置为1,选择前同步码由16个数据“0”加上数据序列“101112”构成。miller2数据定义和前同步码如图6所示。miller2码每一位数据的时间长度由tari值决定,本设计中为2个tari(即1 2.8μs)。
3.2 解码状态机
本文使用s3c2440的外部中断捕捉比较器的输出,使用单边触发上升沿检测。对正确的miller2编码序列进行上升沿捕捉时,两次中断的时间间隔有a和b两种情况,其中a表示两次中断的时间间隔为tari,即6.4μs,b表示间隔为1.5tari,即9.6μs,据此绘制了miller2编码的状态以及状态转换图。状态共有22个,其中用于前导码检测的状态有13个,用于数据检测的有9个状态。部分前导码状态以及全部数据状态如图7所示。
下面描述各个状态的意义。
s0:解码开始,表示收到1个a间隔;
s1:前导码状态的一种,表示收到2个a间隔;
s2:表示收到3个a间隔;
s3:收到4个a间隔,s3状态若连续收到a间隔,则仍旧归于s3状态;
s4:表示s3收到b间隔,此时前导码中的16个数据“0”解码结束,进入数据序列“101112”解码状态;
s5~sa:前导码中的数据序列“101112”检测状态,依次类推,图7中省略;
sb:前导码结束状态;
d1:收到数据“0”的2/4位;
d2:收到完整数据“0”以及数据“1”的1/4位;
d3:收到完整数据“0”以及数据“0”的1/4位;
d4:收到数据“1”的3/4位;
d5:收到数据“0”的3/4位;
d6:收到完整数据“1”以及数据“0”或者“1”的1/4位;
d7:收到完整数据“0”以及数据“1”的1/4位;
d8:收到完整数据“1”;
d9:收到完整数据“0”以及数据“0”的2/4位。
以上状态中,当状态机当前状态为d2、d3、d6、d7、d8、d9的一种时,表示收到1位有效数据。状态转换图如图8所示,状态d2、d7只画出了有效输入时的转换图,在无效输入时结束状态机程序返回。
3.3 miller2解码程序设计
进行miller2解码主要是把接收到的中断时间间隔作为状态机的输入,在状态机里进行判断和状态转换,解码出有效数据。本设计中,使用上面描述的编码方式码发送query命令,uhf电子标签收到有效命令之后反向散射采用miller2编码的16位伪随机数rn16。程序在发送完毕query命令之后立即使能外部中断,在外部中断处理函数中,把中断时间间隔保存在数组中,等接收的中断间隔超过b或者中断次数超过接收rn16所需要的次数后,关闭中断。在外部程序中通过状态机进行解码,解调的同时对有效位进行计数,计数器达到16位后,返回解调出来的数据,否则返回0。解调程序流程如图9所示。
在主函数里面循环发送query命令并进行miller2解码,如果解码成功则使用串口工具在上位机上打印出解调出来的rn16的值,解码失败则不打印。在pc上使用串口工具securecrt观察到以十六进制输出的rn16,如图10所示,表明miller2解码成功。
结语
本文提出使用arm9进行uhf rfid读卡器基带编解码,并加以实现。arm9芯片丰富的外设使该方案拥有较好的扩展性、实用性,为进行系统级别的设计打下了基础。


指纹识别老兵不死,人脸识别成必然趋势
数据投毒对于AI造成了什么影响
微软 Surface 商用系列助力行业转型 - 制造业篇
横琴新区的智慧城市建设成果怎么样了
智慧灯杆可视化管理平台的功能特点
浅析ARM9的超高频读写器基带编解码设计
宝克力模塑料助力打造Linn Selekt DSM网络音乐播放器
iPhone备份文件在哪?苹果手机怎么恢复备份数据
手机存储空间不足应该如何解决
基于32位ARM920T内核的微处理器的嵌入式Linux系统构建详解
努比亚三款新机尾巴曝光 Z17mini成双摄第一炮
骁龙835+双摄像头, 要小米6还是华为P10
索尼大法好?索尼复兴走到历史最高利润
蔚来公布2022年3月交付数据
光伏发电国家政策补贴2020年_光伏发电前景如何
一种双CRISPR/Cas12a辅助的逆转录-重组酶介导扩增(RT-RAA)检测方法
将ERP与物联网集成的好处有哪一些
大唐移动提出了基于场景化的智慧网络解决方案
如何制作红外传感器模块
华为云耀云服务器 L 实例:赋能中小企业数字化转型