13.56M IC 卡 32 位 UID 读取
本文章参考 FlexLua 官网 ,基于 FlexLua 脱离复杂单片机C开发正逐渐成为一种快速高效的 IoT 硬件开发方式。让小白即使不懂单片机开发也可很容易用FlexLua零门槛开发各种 IoT 硬件。
一、基本概念介绍
Core 通过外接RC522 IC卡读卡模块来实现对工作频率为13.56MHz的IC卡的各种操作。RC522支持对Mifare One类型的IC卡操作,例如M1-S20,M1-S50,M1-S70卡等,20,50,70系列的区别主要在存储容量大小,其他的操作基本完全一样。
本篇章为了简单,只涉及IC卡的UID读取操作。因为如果您对IC卡认证的安全性不是太在乎,您可以考虑把IC卡的UID作为认证信息,这种操作有点类似于ID卡,但还是要比ID卡强一点,因为ID卡的的ID号还是比较容易"撞衫"的,而IC卡的UID信息有32位长度,在唯一性上更强一些。
安全性考虑:市面上有一种卡叫UID卡可以用来复制IC卡,因为它的第0扇区的第0块(一般用来存储UID等信息)可以任意被修改。所以如果您想避免别人用复制的UID卡来入侵,这里有个技巧,就是每次读取IC卡的UID后再故意往该IC卡上第0扇区的第0块写任意的16字节数据,如果正常的IC卡是无法成功写入的。本篇章不涉及对IC块数据的读写操作,所以相关的读写操作教程请看《读写IC卡的数据及密码下载》。
二、实现功能描述
本例要实现的功能为Core控制RC522读卡模块不停的搜寻周围的IC卡,当有效的IC卡靠近之后,即可检测出其UID(32位唯一识别码),以及IC卡型号(比如S50,S70卡等)。
三、接线图
四、材料清单
RC522读卡模块
五、完整代码
--配置Core的USB口以虚拟串口模式工作,波特率115200
LIB_UsbConfig("CDC")
--配置D8为普通输出,控制Core电路板上的LED1
LIB_GpioOutputConfig("D8","STANDARD")
LIB_GpioWrite("D8",1) --LED1灭
--初始化RC522读卡模块后,将会一直自动寻找有效的IC卡出现
LIB_RC522Config("D7")
--开始大循环
while(GC(1) == true)
do
--如果发现IC卡,就输出其卡类型以及卡的32位ID号
CardFoundFlag,Type,UID = LIB_RC522CardFind()
if CardFoundFlag == 1 then
print(string.format("Card Type:%s\r\nCard UID:%02x %02x %02x %02x",Type,UID[1],UID[2],UID[3],UID[4]))
--LED1闪烁一下
LIB_GpioWrite("D8",0)
LIB_DelayMs(200)
LIB_GpioWrite("D8",1)
end
end
如果感兴趣,上面代码中出现的LIB开头的库函数可以在 API文档 中通过Ctrl+F查询。
六、代码运行结果
在电脑端运行的调试助手上,我们可以看到如下打印输出信息:
领取专属 10元无门槛券
私享最新 技术干货