RFID-RC522、FM1702SL、M1卡初探

catalogue

0. 引言
1. RC522芯片(读卡器)简介
2. FM1702SL芯片(读卡器)简介
3. RFID M1卡简介
4. 读取ID/序列号(arduino uno、MFRC522芯片 Based On MF522-AN模块)
5. 读取ID/序列号(arduino uno、FM1702SL)
6.  arduino uno、RC522向mifare卡写入数据

 

0. 引言

需要明白的一点是,一张卡能否hack取决于以下几点

1. 卡本身的硬件结构和内部实现: 例如如果一张卡的电路设置了只读逻辑,且没有EPPROM这种存储结构,则这张卡就只能被读取数据(数据泄漏),但是如果一张卡具备可檫写EPPROM, 且内部具备read/write逻辑电路,则我们可以尝试向指定的扇区写入新数据,以此达到伪造卡的目的
2. 卡的类型: 不同的卡类型对应了不同的通信频率、通信方式,市面上能买到的RFID读卡器型号是有限的,如果我们要hack的那张卡超出了我们的读卡器的支持范围,则 读卡器的API也无法正常工作,因为对RFID卡的hack并不是直接修改卡本身的物理特性,而是通过卡内置的微性单片机电驴对卡中的存储区域进行操作

 

1. RC522芯片(读卡器)简介

MF RC522是应用于13.56MHz非接触式通信中高集成度的读写卡芯片,是NXP公司针对“三表”应用推出的一款低电压、低成本、体积小的非接触式读写卡芯片,是智能仪表和便携式手持设备研发的较好选择。 MF RC522利用了先进的调制和解调概念,完全集成了在13.56MHz下所有类型的被动非接触式通信方式和协议。支持14443A兼容应答器信号。数字部分处理ISO14443A帧和错误检测。此外,还支持快速CRYPTO1加密算法,用语验证MIFARE系列产品。MFRC522支持MIFARE系列更高速的非接触式通信,双向数据传输速率高达424kbit/s。 作为13.56MHz高集成度读写卡系列芯片家族的新成员,MF RC522与MF RC500和MF RC530有不少相似之处,同时也具备许多特点和差异。它与主机间通信采用SPI模式,有利于减少连线,缩小PCB板体积,降低成本

NXP RC522微控制器是该单片机的核心

MF522-AN模块采用Philips MFRC522原装芯片设计读卡电路,使用方便,成本低廉,适用于设备开发、读卡器开发等高级应用的用户、需要进行射频卡终端设计/生产的用户。本模块可 直接装入各种读卡器模具。模块采用电压为3.3V,通过SPI接口简单的几条线就可以直接与用户任何CPU主板相连接通信,可以保证模块稳定可靠的工作、 读卡距离远

0x1: 电气参数简介

工作电流: 13—26mA/直流3.3V
空闲电流: 10-13mA/直流3.3V
休眠电流: <80uA
峰值电流: <30mA
工作频率: 13.56MHz

支持的卡类型
1. mifare1 S50
2. mifare1 S70
3. mifare UltraLight
4. mifare Pro
5. mifare Desfire

产品物理特性: 尺寸: 40mm×60mm
环境工作温度: 摄氏-20~80度
环境储存温度: 摄氏-40~85度
环境相对湿度: 相对湿度5%~95%

0x2: 模块原理图

0x3: MFRC522数据手册

MFRC522 是一个用来读写/操作RFID卡的外接模组,我们对卡的所有的操作,都必须借助MFRC522封装并向外提供的API接口进行,MFRC522作为 RFID读卡器,需要将上位机发送的二进制数据封装为指定格式(类似TCP/IP的封装),同时也要解析来自RFID卡发送的封装好的数据,这个过程对 RFID卡来说也是一样的

the MFRC522 is a highly intergrated reader/writer for contactless communication at 13.56MHz. the MFRC522 reader supports ISO 14443A/MIFARE Mode,这意味着它可以操作两种制式类型的卡

1. Features

1. Highly integrated analog circuity to demodulate and decode response
2. Bufferd output drivers to connect an antenna with minimum number of external components
3. Supports ISO/IEC 14443A/MIFARE
4. Typical operating distance in Reader/Writer mode for communication to a ISO/IEC 14443A/MIFARE up to 50 mm depending on the antenna size and turning
5. Supports MIFARE Classic encryption in Reader/Writer mode
6. Supports of the MFIN/MFOUT
7. Additional power supply to directly supply the smart card IC connected via MFIN/MFOUT
8. Supports host interfaces
    1) SPI interface up to 10Mbit/s
    2) I2C interface up to 400kbit/s in Fast mode, up to 3400 kbit/s in High-speed mode
    3) serial UART in different transfer speeds up to 1228.8 kbit/s, framing according to the RS232 interface with voltage levels according pad voltage supply
