STM32F401CCU6与MFRC522接线及读取示例

硬件准备

  1. stm32f401ccu6最小开发板
  2. rfid-rc522开发板
  3. usb2ttl转接, 可以用pl2303, ch340, CP2102, FT232
  4. Mifare 1K卡, UID长度4字节的版本

软件准备

  1. Keil uVision5
  2. putty, xshell等可以连接com口的终端

MFRC522 13.56MHZ射频卡读卡器

SPI接线

SPI是Serial Peripheral Interface的缩写, 是一种同步的短距离串口通信接口规范, 由摩托罗拉与80年代开发, 主要用于嵌入式系统, 特别是SD卡和LCD显示. SPI设备由一主(master)多从(slave)组成, 通过SS(slave select)或者CS(chip select)选择通信. 通信需要的接口一般为4个:

  • SCLK: Serial Clock (output from master)
  • MOSI: Master Out Slave In (data output from master)
  • MISO: Master In Slave Out (data output from slave)
  • SS: Slave Select (often active low, output from master)

stm32f401ccu6与rfid-rc522和usb2ttl的接线

MFRC522 <====> STM32F401, 在rc522.c中设置, PA5, PA6和PA7是datasheet中定义的SPI1

SS(SDA)    ->    PA2
SCK        ->    PA5
MOSI       ->    PA7
MISO       ->    PA6
IRQ
GND        ->    GND
RST        ->    PA3
3.3V       ->    3.3V

PL2303/CH340 <====> STM32F401, 在main.c的UARTmain_Init()方法中设置, PB6和PB7是datasheet中定义的USART1

TX         ->    PB7 (RX)
RX         ->    PB6 (TX)
GND        ->    GND

M1卡(Mifare 1K Card)

主要指标

  • 容量为8K位EEPROM, 8192 bits(1K bytes)
  • 分为16 个扇区,每个扇区为4 块,每块16 个字节,以块为存取单位
  • 每个扇区有独立的一组密码及访问控制
  • 每张卡有唯一序列号,为32 位
  • 具有防冲突机制,支持多卡操作
  • 无电源,自带天线,内含加密控制逻辑和通讯逻辑电路
  • 数据保存期10年,可改写10万次,读无限次
  • 工作温度:-20℃ ~ 50℃(温度为90%), PET 材料封装的M1卡温度可达100℃。
  • 工作频 :13.56MHZ
  • 通信速 :106Kbps
  • 读写距离:10cm以内(与读写器有关)

存储结构

  1. M1卡分为16个扇区, 每个扇区分为4块(块0、块1、块2、块3), 也可以将16个扇区的64个块按绝对地址编号为 0 - 63
  2. 第0扇区的块0用于存放厂商代码, 已经固化, 不可更改
  3. UID分为4byte, 7byte等版本
  4. 每个扇区的块0、块1、块2为数据块, 可用于存贮数据. 数据块可作两种应用
  5. 用作一般的数据保存,可以进行读、写操作
  6. 用作数据值,可以进行初始化值、加值、减值、读值操作
  7. 每个扇区的块3为控制块,包括了密码A(6 byte)、存取控制(4 byte)、密码B(6 byte)
  8. 每个扇区的密码和存取控制都是独立的, 可以根据实际需要设定各自的密码及存取控制.
  9. 存取控制为4个字节共32 位
  10. 扇区中的每个块(包括数据块和控制块)的存取条件是由密码和存取控制共同决定的
  11. 在存取控制中每个块都有相应的三个控制位
  12. 三个控制位以正和反两种形式存在于存取控制字节中, 决定了该块的访问权限(如进行减值操作必须验证KEY A,进行加值操作必须验证KEY B,等等)

实物图及检测输出

接线图


输出格式

代码说明

  1. 在Keil MDK5中可以直接打开项目运行, 需要有STM32F401CCUx的依赖库
  2. 项目中使用USART1作为printf的输出
  3. 为了在stm32f401中可以使用, 将USART1设置为PB6和PB7, 如果要调整, 需要修改main.c的UARTmain_Init()方法
  4. SPI脚如果要调整, 需要修改rc522.c, PA5, PA6和PA7是datasheet中定义的SPI1
  5. 仅支持UID长度为4byte的M1卡
  6. 运行中会循环读取靠近的射频卡, 当读取成功时
    1. 读取前4个字节, 作异或(^)校验, 将结果与第5个字节比较, 不相同则返回错误
    2. 与预设的MyID作比较, 判断是否相同并展示
    3. 循环依次将64个区块读出并展示

下载

https://pan.baidu.com/s/1618xzotP3IG9aNII39CJ0g 提取码: 4c8c

参考

posted on 2021-04-26 18:56  Milton  阅读(1528)  评论(0编辑  收藏  举报

导航