首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

零门槛无单片机C实现13.56M IC 卡 32 位 UID 读取

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查询。

六、代码运行结果

在电脑端运行的调试助手上,我们可以看到如下打印输出信息:

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OFOBqSE-QiNY9JXpj03mgCVQ0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券