9. Comfortable 64 byte send and receive FIFO-buffer
10. Flexible interrupt modes
11. Hard reset with low power function
12. Power-down mode per software
13. Programmable timer
14. internal oscillator to connect 27.12 MHz quartz
15. 2.5 ~ 3.3V power supply
16. CRC Co-processor
17. Free programmable I/O pins
18. internal self test

2. Block diagram(封包协议)

Block diagram类似于TCP/IP协议栈中的数据链路层,上层的RFID标签数据经过硬件层的封装之后,形成1/0 bit流,通过DA转换器形成模拟射频波信号,通过空气介质在标签和阅读器之间传播

1. the analog interface handles the modulation and demodulation of the analog signals
2. the contactless UART handles the protocol requirements for the communication schemes in co-operation with the host. the comfortable FIFO buffer allows a fast and convenient data transfer from the host to the contactless UART and vice versa
3. various host interfaces are implemented to fulfill different customer requirements

RFID标签产生的电感信号是一种模拟信号,因为标签和阅读器之间是无连接的,数据的传输必须依靠射频波从空气中传播,因此必须是一连串的模拟波信号,在到达阅读器之前必须通过AD转换为数字信号

3. Functional description

MFRC522 transmission module supports the Reader/Writer mode for ISO/IEC 14443、MIFARE with different transfer speeds and modulation schemes

the contactless UART of MFRC522 and a dedicated external host are required to handle the complete MIFARE、ISO/IEC 14443A、MIFARE protocol

the internal CRC co-processor calculates the CRC value according the definition given in the ISO/IEC 14443A 

4. MFRC522 Register SET

//Page 0:Command and Status
Reserved00: Reserved for future use  
CommandReg: Starts and stops commands execution  
CommIEnReg: Controls bits to enable and disable the passing of interrupt Requests
DivlEnReg: Controls bits to enable and disable the passing of interrupt Requests
CommIrqReg: Contains interrupt Request bits   
DivIrqReg: Contains interrupt Request bits
ErrorReg: Error bits showing the error status of the last command executed
Status1Reg: Contains status bits for communication
Status2Reg: Contains status bits of the receiver and transmitter
FIFODataReg: in and output of 64 byte FIFO buffer
FIFOLevelReg: indicates the number of bytes stored in the FIFO
WaterLevelReg: Defines the level for FIFO under and overflow warning
ControlReg: Contains miscellaneous Control Registers
BitFramingReg: Adjustments for bit oriented frames
CollReg: Bit position of the first bit collision detected on the RF-interface
Reserved01: Reserved for future use

//Page 1:Command     
Reserved10: Reserved for future use
ModeReg: Defined general modes for transmitting and receiving
TxModeReg: Defines the transmission data rate and framing
RxModeReg: Defines the receive data rate and framing
TxControlReg: Control the logical behavior of the antenna driver pins TX1 and TX2
TxAutoReg
TxSelReg: Selects the internal sources for the antenna driver
RxSelReg: Selects internal receiver setttings
RxThresholdReg: Selects threadholds for the bit decoder
DemodReg: Defines demodulator settings
Reserved11: Reserved for future use
Reserved12: Reserved for future use
MifareReg  
Reserved13: Reserved for future use
Reserved14: Reserved for future use
SerialSpeedReg: Selects the speed of the serial UART interface

//Page 2:CFG    
Reserved20: Reserved for future use
CRCResultRegM: Shows the actual MSB values of the CRC calcalation
CRCResultRegL: Shows the actual LSB values of the CRC calcalation
Reserved21: Reserved for future use
ModWidthReg: Controls the settting of the ModWidth
Reserved22: Reserved for future use
RFCfgReg: Configures the receiver gain
GsNReg: Selects the conductance of the antenna driver pins TX1 and TX2 for modulation
CWGsPReg
ModGsPReg
TModeReg: Defines settings for the internal timer
TPrescalerReg 
TReloadRegH: Describes the 16 bit timer reload value
TReloadRegL
TCounterValueRegH: Shows the 16 bit actual timer value
TCounterValueRegL 

