这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【ESP-IDF系列】【ESP32】使用ESP-32-S3读写取RFID-RC5

共2条 1/1 1 跳转至

【ESP-IDF系列】【ESP32】使用ESP-32-S3读写取RFID-RC522

工程师
2025-04-29 11:53:16     打赏

简介

RC522是由恩智浦NXP公司推出的一款RFID芯片. 其支持MIFARE Mini, MIFARE 1K, MIFARE 4K, MIFARE Ultralight, MIFARE DESFire EV1 和 MIFARE Plus RF identification protocols. [1]  其中一共支持三种通讯方式 SPI, I2C, UART. 因为通信速率关系, 所以目前市面上常见的通信方式大多数是基于SPI.

image.png

通讯速率对比, (数据来源于RC522数据手册)

l  SPI up to 10 Mbit/s u 

l  I2C-bus interface up to 400 kBd in Fast mode, up to 3400 kBd in High-speed mode 

l  RS232 Serial UART up to 1228.8 kBd, with voltage levels dependant on pin voltage supply

 


MIFARE 1K 卡介绍

对于一个MIFARE 1K卡而言, 其中共具备1KB(1024 bytes)的存储空间. 其中被分成了16个扇区, 每个扇区为四个块, 每个块为16bytes

(16 * 16 * 64 = 1024 bytes).  对于每个扇区,其组成结构如下所示 [2]

        Sector 0:

            Block 0: [UID + 厂商信息] (不要写)

            Block 1: 用户数据

            Block 2: 用户数据

            Block 3: [Key A + Access Bits + Key B]

         

        Sector 1:

            Block 4: 用户数据

            Block 5: 用户数据

            Block 6: 用户数据

            Block 7: [Key A + Access Bits + Key B]

          ....

          Sector 15:

                    Block 60: 用户数据

                    Block 61: 用户数据

                    Block 62: 用户数据

                    Block 63: [Key A + Access Bits + Key B]


其中扇区0的Block0被用于存储厂商的制造信息比如说UID等. 如下所示

image.png

对于每一个扇区中的最后一个块,其记录的为当前扇区访问的访问权限信息. 其余之外,其他的扇区皆可被用于存储用户数据. 在本文中我们讲使用ESP-IDF结合abobija/rc522 库对M1卡进行读取和写入.


ESP-IDF读取和写入RC522(M1卡)

1- 首先创建一个新的project

2- 在main文件夹内创建一个文件为idf_component.yml 用来管理IDF的组件

3- 将下述文件内容拷贝到idf_component.yml中, 用于管理abobija/rc522

dependencies:
  abobija/rc522:
    version: '*'

4- 编译项目, 此时IDF会自动将依赖的组件下载到本地

image.png5- 打开https://github.com/abobija/esp-idf-rc522 仓库, 在https://github.com/abobija/esp-idf-rc522/blob/main/examples/read_write/main/read_write.c 下找到读写的测试demo, 并且拷贝到main.c中

6- 根据自己的连接线来修改PIN定义

image.png

6- 在原本的代码上做一点小小的修改, 使其可以读取所有的块数据.

uint8_t read_buffer[RC522_MIFARE_BLOCK_SIZE];
    uint8_t write_buffer[RC522_MIFARE_BLOCK_SIZE];
    for (size_t i = 0; i < 64; i++)
    {
        //检查分区的权限信息
        ESP_RETURN_ON_ERROR(rc522_mifare_auth(scanner, picc, i, &key), TAG, "auth fail");
        // 读取开始
        ESP_LOGI(TAG, "Reading data from the block %d", i);
        ESP_RETURN_ON_ERROR(rc522_mifare_read(scanner, picc, i, read_buffer), TAG, "read fail");
        ESP_LOGI(TAG, "Current data:");
        dump_block(read_buffer);
        // ~读取结束
    }


7- 烧录程序并且验证现象image.png

此时如果我们将一个M1卡靠近到RC522模块上的话, 那么RC522将开始读取数据. 实际测试下来和额外串口打印, 读取64个扇区还是需要大改两秒时间的. 也有可能是串口的打印占用了时间. 可想而知如果使用I2C或者uart,这个速度将会更慢. 不过实际的使用环境中也不会使用全部的扇区.


总结

本文对RFID, M1卡和RC522进行了简要介绍, 并且手把手的基于IDF驱动RC522对M1的卡进行了读取和写入测试. 可能这个步骤在IDF上有一点繁琐,如果使用Arduino的话.会变的更加轻松!


引用:

[1] RC522 数据手册 https://www.nxp.com/docs/en/data-sheet/MFRC522.pdf

[2] MIFARE Classic® EV1 1K - 4K https://www.nxp.com/products/rfid-nfc/mifare-hf/mifare-classic/mifare-classic-ev1-1k-4k:MF1S50YYX_V1


附件:

rc552.zip





关键词: ESP-IDF     RFID     RC522     M1卡    

专家
2025-05-03 22:47:41     打赏
2楼

感谢分享


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]