基于ISO14443-A协议的RFID高频频段实战

基于ISO14443-A协议的RFID⾼频频段实战
本篇⽂章只对⾼频RFID进⾏⼤体操作思想进⾏总结分析,代码部分没有附上,重点在理解
认识 ISO 14443协议
清洁推车
该协议是⾮接触式IC卡标准协议(Contactless card standards)。
其英⽂介绍⽂档有四部分组成,分别为物理特性、频谱功率和信号接⼝、初始化和防冲突接⼝、通讯协议;只有第三本有帧格式描述
注意14443只规定了框架,但没有规定具体的读写细节,需根据不同产品的⼿册操作。
14443术语:
(电⼦标签)接近式卡 Proximity Card (PICC)
(阅读器)接近式耦合设备 Proximity Coapling device (PCD)
防冲突环 anticollision loop
⽐特冲突检测协议 bit collision detection protocol
冲突 collision
帧 frame
协议的框架
电动车电池制作
PICC的初始对话PCD和PICC之间的初始对话通过下列连续操作:
1. PCD的RF⼯作场激活PICC
2. PICC静待PCD的命令
3. PCD传输命令
4. PICC传输响应
这些操作使⽤下列条款中规定的视频功率和信号接⼝:
PCD应产⽣给予能量的RF场,为该RF场与PICC进⾏耦合,为了通信,该RF场应被调制。RF⼯作场频率(fc)应为13.56MHZ ± 7KHZ 请求和唤醒帧⽤来初始化通信并按以下次序组成:
1. 通信开始
2. 7个数据发送
3. LSB⾸先发送
4. 标准REQA的数据内容是0x26,WAKE-UP请求的数据内容是0x52
5. 通信结束,不加奇偶校验位
帧格式有三种:
短帧(1字节)、标准帧(n字节)、防冲突帧(在标准帧上进⾏扩展)
RC522没有⾃主编程能⼒,需通过MCU进⾏间接操作,并且发送的操作命令需满⾜所⽀持的帧格式。
基本Commands 框架为:
物联网实验设备REQA:请求,对象:所有未睡眠的;短帧格式
WUPA:唤醒,对象:所有;短帧格式
ANTICOLLISION:防冲突;防冲突帧格式
SELECT:选择某个卡⽚;标准帧格式
HLTA:关机;标准帧格式
Commands相关数据的描述:
Cascade level:描述卡⽚ID的字节数,有三个level(1~3),分别代表4(single)、7(double)和10(triple)三种。
SEL:⼀个字节,⽤于设置Cascade level。
NVB:⼀个字节,⽤于统计接收数据Bit个数,包含SEL和NVB本⾝。有效数据是以位来传输,接收时⽤NVB(1B)的⾼4位描述总字节数/ 8,低4位描述余数的位数。例23位⽤NVB表⽰为27,两个字节+7位。
CRC_A:⼀个字节,⽤于校验
UID:卡⽚的ID号
防冲突命令使⽤的分析:
ANTICOLLISION:SEL + NVB + UID + CRC_A
防冲突由硬件完成,⽬的是为了拿到ID,在进⾏叫号,获取⽬标卡⽚
使⽤时只需发送 93 20起个头,然后由硬件⾃⾏叫号。(93表⽰SEL,level1;20表⽰NVB,2个字节)
基于14443-A命令的使⽤
请求卡:0x26,返回2B卡类型,例:(4,0)表⽰ID号4字节类型
唤醒所有卡:0x52,返回2B卡类型
防冲突:0x93,0x20,返回得到4B的卡ID + 1B校验(异或)
选择卡⽚:0x93,0x70,4B卡ID(ID1,ID2,ID3,ID4),1B的checksum,2B的CRC16,返回卡校验0x08
RC522芯⽚的概述
应⽤于13.56MHZ⾮接触式通信中⾼集成度读写卡系列芯⽚中的⼀员,是NXP公司针对“三表”应⽤推出的⼀款低电压、低成本、体积⼩的⾮接触式读写卡芯⽚,是智能仪表和便携式⼿持设备研发的较好选
择。
读写器⽀持ISO 14443 / MIFARE,MFRC522内部发⽣器可驱动读写器天线与ISO 14443A / MIFARE卡和应答机的通信,⽆需其它的电路。可实现不同主机接⼝的功能:SPI、UART、I2C。
相关寄存器描述:
SPI接⼝
引脚包含:MOSO输出、MOSI输⼊、CSS⽚选、SCL时钟
对于SPI接⼝的RC522设备地址有⼀个特殊的要求:
第⼀个字节的第⼀个位MSB设置使⽤模式,1为读,0位写
第1~6位定义从设备地址,最后⼀位设置为0(RFU,这⾥必须为0,不能使⽤)。即需要将从设备地址左移⼀位,且将其低位设置为0
例读操作时额外对地址进⾏处理:
addr << 1
addr |= 0x80
addr &= 0xfe
RC522命令集
命令有两种:⼀种控制RC522本⾝,另⼀种控制⾮接触式IC卡
其中Transceive和MFAuthent为操作IC卡的,命令都是由MCU发送给RC522芯⽚。因为RFID通信需满⾜ISO 14443协议,所以这两条命令也需满⾜该协议进⾏操作。
例如要唤醒卡⽚,则需发送 Transceive’0x0c’ + 0x52。
防冲突获取卡⽚ID,则需发送 Transceive’0x0c’ + 0x93 + 0x20。
Transceive命令的概述:
MFAuthent命令的概述:
功能实现
1. 请求唤醒:获取卡ID类型,得到ID号的字节数⼤⼩
1. 配置“Status2Reg”寄存器。清理指⽰MIFARECyptol单元接通以及所有卡的数据通信被加密的情况
2. 配置“BitFramingReg”寄存器。设置最后⼀个字节发送位数为七位
3. 配置“TxControlReg”寄存器。设置天线驱动器TX1,TX2管脚的输出信号传递经发送调制的13.56的能量载波信号
4. 配置“ComIEnReg”寄存器。IRqInv置位管脚IRQ与Status1Reg的IRq位的值相反,允许TxIEn RxIEn IdleIEn LoAlertIEn ErrIEn TimerIEn,(寻卡等待时候查询接收中断标志位与空闲中断标志位)
5. 配置“ComIrqReg”寄存器。中断屏蔽位清零
6. 配置“CommandReg”寄存器。写空闲命令
7. 配置“FIFOLevelReg”寄存器。置位FlushBuffer清除内部FIFO的读和写指针以及ErrReg的BufferOvfl标志位被清除
8. 配置“FIFODataReg”寄存器。写数据进FIFOdata,“0x26”或“0x52”,符合14443-A协议的REQ命令
9. 配置“CommandReg”寄存器。发送“0x0C”,PCD_TRANSCEIVE指令。
10. 配置“BitFramingReg”寄存器。StartSend置位启动数据发送该位与收发命令使⽤时才有效
11. 循环等查询事件中断
do      //认证与寻卡等待时间
{
高纯氮气压缩机
ucN = RC522_ReadByte ( ComIrqReg );    //查询事件中断
ul --;
} while ( ( ul != 0 ) && ( ! ( ucN & 0x01 ) ) && ( ! ( ucN & ucWaitFor ) ) );
//退出条件:ul=0,定时器中断,与写空闲命令
12. 配置“BitFramingReg”寄存器,清理允许StartSend位
13. 若为事件中断,则从FIFOLevelReg寄存器中读出IC卡回应的数据的字节数N,在从ControlReg寄存器中读出最后⼀字节的位数。
14. 计算所需接收数据总位数,⽤于校验:N个字节数减去1(最后⼀个字节)+最后⼀位的位数读取到的数据总位数
15. 循环从FIFODataReg寄存器中读出所有数据,最后⼀个字节不⽤读。
探头板
16. 配置“ControlReg”寄存器。停⽌定时器
17. 配置“CommandReg”寄存器。使RC522位于空闲态
2. 防冲突:获取到RF场范围内的某⼀个卡ID
1. 配置“Status2Reg”寄存器。清理指⽰MIFARECyptol单元接通以及所有卡的数据通信被加密的情况
2. (不同点)配置“BitFramingReg”寄存器。清理寄存器停⽌收发
3. (不同点)配置“CollReg”寄存器。清ValuesAfterColl所有接收的位在冲突后被清除
4. 配置“ComIEnReg”寄存器。IRqInv置位管脚IRQ与Status1Reg的IRq位的值相反,允许TxIEn RxIEn IdleIEn LoAlertIEn ErrIEn TimerIEn,(寻卡等待时候查询接收中断标志位与空闲中断标志位)
5. 配置“ComIrqReg”寄存器。中断屏蔽位清零
6. 配置“CommandReg”寄存器。写空闲命令
7. 配置“FIFOLevelReg”寄存器。置位FlushBuffer清除内部FIFO的读和写指针以及ErrReg的BufferOvfl标志位被清除
8. (不同点)配置“FIFODataReg”寄存器。写数据进FIFOdata,“0x93
0x20”,符合14443-A协议的COLL命令
9. 配置“CommandReg”寄存器。发送“0x0C”,PCD_TRANSCEIVE指令。
10. 配置“BitFramingReg”寄存器。StartSend置位启动数据发送该位与收发命令使⽤时才有效
11. 循环等查询事件中断
do      //认证与寻卡等待时间
{
ucN = RC522_ReadByte ( ComIrqReg );    //查询事件中断
ul --;
} while ( ( ul != 0 ) && ( ! ( ucN & 0x01 ) ) && ( ! ( ucN & ucWaitFor ) ) );
//退出条件:ul=0,定时器中断,与写空闲命令
12. 配置“BitFramingReg”寄存器,清理允许StartSend位
13. 若为事件中断,则从FIFOLevelReg寄存器中读出IC卡回应的数据的字节数N,在从ControlReg寄存器中读出最后⼀字节的位数。
14. 计算所需接收数据总位数,⽤于校验:N个字节数减去1(最后⼀个字节)+最后⼀位的位数读取到的数据总位数
15. (不同点)循环从FIFODataReg寄存器中读出所有数据,最后⼀个字节不⽤读,数据接收的校验为除最后⼀个字节之外,其他字节异或得到。
16. (不同点)校验位判断:将异或所得的数与 ID卡后⼀个字节CRC_A进⾏⽐较
17. 配置“ControlReg”寄存器。停⽌定时器
非晶硅薄膜电池18. 配置“CommandReg”寄存器。使RC522位于空闲态
19. (不同点)配置“CollReg”寄存器。在冲突后所有接收的位均还存在
3. SELECT:根据ID号来触发指定的IC卡

本文发布于:2024-09-20 22:40:34,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/122609.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:寄存器   数据   发送   中断
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议