//Page 3:TestRegister     
Reserved30: Reserved for future use
#define     TestSel1Reg           0x31
#define     TestSel2Reg           0x32
#define     TestPinEnReg          0x33
#define     TestPinValueReg       0x34
#define     TestBusReg            0x35
#define     AutoTestReg           0x36
#define     VersionReg            0x37
#define     AnalogTestReg         0x38
#define     TestDAC1Reg           0x39  
#define     TestDAC2Reg           0x3A   
#define     TestADCReg            0x3B   
#define     Reserved31            0x3C   
#define     Reserved32            0x3D   
#define     Reserved33            0x3E   
#define     Reserved34            0x3F

5. DIGITAL Interfaces

SPI Compatible interface

A serial peripheral interface(SPI compatible)is supported to enable high speed communication to the host. the SPI interface can handle data speed of up to 10Mbit/s, in the communication with a host MFRC522 acts as a slave receiving data from the external host(可以是arduino uno)for register settings and to send and receive data relevant for the communication on the RF interface

UART Interface

the internal UART interface is compatible to an RS232 serial interface

I2C Bus interface

I2C(Inter-Integrated Circuit)总线是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。是微电子通信控制领域广泛采用的一种总线标准。它是同 步通信的一种特殊形式,具有接口线少,控制方式简单,器件封装形式小,通信速率较高等优点。I2C 总线支持任何IC 生产过程(CMOS、双极性)。通过串行数据(SDA)线和串行时钟 (SCL)线在连接到总线的器件间传递信息。每个器件都有一个唯一的地址识别(无论是微控制器——MCU、LCD 驱动器、存储器或键盘接口),而且都可以作为一个发送器或接收器(由器件的功能决定)。LCD 驱动器只能作为接收器,而存储器则既可以接收又可以发送数据。除了发送器和接收器外,器件在执行数据传输时也可以被看作是主机或从机(见表1)。主机是初 始化总线的数据传输并产生允许传输的时钟信号的器件。此时,任何被寻址的器件都被认为是从机

6. MFRC522 Command Set

the behavior is determined by a state machine capable to perform a certain set of commands, by writing the according command-code to register CommandReg the command is executed
Arguments and/or data necessary to process a command are exchanged via the FIFO buffer
上位机(可以是arduino uno)通过MFRC522预设的指令集来间接的操作RFID射频卡(读写指定扇区数据)

1. each command, that needs a data stream(or data byte stream) as input will immediately process the data it finds in the FIFO buffer
2. each command that needs a certain number of arguments will start processing only when it has received the correct number of arguments via the FIFO buffer
3. the FIFO buffer is not cleared automatically at command start, therefore, it is also possible to write the command arguments and/or the data bytes into the FIFO buffer and start the command afterwards
4. each command may be interrupted by the host by writing a new command code into register CommandReg

MFRC522 Commands Overview

MFRC522的指令都是双字节的,即我们要操作MFRC522就需要按照一定的时序向它发送一系列的双字节指令码,为了方便编程,我们封装了一些程序库

//MF522 command bits
#define PCD_IDLE 0x00 //NO action; cancel current commands
#define PCD_AUTHENT 0x0E //verify password key
#define PCD_RECEIVE 0x08 //receive data
#define PCD_TRANSMIT 0x04 //send data
#define PCD_TRANSCEIVE 0x0C //send and receive data
#define PCD_RESETPHASE 0x0F //reset
#define PCD_CALCCRC 0x03 //CRC check and caculation

arduino向MFRC522发送指令本质上就是arduino向MFRC522的指令寄存器写入2字节的指令,等待MFRC522读取并执行、响应

Authentication 认证操作

1. MCM中设有专用的密码存储器(KEY-RAM),用于存储3个密码集KEYSET0,KEYSET1,KEYSET2,每一个KEYSET又包含了各个扇区的KEY A 及KEY B  
2. Authentication操作就是将KEY-RAM中的密码与卡中对应的密码进行三次相互认证 
3. Authentication操作的卡应答以AE位给出 
    1) AE=1: 密码出错,未能通过认证 
    2) AE=0: 密码正确,通过认证

READ/WRITE操作

1. READ/WRITE均需整块操作
2. READ
    1) 发送命令码30H+块地址(0~63)
    2) 接收指定块的数据(16B)
    3) 通常用2次读并比较是否一致来校验是否正确读
3. WRITE
    1) 发送命令码A0H+块地址(0~63)
    2) 接收ACK/NAK应答来校验是否正确接收命令
    3) 发送块数据(16B)
    4) 接收ACK/NAK应答来校验是否正确写入EEPROM

Value Operate 值操作

1. MIFARE卡专门为公交/地铁等行业的定额收费系统设有值操作命令,包括            
    1) INCREAMENT
    2) DECREAMENT
    3) TRANSFER
    4) RESTORE
