Felica是SONY公司开发的射频识别技术,该技术使用的载波频率与ISO14443A和ISO14443B一样,都是13.56MHz,所以有人把它称为ISO14443C,但SONY并没有正式接受这样的称谓。
Felica技术并不是一个完全公开的协议,尤其是该技术涉及安全认证和加密的部分,SONY的保密做的很好。本文介绍的也仅是其公开的部分信息。
Felica技术的通讯协议包括三层:物理层描述数据传输的物理和电气特性; 数据链路层描述数据传输和错误检测的格式;应用层描述命令的功能和规范.
Felica射频传输的物理特性如下表所示
Felica射频接口的物理特性
数据传输方法 | 半双工同步系统 |
载波频率 | 13.56MHz |
调制方法 | ASK |
位编码方法 | Manchester编码,MSB在前 |
数据传输速率 | 212/424 kbps |
Felica卡片和读写器之间的数据传输使用数据包。数据包的格式如下:
数据包各部分定义
名称 | 字节长度 | 定义 |
前导码 | 6 | 00 00 00 00 00 00 |
同步码 | 2 | B2 4D |
数据长度 | 1 | 包数据长度+1 |
包数据 | n | 命令包或返回包中的数据 |
CRC | 2 | 基于CRC-CCITT的校验, 初始值=0000H, 生成多项式:X16+X12+X5+1 |
Felica技术应用层的命令包由命令码和命令数据两部分组成,包括1字节的命令码和N字节的命令数据。命令码标识命令的类型,命令数据为本条命令执行所需的数据。读卡器命令发出后卡片回复一个响应包,响应包由1字节响应码和N字节响应数据两部分组成。响应码标识响应的类型,响应数据为本条命令执行后卡片返回的数据。
Felica命令列表如下:
命令 | 命令码 | 响应码 | 功能简述 |
轮询 | 00H | 01H | 探测识别卡片 |
请求服务 | 02H | 03H | 验证卡片上是否存在指定的域或服务 |
请求响应 | 04H | 05H | 验证射频场中是否有卡 |
不需认证读 | 06H | 07H | 从不需认证的服务中读取数据块 |
不需认证写 | 08H | 09H | 向不需认证的服务中写入数据块 |
请求系统码 | 0CH | 0DH | 读取卡片上已注册的系统码 |
认证1 | 10H | 11H | 读写器认证卡片 |
认证2 | 12H | 13H | 卡片认证读写器 |
读 | 14H | 15H | 从需认证的服务中读取数据块 |
写 | 16H | 17H | 向需认证的服务中写入数据块 |
Felica有两个重要的参数:出厂识别码(IDm)和出厂参数(PMm)。IDm和PMm可以使用轮询命令获得,IDm和PMm在出厂时固化在卡片中,卡片出厂后不能修改。
Felica使用出厂识别码(IDm)在通讯中识别一张卡片。Idm包含制造商代码和卡片识别码两部分。
出厂参数(PMm)包括2字节的芯片类型(用来识别产品)和6字节的最大响应时间参数(用来确定每一条命令的超时时间)。
Felica采用基于时隙的方法实现卡片的防冲突机制。为了识别一张卡片,读写器必须使用轮询命令轮询未知数量的卡片。卡片收到轮询命令后,以随机的方式选择一个时隙,并在读写器呼叫该时隙时予以应答,从而实现防冲突。
当读写器正确接收一个卡片对于轮询命令的应答,读写器可以获得卡片的Idm,在之后的通讯中,读写器通过在命令包中包含Idm,就可以从射频场的多张卡片中唯一的指定一张进行通讯。卡片收到命令后将把自己的Idm与命令包中的Idm比对,如果不同卡片不会对命令做出反应。这种机制实现了射频场中的卡片选择。