微波EDA网,见证研发工程师的成长!
首页 > 射频和无线通信 > 射频无线通信文库 > Cortex-M0+的RFID读卡器模块设计

Cortex-M0+的RFID读卡器模块设计

时间:11-03 来源:互联网 点击:

式设置的,所 以这里没有执行实际操作,仅打印了当前使用了SPI接口的提示信息。

 

SLRC610复位是通过将SLRC610的PDOwN 引脚加载超过10μs的持续高电平来启动内部复位程序的,它包含复位电源和启动时间两个阶段。由于它的复位方式和老一代的方式不同,所以升级射频芯片的时 候要格外注意。笔者调试的时候就遇到过因复位导致的问题,当循环跑SLRC610测试时,会偶尔成功。追踪发现读写寄存器不是每次都成功,后来调了较长一 段时间才发现是复位的问题。在本次设计中为确保复位成功,后面又加了"等待SLRC610复位就绪进入空闲状态"这一步骤。

 

SLRC610测试流程图如图4所示。

 

图4 SLRC610测试流程图
图4 SLRC610测试流程图

 

3.2 检测 15693

 

检测15693协议主要包含SLRC610软复位、初始化15693协议层、应用15693协议设置、获取15693卡系统信息。SLRC61O软复位就是将SLRC610内部E2PROM 中保存的寄存器的默认值重新加载到寄存器中。一般初始化的时候会用到,当然切换协议的时候也会用到。初始化15693协议层主要完成参数结构体长度检查和 私有变量初始化。应用15693协议设置是根据参数中设置的卡的类(PHHAL_Hw_CARDTYPE_ISO15693)来加载该协议下 SLRC610的寄存器的默认配置,包括调制深度、调制方式、超时时间等。检测15693流程图如图5所示。

 

图5 检测15693流程图
图5 检测15693流程图

 

3.3 Get System lnfo命令

 

Get System Info是ISI15693的可选命令,主要用来检索卡片的基本信息。请求和应答帧都是有帧头和帧尾的,如下所示。

 

 

去掉帧头帧尾 一共有4个字段,其中一个字段(8字节的UID)是可选的。它的响应信息格式如下所示,其中斜体部分的字段表示,只有在响应信息中有该标志,才有这个字段的信息。

 

 

由于它发送的字节少(在不加UID的情况,加 上CRC才4字节),而且只要卡在场中就能使用,比较方便用示波器抓波形以分析收发的数据是否正常。

 

获取15693卡系统信息的写法有两种:第一种是用phpalSlil5693_Sw_Exchange和卡片交换信息的时传两字节数据"0x02 0x2B",并设发送长度为两字节;第二种是用phpalSlil5693_Sw_Exchange和卡片交换信息的时传两字节数据"0x2B",并设发 送长度为一字节。从本质上来讲,这两种做法的最终结果都是发了同样的数据,不同之处在于它们的发送方式。 phpalSli15693_Sw_Exchange的第二个参数有一个是写选项,对于第一种,要将其设为 PH_EXCHANGE_LEAVE_BUFFER_BIT,第二种设为PH_EXCHANGE_DEFAULT,还得将0x02设置到第一个参数的 bFlags上。另外在使用phpalSli15693_Exchange时要特别注意,在该函数前面用phpalSli15693_SetConfig 函数设置超时。假如没有设置该函数,那么每次只能收到卡片返回的前5位正确数据。获取15693卡系统信息流程图如图6所示。

 

图6 获取15693卡系统信息流程图
图6 获取15693卡系统信息流程图

 

3.4 SPI通信

 

采用宏定义加数组的方式来配置I/O引脚,这种方法比较灵活,可移植性很强,又方便代码维护 。LPC800系列加了一个开关矩阵,将可转移功能通过开关矩阵分配给引脚PIO0_0~PIO0_17,使用起来很方便。使用的时候需要先查可转移功能 所对应的SWM 引脚分配寄存器。找到后先将原来的数据清除,再写上新分配的引脚。操作过程中要谨慎,绝不能修改不该动的位。

 

这里初始化调用LPC812的库函数,将SP10设置为主机模式,为确保通信可靠在SSEL置位和数据帧起点之间、制数据帧末尾和SSEL解除置位之间、相邻数据帧之间插入2个SPI时钟周期,两次传输之间SSEL解除置位的最短时间为3个SPI时钟周期。

 

4 模块调试和测试

 

4.1 调试方法

 

由于15693的编码方式是SOF信号后每一定长度代表一定量的信息,所以可以先取信号的开始时间,然后计算下一个的时间,去看示波器每一个时间段的波形,记录下来然后去整体解析。

 

抓到数据后开始解析数据,比如获取卡片信息的命令(0x02 0x2B 0x26 0xA3),它总共有4个字节,最后两个字节是CRC校验。通过调程序可以看到VCD发的实际命令(0x02 0x2B),而CRC则是硬件算好直接发的,所以通过调程序无法看到它。

 

4.2 测试

 

模块的实

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top