射频卡的使用

操作程序主要包括:初始化函数,寻卡,防冲突,选卡,转换密钥,传送密钥,验证密钥简称三轮认证,关闭打开天线,钱包冲值等函数。

RFID(radio frequency identification)是利用无线电波进行通信的一种自动识别技术。基本原理是通过读头和黏附在物体上的标签之间的电磁耦合或电感耦合进行数据通信,以达到对标签物品的自动识别。自动识别是指应用一定的识别装置,通过被识别物品和识别装置之间的接近活动,自动获取被识别物品的相关信息,并提供给后台计算机处理系统来完成相关后续处理的一种技术。

NFC是Near Field Communication缩写,即近距离无线通讯技术。由飞利浦和索尼公司共同开发的NFC是一种非接触式识别和互联技术,可以在移动设备、消费类电子产品、PC和智能控件工具间进行近距离无线通信。NFC提供了一种简单、触控式的解决方案,可以让消费者简单直观地交换信息、访问内容与服务。

NFC从本质上与RFID没有太大区别,都是基于地理位置相近的两个物体之间的信号传输。

复位RC522--关闭天线--开启天线--设置RC632的工作方式 --

1、C522共有3中通信方式,分别是UART、I2C和SPI,测试代码用的SPI

SDA(数据接口)
SCK(时钟接口)
MOSI(SPI 接口主出从入)
MISO(SPI 接口主入从出)
NC(悬空)
GND(地)
RST(复位信号)
3.3V(电源)

通讯步骤

寻卡。寻卡成功,返回卡的类型。
选卡。选卡成功,返回卡的序列号。
认证。
增减值。该步骤在将IC卡用做电子钱包时才会使用,比如门禁卡就不会使用。

RC522 接口 STM32F429 接口                      
SDA(数据接口) P2.7
SCK(时钟接口) P2.6
MOSI(SPI 接口主出从入) P2.5
MISO(SPI 接口主入从出) P2.1
NC(悬空)
GND(地) GND
RST(复位信号) P2.3
3.3V(电源) 3.3V

寄存器定义

// PAGE 0 // 命令和状态
#define RFU00 0x00
#define CommandReg 0x01 // 启动和停止命令的执行
#define ComIEnReg 0x02 // 中断请求传递的使能和禁能控制位
#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和LSB值
#define CRCResultRegL 0x22
#define RFU23 0x23
#define ModWidthReg 0x24 // 控制ModWidth的设置
#define RFU25 0x25
#define RFCfgReg 0x26 // 配置接收器增益
#define GsNReg 0x27 // 选择天线驱动器管脚TX1和TX2的调制电导
#define CWGsCfgReg 0x28 // 选择天线驱动器管脚TX1和TX2的调制电导
#define ModGsCfgReg 0x29 // 选择天线驱动器管脚TX1和TX2的调制电导
#define TModeReg 0x2A // 定义内部定时器的设置
#define TPrescalerReg 0x2B // 定义内部定时器的设置
#define TReloadRegH 0x2C // 描述16位长的定时器重装值
#define TReloadRegL 0x2D // 描述16位长的定时器重装值
#define TCounterValueRegH 0x2E // 显示16位长的实际定时器值
#define TCounterValueRegL 0x2F // 显示16位长的实际定时器值
// PAGE 3
#define RFU30 0x30
#define TestSel1Reg 0x31 // 常用测试信号的配置
#define TestSel2Reg 0x32 // 常用测试信号的配置和PRBS控制
#define TestPinEnReg 0x33 // 输出驱动器的使能管脚(注:仅用于串行接口)
#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 // 显示ADC I和Q通道的实际值#define RFU3C 0x3C
#define RFU3D 0x3D
#define RFU3E 0x3E
#define RFU3F 0x3F

S50非接触式IC卡性能简介(M1)
一、    主要指标
    容量为8K位EEPROM
    分为16个扇区,每个扇区为4块,每块16个字节,以块为存取单位
    每个扇区有独立的一组密码及访问控制
    每张卡有唯一序列号,为32位
    具有防冲突机制,支持多卡操作
    无电源,自带天线,内含加密控制逻辑和通讯逻辑电路
    数据保存期为10年,可改写10万次,读无限次
    工作温度:-20℃~50℃(湿度为90%)
    工作频率:13.56MHZ
    通信速率:106 KBPS
    读写距离:10 cm以内(与读写器有关)

三、    工作原理
卡片的电气部分只由一个天线和ASIC组成。
天线:卡片的天线是只有几组绕线的线圈,很适于封装到IS0卡片中。
ASIC:卡片的ASIC由一个高速(106KB波特率)的RF接口,一个控制单元和一个 8K位EEPROM组成。
工作原理:读写器向M1卡发一组固定频率的电磁波,卡片内有一个LC串联谐振电路,其频率与读写器发射的频率相同,在电磁波的激励下,LC谐振电路产生共振,从而使电容内有了电荷,在这个电容的另一端,接有一个单向导通的电子泵,将电容内的电荷送到另一个电容内储存,当所积累的电荷达到2V时,此电容可做为电源为其它电路提供工作电压,将卡内数据发射出去或接取读写器的数据。


四、    M1射频卡与读写器的通讯

复位应答(Answer to request)
M1射频卡的通讯协议和通讯波特率是定义好的,当有卡片进入读写器的操作范围时,读写器以特定的协议与它通讯,从而确定该卡是否为M1射频卡,即验证卡片的卡型。

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

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

三次互相确认(3 Pass Authentication)
选定要处理的卡片之后,读写器就确定要访问的扇区号,并对该扇区密码进行密码校验,在三次相互认证之后就可以通过加密流进行通讯。(在选择另一扇区时,则必须进行另一扇区密码校验。)

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

猜你喜欢

转载自blog.csdn.net/c1063891514/article/details/81456625