×
嵌入式 > 技术百科 > 详情

STM8的RFID程序设计

发布时间:2020-12-25 发布时间:
|

好久好久没有更新了~


现在开始在实习,正好公司最近在做一款宾馆用的插卡取电模块,用的是STM8配合RFID MFRC522模块实现的,国庆没事正好在淘宝上买了一款RFID模块,配合自己的STM8,体验一下。


MFRC522 模块使用了支持 SPI UART I2C,但是一般都使用SPI接口开发(难道是因为淘宝上的程序都是SPI?!)


MFRC522是个很有故事的芯片,因为打开它的数据手册,映入眼帘的是一大团寄存器,我去这尼玛是哪家新出的单片机,说好的芯片不就是几个引脚的故事吗!


不过好在这些寄存器的操作我们不用去了解,直接使用库函数即可。


关于接口

因此在我们移植程序的时候,需要将STM8的 SCK设置为输出 MOSI设置为输出 MISO设置为上拉输入 NSS设置为输出


关于SPI的通信原理

关于SPI的时序要求

STM8属于单周期单片机,时钟一般使用16Mhz,所以一个机器周期 1s/16 000 000 = 62.5 ns 所以说是符合SPI时序要求的。


关于复位


MFRC522要求复位脉宽至少100ns 然而从前面可以知道,STM8的机器周期是62.5ns虽然说实际上可能有出入,不过为了保险起见,我们在写复位程序的时候这么写


MF522_RST_SET();                              //复位周期至少100 NS


 


asm("nop");                  


                asm("nop");


                asm("nop");


    MF522_RST_CLR();


                asm("nop");


                asm("nop");


asm("nop");                   


 


    MF522_RST_SET();


                asm("nop");


                asm("nop");


                asm("nop");


已知asm("nop");是一个机器周期那么3个nop加上执行SRT/CLR语句的指令时间,就可以达到100ns的复位宽度。我觉得大了很多。。。


关于程序有毒


是的,这不是我手滑,真的有毒!


淘宝上的程序在改数值操作上面和备份操作上面是有毒的


而这个毒在该数值和备份上面是一样的,下面就已数值改写为例(扣款/充值)来说说


首先放程序(淘宝代码)

红框框里面就是有毒的地方,这里的功能是封装一个数据缓冲区修改数值的数组,发送给缓冲区,MFRC522会对所有指令返回一个确认值,这也是之前所有程序里面的校验方式,唯独在这里缓冲区的操作是不返回确认值的

这里说到卡片无返回,然而程序依旧进行了校验,这就导致了实际运行中卡在这里出不去的情况,于是注释掉以后强行忽略这个步骤。反正后面是用起来也没有发生数据错误的情况,我觉得更深入的解决方案还需要再学习。


说到这里MFRC522淘宝上51版本的源代码移植就算是完成了,下面就是配置主程序的串口以及定时器操作了,不过这不是我们今天的主角。就不多说了。RFID的只是还有很多,比如M1卡结构,控制字的使用。留待以后再说(主要是没人看)。

最后上一张模块大图

 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ZigBee技术语音图像无线监控系统的设计与实现