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比对,如果不同卡片不会对命令做出反应。这种机制实现了射频场中的卡片选择。