主要参考资料:
一文读懂基于PN532和S50的NFC开发: https://blog.csdn.net/Chuangke_Andy/article/details/117473976
NFC模块PN532使用: https://makerinchina.cn/nfc%E6%A8%A1%E5%9D%97pn532%E4%BD%BF%E7%94%A8/
一文读懂基于RC522和S50的RFID开发: https://blog.csdn.net/Chuangke_Andy/article/details/117415528
初探RFID技术:尝试复制公司的工卡: https://blog.csdn.net/weixin_46175201/article/details/133129601
B站UP主宅人改造家《【教程】手把手教你玩转IC卡》
目录
一、NFC近场通信
NFC概述
NFC(Near Field Communication)近场通信,这个技术由非接触式射频识别(RFID)演变而来,由飞利浦半导体(现恩智浦半导体公司)、诺基亚和索尼共同研制开发,其基础是RFID及互连技术。NFC是一种短距离高频的无线电技术,在13.56Mhz频率运行于20cm距离内。其传输速度有106Kbit/s、212Kbit/s或者424Kbit/s三种。目前近场通信已通过并成为ISO/IEC IS 18092国际标准、ECMA-340标准与ETSI TS 102 190标准。
NFC的工作模式
NFC的工作模式有卡模式、读写器模式和点对点模式三种
- 卡模式:这个模式其实就是相当于一张采用RFID技术的IC卡。可以替代大量的IC卡(包括信用卡)场合商场刷卡、公交卡、门禁管制,车票,门票等等。此种方式下,有一个极大的优点,那就是卡片通过非接触读卡器的RF域来供电,即便是寄主设备(如手机)没电也可以工作。
- 读写器模式:这个模式可以模拟读读卡器功能,读取MIFARE和FeliCa卡的信息
- 点对点模式:这个模式和红外线差不多,可用于数据交换,只是传输距离较短,传输创建速度较快,传输速度可快些,功耗低(蓝牙也类似)。将两个具备NFC功能的设备链接,能实现数据点对点传输,如下载音乐、交换图片或者同步设备地址簿。一次通过NFC,多个设备如数码相机、PDA、计算机和手机之间都可以交换资料或者服务
NFC与RFID的区别
NFC与RFID的区别有如下三点:
NFC将非接触读卡器、非接触卡和点对点功能整合进一块单芯片,而RFID必须有阅读器和标签组成。RFID只能实现信息的读取以及判定,而NFC技术则强调的是信息交互。通俗的说NFC就是RFID的演进版本,双方可以近距离交换信息。NFC手机内置NFC芯片,组成RFID模块的一部分,可以当作RFID无源标签使用进行支付费用;也可以当作RFID读写器,用作数据交换与采集,还可以进行NFC手机之间的数据通信
NFC传输范围比RFID小,RFID的传输范围可以达到几米、甚至几十米,但由于NFC采取了独特的信号衰减技术,相对于RFID来说NFC具有距离近、带宽高、能耗低等特点
应用方向不同。NFC看更多的是针对于消费类电子设备相互通讯,有源RFID则更擅长在长距离识别
二、非接触读卡器
2.1 RC522
MF RC522 是应用于13.56MHz 非接触式通信中高集成度读写卡系列芯片中的一员。是NXP 公司针对“三表”应用推出的一款低 电压、低成本、体积小的非接触式读写卡芯片,是智能仪表和便携 式手持设备研发的较好选择
- 支持 ISO 14443A/MIFARE,MFRC522 的内部发送器部分可驱动读写器天线与 ISO
14443A/MIFARE卡和应答机的通信,无需其它的电路 - 可实现各种不同主机接口的功能:SPI 接口、串行 UART(类似 RS232,电压电平取决于提供的管脚电压)、I2C 接口
- 64 字节的发送和接收 FIFO 缓冲区
- 灵活的中断模式
- 可编程定时器
- 内部振荡器,连接 27.12MHz 的晶体
2.2 PN532
PN532芯片是一款高度集成的非接触式通讯收发模块,基于8051单片机核心。它支持6个不同的操作模式:
- ISO/IEC14443A/MIFARE 读/写器
- FeliCa 读/写器
- ISO/IEC 14443B 读/写器
- ISO/IEC14443A MIFARE卡模拟模式
- FeliCa卡模拟模式
- ISO/IEC 18092 ECMA 340点对点
这款芯片提供3种和主机通信的接口:SPI\I2C\USART。PN532的内部框图如下示
2.2.1 PN532工作模式以及接口方式配置
PN532工作模式和接口方式需要通过硬件来进行配置
工作模式配置:在启动时,必须通过连接以下定义的P35和IRQ来选择正常模式。另外两种模式(RF field on和Emu Joiner)是仅用于测试目的的特殊模式。(P35和IRQ引脚上不需要外部电阻),见下图左
接口方式配置:有3个接口I2C、SPI、HSU (high speed UART)。接口可由硬件(引脚I0和I1),见下图右
2.2.2 PN532帧格式
PN532芯片提供了许多命令方便开发者进行各种操作,只需要将命令正确发送给模块即可,每条指令都有固定的格式,帧指令的格式如下图示
前序: 0x00 包头: 0x00 , 0xff
数据长度: LEN,包含TFI和PD
长度校验和:LCS,LEN+LCS = 0x00
传输方向:TFI,0xd4传到卡片,0xd5卡片返回
数据: PD0/PD1…PDn
数据校验和:DCS,DCS+TFI+PD0+…+PDn =0x00
尾序: 0x00
PN532长帧格式如下图示
前序:0x00 包头:0x00, 0xff
短格式中的长度和校验:0xff, 0xff ,普通格式最大发送255个字节,而长格式可发送更多
数据长度高字节:LENH,包含TFI和PD
数据长度低字节:LENL,包含TFI和PD
长度校验和: LCS,LENH + LENL +LCS = 0x00
传输方向: TFI,0xd4传到卡片,0xd5卡片返回
数据: PD0/PD1…PDn
数据校验和:DCS,DCS+TFI+PD0+…+PDn = 0x00
尾序: 0x00
PN532应答帧由PN532正常响应时发出(返回帧 + 数据),格式如下图示(此外还有无应答帧、错误帧)
前序: 0x00
包头: 0x00、0xff
包: 0x00、0xff
尾序: 0x00
2.2.3 PN532的操作流程
下图描述了一个正常的PN532数据交换流程
2.2.4 PN532读写卡片
读写卡片需要按照一定的流程发送命令,并且每一条命令都要按照正确的帧格式。
- 唤醒芯片:将芯片设置为普通模式
唤醒指令:0x55,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x03,0xFD,0xD4,0x14,0x01,0x17,0x00
注:较特殊的是,唤醒命令要在原有的数据包之前加入唤醒头
0xD4 代表主机向PN532写入数据
0x14,0x01 代表选择了普通模式
- 扫描卡片:一次最多2张,成功可以得到ID
扫描卡片:0x4a, 0x02, 0x00 扫描命令、卡片个数、波特率(0x00对应9600bps)
应答:0x4b,0x02,0x01,0x04, 0x00,0x08,0x04,0x01, 0x02, 0x03, 0x04
0x4b, 应答码
0x02, 卡片个数
0x01, 第一个卡片
0x04, 0x00, 卡片应答
0x08, 卡片容量
0x04, id长度
0x01, 0x02, 0x03, 0x04 卡片id
- 认证:需要发送秘钥和ID,注意这里没有防冲突环节,因为在扫描的时候已经拿到卡片的ID,在认证的时候指明ID即可
认证卡片:0x40,0x01,0x60,0x02,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x02,0x03,0x04
0x40, 0x01, 0x60, 0x02, 数据交换命令,1号卡片,A认证,2地址
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 秘钥
0x01, 0x02, 0x03, 0x04 卡片id
应答:0x00, 0x00, 0xFF, 0x03, 0xFD, 0xD5, 0x41, 0x00, 0xEA, 0x00 或 0x00, 0x00, 0xFF 0x00, 0xFF, 0x00
- 读、写、充值、扣款
读卡:0x40, 0x01, 0x30, 0x02 交换数据,1号卡,读取块,2地址
应答:0x00, 0x00, 0xFF, 0x13, 0xED, 0xD5, 0x41, 0x00 , 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x07, 0x80, 0x69, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00 或 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00
0x41,0x00无错
写卡:0x40, 0x01, 0xa0, 0x02,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6交换数据,1号卡,写入块,2地址,数据(阿拉伯数字)
应答:0x00, 0x00, 0xFF, 0x03, 0xFD, 0xD5, 0x41, 0x00, 0xEA, 0x00 或 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00
0x41, 0x00 应答,无错
充值: 0x40, 0x01, 0xc1,0x02, 1,0,0,0 交换数据,1号卡,充值,2地址,数据 0x40, 0x01, 0xB0, 0x02换数据,1号卡,保存,2地址
应答:0x41, 0x00 应答,无错
扣款: 0x40, 0x01, 0xc0, 0x02,1,0,0,0 交换数据,1号卡,扣款,2地址,数据 0x40, 0x01, 0xB0, 0x02 交换数据,1号卡,保存,2地址
应答:0x41, 0x00 应答,无错 注意:充值或者扣款操作一定要加上保存动作
三、非接触式IC卡
3.1 ISO14443-A协议
ISO14443协议是Contactless card standards(非接触式IC卡标准)协议,由4个部分组成:
- 物理特性:规定了接近式卡(PICC)的物理特性
- 频谱功率和信号接口:规定了再接近式耦合设备(PCD)和接近式卡(PICC)之间提供功率和双向通信的场的性质与特征
- 初始化和防冲突算法:描述了PICC进入PCD工作场的轮询;在PCD和PICC之间通信的初始阶段期间所使用的字节格式、帧和定时;初始REQ和ATQ命令内容;探测方法和与几个卡(防冲突)中的某一个通信的方法;初始化PICC和PCD之间的通信所需要的其他参数;容易和加速选择在应用准则基础上的几个卡中的一个(即最需要处理的一个)的任选方法
- 通讯协议:规定了以无触点环境中的特殊需要为特色的半双工传输协议,并定义了协议的激活和停活序列
ISO14443术语与缩写:
接近式卡 Proximity card(PICC)
接近式耦合设备 Proximity coupling device(PCD)
防冲突环 anticollision loop
比特冲突检测协议 bit collision detection protocol
冲突 collision
帧 frame
REQA:请求命令,类型A(Request To Command, Type A)
REQB:请求命令,类型B(Request To Command, Type B)
ATQA:请求应答,类型A(Answer ToRequest, Type A)
ATQB:请求应答,类型B(Answer To Request, Type B)
NVB:有效位的数目(Number of Valid Bits)
3.1.1 物理特性
PICC应具有ISO/IEC 7810中为ID-1型卡规定的要求相应的一般物理特性。还应具有相应的紫外线、X-射线、动态弯曲应力、动态扭曲应力、交变磁场、交变电场、静电、静态磁场及工作温度等附加特性
3.1.2 频谱功率和信号接口
PICC的初始对话 PCD和PICC之间的初始对话通过下列连续操作:
1.PCD的RF工作场激活PICC
2.PICC静待来自PCD的命令
3.PCD传输命令
4.PICC传输响应
这些操作使用下列条款中规定的射频功率和信号接口:
PCD应产生给予能量的RF场,为传送功率,该RF场与PICC进行耦合,为了通信,该RF场应被调制。
RF工作场频率(fc)应为13.56MHz±7kHz
3.1.3 ISO14443-A帧格式和防冲突算法
当PICC暴露于未调制的工作场内,它能在5ms内接受一个请求。为了检测进入其激励场的PICC,PCD发送重复的请求命令并寻找ATQ,这个过程被称为轮询
- REQA和WAKE-UP帧:请求和唤醒帧用来初始化通信并按以下次序组成
通信开始:7个数据位发送,LSB首先发送(标准REQA的数据内容是0x26,WAKE-UP请求的数据内容是0x52)
通信结束:不加奇偶校验位
- 标准帧:标准帧用于数据交换并按以下次序组成
通信开始:n*(8个数据位+奇数奇偶校验位),n≥1。每个数据字节的LSB首先被发送。每个数据字节后面跟随一个奇数奇偶校验位。
通信结束
- 面向比特的防冲突帧:仅在比特帧防冲突环期间使用,该帧是带有7个数据字节的标准帧,它被分离成两部分,第一部分用于从PCD到PICC的传输,第二部分用于从PICC到PCD的传输
- PICC状态:下图提供了专门针对比特冲突检测协议的类型A的PICC状态描述
POWER-OFF状态:在POWER-OFF状态中,由于缺少载波能量,PICC不能被激励并且应不发射副载波
IDLE状态:在该状态中,PICC被加电,并且能够解调和识别从PCD来的有效REQA和WAKE-UP命令
READY状态:一旦收到有效REQA或WAKE-UP报文则立即进入该状态,用其UID选择了PICC时则退出该状态。在这种状态中,比特帧防冲突或其他任选的防冲突方法都可以使用。所有串联级别都在这一状态内处理以取得所有UID CLn
ACTIVE状态:通过使用其完整UID选择PICC来进入该状态
HALT状态:在该状态中,PICC应仅响应使PICC转换为READY状态的WAKE-UP命令
注:处于HALT状态的PICC将不参与任何进一步的通信,除非使用了WAKE-UP命令
- 命令集:PCD用来管理与几个PICC通信的命令如下示 ,这些命令使用上面描述的字节和帧格式
REQA:由PCD发出,以探测用于类型A PICC的工作场(0x26)
WAKE-UP:由PCD发出,使已经进入HALT状态的PICC回到READY状态(0x52)
ANTICOLLISION:防碰撞(0x93)
SELECT:选择
HALT:结束(0x50)
3.1.4 通讯协议
ISO/IEC14443的这一部分规定了非接触的半双工的块传输协议并定义了激活和停止协议的步骤。这部分传输协议同时适用于A型卡和B型卡
基于14443-A的操作帧格式
请求卡 :0x26
唤醒所有卡 :0x52
防冲突 :0x93,0x20 得到卡ID
选择卡片 :0x93,0x70,ID1,ID2,ID3,ID4, checksum, CRC16
3.2 电子标签
按照有无内置电源可以将标签分为三种:
- 有源电子标签:特点距离远,应用场景:ETC、智能停车场等。
- 半有源电子标签:一般应用于区域管理,电子标签处于区域范围内时才会被激活,它弥补了无缘电子标签传输距离近的缺点,可以在几十米的区域进行数据传输。应用场景:工厂的流水线上跟踪物体等。
- 无缘电子标签:其本身没有电源,所以只能靠近阅读器才能获得能量以此来进行数据传输,这也就代表着无缘电子标签的传输距离是很近的。应用场景:门禁卡、饭卡、公交IC卡等。
按照工作频率可以分为以下几种:
- 低频段可选范围:30kHz~300kHz,常用频段125kHz、135kHz
- 中高频段可选范围:3MHz~30MHz,常用频段13.56MHz
- 超高频段可选范围:3MHz~30MHz
- 微波范围:3GHz以上
按照识别方式可以分为:
非接触式IC卡:又称射频卡,成功地解决了无源(卡中无电源)和免接触这一难题,是电子器件领域的一大突破。
接触式IC卡:如银行卡, 可以看到卡片上有露出的铜芯。
3.2.1 ID卡与IC卡
平时说的ID卡就是低频卡
- EM4100:工作频率125kHz,卡内只存储卡号且无法修改成本低广泛用于门禁、身份识别,安防医疗系统
- HID ProxCard II:与M4系列卡片类似只存储卡号,名片大小,厚度较厚
- T5577卡:可写入数据可设置密码的低频卡,可用于复制ID和HID卡,共有8个块,共可存储256b数据。它复制ID卡那它就是ID卡复制HID卡那它就是HID卡。
高频卡就是平时常说的IC卡,NXP的Mifare方案有以下三种:(M1、S70、DESFire/JCOP)
- NXP Mifare S50(M1):高频13.56Mz是最常见的射频卡。每张卡独一无二UID号,可存储、修改16扇区(1K字节)的数据(一卡通,门禁,电梯卡)。
- NXP Mifare S70:和M1差不多只是可修改的数据区域变大了,可容纳4KB数据,S50的卡类型(ATQA)是0004H,S70的卡类型(ATQA)是0002H。
- NXP DESFire/JCOP:基于微处理器的芯片卡广泛应用如银行与金融,移动通信等领域。支持接触式、非接触式读写,
JCOP版本内含操作系统,并提供40一80K字节EEPROM存储器。
3.2.2 M1卡
M1卡,是指菲利浦下属子公司恩智浦出品的芯片缩写,全称为NXP Mifare1系列,常用的有S50及S70两种型号,属于非接触式IC卡。
M1卡,优点是可读可写的多功能卡,缺点是:价格稍贵,感应距离短。
M1的容量为1K字节,一共16个扇区,每个扇区有4个块,每个块是16字节。
第1扇区为公共扇区。第2-16扇区储存数据。
其中第1区块用来储存卡片信息,正常出厂时,这个信息已经被固化,不可修改。
字节1-4:储存UID信息,256的四次方,可以区分约43亿个卡号信息。
字节5:卡号的BCC验证信息。
字节6:SAK芯片类型,08代表s50卡,18代表s70卡,20代表cpu卡,28代表cpu模拟卡。
字节7-8:ATQA应答类别,s50卡0400,s70卡0200。
字节9-16:储存生产厂商信息。
其中第4区块为控制块。
字节1-6:A密钥,如是6个FF代表空密钥
字节7-11:存取控制信息,前三字节为真实控制位,最后一字节为备用位。
字节12-16:B密钥,如是6个FF代表空密钥
FF 07 80 69存取控制编码定义:
08 778F 00存取控制编码定义:
工作原理:向M1卡发一组固定频率的电磁波,卡片内有一个LC串联谐振电路,其频率与读写器发射的频率相同,在电磁波的激励下,LC谐振电路产生共振,从而使电容内有了电荷,在这个电容的另一端,接有一个单向导通的电子泵,将电容内的电荷送到另一个电容内储存,当所积累的电荷达到2V时,此电容可做为电源为其它电路提供工作电压,将卡内数据发射出去或接取读写器的数据。
3.2.3 变种卡
基于M1卡还有一下几种变种卡,多用于复制M1卡:
- UID卡是国人针对M1 S50卡特制的变种卡,使用方式和M1完全一样,可用后门指令可对全卡任何数据编辑(包括UID号码),不需密钥即可读写数据,响应后门指令,可被读卡器鉴别发现。
- FUID卡是UID卡的优化版本,0扇区0块数据只可修改一次不响应后门指令,不可被读卡器鉴别。
- CUID卡是针对UID卡的进一步优化可对全卡任何数据编辑不响应后门指令,如果数据写入错误可能无法恢复。