硬件准备

  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

参考

STM32F401CCU6与MFRC522接线及读取示例的更多相关文章

  1. Java 通过 BufferReader 实现 文件 写入读取 示例

    package com.javatest.techzero.gui; import java.io.BufferedReader; import java.io.File; import java.i ...

  2. 特殊集合(stack、queue、hashtable的示例及练习)

    特殊集合:stack,queue,hashtable stack:先进后出,一个一个的赋值一个一个的取值,按照顺序. .count           取集合内元素的个数 .push()        ...

  3. Java将文件中的内容转换为sql语句(和并发定时读取文件)

    数据文件内容data.txt {USER_TYPE=1,CREATE_USER=ZHANG,UPDATE_USER=li,OPER_NUM=D001,SRC=2,UPDATE_TIME=2018-11 ...

  4. 开源javacsv读取csv文件

    一.下载地址:https://sourceforge.net/projects/javacsv/ 读取示例: public static void main(String[] args) { // 1 ...

  5. .Net Core配置文件读取整理

    一 .配置文件说明 1.配置,主要是 指在程序中使用的一些特殊参数,并且大多数 仅在程序启动的之后指定不需要修改. 2.在以前.Net项目中配置文件主要指app.config或web.config,但 ...

  6. RxJava API使用示例

    概述 RxJava API示例代码,可离线查看rxjava1.0大部分API的marble图,描述,示例代码,并支持示例代码实时输出及展示执行结果. 详细 代码下载:http://www.demoda ...

  7. Spring Boot 学习系列(07)—properties文件读取

    此文已由作者易国强授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 传统的properties读取方式 一般的,我们都可以自定义一个xxx.properties文件,然后在工程 ...

  8. Matlab 从入门到精通 Chapter11 文件读取I/O

    11.1 工作空间数据读取 将工作空间的变量保存为文件,可以使用save命令.  save('filename') 将文件保存在当前目录下,文件名为filename.mat save('filenam ...

  9. 深入理解 EF Core:EF Core 读取数据时发生了什么?

    阅读本文大概需要 11 分钟. 原文:https://bit.ly/2UMiDLb 作者:Jon P Smith 翻译:王亮 声明:我翻译技术文章不是逐句翻译的,而是根据我自己的理解来表述的.其中可能 ...

  10. matlab中imread 从图形文件读取图像

    来源:https://ww2.mathworks.cn/help/matlab/ref/imread.html?searchHighlight=imread&s_tid=doc_srchtit ...

随机推荐

  1. C# WPF 简单自定义菜单切换动画

    微信公众号:Dotnet9,网站:Dotnet9,问题或建议,请网站留言: 如果您觉得Dotnet9对您有帮助,欢迎赞赏 C# WPF 简单自定义菜单切换动画 内容目录 实现效果 业务场景 编码实现 ...

  2. Go-强制类型转换-T(x)

    类型转换 T(x) 具有相同的底层类型 数字类型之间可以互相转换(int系 uint系 float系),较大数转换成较小数会损失精度 字符串与切片之间的转换 string <==> []r ...

  3. [转帖]MYSQL--表分区、查看分区

    https://www.cnblogs.com/pejsidney/p/10074980.html 一.       mysql分区简介 数据库分区 数据库分区是一种物理数据库设计技术.虽然分区技术可 ...

  4. [转帖]Zookeeper集群搭建(3个节点为例)

    Zookeeper集群搭建 1.说明 本文用的linux版本:centos6,准备3台centos6虚拟机,给他们安装zookeeper,每一台的安装过程相同,你也可以安装一台,然后克隆出另外两台.主 ...

  5. 【转帖】Linux 调优篇 :虚拟化调优(irqbalance 网卡中断绑定)* 贰

    一.网络流量上不去二.中断绑定2.1 关闭中断平衡守护进程2.2 脱离中断平衡守护进程2.3 手动设置中断的CPU亲和性三. 总结 一.网络流量上不去 在Linux的网络调优方面,如果你发现网络流量上 ...

  6. 【转帖】eBay 云计算“网”事|网络重传篇

    https://www.infoq.cn/article/iy1drmf6wk8up14dchq8/ #导读 在之前的eBay云计算"网"事|网络超时篇和eBay云计算" ...

  7. 【JS 逆向百例】网洛者反爬练习平台第四题:JSFuck 加密

    关注微信公众号:K哥爬虫,持续分享爬虫进阶.JS/安卓逆向等技术干货! 声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后 ...

  8. Python 检测PE所启用保护方式

    Python 通过pywin32模块调用WindowsAPI接口,实现对特定进程加载模块的枚举输出并检测该PE程序模块所启用的保护方式,此处枚举输出的是当前正在运行进程所加载模块的DLL模块信息,需要 ...

  9. Walrus 实用教程|Walrus + Gitlab,打通CI/CD 自动化交付!

    Walrus file 是 Walrus 0.5 版本推出的新功能,用户可以通过一个非常简洁的 YAML 描述应用或基础设施资源的部署配置,然后通过 Walrus CLI 执行 walrus appl ...

  10. 目录 - JavaScript指南

    目   录 第一章.  JavaScript概述 第二章.  JavaScript语法基础 第三章.  JavaScript编程规范 第四章.  JavaScript工具集合 第五章.  JavaSc ...