历史上的今天
返回首页

历史上的今天

今天是:2025年01月10日(星期五)

正在发生

2021年01月10日 | ARM9的超高频读写器基带编解码设计

2021-01-10 来源:21ic

引言

普通的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所示。




a.jpg?imageView2/2/w/550



读写器射频模块的工作流程为:发送命令时,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。


b.jpg?imageView2/2/w/550



协议规定,完整的PIE码需在有效数据前加上前同步码或帧同步码。前同步码由定界符、Tari、RTcal以及TRcal这4段组成,用在Query命令上。帧同步码省去了TRcal而直接由前三项组成,用在其他命令上。前同步码示意如图3所示。


c.jpg?imageView2/2/w/550



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所示。


d.jpg?imageView2/2/w/550



正确的Query命令会让标签返回16位伪随机数RN16。为了测试Query命令是否发送正确,使用示波器观察比较器输出,如果有MILLER2编码的16位数据输出,则表明Query命令正确。使用示波器观察的结果如图5所示,可以看出是MILLER2编码的序列,详细分析其位数后确认是16位,验证了PIE编码的正确性。


e.jpg?imageView2/2/w/550




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)。


f.jpg?imageView2/2/w/550




3.2 解码状态机

本文使用S3C2440的外部中断捕捉比较器的输出,使用单边触发上升沿检测。对正确的MILLER2编码序列进行上升沿捕捉时,两次中断的时间间隔有a和b两种情况,其中a表示两次中断的时间间隔为Tari,即6.4μs,b表示间隔为1.5Tari,即9.6μs,据此绘制了MILLER2编码的状态以及状态转换图。状态共有22个,其中用于前导码检测的状态有13个,用于数据检测的有9个状态。部分前导码状态以及全部数据状态如图7所示。


g.jpg?imageView2/2/w/550



下面描述各个状态的意义。

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只画出了有效输入时的转换图,在无效输入时结束状态机程序返回。


h.jpg?imageView2/2/w/550



3.3 MILLER2解码程序设计

进行MILLER2解码主要是把接收到的中断时间间隔作为状态机的输入,在状态机里进行判断和状态转换,解码出有效数据。本设计中,使用上面描述的编码方式码发送Query命令,UHF电子标签收到有效命令之后反向散射采用MILLER2编码的16位伪随机数RN16。程序在发送完毕Query命令之后立即使能外部中断,在外部中断处理函数中,把中断时间间隔保存在数组中,等接收的中断间隔超过b或者中断次数超过接收RN16所需要的次数后,关闭中断。在外部程序中通过状态机进行解码,解调的同时对有效位进行计数,计数器达到16位后,返回解调出来的数据,否则返回0。解调程序流程如图9所示。


i.jpg?imageView2/2/w/550



在主函数里面循环发送Query命令并进行MILLER2解码,如果解码成功则使用串口工具在上位机上打印出解调出来的RN16的值,解码失败则不打印。在PC上使用串口工具SecureCRT观察到以十六进制输出的RN16,如图10所示,表明MILLER2解码成功。

j.jpg?imageView2/2/w/550

结语

本文提出使用ARM9进行UHF RFID读卡器基带编解码,并加以实现。ARM9芯片丰富的外设使该方案拥有较好的扩展性、实用性,为进行系统级别的设计打下了基础。


推荐阅读

史海拾趣

E-Z-HOOK公司的发展小趣事

在1956年的一个晴朗午后,E-Z-HOOK的创始人阿尔伯特·史密斯(化名)在实验室里遇到了一个棘手的问题。他正在测试一个复杂的电子系统,但发现现有的测试工具无法满足他的需求。于是,他动手设计并制造出了第一个E-Z-HOOK测试钩,这个简单但实用的工具极大地方便了他的工作。史密斯看到了这个产品的巨大潜力,于是决定成立一家公司来专门生产这种测试钩。这就是E-Z-HOOK公司的起源。

Exar公司的发展小趣事

随着云计算和大数据的兴起,数据中心市场迎来了爆发式增长。Exar公司敏锐地抓住了这一市场机遇,推出了一系列针对数据中心市场的产品。通过不断的技术创新和产品优化,Exar在数据中心市场上取得了显著的突破,赢得了众多客户的认可和信赖。

极海半导体(Geehy)公司的发展小趣事

