- UID
- 871057
- 性别
- 男
|
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芯片丰富的外设使该方案拥有较好的扩展性、实用性,为进行系统级别的设计打下了基础。 |
|