2. 对某块进行值操作的前提是该块已被初始化为"值块"(Value Block)并且Access Bits允许值操作

Relevant Link:

https://detail.tmall.com/item.htm?id=526342615313

 

2. FM1702SL芯片(读卡器)简介

FM1702SL是复旦微电子股份有限公司设计的基于ISO14443标准的非接触卡读卡机专用芯片,采用0.6毫米CMOS EEPROM工艺,支持13.56MHz频率下的typeA非接触通信协议,支持多种加密算法,兼容Philips的MFRC530(SPI接口)读卡机芯片

1. 高集成度的模拟电路,只需最少量的外围电路
2. 操作距离可达10cm
3. 支持ISO14443 typeA协议
4. 内部带有加密单元
5. 支持SPI接口模式
6. 包含515byte的EEPROM
7. 包含64byte的FIFO
8. 数字电路具有TTL/CMOS两种工作模式
9. 软件控制的power down模式
10. 一个可编程计时器
11. 一个中断处理器
12. 一个串行输出输入口
13. 启动配置可编程
14. 数字、模拟和发射模块都有独立的电源供电,电压范围从3V到5V
15. 封装形式为SOP24小型封装

0x1: 结构图

0x2: 管脚信息

1. 管脚配置

2. 管脚描述

0x3: 数字接口

1. 支持的微处理器接口概述

FM1702SL支持SPI微处理器接口,在SPI通信方式下,FM1702SL只能作为slave端,SCK时钟需由master端提供

2. 自动侦测微处理器接口类型

在每一次上电或硬件复位后,FM1702SL会复位微处理器接口处理模块,并且通过检测控制管脚上的电平来设置SPI接口

0x4: 寄存器组

FM1702SL的内部寄存器按功能不同分成8组,每组为一页,包含8个寄存器

1. Page0: 指令和状态寄存器组
2. Page1: 控制和状态寄存器组
3. Page2: 发射及编码控制寄存器组
4. Page3: 接收及接码控制寄存器组
5. Page4: 时间及校验寄存器组
6. Page5: FIFO、Timer、IRQ控制寄存器组
7. Page6: 预留寄存器组
8. 预留寄存器组

每一个寄存器里的每一位按其功能都有不同的读写权限

0x5: FIFO

FM1702SL包含一个8 * 64的并行FIFO,保存微处理器和FM1702SL之间通信的数据

1. 访问规则

FIFO通过FIFOData寄存器输入和输出数据,向这个寄存器里写一byte数据即向FIFO里添加一byte数据,同时FIFO写指针加一。从这个寄存器读一byte数据即从FIFO里读出一byte数据,同时FIFO读指针加一。FIFOLength寄存器记录读/写指针之间的长度
当FM1702SL执行一条指令时,内部状态机可能会对FIFO进行内部读/写操作,所以除了指令本身要求外,微处理器在FM1702SL指令执行过程中不要对FIFO执行不正确的访问

2. 控制FIFO

除了读写FIFO外,用户可以通过设置FlushFIFO位来复位FIFO指针,在这种情况下,FIFO被清空,FIFOLength置0,FIFOOvfl标志位被清除,FIFO内原有的数据不再有效

3. FIFO状态信息

微处理器可以通过下列寄存器获得FIFO状态

1. FIFO中数据长度: FIFOLength
2. FIFO渐满警告: HiAlert
3. FIFO渐空警告: LoAlert
4. FIFO溢出: FOFOOvfl

FIFO可以产生两个中断请求

1. 如果LoAlertRq置1,且LoAlert变为1,会激活IRQ管脚
2. 如果HiAlertRq置1,且HiAlert变为1,会激活IRQ管脚

0x6: 中断请求系统

如果有中断请求事件发生,FM1702SL会将PrimaryStatus寄存器里的IRQ位置1,同时激活IRQ管脚,IRQ上的信号可以用来向微控制器发出中断请求

0x7: 启动过程

1. Hard Power Down阶段

在下列情况会进入Hard Power Down阶段

1. 由于DVDD管脚上加电引起的上电复位
2. 由于AVDD管脚上加电引起的上电复位
3. 在RSTPD管脚上加高电平

2. 初始化阶段

初始化阶段自动跟随复位阶段,需要128个时钟周期,在初始化阶段,EEPROM的第1、第2扇区内容被复制到10hex至2Fhex寄存器

3. 初始化SPI接口方式

芯片复位后,必须进行一次初始化程序以便初始化SPI接口模式,而且可以同步微处理器和FM1702SL的启动工作
在整个启动过程中,Command寄存器的值始终为3Fhex,在初始阶段结束后,FM1702SL自动进入Idel状态,Command寄存器的值随之变成00hex
执行下列程序确保初始化SPI接口

