目录
1. RFID概述
1.1 RFID工作原理
1.2 RFID分类
1.3 RFID模块
1.4 RFID卡片
1.5 IC卡和ID卡介绍
1.6 IC卡和ID的区分
2. Mifare卡结构原理
2.1 Mifare卡概述
2.2 Mifare非接触式 IC 卡性能简介(M1)
2.2.1 Mifare S50与Mifare S70
2.2.2 S50存储结构
2.2.3 M1射频卡工作原理
2.2.4 M1射频卡与读写器的通讯
2.3 MRF522简介
2.4 NFC读写辅助APP介绍—NFC Writer
本文是STM32驱动RC522 RFID模块的基础知识篇,硬件SPI方式驱动RC522见:
基础篇010.2 STM32驱动RC522 RFID模块之二:STM32硬件SPI驱动RC522
如果您需用软件模拟SPI方式实现RC522驱动,请参考:
基础篇010.3 STM32驱动RC522 RFID模块之三:STM32软件模拟SPI驱动RC522
射频识别「Radio Frequency IDentification,简称RFID」技术,又称为无线射频识别,是一种通信技术,可通过无线电讯号识别特定目标并读写相关数据,而无需识别系统与特定目标之间建立机械或光学接触。目前,RFID已经广泛的应用于交通、零售、服装、食品、物流、智能制造、保全、医疗、娱乐、个人资讯等多个领域。
RFID技术的基本工作原理并不复杂:标签进入阅读器后,接收阅读器发出的射频信号,凭借感应电流所获得的能量发送出存储在芯片中的产品信息(Passive Tag,无源标签或被动标签),或者由标签主动发送某一频率的信号(Active Tag,有源标签或主动标签),阅读器读取信息并解码后,送至中央信息系统进行有关数据处理。
一套完整的RFID系统, 是由阅读器与电子标签也就是所谓的应答器及应用软件系统三个部分所组成,其工作原理是阅读器(Reader)发射一特定频率的无线电波能量,用以驱动电路将内部的数据送出,此时Reader便依序接收解读数据, 送给应用程序做相应的处理。
以RFID 卡片阅读器及电子标签之间的通讯及能量感应方式来看大致上可以分成:感应耦合及后向散射耦合两种。一般低频的RFID大都采用第一种方式,而较高频大多采用第二种方式.
射频识别技术依据其标签的供电方式可分为三类,即无源RFID,有源RFID,与半有源RFID。
(1)无源RFID
在三类RFID产品中,无源RFID出现时间最早,最成熟,其应用也最为广泛。在无源RFID中,电子标签通过接受射频识别阅读器传输来的微波信号,以及通过电磁感应线圈获取能量来对自身短暂供电,从而完成此次信息交换。因为省去了供电系统,所以无源RFID产品的体积可以达到厘米量级甚至更小,而且自身结构简单,成本低,故障率低,使用寿命较长。但作为代价,无源RFID的有效识别距离通常较短,一般用于近距离的接触式识别。无源RFID主要工作在较低频段125KHz、13.56MKHz等,其典型应用包括:公交卡、二代身份证、食堂餐卡等。
(2)有源RFID
有源RFID兴起的时间不长,但已在各个领域,尤其是在高速公路电子不停车收费系统中发挥着不可或缺的作用。有源RFID通过外接电源供电,主动向射频识别阅读器发送信号。其体积相对较大。但也因此拥有了较长的传输距离与较高的传输速度。一个典型的有源RFID标签能在百米之外与射频识别阅读器建立联系,读取率可达1,700read/sec。有源RFID主要工作在900MHz、2.45GHz、5.8GHz等较高频段,且具有可以同时识别多个标签的功能。有源RFID的远距性、高效性,使得它在一些需要高性能、大范围的射频识别应用场合里必不可少。
(3)半有源RFID
无源RFID自身不供电,但有效识别距离太短。有源RFID识别距离足够长,但需外接电源,体积较大。而半有源RFID就是为这一矛盾而妥协的产物。半有源RFID又叫做低频激活触发技术。在通常情况下,半有源RFID产品处于休眠状态,仅对标签中保持数据的部分进行供电,因此耗电量较小,可维持较长时间。当标签进入射频识别阅读器识别范围后,阅读器先现以125KHz低频信号在小范围内精确激活标签使之进入工作状态,再通过2.4GHz微波与其进行信息传递。也即是说,先利用低频信号精确定位,再利用高频信号快速传输数据。其通常应用场景为:在一个高频信号所能所覆盖的大范围中,在不同位置安置多个低频阅读器用于激活半有源RFID产品。这样既完成了定位,又实现了信息的采集与传递。
不同频率的标签有不同的特点,例如,低频标签比超高频标签便宜,节省能量,穿透废金属物体力强,工作频率不受无线电频率管制约束,最适合用于含水成分较高的物体,例如水果等;超高频作用范围广,传送数据速度快,但是比较耗能,穿透力较弱,作业区域不能有太多干扰,适用于监测港口、仓储等物流领域的物品;而高频标签属中短距识别,读写速度也居中,产品价格也相对便宜,比如应用在电子票证一卡通上。
RFID 技术利用无线射频方式在阅读器和射频卡之间进行非接触双向数据传输,以达到目标识别和数据交换的目的。
标签(Tag,即射频卡),耦合元件及芯片组成,标签含有内置天线,用于和射频天线间进行通信。
阅读器:读取(在读写卡中还可以写入)标签信息的设备。
天线:在标签和读取器间传递射频信号。
不同的国家对于相同波段,使用的频率也不尽相同。欧洲使用的超高频是868MHz,美国则是915MHz。日本目前不允许将超高频用到射频技术中。
目前在实际应用中,比较常用的是13.56MHz、860MHz~960MHz、2.45GHz等频段。近距离RFID系统主要使用125KHz、13.56MHz等LF和HF频段,技术最为成熟;远距离RFID系统主要使用433MHz、860MHz~960MHz等UHF频段,以及2.45GHz、5.8GHz等微波频段,目前还多在测试当中,没有大规模应用。
我国在LF和HF频段RFID标签芯片设计方面的技术比较成熟,HF频段方面的设计技术接近国际先进水平,已经自主开发出符合ISO14443Type A、TypeB和ISO15693标准的RFID芯片,并成功地应用于交通一卡通和第二代身份证等项目中。
IC卡全称集成电路卡(Integrated Circuit Card),又称智能卡(Smart Card)。可读写,容量大,有加密功能,数据记录可靠,使用更方便,如一卡通系统,消费系统等,目前主要有PHILIPS的Mifare系列卡。
ID卡全称身份识别卡(Identification Card),是一种不可写入的感应卡,含固定的编号,主要有台湾SYRIS的EM格式,美国HID,TI,MOTOROLA等各类ID卡。
简言之,IC卡是可加密的存储卡、ID卡是只读的低频卡。
(1)本质区别:id卡是只读的,ic卡是可读可写的;
(2)外观区别:两种卡在外观上没有靠谱的区分方法;下面给出一种不太准确的方法:
从外观上来进行区分ID卡和IC卡:
对于白卡在较暗的环境中,用电筒照射卡片背面,可以看到:一般圆圈线圈的为ID卡,矩形线圈的为IC卡。
对于钥匙扣卡,一般ID钥匙扣卡表面会刻10位内码号,而IC钥匙扣一般表面是空白的。
(3)用途区别:id卡用来标明身份,里面的信息不能改变;ic卡用作动态记录信息,是需要根据需要来修改卡内的信息的。
NXP 半导体(由PHILIPS创建)是世界上最早研制非接触式IC卡芯片的公司之一,曾拥有国际市场上同类产品的六成以上的份额,对非接触式IC卡在全世界的推广使用起着不可替代的引导和推动作用。其代表性产品有:内含1K/4K字节EEPROM的逻辑加密卡芯片Mifare Standard、384位/64字节EEPROM 的缩减型逻辑加密卡芯片Mifare Light和MifareUltraLight、4K字节EEPROM的CPU 卡Mifare DESFire,以及双界面卡芯片Mifare PLUS、Mifare PRO系列、Mifare Prox系列和Smart MX系列。
以下主要介绍在全球影响最大、应用最广泛的Mifare Standard中的Mifare 1 S50卡芯片。为了便于描述,以下称为Mfiare 1卡。
Mifare 1 卡主要特性:
符号国际标准ISO/IEC14443 Type A;
工作频率13.56MHz;
数据传输率106kbps;
高度安全性:数据流加密传输,3次相互认证的双向验证机制;
世界唯一的32位(4字节)卡号;
一次典型完整处理时间 < 0.1S;
卡内1K字节EEPROM划分为16 个扇区,每区4块,每块16字节,各个扇区可以独立采取多种形式的密钥保护,实现一卡多用和一卡通。
Mifare S50和Mifare S70又常被称为Mifare Standard、Mifare Classic、MF1,是遵守ISO14443A标准的卡片中应用最为广泛、影响力最大的的一员。而Mifare S70的容量是S50的4倍,S50的容量是1K字节,S70的容量为4K字节。读写器对卡片的操作时序和操作命令,二者完全一致。
Mifare S50和Mifare S70的每张卡片都有一个4字节的全球唯一序列号,卡上数据保存期为10年,可改写10万次,读无限次。一般的应用中,不用考虑卡片是否会被读坏写坏的问题,当然暴力硬损坏除外。
Mifare S50和Mifare S70的区别主要有两个方面。一是读写器对卡片发出请求命令,二者应答返回的卡类型(ATQA)字节不同。Mifare S50的卡类型(ATQA)是0004H,Mifare S70的卡类型(ATQA)是0002H。另一个区别就是二者的容量和内存结构不同。
Mifare S50把1K字节的容量分为16个扇区(Sector0-Sector15),每个扇区包括4个数据块(Block0-Block3,我们也将16个扇区的64个块按绝对地址编号为0~63),每个数据块包含16个字节(Byte0-Byte15),64*16=1024。
上图是某S50卡的读卡数据中的部分扇区,下面对各扇区数据进行分析:
(1)M1 卡分为 16 个扇区,包括1个公共区和15个数据区。每个扇区由 4 块(块 0、块 1、块 2、块 3)组成,将 16 个扇区的 64 个块按绝对地址编号为 0~63,存贮结构如下图所示:
(2) 第 0 扇区的块 0(即绝对地址 0 块),它用于存放厂商代码,已经固化,不可更改。
(3) 每个扇区的块 0、块 1、块 2 为数据块,可用于存贮数据。
数据块可作两种应用:
★ 用作一般的数据保存,可以进行读、 写操作。
★ 用作数据值,可以进行初始化值、加值、减值、读值操作。
(4)每个扇区的块 3 为控制块,包括了密码 A、存取控制、密码 B。具体结构如下:
(5)每个扇区的密码和存取控制都是独立的,可以根据实际需要设定各自的密码及存取
控制。存取控制为 4 个字节,共 32 位,扇区中的每个块(包括数据块和控制块)的存取条件是由密码和存取控制共同决定的,在存取控制中每个块都有相应的三个控制位,定义如下:
三个控制位以正和反两种形式存在于存取控制字节中,决定了该块的访问权限(如进行减值操作必须验证 KEY A,进行加值操作必须验证 KEY B,等等)。三个控制位在存取控制字节中的位置,以块 0 为例:
存取控制(4 字节,其中字节 9 为备用字节)结构如下所示:
(6)数据块(块 0、块 1、块 2)的存取控制如下:
控制位(X=0..2) |
访 问 条 件 (对数据块 0、 1、 2) |
|||||
C1X |
C2X |
C3X |
Read |
Write |
Increment |
Decrement, transfer, Restore |
0 |
0 |
0 |
KeyA|B |
KeyA|B |
KeyA|B |
KeyA|B |
0 |
1 |
0 |
KeyA|B |
Never |
Never |
Never |
1 |
0 |
0 |
KeyA|B |
KeyB |
Never |
Never |
1 |
1 |
0 |
KeyA|B |
KeyB |
KeyB |
KeyA|B |
0 |
0 |
1 |
KeyA|B |
Never |
Never |
KeyA|B |
0 |
1 |
1 |
KeyB |
KeyB |
Never |
Never |
1 |
0 |
1 |
KeyB |
Never |
Never |
Never |
1 |
1 |
1 |
Never |
Never |
Never |
Never |
(KeyA|B 表示密码 A 或密码 B, Never 表示任何条件下不能实现)
例如:当块 0 的存取控制位 C10 C20 C30=1 0 0 时,验证密码 A 或密码 B 正确后可读;验证密码 B 正确后可写;不能进行加值、减值操作。
(7)控制块块 3 的存取控制与数据块(块 0、 1、 2)不同,它的存取控制如下:
|
密码 A |
存取控制 |
密码 B |
|||||
C13 |
C23 |
C33 |
Read |
Write |
Read |
Write |
Read |
Write |
0 |
0 |
0 |
Never |
KeyA|B |
KeyA|B |
Never |
KeyA|B |
KeyA|B |
0 |
1 |
0 |
Never |
Never |
KeyA|B |
Never |
KeyA|B |
Never |
1 |
0 |
0 |
Never |
KeyB |
KeyA|B |
Never |
Never |
KeyB |
1 |
1 |
0 |
Never |
Never |
KeyA|B |
Never |
Never |
Never |
0 |
0 |
1 |
Never |
KeyA|B |
KeyA|B |
KeyA|B |
KeyA|B |
KeyA|B |
0 |
1 |
1 |
Never |
KeyB |
KeyA|B |
KeyB |
Never |
KeyB |
1 |
0 |
1 |
Never |
Never |
KeyA|B |
KeyB |
Never |
Never |
1 |
1 |
1 |
Never |
Never |
KeyA|B |
Never |
Never |
Never |
例如:当块 3 的存取控制位 C13 C23 C33=1 0 0 时,表示:
密码 A:不可读,验证 KEYA 或 KEYB 正确后,可写(更改)。存取控制:验证 KEYA 或 KEYB 正确后,可读、可写。
密码 B:验证 KEYA 或 KEYB 正确后,可读、可写。
卡片的电气部分只由一个天线和 ASIC 组成。
天线:卡片的天线是只有几组绕线的线圈,很适于封装到 IS0 卡片中。
ASIC:卡片的 ASIC 由一个高速(106KB 波特率)的 RF 接口,一个控制单元和一个8K 位 EEPROM 组成。
工作原理:读写器向 M1 卡发一组固定频率的电磁波,卡片内有一个 LC 串联谐振电路,其频率与读写器发射的频率相同,在电磁波的激励下, LC 谐振电路产生共振,从而使电容内有了电荷,在这个电容的另一端,接有一个单向导通的电子泵,将电容内的电荷送到另一个电容内储存,当所积累的电荷达到 2V 时,此电容可做为电源为其它电路提供工作电压,将卡内数据发射出去或接取读写器的数据。
复位应答(Answer to request)
M1 射频卡的通讯协议和通讯波特率是定义好的,当有卡片进入读写器的操作范围时,读写器以特定的协议与它通讯,从而确定该卡是否为 M1 射频卡,即验证卡片的卡型。
防冲突机制 (Anticollision Loop)
当有多张卡进入读写器操作范围时,防冲突机制会从其中选择一张进行操作,未选中的则处于空闲模式等待下一次选卡,该过程会返回被选卡的序列号。
选择卡片(Select Tag)
选择被选中的卡的序列号,并同时返回卡的容量代码。
三次互相确认(3 Pass Authentication)
选定要处理的卡片之后,读写器就确定要访问的扇区号,并对该扇区密码进行密码校验,在三次相互认证之后就可以通过加密流进行通讯。(在选择另一扇区时,则必须进行另一扇区密码校验。)
对数据块的操作
读 (Read):读一个块;写 (Write):写一个块;
加(Increment):对数值块进行加值;减(Decrement):对数值块进行减值;
存储(Restore):将块中的内容存到数据寄存器中;
传输(Transfer):将数据寄存器中的内容写入块中;中止(Halt):将卡置于暂停工作状态;
MFRC522 是高度集成的非接触式( 13.56MHz)读写卡芯片。此发送模块利用调制和解调的原理,并将它们完全集成到各种非接触式通信方法和协议中(13.56MHz)。
MFRC522 发送模块支持的工作模式:ISO 14443A / MIFARE®。
MFRC522 的内部发送器部分可驱动读写器天线与 ISO 14443A/MIFARE®卡和应答机的通信,无需其它的电路。接收器部分提供一个功能强大和高效的解调和译码电路,用来处理兼容 ISO 14443A/MIFARE®的卡和应答机的信号。数字电路部分处理完整的 ISO 14443A 帧和错误检测(奇偶&CRC)。 MFRC522 支持 MIFARE® Classic(如, MIFARE®标准)器件。 MFRC522 支持 MIFARE®更高速的非接触式通信,双向数据传输速率高达424kbit/s。
可实现各种不同主机接口的功能:SPI 接口; 串行 UART(类似 RS232,电压电平取决于提供的管脚电压);I2C 接口。
在进行NFC开发或学习中,可以借助一款APP工具,可以在带有NFC功能的安卓手机上。
NFC Writer是一款实用NFC读、写卡工具,它支持读取、写入、格式化未加密和部分加密MIFARE Classic系列NFC标签或卡片,如一般的门禁卡,电梯卡、停车卡等等。
主要功能:
1. 读取NFC卡片信息
2. 复制已有NFC卡片信息
3. 格式化NFC卡片
4. 管理读入的NFC卡片
5. 加密卡片可以添加已知密钥破解
6. 自带字典可暴力破解部分加密NFC卡片
注意:没弄清原理前,只有类型为CUID类型的卡片才能写入,写入和格式化操作请严格按照帮助说明来,姿势不对有可能对卡片造成不可逆损伤。
拿一个IC卡,放置手机NFC读卡区域,在该APP中即可查看到卡片信息,如:
下图为某S50卡的扇区数据,改卡未加密:
本文是STM32驱动RC522 RFID模块的基础知识篇,硬件SPI方式驱动RC522见:
基础篇010.2 STM32驱动RC522 RFID模块之二:STM32硬件SPI驱动RC522
如果您需用软件模拟SPI方式实现RC522驱动,请参考:
基础篇010.3 STM32驱动RC522 RFID模块之三:STM32软件模拟SPI驱动RC522