目录
(3)ISO 14443A / MIFARE®的数据编码和帧:
一、MFRC522介绍:
MFRC522是一款高度集成的13.56MHz非接触式读写卡芯片,具有多种工作模式和丰富特性,发送模块利用调制和解调的原理,并将它们完全集成到各种非接触式通信方法和协议(13.56MHz)。
使用教程:
一篇文章教会你RFID射频IC卡感应模块(MFRC-522)读取卡号及数据,附STM32代码示例
(1)工作模式:
-
读写器模式:支持ISO 14443A/MIFARE®,其内部发送器部分可驱动读写器天线与ISO 14443A/MIFARE®卡和应答机通信,无需额外电路。接收器部分则提供强大的解调和译码电路,处理兼容ISO 14443A/MIFARE®的卡和应答机的信号。在该模式下,与ISO 14443A/MIFARE®的通信距离最高可达50mm,具体取决于天线的长度和调谐,同时支持MIFARE® Classic加密,还支持ISO 14443 212kbit/s和424kbit/s的更高传输速率的通信。
-
高度集成的模拟电路:具备解调和译码响应功能,可缓冲输出驱动器与天线连接,使用最少的外部元件,实现模拟信号的调制和解调。
-
支持多种主机接口:
-
SPI接口:速率高达10Mbit/s。
-
I2C接口:快速模式速率为400kbit/s,高速模式速率为3400kbit/s。
-
串行UART:传输速率高达1228.8kbit/s,帧格式取决于RS232接口,电压电平取决于提供的管脚电压。
-
(2)特性:
-
数据缓冲:拥有64字节的发送和接收FIFO缓冲区,可快速方便地实现主机和非接触式UART之间的数据传输。
-
灵活的中断模式:能够满足不同应用场景下的中断需求。
-
低功耗硬复位功能:在需要时可进行低功耗的硬复位操作,确保芯片恢复正常工作状态。
-
软件掉电模式:可通过软件控制进入掉电模式,降低功耗。
-
可编程定时器:可根据实际应用需求进行编程设置,实现定时功能。
-
内部振荡器:连接27.12MHz的晶体,为芯片提供稳定的时钟信号。
-
电源电压:工作电源电压为3.3V。
-
CRC协处理器:可协助进行数据的循环冗余校验,提高数据传输的可靠性。
-
自由编程的I/O管脚:可根据用户需求对I/O管脚进行自由编程,实现不同的功能。
-
内部自测试:具备内部自测试功能,方便对芯片进行检测和调试。
(3)简化框图:
-
模拟接口:处理模拟信号的调制和解调,是实现非接触式通信的基础部分。
-
非接触式UART:负责处理与主机通信时的协议要求,确保数据能够按照规定的协议格式进行传输。
-
FIFO缓冲区:作为主机和非接触式UART之间的数据传输通道,起到快速缓冲的作用,提高数据传输效率。
-
主机接口:包括SPI、I2C和UART等多种接口,满足不同用户对主机接口的需求,实现与不同主机设备的连接和通信。
-
寄存器组:用于存储芯片的各种配置参数和状态信息,通过编程对寄存器进行读写操作,可实现对芯片的控制和管理。
(4)封装及管脚定义:
(5)功能框图:
(6)MFRC522 寄存器集:
//MFRC522命令字
#define PCD_IDLE 0x00 //取消当前命令
#define PCD_AUTHENT 0x0E //验证密钥
#define PCD_RECEIVE 0x08 //接收数据
#define PCD_TRANSMIT 0x04 //发送数据
#define PCD_TRANSCEIVE 0x0C //发送并接收数据
#define PCD_RESETPHASE 0x0F //复位
#define PCD_CALCCRC 0x03 //CRC计算
//Mifare_One卡片命令字
#define PICC_REQIDL 0x26 //寻天线区内未进入休眠状态
#define PICC_REQALL 0x52 //寻天线区内全部卡
#define PICC_ANTICOLL1 0x93 //防冲撞
#define PICC_ANTICOLL2 0x95 //防冲撞
#define PICC_AUTHENT1A 0x60 //验证A密钥
#define PICC_AUTHENT1B 0x61 //验证B密钥
#define PICC_READ 0x30 //读块
#define PICC_WRITE 0xA0 //写块
#define PICC_DECREMENT 0xC0 //扣款
#define PICC_INCREMENT 0xC1 //充值
#define PICC_RESTORE 0xC2 //调块数据到缓冲区
#define PICC_TRANSFER 0xB0 //保存缓冲区中数据
#define PICC_HALT 0x50 //休眠
/* MFRC522 FIFO长度定义 */
#define DEF_FIFO_LENGTH 64 //FIFO size=64byte
#define MAXRLEN 18
/* MFRC522寄存器定义 */
// PAGE 0
#define RFU00 0x00 //保留
#define CommandReg 0x01 //启动和停止命令的执行
#define ComIEnReg 0x02 //中断请求传递的使能(Enable/Disable)
#define DivlEnReg 0x03 //中断请求传递的使能
#define ComIrqReg 0x04 //包含中断请求标志
#define DivIrqReg 0x05 //包含中断请求标志
#define ErrorReg 0x06 //错误标志,指示执行的上个命令的错误状态
#define Status1Reg 0x07 //包含通信的状态标识
#define Status2Reg 0x08 //包含接收器和发送器的状态标志
#define FIFODataReg 0x09 //64字节FIFO缓冲区的输入和输出
#define FIFOLevelReg 0x0A //指示FIFO中存储的字节数
#define WaterLevelReg 0x0B //定义FIFO下溢和上溢报警的FIFO深度
#define ControlReg 0x0C //不同的控制寄存器
#define BitFramingReg 0x0D //面向位的帧的调节
#define CollReg 0x0E //RF接口上检测到的第一个位冲突的位的位置
#define RFU0F 0x0F //保留
// PAGE 1
#define RFU10 0x10 //保留
#define ModeReg 0x11 //定义发送和接收的常用模式
#define TxModeReg 0x12 //定义发送过程的数据传输速率
#define RxModeReg 0x13 //定义接收过程中的数据传输速率
#define TxControlReg 0x14 //控制天线驱动器管教TX1和TX2的逻辑特性
#define TxAutoReg 0x15 //控制天线驱动器的设置
#define TxSelReg 0x16 //选择天线驱动器的内部源
#define RxSelReg 0x17 //选择内部的接收器设置
#define RxThresholdReg 0x18 //选择位译码器的阈值
#define DemodReg 0x19 //定义解调器的设置
#define RFU1A 0x1A //保留
#define RFU1B 0x1B //保留
#define MifareReg 0x1C //控制ISO 14443/MIFARE模式中106kbit/s的通信
#define RFU1D 0x1D //保留
#define RFU1E 0x1E //保留
#define SerialSpeedReg 0x1F //选择串行UART接口的速率
// PAGE 2
#define RFU20 0x20 //保留
#define CRCResultRegM 0x21 //显示CRC计算的实际MSB值
#define CRCResultRegL 0x22 //显示CRC计算的实际LSB值
#define RFU23 0x23 //保留
#define ModWidthReg 0x24 //控制ModWidth的设置
#define RFU25 0x25 //保留
#define RFCfgReg 0x26 //配置接收器增益
#define GsNReg 0x27 //选择天线驱动器管脚(TX1和TX2)的调制电导
#define CWGsCfgReg 0x28 //选择天线驱动器管脚的调制电导
#define ModGsCfgReg 0x29 //选择天线驱动器管脚的调制电导
#define TModeReg 0x2A //定义内部定时器的设置
#define TPrescalerReg 0x2B //定义内部定时器的设置
#define TReloadRegH 0x2C //描述16位长的定时器重装值
#define TReloadRegL 0x2D //描述16位长的定时器重装值
#define TCounterValueRegH 0x2E
#define TCounterValueRegL 0x2F //显示16位长的实际定时器值
// PAGE 3
#define RFU30 0x30 //保留
#define TestSel1Reg 0x31 //常用测试信号配置
#define TestSel2Reg 0x32 //常用测试信号配置和PRBS控制
#define TestPinEnReg 0x33 //D1-D7输出驱动器的使能管脚(仅用于串行接口)
#define TestPinValueReg 0x34 //定义D1-D7用作I/O总线时的值
#define TestBusReg 0x35 //显示内部测试总线的状态
#define AutoTestReg 0x36 //控制数字自测试
#define VersionReg 0x37 //显示版本
#define AnalogTestReg 0x38 //控制管脚AUX1和AUX2
#define TestDAC1Reg 0x39 //定义TestDAC1的测试值
#define TestDAC2Reg 0x3A //定义TestDAC2的测试值
#define TestADCReg 0x3B //显示ADCI和Q通道的实际值
#define RFU3C 0x3C //保留
#define RFU3D 0x3D //保留
#define RFU3E 0x3E //保留
#define RFU3F 0x3F //保留
/* 和MFRC522通信时返回的错误代码 */
#define MI_OK 0x26
#define MI_NOTAGERR 0xcc
#define MI_ERR 0xbb
RC522寄存器操作及其名称的总结:
-
读和写 (r/w): 这些寄存器位可以由微控制器进行读写操作。它们主要用于控制,不受内部状态机的影响。例如,
CommIEnReg
可以被微控制器读写,也可以被内部状态机读出,但状态机不能改变它们的内容。 -
动态 (dy): 这些寄存器位同样可以由微控制器读写,但它们也可以被内部状态机自动修改。例如,在执行完一个命令后,命令寄存器的内容可能会自动更新。
-
只读 (r): 这些寄存器包含状态标志,其值由内部状态决定,不能从外部写入。例如,
CRCReady
标志显示的是内部状态,而不是由外部控制的。 -
只写 (W): 这些寄存器位只能写入,读取时通常返回零。这意味着它们的状态不能被读取,只能被设置。
-
保留为将来之用 (RFU): 这些寄存器位被保留,目前没有定义的功能,它们的值不应该被更改。
-
保留用于产品测试 (RFT): 这些寄存器位专门用于产品测试,它们的值也不应该被更改。
二、 寄存器描述:
(1)PAGE0:命令和状态:
RFU 寄存器:
- 保留为将来之用的寄存器。
- 位描述:
CommandReg:
- 启动和停止命令的执行。
- 位描述:
CommIEnReg:
- 中断请求传递的使能和禁能控制位。
- 位描述:
DivIEnReg
- 中断请求传递的使能和禁能控制位。
- 位描述:
CommIRqReg:
- 包含中断请求标志。
- 位描述:
- 注意:CommIRqReg 寄存器的每一位都可通过软件来清零。
DivIRqReg :
- 包含中断请求标志。
- 位描述:
- 注意: DivIRqReg 寄存器中的每一位都可通过软件来清零。
ErrorReg
- 错误标志寄存器,显示执行的上个命令的错误状态。
- 位描述:
- 注意: 执行命令时除 TempErr 之外的所有错误标志都将清除。这些标志不能通过软件置位。
Status1Reg
- 包含 CRC、中断和 FIFO 缓冲区的状态标志。
- 位描述:
Status2Reg
- 包含接收器、发送器和数据模式检测器的状态标志。
- 位描述:
FIFODataReg
- 64 字节 FIFO 缓冲区的输入和输出。
- 位描述:
FIFOLevelReg
- 指示 FIFO 中保存的字节数。
- 位描述:
WaterLevelReg
- 定义 FIFO 下溢和上溢报警的 FIFO 深度。
- 位描述:
ControlReg:
- 包含不同的控制位。
- 位描述:
BitFramingReg:
- 面向位的帧的调节。
- 位描述:
CollReg:
- 定义在 RF 接口上检测到的第一个位冲突。
- 位描述:
(2)PAGE1:通信
RFU 寄存器:
- 保留为将来之用的寄存器。
- 位描述:
ModeReg:
- 定义发送和接收的常用模式。
- 位描述:
TxModeReg:
- 定义发送过程的数据速率。
- 位描述:
RxModeReg:
- 定义接收过程的数据速率。
- 位描述:
TxControlReg:
- 控制天线驱动器管脚 Tx1 和 Tx2 的逻辑操作。
- 位描述:
RFU 寄存器:
- 保留为将来之用的寄存器。
- 位描述:
TxSelReg:
- 选择模拟部分的内部源。
- 位描述:
RxSelReg:
- 选择内部接收器设置。
- 位描述:
RxThresholdReg:
- 选择位译码器的阈值。
- 位描述:
DemodReg:
- 定义解调器的设置。
- 位描述:
RFU 寄存器:
- 保留为将来之用的寄存器。
- 位描述:
RFUReg:
- 保留为将来之用的寄存器。
- 位描述:
RFUReg:
- 保留为将来之用的寄存器。
RFUReg:
- 位描述:
SerialSpeedReg:
- 选择串行 UART 接口的速率。
- 位描述:
(3)PAGE2:配置
RFUReg:
- 保留为将来之用的寄存器。
- 位描述:
CRCResultReg :
- 显示 CRC 计算的实际 MSB 和 LSB 值。
- 注意:该寄存器分成 2 个 8 位的寄存器。
- 位描述:
- 位描述:
RFUReg:
- 位描述:
ModWidthReg:
- 控制调制宽度的设置。
- 位描述:
RFUReg:
- 保留为将来之用的寄存器。
- 位描述:
RFCfgReg:
- 配置接收器增益。
- 位描述:
GsNReg:
- 选择天线驱动器管脚 TX1 和 TX2 的 N 驱动器的电导。
- 位描述:
CWGsPReg:
- 定义 P 驱动器的电导。
- 位描述:
ModeGsPReg:
- 定义驱动器 P 输出电导,便于时间的调制。
- 位描述:
TMode 寄存器,TPrescaler 寄存器:
- 定义内部定时器的设置。
- 注意:该寄存器分为 2 个 8 位的寄存器。
- 位描述:
- 位描述:
TReloadReg:
- 描述 16 位长的定时器重装值。
- 注意:该寄存器分成 2 个 8 位的寄存器。
- 位描述:
- 位描述:
TCounterValReg:
- 定义定时器的当前值。
- 注意:该寄存器分成 2 个 8 位的寄存器。
- 位描述:
- 位描述:
(4)PAGE3:测试
RFUReg:
- 保留为将来之用的寄存器。
- 位描述:
TestSel1Reg:
- 常用测试信号配置。
- 位描述:
TestSel2Reg:
- 常用测试信号配置和 PRBS 控制。
- 位描述:
TestPinEnReg:
- 使能测试总线的管脚输出驱动器。
- 位描述:
TestPinValueReg:
- 定义测试端口用作 I/O 口时的值。
- 位描述:
TestBusReg:
- 显示内部测试总线的状态。
- 位描述:
AutoTestReg:
- 控制数字自测试。
- 位描述:
VersionReg:
- 显示版本。
- 位描述:
AnalogTestReg:
- 控制管脚 AUX1 和 AUX2。
- 位描述:
TestDAC1Reg:
- 定义 TestDAC1 的测试值。
- 位描述:
TestDAC2Reg:
- 定义 TestDAC2 的测试值。
- 位描述:
TestADCReg:
- 显示 ADC I 和 Q 通道的实际值。
- 位描述:
RFTReg:
- 位描述:
- 位描述:
- 位描述:
- 位描述:
三、MFRC522 的功能:
MFRC522 发送模块支持具有多种传输速率和调制方法的 ISO 14443A/MIFARE®的读
写器模式。
ISO 14443A / MIFARE®的读写器模式遵循ISO 14443A/ MIFARE®规范的卡通信的常
用读卡器。
(1)物理层通信相关参数:
(2)功能通信概述:
完成整个MIFARE®/ISO 14443A / MIFARE®协议需要使用MFRC522的非接触式UART
和专用的外部主机。
(3)ISO 14443A / MIFARE®的数据编码和帧:
内部 CRC 协处理器根据 ISO 14443A part3 给出的定义来计算 CRC 值。
四、数字接口:
(1)自检接口:
自动检测微控制器接口类型。MFRC522 支持可直接相连的各种微控制器接口类型,如 SPI、I2C 和串行 UART。MFRC522 可复位其接口,并可对执行了上电或硬复位的当前微控制器接口的类型进行自动检测。它通过复位阶段后控制管脚上的逻辑电平来识别微控制器接口。每种接口有固定
管脚的连接组合。
(2)兼容 SPI 的接口:
支持串行外围接口(兼容 SPI)来使能到主机的高速通信。SPI 接口可处理高达 10Mbit/s的数据速率。在与主机微控制器通信时,MFRC522 用作从机,接收寄存器设置的外部微控制器的数据以及发送和接收 RF 接口相关的通信数据。
原理:
- 兼容 SPI 的接口可使能 MFRC522 和一个微控制器之间的高速串行通信。兼容 SPI 接口的处理与标准 SPI 接口相同。
- 在 SPI 通信中 MFRC522 模块用作从机。SPI 时钟 SCK 由主机产生。数据通过 MOSI线从主机传输到从机;数据通过 MISO 线从 MFRC522 发回到主机。
- MOSI 和 MISO 传输每个字节时都是高位在前。MOSI 上的数据在时钟的上升沿保持不变,在时钟的下降沿改变。MISO 也与之类似,在时钟的下降沿,MISO 上的数据由 MFRC522来提供,在时钟的上升沿数据保持不变。
读数据操作:
-
通过SPI接口,可以读出多达n个数据字节。
-
发送的第一个字节(地址字节)定义了操作模式(读或写)和寄存器地址。
-
在读操作中,MSB位为1表示从MFRC522读出数据。
-
地址字节的位6-1定义了寄存器地址,最后一位(位0)应设置为0。
-
数据从MISO线按字节顺序读出,先发送最高位(MSB)。
写数据操作:
-
通过SPI接口,可以向MFRC522的寄存器写入多达n个数据字节。
-
发送的第一个字节(地址字节)同样定义了操作模式和寄存器地址。
-
在写操作中,MSB位为0表示向MFRC522写入数据。
-
地址字节的位6-1定义了寄存器地址,最后一位(位0)应设置为0。
-
数据通过MOSI线按字节顺序写入,先发送最高位(MSB)。
地址字节格式:
-
地址字节的第一个字节(位7, MSB)决定了操作模式:1表示读,0表示写。
-
地址字节的位6-1用于指定寄存器地址。
-
地址字节的位0(RFU)保留为将来之用,应设置为0。
(3)UART 接口:
接线:
选择传输速率:
-
MFRC522芯片的内部UART接口兼容RS232串行接口。
-
默认传输速率为9.6kbit/s。
-
传输速率可以通过向
SerialSpeedReg
寄存器写入新的值来改变。 -
传输速率的设置依赖于
BR_TO
和BR_T1
两个寄存器的值。 -
BR_TO
和BR_T1
的设置关系如下:-
BR_TO
的取值范围是0到7,对应因数从1到64。 -
BR_T1
的取值范围是1到32或33到64,具体取决于BR_TO
的值。
-
传输速率计算公式:
-
如果
BR_TO=0
:传输速率 = 27.12MHz / (BR_T1
+ 1) -
如果
BR_TO>0
:传输速率 = 27.12MHz / (BR_T1
+ 33) / 2^(BR_TO
- 1)
注意: 不支持大于1228.8k的传输速率。
帧格式:
-
UART帧格式包括起始位、数据位和停止位。
-
起始位:1位,值为0。
-
数据位:8位,表示实际传输的数据。
-
停止位:1位,值为1。
-
-
对于数据和地址位,先发送最低有效位(LSB)。
-
发送数据时不使用奇偶校验位。
读数据操作:
-
通过UART接口读取数据时,数据从RX端读出,地址从TX端发送。
-
读取数据的字节顺序如下:
-
字节0:地址
-
字节1:数据0
-
写数据操作
-
数据可以通过UART接口写入MFRC522芯片。
-
写数据时,首先发送地址字节,然后发送数据字节。
-
地址字节和数据字节都通过TX线发送,地址字节也会通过RX线回传以确认。
注:地址字节到达 RX 线后数据字节可直接发送。
地址字节:
地址字节按下面的格式传输。第一个字节的 MSB 位设置使用的模式。MSB 位为 1 时
从 MFRC522 读出数据;MSB 位为 0 时将数据写入 MFRC522。第一个字节的位 6 为 RFU,
位 5-1 定义地址。
注意事项:
-
在写操作中,MSB位应设置为0。
-
位6作为RFU,不应被使用,应保持为0。
-
地址字节的位5-1定义了要写入数据的寄存器地址。
(4)I2C 总线接口:
MFRC522芯片支持I2C总线接口,仅作为从机设备工作,遵循Philips半导体I2C接口规范V2.1,依赖主机提供时钟信号和访问仲裁,通过简单的两条线(SDA和SCL)实现与主机的低成本、少管脚数的串行通信。因此,MFRC522 不产生时钟,也不执行访问仲裁。
SDA 是一个双向数据线,通过一个电流源或上拉电阻连接到正电压。如果不传输数据,SDA 和SCL 均为高电平。MFRC522 有一个三态输出级来执行线与功能。标准模式下 I2C总线的传输速率为 100kbit/s、快速模式下为 400kbit/s、高速模式下高达 3.4Mbit/s。如果选择 I2C 接口,管脚SCL 和 SDA 管脚都有尖峰脉冲抑制功能,完全符合 I2C 接口规范。
数据有效:
SDA 线上的数据在时钟周期的高电平时间内保持不变。只有当 SCL 的时钟信号为低
电平时数据线的高电平或低电平状态才能改变。
起始条件(START condition):
-
起始条件定义为在SCL(时钟线)高电平时间内,SDA(数据线)从高电平跳变到低电平。
-
这个条件标志着一次新的数据传输的开始。
-
在起始条件发生后,主机(通常是微控制器)被认为处于忙状态,开始进行数据传输。
停止条件(STOP condition):
-
停止条件定义为在SCL高电平时间内,SDA从低电平跳变到高电平。
-
这个条件标志着当前数据传输的结束。
-
在停止条件发生后,主机在一段时间后被认为重新回到空闲状态,可以开始新的数据传输。
图示说明:
-
图中展示了I2C总线的信号波形,包括起始条件和停止条件。
-
在起始条件(S)处,SDA线在SCL线为高电平时从高跳变到低。
-
在停止条件(P)处,SDA线在SCL线为高电平时从低跳变到高。
重复起始条件(Repeated START condition):
-
如果在一次数据传输后,不产生停止条件,而是产生重复起始条件,则总线仍然处于忙状态。
-
重复起始条件与起始条件的功能相同,只是它发生在一次数据传输的中间,而不是开始。
-
这种机制允许在不释放总线的情况下,从一个设备传输到另一个设备,或者从一个设备的不同地址传输数据。
字节格式:
一个字节由 8 个位组成。每个字节后面跟一个应答位。数据传输时高位在前,一次数据传输发送的字节数不限,但必须符合读/写周期格式。
应答机制:
-
应答产生:在I2C通信中,应答是在每个数据字节传输结束后强制产生的,由主机生成相应的时钟脉冲。
-
应答过程:在应答时钟脉冲期间,数据发送器释放SDA线(让其处于高电平),而数据接收器拉低SDA线,使得在时钟脉冲的高电平期间SDA线保持低电平,表示应答(ACK)。
-
数据结束:主接收器通过在最后一个字节后不产生应答来向从发送器指示数据传输的结束。从发送器随后释放数据线,允许主机产生停止(P)或重复起始(Sr)条件来结束或重新开始传输。
I2C总线的应答:
-
应答信号是在数据字节传输完毕后,由接收器发送给发送器的,以确认数据已成功接收。
I2C总线的数据传输:
-
数据传输过程中,每个字节后都跟着一个应答信号,最后一个字节后可以选择发送停止条件或重复起始条件。
-
数据传输中的MSB(最高有效位)优先原则,即数据按从最高位到最低位的顺序传输。
7 位寻址:
-
在I2C总线的寻址过程中,起始条件后的第一个字节用于确定主机选择的通信从机。
-
设计者在器件配置过程中必须确保器件地址不会与保留的地址产生冲突。
-
I2C地址规范与EA(Enable)管脚的定义有关:
-
如果EA管脚为高电平,则MFRC522器件的总线地址高4位由Philips保留,设置为0101(二进制),剩余的3位(ADR_0, ADR_1, ADR_2)可由用户自由配置,以防止与其他I2C器件产生冲突。
-
如果EA管脚设置为低电平,则ADR_0 - ADR_5完全由外部管脚指定,ADR_6总是为0。
-
-
在这两种模式下,外部地址编码在复位条件释放后立即锁定,不考虑数据端口上的进一步变化。
寄存器写访问:
-
数据可以通过I2C接口从主机控制器写入指定的MFRC522寄存器中。
-
帧的第一个字节是器件地址(遵循I2C规则),第二个字节是寄存器地址,接下来是n个数据字节。
-
在一帧中,所有n个数据字节都被写入相同的存储器地址,这种方法可以使能FIFO的快速访问。
-
读/写标志应当清零。
寄存器读访问:
-
写周期(Write Cycle)
-
起始条件(SA):主机发送起始条件,开始通信。
-
发送从机地址:主机发送MFRC522的I2C从机地址。
-
应答(ACK):MFRC522接收到地址后,发送应答信号。
-
发送寄存器地址:主机发送要写入数据的寄存器地址。
-
应答(ACK):MFRC522再次发送应答信号,确认寄存器地址已接收。
-
发送数据(DATA):主机发送要写入的数据。
-
应答(ACK):MFRC522发送应答信号,确认数据已接收。
-
停止条件(SO):主机发送停止条件,结束通信。
-
-
-
读周期(Read Cycle)
-
起始条件(SA):主机发送起始条件,开始通信。
-
发送从机地址:主机发送MFRC522的I2C从机地址,并设置读/写标志位为读(R)。
-
应答(ACK):MFRC522发送应答信号。
-
发送寄存器地址:主机发送要读取数据的寄存器地址。
-
应答(ACK):MFRC522发送应答信号,确认寄存器地址已接收。
-
重复起始条件(Sr):如果需要读取多个数据字节,主机发送重复起始条件。
-
发送从机地址:主机再次发送MFRC522的I2C从机地址,并设置读/写标志位为读(R)。
-
应答(ACK):MFRC522发送应答信号。
-
读取数据:MFRC522从指定的寄存器地址发送数据。
-
应答或非应答(ACK/NACK):主机根据是否需要继续读取更多数据,发送应答(ACK)或非应答(NACK)信号。
-
停止条件(SO):主机发送停止条件,结束通信。
-
-
高速模式:
-
高速模式(Hs模式)下,器件的传输速率可高达3.4Mbit/s。
-
在混合速率的总线系统中,它保持完全向下兼容快速或标准模式(FS模式)的双向通信。
高速传输:
-
为了获得高达3.4Mbit/s的传输速率,对常规的I2C总线性能进行了以下改进:
-
高速模式下器件的输入具有尖峰脉冲抑制功能。
-
SDAH和SCLH输入有施密特触发器,它们与FS模式相比有不同的时序常数。
-
高速模式下器件的输出可控制SDAH和SCLH信号的下降沿斜率,它们与FS模式相比有不同的时序常数。
-
高速模式下的串行数据传输格式:
-
高速模式下的串行数据传输满足标准模式的I2C总线规范,只有满足以下条件高速模式传输才能自动(所有FS模式下的条件):
-
起始条件(S)
-
8位主机代码(00001XXX)
-
非应答位(A)
-
-
在7位从地址和R/W位之后,有效主机再发送一个重复起始条件(Sr),从选择的MFRC522中接收一个应答位(A)。
-
下一个重复起始条件(Sr)后继续执行高速模式的数据传输,停止条件(P)后切换回FS模式。
-
为了降低主机的代码开销,主机可能将大量的高速模式的传输链接到一起,这些传输通过起始条件分隔开来。
I2C 高速模式协议转换:
I2C 高速模式协议帧:
F/S模式和HS模式之间的切换:
-
模式介绍:MFRC522在复位和初始化后,默认工作在快速模式(F/S模式)。当需要与支持高速模式(HS模式)的设备通信时,可以通过特定的命令将其切换到HS模式。
-
切换操作:
-
MFRC522根据HS模式的要求调整SDAH和SCLH的输入滤波器,以满足尖峰脉冲抑制的需求。
-
调整SDAH输出级的斜率控制,以适应HS模式的信号传输要求。
-
-
永久切换:在不含有其他I2C器件的系统配置中,可以通过置位
Status2Reg
寄存器的I2CForceHS
位来永久切换到HS模式。这种操作虽然不符合总线规范,但可以在特定情况下使用,以简化通信流程。
低速模式下的MFRC522:
-
兼容性:MFRC522完全向下兼容,可以连接到F/S模式的I2C总线系统。
-
通信速率:在F/S模式下,由于不发送主机代码,MFRC522以F/S模式的速率进行通信,适用于低速或标准速率的I2C通信需求。
(5)模拟接口和非接触式 UART :
非接触式UART用于处理与主机之间的通信协议,支持面向位和字节的帧,以及奇偶校验和CRC错误检测。天线的规格、调谐和电源电压对通信距离有重大影响。
Tx驱动器:
-
Tx1和Tx2管脚发送经包络信号调制的13.56MHz能量载波,用于直接驱动天线。
-
Tx1和Tx2的信号可通过TxControlReg寄存器配置。
-
调制系数可通过调节驱动器的电阻进行设置,相关寄存器包括CWGsPReg、ModGsPReg和GsNReg。
-
TxModeReg和TxAutoSelReg寄存器控制发送数据的速率和帧,以支持不同模式和传输速率下的要求。
Tx1和Tx2的设置表:
注意:
- 表中使用了以下缩写:
- RF:13.56MHz 时钟,由 27.12MHz 的石英晶振 2 分频所得。
- RF_n:反相 13.56MHz 的时钟
- gspmos:电导,PMOS 阵列的配置
- gsnmos:电导,NMOS 阵列的配置
- pCW: CWGsP 寄存器定义的连续波的 PMOS 电导值。
- pMod: ModGsP 寄存器定义的调制的 PMOS 电导值。
- nCW:CWGsN 寄存器定义的连续波的 NMOS 电导值。
- nMod:ModGsN 寄存器定义的调制的 NMOS 电导值。
串行数据变换:
-
MFRC522包含数字和模拟两个模块,数字模块由状态机、编码器和译码器组成;模拟模块包括调制器、天线驱动器、接收器和放大器。
-
两个模块之间的接口通过管脚SIGIN和SIGOUT连接,串行数据的变换由TxSelReg和RxSelReg寄存器控制。
-
CRC协处理器:
-
CRC协处理器操作需配置参数,包括CRC寄存器长度、算法和预置值。
-
CRC算法根据ISO14443A和CCITT标准制定,16位CRC的多项式为
。
-
CRCPresetReg寄存器定义CRC协处理器的预置值,可选值包括0000、6363、A671或FFFF。
-
CRCResultReg寄存器指示CRC计算的结果,分为两个8位寄存器,分别代表MSB和LSB字节。
(6)FIFO 缓冲区:
MFRC522 包含一个64×8位的FIFO缓冲区,它用来缓存主机微控制器和MFRC522的内部状态机之间的输入和输出数据流。因此,FIFO缓冲区可能要处理长度大于64字节的数据流,但又不考虑时序的限制。
访问FIFO缓冲区:
- FIFO缓冲区的输入和输出数据总线是连接到FIFODataReg寄存器。通过写FIFODataReg寄存器来将一个字节的数据存入FIFO缓冲区,之后内部FIFO缓冲区写指针加1。读出的FIFODataReg寄存器的内容是存放在FIFO缓冲区读指针处的数据,之后FIFO缓冲区读指针减1。FIFO缓冲区的读和写指针之间的间隔通过读取FIFOLevelReg得到。
- 当微控制器发布一个命令后,MFRC522可以在命令执行过程中根据命令要求来访问FIFO缓冲区。通常,只能实现一个FIFO缓冲区的操作,该缓冲区可用在输入和输出方向中。因此,微控制器必须小心不要以其它方式来访问FIFO缓冲区。
控制FIFO缓冲区:
- 除了读写FIFO缓冲区外,FIFO缓冲区指针还可通过置位寄存器FIFOLevelReg的FlushBuffer位来复位。从而,FIFOLevel位被清零,寄存器ErrorReg的BufferOvfl位被清零,实际存储的字节不能再访问,FIFO缓冲区可以用来存放下一批64字节的数据。
FIFO缓冲区的状态信息:
微控制器可得到以下FIFO缓冲区状态的数据:
-
已经存放在FIFO缓冲区中的字节数:寄存器FIFOLevelReg的FIFOLevel字段
-
FIFO缓冲区已满的警告:寄存器Status1Reg的HiAlert位
-
FIFO缓冲区已空的警告:寄存器Status1Reg的LoAlert位
(7)定时器组件:
MFRC522芯片包含一个定时器组件,用于管理与时间相关的任务。定时器提供多种配置选项,包括:
-
超时计数器
-
看门狗计数器
-
停止监测
-
可编程一次触发(one-shot)
-
周期性触发器
定时器可用于测量两个事件之间的时间间隔或在特定时间后触发事件。它可以由事件触发,但不影响任何内部操作。定时器还对应几个标志位,可用于产生中断。
主要特性:
-
输入时钟:定时器有一个6.78MHz的输入时钟(来自27.12MHz的石英晶体)。
-
预分频器:包含一个12位计数器,重装值在
TModeReg
和TPrescalerReg
中定义,范围是0到4095。 -
计数器:16位重装值在
TReloadReg
中定义,取值范围为0到65535。 -
当前值:定时器的当前值在
TCounterValReg
中显示。 -
中断产生:计数值达到0时,自动产生中断,通过置位
CommonIrqReg
的TimerIrq
标志指示。如果使能,该事件还会激活IRQ管脚。 -
状态指示:定时器的状态通过
Status1Reg
的TRunning
位来指示。 -
启动和停止:分别由
ControlReg
的TStartNow
和TStopNow
控制。
自动激活:
定时器还可以通过置位TModeReg
的TAuto
位自动激活,以满足特定协议要求。
计算示例:
-
最大时间计算:当
TPrescaler=4095
且TReloadVal=65535
时,最大时间为39.59秒。 -
100微秒定时:需要计数678个时钟周期,因此
TPrescaler
应设为677,定时器将有一个100微秒的输入时钟,可以计数65535个100微秒。
(8)中断请求系统:
MFRC522通过置位寄存器Status1Reg
的IRq
位或激活IRQ
管脚来指示中断。IRQ
管脚的信号可以用来中断微控制器,使用自身的中断处理功能,允许执行有效的微控制器软件。
中断标志和设置条件:
-
TimerIRq:定时器中断。当定时器的值从减1到变为0时设置。
-
TxIRq:发送器中断。当发送器激活且其状态从发送数据变为发送帧结束时设置。
-
CRCIRq:CRC协处理器中断。在处理完FIFO缓冲区的所有数据后设置。
-
RxIRq:接收器中断。用来指示检测到接收数据的结束。
-
IdleIRq:命令寄存器中断。当执行完一个命令且命令寄存器的内容变为空闲时设置。
-
HiAlertIRq:FIFO缓冲区中断。当FIFO缓冲区达到
WaterLevel
位指示的长度时设置。 -
LoAlertIRq:FIFO缓冲区中断。当FIFO缓冲区已空时设置。
-
ErrIRq:非接触式UART中断。在发送或接收过程中检测到一个错误时设置。
中断源:
中断标志、中断源以及中断标志自动置位的条件:
中断标志 | 中断源 | 出现下列情况时中断标志自动置位 |
---|---|---|
TimerIRq | 定时器 | 定时器计数从1到0 |
TxIRq | 发送器 | 一次数据流发送结束 |
CRCIRq | CRC协处理器 | 已处理完FIFO缓冲区的所有数据 |
RxIRq | 接收器 | 一次数据流接收结束 |
IdleIRq | 命令寄存器 | 执行完一个命令 |
HiAlertIRq | FIFO缓冲区 | FIFO缓冲区已满 |
LoAlertIRq | FIFO缓冲区 | FIFO缓冲区为空 |
ErrIRq | 非接触式UART | 检测到一个错误 |
(9)振荡器电路:
MFRC522 的时钟可用作同步系统的编码器和译码器的时间基准。因此,时钟频率的
稳定是保证系统良好性能的重要因素。为了得到最佳性能,要求时钟抖动尽可能小。最好
的方法就是使用一个含有常用推荐电路的内部振荡缓冲器。如果使用外部时钟源,时钟信
号就从管脚 OSCIN 输入。这时,要特别注意时钟的占空比,时钟抖动的要求以及检查时钟
的质量。
(10)复位和振荡器启动时间:
复位时序要求:
-
复位信号必须经过一个滞后电路和窄带滤波器(抑制小于10ns的信号)再进入数字电路。
-
为了实现复位,信号必须至少为100ns。
振荡器启动时间:
-
MFRC522处于低功耗模式或使用XVDD对IC供电时的振荡器启动时序如下图所示。
振荡器启动时间:
-
图中展示了振荡器启动的时间序列,包括以下几个关键时间点:
-
t_startup
:定义了晶体振荡器电路的启动时间,该时间由晶体本身来定义。 -
t_delay
:定义了时钟信号稳定时MFRC522的内部延迟时间,该延迟时间后MFRC522才能被寻址。这个时间延时可以通过公式计算出来:t_delay[us] = 1024/27.12 = 37.76us
。 -
t_osc
:定义成时间t_startup
和t_delay
之和。
-
(11)MFRC522 命令集:
MFRC522的操作由内部状态机执行的一系列命令来决定。通过向命令寄存器写入相应的命令代码来启动命令。执行命令所需的参数和/或数据通过FIFO缓冲区交换。
通用特性:
-
每个需要数据流(或数据字节流)作为输入的命令在发现FIFO缓冲区有数据时会立刻处理,但收发命令除外。
-
每个需要某一数量的参数的命令只有在它通过FIFO缓冲区接收到正确数量的参数时才能开始处理。
-
FIFO缓冲区不能在命令启动时自动清除。可能需要先将命令参数和/或数据字节写入FIFO缓冲区,再启动命令。
-
每个命令的执行都可能由微控制器向命令寄存器写入一个新的命令代码(如idle命令)来中断。
MFRC522 命令概述:
命令概述:
命令 | 命令代码 | 动作 |
---|---|---|
Idle | 00000 | 无动作,取消当前命令的执行。 |
CalcCRC | 0011 | 激活CRC协处理器或执行自测试。 |
Transmit | 0100 | 发送FIFO缓冲区的命令。 |
NoCmdChange | 0111 | 无命令改变,修改命令寄存器的不同位。 |
Change | 1000 | 改变命令。 |
Receive | 1000 | 激活接收器电路。 |
Transceive | 1100 | 发送或接收FIFO缓冲区的数据。 |
MFAuthent | 1110 | 执行读卡器的MIFARE标准认证。 |
Soft Reset | 1111 | 复位MFRC522。 |
MFRC522 命令描述:
-
Idle命令:MFRC522处于空闲模式,该命令也用来终止正在执行的命令。
-
CalcCRC命令:FIFO的内容被传输到CRC协处理器并执行CRC计算,结果存放在CRCResultReg寄存器中。CRC计算无需限制字节的数目。
-
Transmit命令:发送FIFO的内容。在发送FIFO的内容之前必须对所有相关的寄存器进行设置。该命令在FIFO变成空后自动终止。
-
NoCmdChange命令:该命令不会影响CommandReg寄存器中正在执行的任何命令。它可用来修改CommandReg寄存器中除命令位之外的任何位,如RevOff位或PowerDown位。
-
Receive命令:MFRC522激活接收器通路,等待接收任何数据流。该命令在接收到的数据流结束时自动终止。
-
Transceive命令:该循环命令重复发送FIFO的数据,并不断接收RF场的数据。第一个动作是发送,发送结束后命令变为接收数据流。
-
MFAuthent命令:该命令用来处理Mifare认证以使能到任何Mifare普通卡的安全通信。在命令激活前以下数据必须被写入FIFO:认证命令代码、块地址、扇区密钥字节、卡序列号字节等,总共12字节。
-
-
SoftReset命令:该命令用来执行一次器件复位。内部缓冲区的配置数据保持不变。所有寄存器都设置成复位值。命令完成后自动终止。
(12)测试信号:
测试总线:
-
测试总线用于执行器件测试,配置可改善包含MFRC522的系统设计。
-
测试总线允许使内部信号通向数字接口,通过访问
TestSel2Reg
(0x32)寄存器的TestBusSel
来选择。
管脚 AUX 的测试信号:
- 通过设置 AnalogTestReg 的 SelAux1 或 SelAux2,每个信号都可切换到 AUX1 或 AUX2。
- 注意:DAC 有一个电流输出,建议 AUX1/AUX2 管脚使用一个 1kΩ的下拉电阻。
PRBS(并行响应模式):
-
根据ITU-TO150来使能
PRBS9
或PRBS15
。为了启动定义的数据流的发送,必须激活命令发送。前导/同步字节/起始位/奇偶位自动产生,由选择的模式决定。 -
在进入
PRBS
模式前必须先配置好所有与发送数据相关的寄存器。
典型电路:
五、中英文技术手册下载:
通过网盘分享的文件:RC522中英文技术手册
链接: https://pan.baidu.com/s/1bE7K_m48FJsEDOSw5-O5gw?pwd=qcwu 提取码: qcwu