欢迎光临散文网 会员登陆 & 注册

Arduino MFRC522读卡并验证

2022-09-05 08:48 作者:会飞的豹豹豹  | 我要投稿

Arduino操作RC522模块读写,由于RC522库并不简单,操作有那么一些繁琐,Arduino IDE又无法看到注释,新接触也就不好上手。以前刚接触RC522时,摸例程几天,才读取出来ic卡。

那时候想做一个手机nfc门禁,查资料发现RC522比较常用,就买了一个,到手什么也不懂,(没有了解ic卡读卡,写卡流程)就直接接线开始捣鼓,结果捣鼓大半天,也没懂怎么操作。

还是先看一下读卡写卡流程吧!

要让RC522工作起来,必须的顺序是:寻卡--->防冲撞--->选卡---->读/写卡

以M1卡片为例

M1卡分为16个扇区,每个扇区为4块,每块16个字节,以块为存取单位。每个扇区的块0、块1、块2为数据块,可用于存储数据。而每个扇区的块3为控制块,包括密码keyA,存取控制,密码keyB。存取控制的作用是控制对应扇区记录的读写权限与keyA和keyB的关系。

其中读写卡片中的数据步骤是:

------>选择块(16个扇区,每个扇区对应4个块,就一共有64个块)

------>验证密钥A或B(控制块决定)

------>验证成功后读或写入数据(如果写入密钥块,那此扇区的密钥就被改变,下次读取时需要验证新的密钥,控制位不要轻易改变,负责此扇区可能成为死扇区)

其实搞懂了也就感觉没什么难度了。

好不容易搞懂了读写,数据可以打印出来了。但是光打印出来没有用啊,得会比较。那时候Arduino刚玩不久,c一点都不会,代码完全就是靠复制,粘贴,像比较数据这种,完全懵逼,不知道怎么操作。那怎么办捏,翻帖子呗,到处翻,有关RC522的就进去瞄一眼,搜各种关键词,但是结果都是怎么读写,学习例程,没有关于怎么比较的帖子,最后bibi看视频,有个up主给了我方法

其实也蛮简单,就是for循环对比,比一个校验值加一个,校验值=16,就是比对成功。

可是就是这给代码,我当时研究了半天,不懂buffer是什么,为什么跟它比较就可以了。

那时候buffer有一个注释,叫缓冲区,这个单词的意思就是缓冲区,当时很懵逼缓冲区是什么东西,不懂意思(菜的一批),但是也没多管,能跑就行了嘛!管他怎么跑起来的。

大概就是这样吧!非常形象,简直了。后来明白了,就是一个数据缓存的地方,RC522读取到的数据,缓存到里面,然后要读取数据,就从里面读出来。只不过是一个数组,那时候还只能看懂基本变量,看到一个数组就懵逼了(菜)。


那时候也看到许多帖子是用UID做比较的,当时想,做门禁嘛,安全最重要,就死磕这。

今天重新玩了一下RC522模块,发现还有人问怎么比较数据,那就放大招吧!

一个库,直接把执行操作填写到回调函数,不用管怎么读写,怎么验证。

此库采用UID+密钥+扇区块认证,三重验证,安全妥妥的。

库函数代码:链接:https://pan.baidu.com/s/1g0s7FyoR5MeXF8uprNJsAA 提取码:k59t

Arduino MFRC522读卡并验证的评论 (共 条)

分享到微博请遵守国家法律