1. 读Command寄存器,直到6bit值变成00hex,此时内部初始化阶段已经结束,芯片准备好接收外部指令
2. 往Page寄存器写80hex初始化SPI接口
3. 读Command寄存器,如果它的值为00hex,则SPI接口已经初始化成功
4. 往Page寄存器写0hex,开始使用SPI接口
5. 完成接口初始化之后,可以通过往Page寄存器写00hex切换到线性寻址方式

0x8: 串行信号开关

FM1702SL包括两个主要模块

1. 数字模块
    1) 状态机
    2) 编码器
    3) 接码逻辑
2. 模拟模块
    1) 调制器
    2) 天线驱动器
    3) 接收机
    4) 放大电路
//这两模块的接口设计可以将接口信号送入MFIN

0x9: FM1702SL指令集

FM1702SL的行为由一个内部状态机决定,该状态机可执行一组专门的指令集,将某条指令代码写入指令寄存器可启动一个相应的命令的执行
某些指令执行需携带参数和(或)数据,这些参数和数据主要通过FIFO进行交换

0x10: 认证及数据加密传输

FM1702SL使用的认证算法称为三重认证,它基于密钥长度为48bit的私有加密数据流。当一张卡按照ISO14443协议被选中后,用户可以按照标准协议继续操作,这种情况下,必须执行卡片认证,这一过程在执行Authen1和Authen2指令时自动完成,在卡认证的过程中,加密算法被初始化,在成功认证之后与卡的通讯处于加密状态

1. 密钥处理

在认证指令执行过程中,FM1702SL从内部密钥缓冲器中读取密钥,密码总是从密钥缓冲器中获取,因此认证指令无需指明密钥存储地址,当然,在认证指令开始之前,用户必须保证在密钥缓冲器中已经准备好了密钥
密钥缓冲器可以通过如下方式加载

1. 用LoadKeyE2指令从EEPROM中加载
2. 直接由外部处理器通过LoadKey指令从FIFO中加载

2. 操作三重认证指令

三重加密算法被用于执行标准认证,在密钥缓冲器中必须存储准确的密钥以便能够进行成功的认证操作

1. 通过LoadKeyE2或者LoadKey加载密钥到内部密钥缓冲器
2. 启动Authen1指令,结束之后,检查错误标志来判断执行结果
3. 启动Authen2指令,结束之后,检查错误标志以及CryptoOn标志来判断执行结果

FM1702SL分别支持MIFARE三重认证算法

Relevant Link:

http://wenku.baidu.com/link?url=dyarxoceft-GVg8PXQHBfcWotBWJWzZrG876bhy-TpAgIdIHbP5aomZl7KskuMM1emHn9WCt4G5d6F11JfOXwhIzCyL_s6DGmKjr4fPQiJ3
file:///C:/Users/zhenghan.zh/Desktop/FM1702SL%E4%B8%AD%E6%96%87%E8%AF%B4%E6%98%8E%E4%B9%A6.pd

 

3. RFID M1卡简介

0x1: 主要指标

1. 容量为 8K 位 EEPROM(这意味着M1卡支持数据的读写修改)
2. 分为 16 个扇区,每个扇区为 4 块,每块 16 个字节,以块为存取单位(这意味着M1卡可以承载多功能的IC卡,在不同的扇区分别存储不同目的的数据)
3. 每个扇区有独立的一组密码及访问控制
4. 每张卡有唯一序列号,为 325. 具有防冲突机制,支持多卡操作
6. 无电源,自带天线,内含加密控制逻辑和通讯逻辑电路
7. 数据保存期为 10 年,可改写 10 万次,读无限次
8. 工作温度" -20℃~50℃(湿度为 90%)
9. 工作频率: 13.56MHZ
10. 通信速率: 106 KBPS
11. 读写距离: 10 cm 以内(与读写器有关)

0x2: 存储结构

M1 卡分为 16 个扇区,每个扇区由 4 块(块0、块1、块2、块3)组成,(我们也将 16 个扇区的 64 个块按绝对地址编号为 0~63)

每张M1卡一定都有16个扇区

0 扇区的块 0(即绝对地址 0 块),它用于存放厂商代码,已经固化,不可更改(前4字节是卡序列号,第5字节是卡容量,6、7字节是卡类型、剩下是厂商定义的信息)。每个扇区的块0、块1、块2为数据块,可用于存贮数据,数据块可作两种应用

1. 用作一般的数据保存,可以进行读、写操作
2. 用作数据值,可以进行初始化值、加值、减值、读值操作 

