开发者学堂课程【嵌入式之 RFID 开发与应用2020版:RFID 协议】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/665/detail/11115
RFID 协议
一、RFID 协议
ISO/IEC 14443: 国际标准 ISO 14443 定义了两种信号接口、分别是 TypeA 和 TypeB 且互不兼容。
A 类卡用的较多
TypeA 类卡:
MIFARE Std 1k(MF1 IC S50): 国内常称 MF1 S50
MIFARE Std 4k (MF1 IC S70): 国内常称为 MF1 S70
广泛应用
TypeB 类卡:
我国第二代居民身份证:上海华虹、北京同方 THR9904、天津大塘和北京华大生产。
AT88RFO20: 美国爱特梅尔( ATMIL )生产,典型应用如广州地铁卡。
卡的状态
POWER OFF: 缺少载波能量
IDLE: 等待读写器发来的请求
READY: 收到读写器发来的请求
ACTIVE: 收到读写器发来的选择
HALT: 读写器发来的停止命令
卡片请求命令:
REQA: 请求未被 HALT 的 TypeA 卡-—Ox26
命令值是 26,将其下达到卡片中
WAKE-UP: 请求所有的 TypeA 卡——0x52
卡正常被使用需要经历几个状态,卡片本身对于无源卡来说,未被供电,是缺少载波能量的状态,一旦被供电,会进入供电状态,等待读写器的请求,如果读写器发来请求,会进入 READY 状态,是一个寻卡过程,寻卡目的得到卡号,一个阅读器有多个卡片进行处理,需要读取卡号,卡号获取后需要对某一张卡进行操作,需要激活卡片,要进行选卡操作,将卡片激活对其进行操作,不操作可以进入休眠状态。
此图为基本流程切换,首先卡片在没有阅读器施加能量的情况下,是断电的,一旦上电,会自动付费,付费完成后进入共享状态,进行寻卡,REQA Command 是寻卡命令,还要进行防冲突处理,明确寻找的是哪张卡片,通过防冲突将所有的卡号读取出来,卡号是唯一的,寻卡成功后进入 READY 状态,用读到的卡号选择卡片,如两个人同时刷卡,需要选择某一张卡操作,选中卡之对卡片进行各种操作,操作包括对密码进行验证,读写等操作或者同时进行扣款,都是在此状态下完成,如果不对卡片进行操作,通过HALT指令,是卡片进入停止状态,如果想进行操作,通过 WAKE-UP 唤醒。
以上是基本通讯流程,即提供协议所支持的流程切换
复位:阅读器通过特定协议验让卡片尖型,并切换状态为 IDLE
寻卡:获取复位时确定的卡的类型数据,并切换状态为 READY
防冲突:多卡操作,获取完整卡号 UID
选择:根据完整的 UID,选择相应的卡片,并切换状态为 ACTIVE
HALT:上停止该卡,百至 WAKE-LIP 话求
复位,进行寻卡,寻卡是防冲突并获取卡号 UID,完整的 UID,UID 是不完全一样,A 类是 4 个字,B 类是 8 个字,长度不一样,之后进行选卡,根据已获取的UID 选卡,如乘公交刷卡,多卡一起刷时,要防冲突,进行选择,之后进行停止或唤醒。
验证密码:指定加密类型,指定密码块号(0~63),指定密码,指定卡号
读块内容:验证密码通过后,可读取指定块(0~63)数据
写块内容:验证密码通过后,可写入指定块(0~63)数据
进入 ACTIVE 状态,激活后进行验证密码,读写数据,读写数据的前提是对密码进行指定,密码是十分重要的,起到保护的作用,有破解方法,但严格意义上是很难进行破解,密码是复杂的,读写内容都是在解析后进行的,修改密码也是在验证之后进行的。
充值扣款:
充值扣款前该块数据必须要先初始化成指定格式
每一块数据长度是 16 字节,但金额内容只有 4 字节,所以剩下 12 字节用于保存金额和块信息的校验值
充值扣款过程:验证密码通过后,可对指定块(0~63)数据进行充值扣款操作
CRC (初始化不同卡片时需要设置)
检验值为 6363( A 类卡)
校验值为 FFFF( B 类卡)
如果是单纯读写,找到卡片内部存储空间,写入或读取内容,如果要充值,必须要保证卡片内部数据拥有标准格式,有检验信息在内部,对 16 个字节空间进行初始化,只有符合充值条件、充值格式的模块才能充值成功或扣款成功,随便往内部写值是没有问题的,不用遵循初始化的指定格式,对不同的卡要做 CRC 的校验,保证数据的唯一性、正确性。