NFC PC/SC底层命令的文档位置、构成及读写方法咨询
NFC底层命令与SCardTransmit使用细节
一、底层NFC命令的官方文档来源
你通过SCardTransmit发送的是PC/SC标准的APDU命令,相关规范可参考:
- PC/SC工作组发布的《PC/SC Specification》,定义了读卡器与PC之间的通信框架及通用APDU命令格式
- ISO/IEC 14443系列标准,这是非接触式智能卡(含NFC标签)的国际通用通信标准
- 对应NFC标签的厂商规范,比如常用的MIFARE系列标签,需参考NXP官方发布的《MIFARE Classic Datasheet》等文档
二、0xFF 0xCA 0x00 0x00 0x00命令的字节含义
这是一条PC/SC标准的APDU命令,各字节作用如下:
0xFF:CLA(命令类别),表示该命令是发给读卡器的通用控制命令0xCA:INS(指令代码),对应「获取数据」操作,这里专门用来读取NFC标签的UID0x00 0x00:P1、P2(指令参数),设为0表示读取默认的UID数据0x00:Le(期望返回的数据长度),0表示让读卡器返回所有可用的UID数据
返回数据末尾的0x90 0x00是APDU标准状态码:
0x90:核心状态位,表示命令执行成功0x00:附加状态位,说明无额外错误信息
三、读取NFC标签内存块的APDU命令序列
以最常用的MIFARE Classic标签为例,读取内存块需要先完成密钥验证,再发送读取命令:
1. 密钥验证(以块0、默认密钥A为例)
发送以下APDU命令:
0xFF 0x86 0x00 0x00 0x06 0x01 0x00 0x00 0x60 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
各字节含义:
0xFF:CLA0x86:INS(执行事务)0x00 0x00:P1、P20x06:Lc(后续命令数据的长度,此处为6字节密钥)0x01:命令版本0x00 0x00:目标块地址(这里是块0)0x60:密钥类型(0x60为密钥A,0x61为密钥B)0x00:密钥索引0xFF 0xFF 0xFF 0xFF 0xFF 0xFF:验证用的密钥值
2. 读取内存块(块0)
验证成功后,发送读取命令:
0xFF 0xB0 0x00 0x00 0x10
各字节含义:
0xFF:CLA0xB0:INS(读取二进制数据)0x00 0x00:P1、P2(目标块地址)0x10:Le(期望返回16字节,MIFARE Classic每个块固定为16字节)
如果是其他类型的NFC标签(如NTAG系列),命令格式会有差异,需参考对应厂商的标签规格文档。
内容的提问来源于stack exchange,提问作者deltamind106
相关产品推荐
相关产品推荐