每个扇区的块 3 为控制块,包括了密码 A、存取控制、密码 B。具体结构如下

//从3区块读出的数据
KeyA
0    0    0    0    0    0

存取控制
255    7    128    105    

KeyB
255    255    255    255    255    255    

每个扇区的密码和存取控制都是独立的,可以根据实际需要设定各自的密码及存取控制。存取控制为 4 个字节,共 32 位,扇区中的每个块(包括数据块和控制块)的存取条件是由密码和存取控制共同决定的(类似于x86的内存读写管理r/w/rw),在存取控制中每个块都有相应的三个控制位,定义如下

三个控制位以正和反两种形式存在于存取控制字节中,决定了该块的访问权限(如进行减值操作必须验证 KEY A,进行加值操作必须验证 KEY B,等等)

块0的存取控制位C10 C20 C30=1 0 0时,验证密码A或密码B正确后可读;验证密码B正确后可写;不能进行加值、减值操作

例如:当块3的存取控制位C13 C23 C33=1 0 0时,表示 

1. 密码A: 不可读,验证KEYA或KEYB正确后,可写(更改)
2. 存取控制: 验证KEYA或KEYB正确后,可读、可写
3. 密码B: 验证KEYA或KEYB正确后,可读、可写 

也就是说,对任何一张M1卡,要想对它进行读写操作,需要KeyA、KeyB、存储控制位这3者综合判断的结果,而且大多数情况下存储控制位所在区块是不允许写操作的,这就像一个保险柜的钥匙放在保险柜里并加锁了,只提供外面的一些仅有的界面提供操作,无法直接拿到里面的钥匙

0x3: 三次握手密钥认证过程

这其实是一种典型的认证双方预分配(协商)好一对相同的密钥,通过各自生成的随机种子,并使用该密钥加密并发送给对方,向对方证明自己是可信的

0x3: 工作原理

卡片的电气部分只由一个天线和 ASIC 组成

1. 天线: 卡片的天线是只有几组绕线的线圈,很适于封装到 IS0 卡片中
2. ASIC: 卡片的 ASIC 由一个高速(106KB 波特率)的 RF 接口,一个控制单元和一个 8K 位 EEPROM 组成
//RFID卡本身也可以看作是一个微型的单片机

读写器向 M1 卡发一组固定频率的电磁波,卡片内有一个 LC 串联谐振电路,其频率与读写器发射的频率相同,在电磁波的激励下,LC 谐振电路产生共振,从而使电容内有了电荷,在这个电容的另一端,接有一个单向导通的电子泵,将电容内的电荷送到另一个电容内储存,当所积累的电荷达到 2V 时,此电容可做为电源为其它电路提供工作电压,将卡内数据发射出去或接取读写器的数据

1. 复位应答(Answer to request)
M1 射频卡的通讯协议(类似于TCP/IP在不同的bit区间内保存不同目的的数据)和通讯波特率是定义好的,当有卡片进入读写器的操作范围时,读写器以特定的协议与它通讯,从而确定该卡是否为 M1 射频卡,即验证卡片的卡型

2. 防冲突机制(Anticollision Loop)
当有多张卡进入读写器操作范围时,防冲突机制会从其中选择一张进行操作,未选中的则处于空闲模式等待下一次选卡,该过程会返回被选卡的序列号

3. 选择卡片(Select Tag)
选择被选中的卡的序列号,并同时返回卡的容量代码 

4. 三次互相确认(3 Pass Authentication)
选定要处理的卡片之后,读写器就确定要访问的扇区号,并对该扇区密码进行密码校验,在三次相互认证之后就可以通过加密流进行通讯(在选择另一扇区时,则必须进行另一扇区密码校验)
//这里必须明白的,RFID卡不是二维码,不是随便谁都能读取到卡中的数据,读卡器只能通过协议发送指令码,经过验证后,RFID卡会根据读写控制位决定是否返回指定区块的数据(RFID本身是一个单片机)

5. 对数据块的操作
    1) 读 (Read): 读一个块
    2) 写 (Write): 写一个块
    3) 加 (Increment): 对数值块进行加值
    4) 减 (Decrement): 对数值块进行减值
    5) 存储 (Restore): 将块中的内容存到数据寄存器中
    6) 传输 (Transfer): 将数据寄存器中的内容写入块中 
6. 中止(Halt): 将卡置于暂停工作状态

0x4: MIFARE卡的读写操作步骤

