在成功进入ISO 14443-4后,DESFire卡片收到的第一个APDU类型,决定了卡片后续使用的APDU类型。如果收到的是符合7816-4的APDU,则卡片后续的命令都使用7816-4。
DESFire卡支持7816-4规定的如下INS:
A4(SELECT)
D0(Read Binary)
D6(Update Binary)
还支持经过封装的原生DESFire APDU。
CLA | INS | P1 | P2 | Lc | Data | Le |
90 | DESFire命令 | 00 | 00 | Data的长度 | DESFire命令的参数 | 00 |
Le设置为00,表示PCD接受PICC任意长度的应答。
其它被设置为00的字段,PICC将直接忽略。
DESFire对应答的封装如下:
Data | SW1 | SW2 | 备注 |
DESFire应答数据 | 91 | xx | SW2即为原生DESFire的状态字 |
现以GetVersion命令为例,显示7816-4:
PCD发送命令
CLA | INS | P1 | P2 | Le |
90 | 60 | 00 | 00 | 00 |
PICC应答(第一帧,硬件信息)
字节1 | 字节2 | 字节3 | 字节4 | 字节5 | 字节6 | 字节7 | SW1 SW2 |
供应商ID,04代表飞利浦/NXP | 类型 01 | 子类型 01 | 主版本号 | 次版本号 | 存储空间 | 通信协议(05表示ISO 14443-2和-3) | 91 AF |
PCD发送命令
CLA | INS | P1 | P2 | Le |
90 | AF | 00 | 00 | 00 |
PICC应答(第二帧,软件信息)
字节1 | 字节2 | 字节3 | 字节4 | 字节5 | 字节6 | 字节7 | SW1 SW2 |
供应商ID,04代表飞利浦/NXP | 类型 01 | 子类型 01 | 主版本号 | 次版本号 | 存储空间** | 通信协议(05表示ISO 14443-3和-4) | 91 AF |
**存储空间字节,使用高7位(n)表示卡片容量的基数为2^n字节。最低位为0时,表示卡片的容量正好为2^n字节;最低位为1时,表示卡片的容量介于2^n字节和2^(n+1)字节之间。4K的DESFire卡容量基数为12(十六进制C或二进制1100,因为2^12=4096),最低位为0,字节表达为0x18(0001100 0)。8K的DESFire卡容量基数为13(十六进制D或二进制1101),最低位为0,字节表达为0x1A(0001101 0)。
PCD发送命令
CLA | INS | P1 | P2 | Le |
90 | AF | 00 | 00 | 00 |
PICC应答(第三帧)
字节1-7 | 字节8-12 | 字节13 | 字节14 | SW1 SW2 |
唯一序列号(UID) | 产品批号 | 制造周 | 制造年 | 91 00 |