随着云计算和大数据的兴起,数据中心市场迎来了爆发式增长。Exar公司敏锐地抓住了这一市场机遇,推出了一系列针对数据中心市场的产品。通过不断的技术创新和产品优化,Exar在数据中心市场上取得了显著的突破,赢得了众多客户的认可和信赖。

Altmustech公司的发展小趣事

为了进一步扩大市场份额,Altmustech积极寻求与行业内外的战略合作。公司与多家知名企业签订了长期合作协议,共同研发新产品,开拓新市场。通过这些合作,Altmustech不仅获得了更多的资源支持,还提高了品牌知名度,进一步巩固了其在电子行业的地位。

Excelsys公司的发展小趣事

Excelsys公司自创立之初,就致力于电源管理技术的研发。在电子行业中,电源管理一直是影响产品性能和可靠性的关键因素。公司团队通过不断的技术创新,推出了一系列高性能、高效率的电源管理产品,赢得了市场的广泛认可。特别是在智能设备日益普及的背景下,Excelsys的电源管理解决方案为各种智能设备提供了稳定可靠的电力支持,助力了行业的发展。

Elcos AG公司的发展小趣事

随着公司规模的扩大和业务的增长,Elcos AG面临着供应链管理的挑战。为了降低成本、提高效率和保证产品质量,公司决定对供应链进行优化。通过引入先进的供应链管理软件、加强与供应商的合作和建立严格的质量控制体系等措施,Elcos AG成功实现了供应链的优化和升级。这不仅提高了公司的运营效率和市场竞争力,还为客户提供了更加稳定可靠的产品和服务。

问答坊 | AI 解惑

实用电动机控制电路350例

实用电动机控制电路350例…

查看全部问答>

布线不通过,error par:228

现在一个设计xc3s400,ise10.1,综合器为SynplifyERROR:$ar:228 - At least one timing constraint is impossible to meet because component delays alone exceed the   constraint. A timing constraint summary below shows the failing ...…

查看全部问答>

谁在6410下弄过对OPEN GL2.0的支持,我把三星提供的那几个DLL弄进去了,但写的AP老是在eglInitialize处不成功,为什么?

谁在6410下弄过对OPEN GL2.0的支持,我把三星提供的那几个DLL弄进去了,但写的AP老是在eglInitialize处不成功,为什么?…

查看全部问答>

NMAKE : U1073: don't know how to make 'F:\WINCE420\public\common\sdk\lib\ARMV4I

在编译一个网卡驱动时出现 NMAKE :  U1073: don\'t know how to make \'F:\\WINCE420\\public\\common\\sdk\\lib\\ARMV4I\\retail\\ndis.lib\',我到这个目录下找找不到这个文件 SOURCES文件: DM9CE_SOURCENAME=DM9000 DM9CE_TARGET= ...…

查看全部问答>

本人介绍个单片机|嵌入式|ARM开发的原创论坛!论坛中有好几个牛人!

本人介绍个单片机|嵌入式|ARM开发的  原创论坛!  论坛中有好几个牛人! 本人是c++ builder QQ群主,后来发现群里有很多的技术牛人,于是建立了论坛,希望能给大家一个技术交流的平台,大家一起讨论进步! www.jsrj.net&nbs ...…

查看全部问答>

奇怪的编译问题!!!

我用zlgMagic2410的BSP 制订CE内核 选择完BSP,平台后什么组件都不添加时制订的工程不报错 但是添加了一些组件后,PB报错: ...... D:\\WINCE500\\build.err D:\\WINCE500\\build.log ??????         2 ????? ...…

查看全部问答>

求救wince中断的用法

有谁知道怎样利用中断处理,请赐教!…

查看全部问答>

★★★★★- 诚聘【MSP430】单片机设计工程师 -★★★★★

诚聘单片机设计工程师: 1,会msp430,有设计经验 2,有msp430 C语言开发经验 3,懂信号处理,会用matlab 4,最好有工作经验1年以上 电话:010-81504648 公司网站:www.safezx.com 注:工作地点北京…

查看全部问答>

Quartus2的FPGACPLD设计

给大家介绍一个好东西~…

查看全部问答>

菜鸟求教mlwang_km大侠

你好!我看过一个帖子:\\"请教:这样的波形是怎样编程的呢\\".(2006年6月10日12:37发的帖子) 其中有您的回帖.您给的这个程序(产生PWM波的) #include \\"LF2407Regs.h\\" unsigned int actrb[6] = {0x0c30,0x03c,0x030c,0x03c0,0x00c3,0x0 ...…

查看全部问答>