1. 激活MCM
2. MCM软复位
3. 向MCM下载密码(LOAD KEY),校验传输密码正确后可向MCM的KEY-RAM写入用户自己设定的密码
//以上操作与卡无关
4. 请求应答(ANSWER TO REQUEST): 寻卡 
5. 防冲突(ANTICOLLISION): 选择唯一一张卡 
6. 选择标记(SELECT): 激活所选择的卡 
7. 认证(AUTHENTICATION): 安全性
8. 读写操作(读、写、加值、减值): 交换数据(READ/WRITE/INCREAMENT/DECREMENT)
9. 停止(HALT): 置卡为停止模式,防止重复操作

读写器与M1卡交换数据的过程

1. 由读写器MCU(微控制器)发送指令给MCM
2. MCM执行指令并将其转换为射频信号发送给卡
3. 卡接收到来自MCM的指令后,按指令完成其内部的各种处理,并回送应答信号/数据给MCM
4. MCM接收卡回送的射频信号并将其转换为数字信号输出给MCU,读写器MCU读取MCM接收到的应答/数据,即可完成与M1卡的数据交换 

0x5: 指令时序

每个指令由7个基本步骤组成,必须按此时序编程才能完成该指令,这是MFRC522硬件对上位机发送指令的时序要求

1. 初始化,设置各寄存器,特别是BCNTS和BCNTR
2. 送指令码到DATA,由MCM发送指令
3. 设置TOC,MCM准备接收来自卡的应答或数据
4. 检查DV标志,查询数据接收是否完成
    1) DV标志为"1"表明MCM与MIFARE卡片之间的传输已经完成,并且主处理机可能已经从MCM中收到数据,可以进行下一步操作
    2) DV=0表示数据接收尚未完成或未能接收到数据,则程序循环检测DV标志直至DV=1。有一种情况例外,既当定时器溢出时,无论接收是否完成DV都将被设置为1,同样将进行下一步操作
5. 清零TOC
6. 检查出错标志(类似于x86架构的错误处理机制)
    1) 若有标志被设置,则进行相应的出错处理,例如设置出错标志等,并返回主程序
    2) 若没有标志被设置,表示接收正确,将进行下一步操作
7. MCU从DATA读出MCM接收到的应答或数据

0x6: SerialNumberRead

http://files.cnblogs.com/files/LittleHann/M1_read.rar

Relevant Link:

http://wenku.baidu.com/link?url=seLu40bcRSJkNx4w62XULQAnvZp0NUx6TdBPwauyrgWZgVZElLD_FMnp_sM7YfOA3mDn2r_256LyL7y48OJ1Wr7PC7534gF46IXFrzcZLaS
http://file.yfrobot.com/RFID.zip
http://www.freebuf.com/fevents/110534.html
http://blog.chinaunix.net/uid-23686726-id-3444925.html
http://baike.baidu.com/link?url=IWEAgJEzFFecldhpuIemkFzPXE3tmgsSnlCoFNpDsqg-d1Fl4k-1TL95CEn02Xpwy8pLlwpI8PwINefETmafdK
file:///D:/%E5%AD%A6%E4%B9%A0%E8%B5%84%E6%96%99/RFID/TJDZ-RC522%E5%B0%84%E9%A2%91%E5%8D%A1%E7%94%A8%E6%88%B7%E4%BD%BF%E7%94%A8%E6%89%8B%E5%86%8C%E8%B5%84%E6%96%99Ver_1.0/%E7%9B%B8%E5%85%B3%E6%95%B0%E6%8D%AE%E6%89%8B%E5%86%8C%E5%92%8C%E5%8F%82%E8%80%83%E6%96%87%E7%8C%AE/MFRC522%E6%95%B0%E6%8D%AE%E6%89%8B%E5%86%8C.pdf
file:///D:/%E5%AD%A6%E4%B9%A0%E8%B5%84%E6%96%99/RFID/TJDZ-RC522%E5%B0%84%E9%A2%91%E5%8D%A1%E7%94%A8%E6%88%B7%E4%BD%BF%E7%94%A8%E6%89%8B%E5%86%8C%E8%B5%84%E6%96%99Ver_1.0/%E7%9B%B8%E5%85%B3%E6%95%B0%E6%8D%AE%E6%89%8B%E5%86%8C%E5%92%8C%E5%8F%82%E8%80%83%E6%96%87%E7%8C%AE/Mifare%E5%8D%A1%E8%AF%B4%E6%98%8E/Mifare1%20S50IC%E5%8D%A1%E4%B8%AD%E6%96%87%E8%AF%B4%E6%98%8E%E4%B9%A6.pdf

 

4. 读取ID/序列号(arduino uno、MFRC522芯片 Based On MF522-AN模块)

