PSoC的RFID读卡体验
RFID现在生产生活中已经非常常见,一个用非常广。手上也有一片RDIF的板子,是基于复旦微的FM17580芯片,这次就利用PSoC来驱动,进行RFID的基础应用功能:读卡
首先看一下FM17580芯片,EM17580 是一款高度集成的工作在 13.56MHz下的非接触通讯芯片,支持以下2种不同的工作模式:
支持符合 ISO/IEC 14443 TypeA 协议的读写器模式
支持符合 ISO/EC 14443 TypeB 协议的读写器模式
同时提供了低功耗的快速发场功能,方便电池供电、需要低功耗工作、并且需要实时处理任意时刻会进入射频场的外部卡片的读写器设备。
FM17580 具有低电压、低功耗、驱动能力强、多接口支持、多协议支持等特点。适用于低功耗、低电压、低成本要求的非接触读写器应用。
把本次利用PSoC也就是来实现RFID的基础应用功能:读卡,读取Type-A卡片的UID
FM17580的封装图下
实物图如下
其跟MCU之间使用SPI通信,IRQ引脚可输出IRQ中断信息,但也可使用查询功能,就可以不用该引脚了,本次就使用查询方式。
芯片RF部分是需要使用5V电源供电的,因此跟之前的WB2812B一样,使用开发板上的5V的电源插针引脚。
下面开始开发设计,首先打开下面的SPI主机例程DEMO
新建并根据前面的经验,更改芯片等配置,具体可参考前面的测评文章,本次就不再赘述这个过程了。
SPI硬件引脚使用工程默认配置即可。而为了配合FM17580的时序操作,这里的CS引脚可以改成软件控制。
增加一个FM17580的复位控制引脚
根据原理图,添加一下串口,主要用于打印调试和运行信息
增加两颗LED用于指示
工程转杯就完毕了,然后先增加FM175xx的驱动代码文件以及头文件路径。
为了打印一些状态和调试信息前面增加了一个串口,为了支持printf打印,需要增加如下的打印支持代码,也就是printf重定向。
接下来就先看一下主函数的设计,首先当然就是初始化初始化了串口打印,初始化了FM175xx的驱动,并读取Version寄存器,以判断是否是FM175xx芯片。因为手上又A1和A2两个版本芯片,因此两者做了兼容。
然后初始化成功之后,就每1秒扫描一次卡片。
然后再看下FM175xx的针对性初始化,首先就是SPI接口了
然后是字节和数据缓存的发送
然后是接收和收发的处理。
最需要注意的是下面这个read fifo的函数
需要严格按照手册上的读fifo时序,特别是第二个字节开始的MOSI需要输出address,这样才能正确读出FIFO中的每个字节,否则可能只能读出一个字节。
其它就是根据手册的寄存器,以及Type-A卡片的常规操作进行设计了。在如下的几个过程中,操作成功之后就可以获得uid卡号了
如下就是Type-A卡片的操作,当读到卡片,则通过串口打印卡片的ID等信息,并且LED亮起。当卡片移开,则打印卡片离开提示并熄灭LED灯。
编译下载运行
就可以在串口PC软件中看到运行过程了,如下。
使用逻辑分析仪,还能分析到SPI接口上的具体交互信息
比如读取芯片Version寄存器
而读卡号就在这个地方了
最后再来个整体照
实验还是非常成功的,也体验到了PSoC的强大,特别是PSoC Creator的便利性。测试仅做了卡片ID的读取,基于此还可以做很多应用,入门禁,考勤,安检,消费等等