0x1: 接线方式

模块采用MF RC522芯片,模块与Arduino通讯方式为SPI(同步串行外设接口总线)通信,Arduino工作在主模式下,RC522工作在从模式下,模块与Arduino控制板连接方式如下

Arduino                                RC522 (工作电压3.3V)
D5            <------------->             RST    
D10            <------------->            SDA    
D11            <------------->            MOSI
D12            <------------->            MISO
D13            <------------->            SCK

0x2: RFID库文件

Arduino SPI 库文件官方软件自带,我们需要下载一个RFID库文件,将库文件放到指定文件夹,重新打开IDE即可调用该库文件

0x3: Code

#include <SPI.h>
#include <RFID.h>

//D10 - 读卡器CS引脚、D5 - 读卡器RST引脚
RFID rfid(10,5);   
unsigned char status;
unsigned char str[MAX_LEN];  //MAX_LEN为16,数组最大长度

void setup()
{
  Serial.begin(9600);
  SPI.begin(); 
  rfid.init(); //初始化
  Serial.print("init ");
}

void loop()
{
  //Search card, return card types
  if (rfid.findCard(PICC_REQIDL, str) == MI_OK) {
    Serial.println("Find the card!");
    // Show card type
    ShowCardType(str);
    //防冲突检测,读取卡序列号
    if (rfid.anticoll(str) == MI_OK) {
      Serial.print("The card's number is  : ");
      //显示卡序列号
      for(int i = 0; i < 4; i++){
        Serial.print(0x0F & (str[i] >> 4),HEX);
        Serial.print(0x0F & str[i],HEX);
      }
      Serial.println("");
    }
    //选卡(锁定卡片,防止多数读取,去掉本行将连续读卡)
    rfid.selectTag(str);
  }
  rfid.halt();  //命令卡片进入休眠状态
}

void ShowCardType(unsigned char * type)
{
  Serial.print("Card type: ");
  if(type[0]==0x04&&type[1]==0x00) 
    Serial.println("MFOne-S50");
  else if(type[0]==0x02&&type[1]==0x00)
    Serial.println("MFOne-S70");
  else if(type[0]==0x44&&type[1]==0x00)
    Serial.println("MF-UltraLight");
  else if(type[0]==0x08&&type[1]==0x00)
    Serial.println("MF-Pro");
  else if(type[0]==0x44&&type[1]==0x03)
    Serial.println("MF Desire");
  else
    Serial.println("Unknown");
}

Relevant Link:

http://www.openedv.com/thread-44628-1-1.html
http://www.arduino.cn/forum.php?mod=viewthread&tid=4560&extra=&highlight=rfid&page=1
http://www.yfrobot.com/forum.php?mod=viewthread&tid=2377&extra=
http://www.yfrobot.com/forum.php?mod=viewthread&tid=2375&highlight=rfid

 

5. 读取ID/序列号(arduino uno、FM1702SL)

Relevant Link: 

http://v.youku.com/v_show/id_XMzI0MjYxNDc2.html

 

6.  arduino uno、RC522向mifare卡写入数据

寻卡→防冲突→选卡→读/写卡

在编写向M1卡写入数据的代码之前需要首先明白的是,M1卡的每个扇区都有独立的验证密码,在写入数据之前之前需要先通过密码验证,方可进行进行后续的指令操作,类似于WEB的login界面。M1卡总共有16个扇x区,每个扇区的默认密码都是6 bytes 的0xFF

http://files.cnblogs.com/files/LittleHann/m1.rar

Relevant Link:

http://blog.sina.com.cn/s/blog_6754612e0101c0pe.html
http://wenku.baidu.com/link?url=nHSqrV_vxk7zj_3rQqN8an3i262yShVdKLpdKKUOI69XTslH9wrOjAAQp_d3ee1qxulyuCvgmj21Cn5h2_DZo9AJhi7ICBEBMl-YeP9GahS
http://blog.csdn.net/zitech/article/details/24135893/
http://www.geek-workshop.com/thread-4564-1-1.html
http://www.geek-workshop.com/thread-4564-1-1.html
http://wenku.baidu.com/link?url=IlOrYuXwtn8nHsgc_BbMihMuw-czCSKNbAwuirAut6JLzB9kGnlTFs8j1T90mGGfAAqcbyXUWLK9-BJ74lBMfkarpDAC0KFraZ7NWmp7CIy

 

Copyright (c) 2016 LittleHann All rights reserved

 

posted @ 2016-08-07 15:52  郑瀚Andrew  阅读(9178)  评论(0编辑  收藏  举报