软件协议文档
终端设备协议文档
功能&协议池(所有功能协议)
MQTT协议文档
HTTP协议文档
微光TLV协议文档
微光卡&码协议
功能模块&UI文档
人脸机
VF105
门禁标品MQTT协议文档(DejaOS版本)
Access control standard MQTT protocol document
VF系列HTTP协议接口文档V1.0.28(Vbar版本)
VF系列MQTT协议文档V1.37.0(Vbar版本)
VF系列-协议模式下通讯协议文档V1.0.4(Vbar版本)
VF203
门禁标品MQTT协议文档(DejaOS版本)
Access control standard MQTT protocol document
VF系列HTTP协议接口文档V1.0.28(Vbar版本)
VF系列-协议模式下通讯协议文档V1.0.4(Vbar版本)
VF系列-MQTT协议文档V1.37.2(Vbar版本)
VF 系列 HTTP 协议接口文档-V1.37.1(Vbar版本)
VF106
门禁标品MQTT协议文档(Android版本)
Access control standard MQTT protocol document
VF114
门禁标品MQTT协议文档(DejaOS版本)
Access control standard MQTT protocol document
VF系列HTTP协议接口文档V1.0.28(Vbar版本)
VF系列-协议模式下通讯协议文档V1.0.4(Vbar版本)
VF205
门禁标品MQTT协议文档(DejaOS版本)
VF系列HTTP协议接口文档V1.0.28(Vbar版本)
VF系列-协议模式下通讯协议文档V1.0.4(Vbar版本)
读头
EE200
读头标品TLV通讯协议
Read header standard TLV communication protocol
读头标品TLV通讯协议V3.10(Vbar版本)
TX200
读头标品TLV通讯协议
Read header standard TLV communication protocol
QT960
读头标品TLV通讯协议
Read header standard TLV communication protocol
QT660
读头标品TLV通讯协议
Read header standard TLV communication protocol
Q340
读头标品TLV通讯协议
Read header standard TLV communication protocol
M300
读头标品TLV通讯协议
Read header standard TLV communication protocol
读头标品TLV通讯协议V3.10(Vbar版本)
JL7000
读头标品TLV通讯协议
Read header standard TLV communication protocol
Q350
读头标品TLV通讯协议
Read header standard TLV communication protocol
MU86
读头标品TLV通讯协议
Read header standard TLV communication protocol
读头标品TLV通讯协议V3.10(Vbar版本)
MET
读头标品TLV通讯协议
Read header standard TLV communication protocol
扫码器TCP/HTT通讯协议V1.0(Vbar版本)
读头标品TLV通讯协议V3.10(Vbar版本)
M350
读头标品TLV通讯协议
Read header standard TLV communication protocol
读头标品TLV通讯协议V3.10(Vbar版本)
扫码器TCP/HTT通讯协议V1.0(Vbar版本)
DW200
读头标品TLV通讯协议(DejaOS版本)
Read header standard TLV communication protocol
读头标品HTTP&TCP协议文档(DejaOS版本)
读头标品HTTP&TCP协议文档(Vbar版本)
读头标品TLV通讯协议V3.10(Vbar版)
读头标品RS485一拖多协议V0.7(Vbar版本)
M340
读头标品TLV通讯协议
Read header standard TLV communication protocol
CR90
刷卡模块通信协议v3.0
CR90指令文档
微光指令:0x60 蓝牙设备控制
1.7/2.x扫码器配置字段说明文档
门禁
DW200
门禁标品MQTT协议文档(DejaOS版本)
Access control standard MQTT protocol document
门禁扫码器MQTT协议文档(Vbar版本)
MU86
门禁标品MQTT协议文档
Access control standard MQTT protocol document
门禁20180820 MQTT协议文档V1.0.2(Vbar版)
Q350
门禁标品MQTT协议文档
Access control standard MQTT protocol document
门禁20180820 MQTT协议文档V1.0.2(Vbar版)
MET
门禁标品MQTT协议文档
Access control standard MQTT protocol document
门禁20180820 MQTT协议文档V1.0.2(Vbar版)
M350
门禁标品MQTT协议文档
Access control standard MQTT protocol document
门禁20180820 MQTT协议V1.0.1(Vbar版本)
门禁20180820 MQTT协议文档V1.0.2(Vbar版本)
MP86
门禁20180820 MQTT协议文档V1.0.2(Vbar版本)
控制板
CC104
控制板标品MQTT协议文档
Control board standard MQTT protocol documentation
CC101
控制板标品MQTT协议文档
Control board standard MQTT protocol documentation
CC101标品20211101MQTT协议V3.6(Vbar版本)
平台服务协议文档
网关服务接口定义
门禁应用接口定义
工具文档
多弦产品API签名安全规则
海外锁
app和后台的mqtt协议
文档
-
+
首页
刷卡模块通信协议v3.0
# **1 设备数据传输格式** ## 1.1 请求数据格式 - 命令头+命令字+标识字+长度字+数据域+校验字 - 命令头:两字节,默认为0x55 0xAA - 命令字:一字节 - 长度字:两字节,指明本条命令从长度字后面开始到校验字的字节数(不含校验字)低位在前 - 数据域:此项可以为空 - 校验字:一字节,从命令头开始到数据域最后1字节的逐字异或值 ## 1.2 应答数据格式 - 命令头+ 命令字 + 标识字 + 长度字+ 数据域+ 校验字 - 命令头:两字节,默认为 0x55,0xAA - 命令字:一字节 - 标识字:一字节, 0x00 则代表成功应答,其它失败或错误 - 长度字:两字节,指明本条命令从长度字后面开始到校验字的字节数(不含效验字),低位在前 - 数据域:此项可以为空 - 校验字:一字节,从命令头到数据域最后一字节的逐字节异或值 ## 1.3 设备使用前的配置   设备支持内部认证,即上位机可以校验与之所通信的设备是否合法。设备支持的认证算法:AES(256/128, CBC,本文提到的AES都是采用CBC模式),SM4,SM2。设备支持两个用户存储空间,0号用户空间与我们自己的上位机绑定,1号用户空间供另一个同样需要认证的上位机使用。每个用户空间都包含自己的SN号,密钥,认证方式等信息。1号用户空间中的初始密钥,公开在此文档中,用于修改。特别指出:设备的蓝牙参数(如:名称,mac地址)属于1号用户空间。   支持多通道的数据传输的设备,向设备发起请求时,最好选择其中一种通道,不要同时发起,也不要交叉使用(一个完整任务内),以避免出现应答错误或包结构错乱。 ## 1.4 支持的设备 <table> <tr> <td>设备型号</td> <td>UART</td> <td>虚拟串口</td> <td>蓝牙通道</td> </tr> <tr> <td> CR90 </td> <td> ❌ </td> <td> ✔️ </td> <td> ✔️ </td> </tr> <tr> <td> RM04 </td> <td> ✔️ </td> <td> ✔️ </td> <td> ❌ </td> </tr> <tr> <td> RM05 </td> <td> ✔️ </td> <td> ✔️ </td> <td> ❌ </td> </tr> </table> # **2 设备支持的指令**   指令若未特别说明,则说有设备都支持 ## 2.1 指令 0x01 设备状态查询 <table> <tr> <td colspan="8">指令:0x01</td> </tr> <tr> <td colspan="8">说明:<br> 设备状态:<br> 根据设备类型而定 </tr> <tr> <td colspan="4">PC->Reader(Send)</td> <td colspan="4">Reader->PC(Receive)</td> </tr> <tr> <td>项目</td><td>字节</td><td colspan="2">说明</td> <td>项目</td><td>字节</td><td colspan="2">说明</td> </tr> <tr> <td>包头</td><td>2 Byte</td><td colspan="2">0x55 0xAA</td> <td>包头</td><td>2 Byte</td><td colspan="2">0x55 0xAA</td> </tr> <tr> <td>命令字</td><td>1 Byte</td><td colspan="2">0x01</td> <td>命令字</td><td>1 Byte</td><td colspan="2">0x01</td> </tr> <tr> <td>数据域长度</td><td>2 Byte</td><td colspan="2">0x00 0x00</td> <td>标识字</td><td>1 Byte</td><td colspan="2">0x00 : 成功<br>非 0 : 参见附录1</td> </tr> <tr><td rowspan="2">数据域</td><td rowspan="2">0 Byte</td><td rowspan="2" colspan="2">无此项</td> <td>数据域长度</td><td>2 Byte</td><td>N</td> </tr> <tr> <td>数据域</td><td>N Byte</td><td colspan="2"></td> </tr> <tr> <td>校验字</td><td>1 Byte</td><td colspan="2"></td> <td>校验字</td><td>1 Byte</td><td colspan="2"></td> </tr> </table> ## 2.2 指令0x07 获取随机数 <table> <tr> <td colspan="4">指令:0x07</td> <td colspan="4">向设备获取随机数</td> </tr><tr> <td colspan="9">说明:<br>  1. P1: 支持16, 32<br>   2. P1可以不传,当P1不存在时,则表示期望获取16 Byte</td> </tr><tr> <td colspan="5">PC->Reader(Send)</td> <td colspan="4">Reader->PC(Receive)</td> </tr><tr> <td>项目</td> <td>字节</td> <td colspan="3">说明</td> <td>项目</td><td>字节</td><td colspan="2">说明</td> </tr><tr> <td>包头</td> <td>2 Byte</td> <td colspan="3">0x55 0xAA</td> <td>包头</td> <td>2 Byte</td><td colspan="2">0x55 0xAA</td> </tr><tr> <td>命令字</td> <td>1 Byte</td> <td colspan="3">0x07</td> <td>命令字</td> <td>1 Byte</td> <td colspan="2">0x07</td> </tr><tr> <td>数据域长度</td> <td>2 Byte</td> <td colspan="3">0x01 0x00</td> <td>标识字</td> <td>1 Byte</td> <td colspan="2">0x00 : 成功<br>非 0 : 参见附录1</td> </tr><tr> <td rowspan="2">数据域</td> <td rowspan="2">1 Byte</td> <td rowspan="2"colspan="1"> P1</td> <td rowspan="2"colspan="1"> 1 Byte</td> <td rowspan="2"colspan="1"> 期望长度</td> <td>数据域长度</td><td>2 Byte</td><td>N</td> </tr><tr> <td>数据域</td><td>N Byte</td><td colspan></td> </tr><tr> <td>校验字</td><td>1 Byte</td><td colspan="3"></td><td>校验字</td><td>1 Byte</td><td colspan="2"></td></tr></table> <b>例:</b><br> PC-->Reader: 55 aa 07 01 00 20 d9 获取长度为16字节的随机数 Reader-->PC: 55 AA 07 00 <font color='red'>20 00 7F 8F 28 35 BB F8 6D 5A 01 C8 72 2D E5 93 D0 67 0E DC 0D D0 1A 02 3C CD 4C D8 66 BD 63 E1 C4 38 </font>C1 ## 2.3 指令 0x37 查询版本号 <table> <tr> <td colspan="6">指令:0x37</td> </tr> <tr> <td colspan="6">说明:55 aa 37 00 00 c8</td> </tr> <tr> <td colspan="3">PC->Reader(Send)</td> <td colspan="3">Reader->PC(Receive)</td> </tr> <tr> <td>项目</td><td>字节</td><td>说明</td> <td>项目</td><td>字节</td><td>说明</td> </tr> <tr> <td>包头</td><td>2 Byte</td><td>0x55 0xAA</td> <td>包头</td><td>1 Byte</td><td>0x55 0xAA</td> </tr> <tr> <td>命令字</td><td>1 Byte</td><td>0x37</td> <td>命令字</td><td>1 Byte</td><td>0x37</td> </tr> <tr> <td>数据域长度</td><td>2 Byte</td><td>0x00 0x00</td> <td>标识字</td><td>1 Byte</td><td>0x00 : 成功<br>非 0 : 参见附录1</td> </tr> <tr> <td rowspan="2">数据域</td><td rowspan="2">1 Byte</td> <td rowspan="2">无此项</td><td>数据域长度</td> <td>2 Byte</td><td>N</td> </tr> <tr> <td>数据域</td><td>N Byte</td> <td>数据N = 0时没有此项</td> </tr> <tr> <td>校验字</td><td>1 Byte</td><td></td> <td>校验字</td><td>1 Byte</td><td></td> </tr> </table> ## 2.4 指令0x0C 获取设备硬件ID <table> <thead> <tr> <th colspan="3">指令: 0x0C</th> <th colspan="4">获取设备SN号</th> </tr> </thead> <tbody> <tr> <td colspan="7">说明 <br> 一. 应答数据域的格式说明<br> 1. DevID: 设备型号标识字(低位在前),可以查看设备型号表,获取其设备名称。<br><table><tr><td>0A00</td> <td>CR90 (主控: 0x00 )</td> </tr></table><br>2. INFO: 其每项信息,基础描述格式为TLV。排列方式:平铺<br><table><tr><td>T (1 Byte)</td><td>L (1 Byte)</td><td>V (N Byte)</td></tr><tr><td>(模块)芯片ID: 0x01</td><td></td><td></td></tr></table> </td> </tr> <tr> <td colspan="4">PC->Reader(Send)</td> <td colspan="5">Reader->PC(Receive)</td> </tr> <tr> <td>项目</td> <td>字节</td> <td colspan="2">说明</td> <td>项目</td> <td>字节</td> <td colspan="3">说明</td> </tr> <tr> <td>包头</td> <td>2Byte</td> <td colspan="2">Default: 0x55 0xAA</td> <td>包头</td> <td>1Byte</td> <td colspan="3">Default: 0x55 0xAA</td> </tr> <tr> <td>命令字</td> <td>1Byte</td> <td colspan="2">0x0A</td> <td>命令字</td> <td>1Byte</td> <td colspan="3">0x0C</td> </tr> <tr> <td>数据域长度</td> <td>2Byte</td> <td colspan="2">0x00 0x00</td> <td>标识字</td> <td>1Byte</td> <td colspan="3">0x00 : 成功<br>非0 : 参见附录1</td> </tr> <tr> <td rowspan="3">数据域</td> <td rowspan="3">0Byte</td> <td rowspan="3" colspan="2">无此项</td> <td>数据域长度</td> <td>2Byte</td> <td colspan="3">N</td> </tr> <tr> <td rowspan="2">数据域</td> <td rowspan="2">N Byte</td> <td>DevID</td> <td>2 Byte</td> <td>设备型号标识字(低位在前)</td> </tr> <td>INFO</td> <td>X Byte</td> <td>此设备的硬件信息</td> <tr> </tr> <tr> <td>校验字</td> <td>1Byte</td> <td colspan="2"> </td> <td>校验字</td> <td>1Byte</td> <td colspan="3"></td> </tr> </tbody> </table> ## 2.5 指令0x90 发送iso14443-3指令 <table> <thead> <tr> <td colspan="5">指令: 0x90</td><td colspan="6"> 读卡相关指令 </td> </tr> </thead> <tbody> <tr> <td colspan="9">说明:<br>命令: 数据格式为TLV,支持的Tag详见本章子节<br> </td> </tr> <tr> <td colspan="6">PC->Reader(Send)</td> <td colspan="3">Reader->PC(Receive)</td> </tr> <tr> <td>项目</td><td>字节</td><td colspan="4">说明</td> <td>项目</td><td>字节</td><td>说明</td> </tr> <tr> <td>包头</td><td>2Byte</td><td colspan="4">0x55 0xAA</td> <td>包头</td><td>1Byte</td><td>0x55 0xAA</td> </tr> <tr> <td>命令字</td><td>1Byte</td><td colspan="4">0x90</td> <td>命令字</td><td>1Byte</td><td>0x90</td> </tr> <tr> <td>数据域长度</td><td>2 Byte</td><td colspan="4">N</td> <td>标识字</td><td>1Byte</td><td>0x00 : 成功<br>非0 : 参见附录1</td> </tr> <tr> <td rowspan="2">数据域</td><td rowspan="2">N Byte</td> <td colspan="2">命令标志位</td><td>1 Byte</td><td>0x01 -> 不是最后一条指令<br>0x02 -> 最后一条指令</td> <td>数据域长度</td><td>2 Byte</td><td>N</td> </tr> <tr> <td colspan="2">命令</td><td>X Byte</td> <td> </td> <td>数据域</td><td>N Byte</td><td>数据 N = 0时没有此项<br>若存在,则为TLV格式</td> </tr> <tr> <td>校验字</td><td>1 Byte</td><td colspan="4"> </td> <td>校验字</td><td>1 Byte</td><td></td> </tr> </tbody> </table> ### 2.5.1 Tag(0x46 ): Type A寻卡 <table> <thead> <tr> <th colspan="4">Tag: 0x46</th> <th colspan="5"> 寻卡A指令 </th> </tr> </thead> <tbody> <tr> <td colspan="9">说明:<br>子错误码:<br> 0x01: 未发现卡 </td> </tr> <tr> <td colspan="4">PC->Reader(Send)</td> <td colspan="3">Reader->PC(Receive)</td> </tr> <tr> <td>项目</td> <td>字节</td> <td colspan="2">说明</td> <td>项目</td> <td>字节</td> <td colspan="3">说明</td> </tr> <tr> <td>T</td> <td>1 Byte</td> <td colspan="2">0x46</td> <td>T</td> <td>1Byte</td> <td colspan="3">0x46</td> </tr> <tr> <td>L</td> <td>1 Byte</td> <td colspan="2">N</td> <td>L</td> <td>1Byte</td> <td colspan="3">N</td> </tr> <tr> <td rowspan="2">V</td> <td rowspan="2">1 Byte</td> <td rowspan="2" colspan="2">0x26 : REQA 命令<br>0x52: WUPA 命令<br> </td> <td rowspan="2">V</td> <td rowspan="2">N Byte</td> <td>ResultFlg</td> <td>1 Byte</td> <td> 0:成功<br>oth: 参见附录2</td> </tr> <tr> <td>结果</td> <td>X Byte</td> <td>当ResultFlg=0:<br> ATQA </td> </tr> </tbody> </table> <b>例:</b><br> PC-->Reader :55 aa 90 04 00 01 46 01 26 0b<br> Reader-->PC :55 aa 90 00 04 00 46 02 <font color='red'>08 00</font> 27<font color='red'> ATQA</font> ### 2.5.2 Tag(0x47 ): Type A防冲突及选卡 <table> <thead> <tr> <th colspan="4">Tag: 0x47</th> <th colspan="5"> </th> </tr> </thead> <tbody> <tr> <td colspan="9">说明:<br> <br>子错误码:<br> 0x01: 未发现卡</td> </tr> <tr> <td colspan="4">PC->Reader(Send)</td> <td colspan="3">Reader->PC(Receive)</td> </tr> <tr> <td>项目</td> <td>字节</td> <td colspan="2">说明</td> <td>项目</td> <td>字节</td> <td colspan="3">说明</td> </tr> <tr> <td>T</td> <td>1 Byte</td> <td colspan="2">0x47</td> <td>T</td> <td>1Byte</td> <td colspan="3">0x47</td> </tr> <tr> <td>L</td> <td>1 Byte</td> <td colspan="2">0</td> <td>L</td> <td>1Byte</td> <td colspan="3">N</td> </tr> <tr> <td rowspan="2">V</td> <td rowspan="2">1 Byte</td> <td rowspan="2" colspan="2">L为0无此项</td> <td rowspan="2">V</td> <td rowspan="2">N Byte</td> <td>ResultFlg</td> <td>1 Byte</td> <td>0:成功<br>oth: 参见附录2</td> </tr> <tr> <td>结果</td> <td>X Byte</td> <td>当ResultFlg=0:<br> UID + SAK(1Byte) + RNDNUM(16 Byte)</td> </tr> </tbody> </table> <b>例:</b><br> PC-->Reader :55 aa 90 03 00 01 47 00 2a<br> Reader-->PC :55 aa 90 00 1b00 47 19 00 <font color='red'>0443c282a46880 </font><font color='green'>00</font> <font color='blue'>28891b6bab8980ce879aedaa4eb239ef</font> ac ( <font color='red'>UID</font> <font color='green'>SAK</font> <font color='blue'>RND</font>) ### 2.5.3 Tag(0x2A):Type A发送RATS <table> <thead> <tr> <th colspan="4">Tag: 0x2A</th> <th colspan="5"> </th> </tr> </thead> <tbody> <tr> <td colspan="9">说明:<br></td> </tr> <tr> <td colspan="4">PC->Reader(Send)</td> <td colspan="3">Reader->PC(Receive)</td> </tr> <tr> <td>项目</td> <td>字节</td><td colspan="2">说明</td> <td>项目</td> <td>字节</td><td colspan="3">说明</td> </tr> <tr> <td>T</td><td>1 Byte</td><td colspan="2">0x2A</td> <td>T</td><td>1Byte</td><td colspan="3">0x46</td> </tr> <tr> <td>L</td><td>1 Byte</td><td colspan="2">0</td> <td>L</td><td>1Byte</td><td colspan="3">N</td> </tr> <tr> <td rowspan="2">V</td><td rowspan="2">1 Byte</td><td rowspan="2" colspan="2">L为0无此项</td> <td rowspan="2">V</td><td rowspan="2">N Byte</td><td>结果标志</td><td>1 Byte</td><td> 0:成功<br>oth: 参见附录2</td> </tr> <tr> <td>结果</td><td>X Byte</td><td></td> </tr> </tbody> </table> <b>例:</b><br> PC-->Reader :55 aa 90 03 00 01 2a 00 47<br> Reader-->PC :55 aa 90 00 07 00 2a 05<font color='red'> 05 78 80 a0 02 </font> 18 ( <font color='red'> ATS</font>) ### 2.5.4 Tag(0x30) TypeB 寻卡 <table> <thead> <tr> <th colspan="4">Tag: 0x30</th> <th colspan="5"> </th> </tr> </thead> <tbody> <tr> <td colspan="9">说明:<br>子错误码:<br> 0x01: 未发现卡</td> </tr> <tr> <td colspan="4">PC->Reader(Send)</td> <td colspan="3">Reader->PC(Receive)</td> </tr> <tr> <td>项目</td> <td>字节</td> <td colspan="2">说明</td> <td>项目</td> <td>字节</td> <td colspan="3">说明</td> </tr> <tr> <td>T</td> <td>1 Byte</td> <td colspan="2">0x30</td> <td>T</td> <td>1Byte</td> <td colspan="3">0x30</td> </tr> <tr> <td>L</td> <td>1 Byte</td> <td colspan="2">0x03</td> <td>L</td> <td>1Byte</td> <td colspan="3">N</td> </tr> <tr> <td rowspan="2">V</td> <td rowspan="2">1 Byte</td> <td rowspan="2" colspan="2">L为0无此项</td> <td rowspan="2">V</td> <td rowspan="2">N Byte</td> <td>结果标志</td> <td>1 Byte</td> <td> 0:成功<br>oth: 参见附录2</td> </tr> <tr> <td>结果</td> <td>X Byte</td> <td></td> </tr> </tbody> </table> <b>例</b><br> PC-->Reader :55 aa 90 06 00 01 30 03 08 00 00 53<br> 55aa90 00 0f00 30 0d 00 be Reader-->PC :55 aa 90 00 0f00 30 0d 00 <font color='red'>5000000000d1030081007090( <font color='red'> ATQB </font>)</font> c1 (00000000为PUPI ) ### 2.5.5 Tag(0x31) TypeB 防冲突及选卡 <table> <thead> <tr> <th colspan="4">Tag: 0x31</th> <th colspan="5"> </th> </tr> </thead> <tbody> <tr> <td colspan="9">说明:<br>结果标志为本tag的子错误码:<br> </td> </tr> <tr> <td colspan="4">PC->Reader(Send)</td> <td colspan="3">Reader->PC(Receive)</td> </tr> <tr> <td>项目</td> <td>字节</td> <td colspan="2">说明</td> <td>项目</td> <td>字节</td> <td colspan="3">说明</td> </tr> <tr> <td>T</td> <td>1 Byte</td> <td colspan="2">0x31</td> <td>T</td> <td>1Byte</td> <td colspan="3">0x31</td> </tr> <tr> <td>L</td> <td>1 Byte</td> <td colspan="2">0</td> <td>L</td> <td>1Byte</td> <td colspan="3">N</td> </tr> <tr> <td rowspan="2">V</td> <td rowspan="2">1 Byte</td> <td rowspan="2" colspan="2">L为0无此项</td> <td rowspan="2">V</td> <td rowspan="2">N Byte</td> <td>结果标志</td> <td>1 Byte</td> <td> 0:成功<br>oth: 参见附录2</td> </tr> <tr> <td>结果</td> <td>X Byte</td> <td></td> </tr> </tbody> </table> <b>例:</b><br> PC-->Reader :55 aa 90 03 00 01 31 00 5c<br> 55aa90 00 0400 31 02 00 00 58 Reader-->PC :55 aa 90 00 04 00 31 02 00 <font color='red'> 00 </font>58 ( <font color='red'> (ATTRIB命令响应)</font>) ### 2.5.6 Tag(0x32):Type B 获取身份证卡号 <table> <thead> <tr> <th colspan="4">Tag: 0x32</th> <th colspan="5"> </th> </tr> </thead> <tbody> <tr> <td colspan="9">说明:<br></td> </tr> <tr> <td colspan="4">PC->Reader(Send)</td> <td colspan="3">Reader->PC(Receive)</td> </tr> <tr> <td>项目</td> <td>字节</td> <td colspan="2">说明</td> <td>项目</td> <td>字节</td> <td colspan="3">说明</td> </tr> <tr> <td>T</td> <td>1 Byte</td> <td colspan="2">0x32</td> <td>T</td> <td>1Byte</td> <td colspan="3">0x32</td> </tr> <tr> <td>L</td> <td>1 Byte</td> <td colspan="2">0</td> <td>L</td> <td>1Byte</td> <td colspan="3">N</td> </tr> <tr> <td rowspan="2">V</td> <td rowspan="2">1 Byte</td> <td rowspan="2" colspan="2">L为0无此项</td> <td rowspan="2">V</td><td rowspan="2">N Byte</td> <td>结果标志</td><td> 1 Byte</td><td> 0:成功<br>oth: 参见附录2</td> </tr> <tr> <td>结果</td><td> X Byte </td><td></td> </tr> </tbody> </table> <b>例:</b><br> PC-->Reader :55 aa 90 03 00 01 32 00 5f<br> Reader-->PC :55 aa 90 00 0d00 32 0b 00 <font color='red'>1298600293a5042b ( <font color='red'> uid </font>)</font> 9000( <font color='green'> SW1SW2 </font>) 3a ## 2.6 Mifare卡操作 <br> ### 2.6.1 指令0x51读取M1卡一块数据 <table> <thead> <tr> <th colspan="4">指令: 0x51</th><th colspan="5">读取M1卡某块</th> </tr> </thead> <tbody> <tr> <td colspan="9">说明: </td> </tr> <tr> <td colspan="6">PC->Reader(Send)</td> <td colspan="3">Reader->PC(Receive)</td> </tr> <tr> <td>项目</td><td>字节</td><td colspan="4">说明</td><td>项目</td><td>字节</td><td>说明</td> </tr> <tr> <td>包头</td><td>2Byte</td><td colspan="4">Default: 0x55 0xAA</td> <td>包头</td><td>1Byte</td><td>Default: 0x55 0xAA</td></tr> <tr> <td>命令字</td><td>1Byte</td><td colspan="4">0x51</td> <td>命令字</td><td>1Byte</td><td>0x51</td> </tr> <tr> <td>数据域长度</td><td>2 Byte</td><td colspan="4">N</td> <td>标识字</td><td>1Byte</td><td>0x00 : 成功<br>非0 : 参见附录1</td> </tr> <tr> <td rowspan="4">数据域</td><td rowspan="4">8 Byte</td><td>密钥类型</td><td colspan="2">1Byte</td><td>0x60 -> KEY A<br>0x61 -> KEY B</td> <td rowspan="2">数据域长度</td><td rowspan="2">2 Byte</td><td rowspan="2">N</td> </tr> <tr> <td>块号</td><td colspan="2">1 Byte</td><td>0 ~ 0xFF</td></tr><tr><td>密钥</td><td colspan="2">6 Byte</td><td> </td> <td rowspan="2">数据域</td><td rowspan="2">N Byte</td><td rowspan="2">当标识字为非0,此时V表示子错误码<br>当标识字为0, 此时V表示读取到的内容</td> </tr> <tr> <td>命令标志位</td><td colspan="2">1 Byte</td><td>0x01 -> 不是最后一条指令<br>0x02 -> 最后一条指令</td> </tr> <tr> <td>校验字</td><td>1 Byte</td><td colspan="4"> </td> <td>校验字</td><td>1Byte</td><td></td> </tr> </tbody> </table> <b>例:</b><br> PC-->Reader :55 aa 51 09 00 60 01 ff ff ff ff ff ff 01 c7<br> Reader-->PC :55 aa 51 00 10 00 <font color='red'>00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00</font> be ( <font color='red'> 读块内容</font>) ### 2.6.2 指令0x52写M1卡一块数据 <table> <thead> <tr> <th colspan="3">指令: 0x52</th><th colspan="6">向M1卡某块写数据</th> </tr> </thead> <tbody> <tr> <td colspan="9">说明: </td></tr><tr><td colspan="6">PC->Reader(Send)</td> <td colspan="3">Reader->PC(Receive)</td> </tr> <tr> <td>项目</td><td>字节</td><td colspan="4">说明</td> <td>项目</td><td>字节</td><td>说明</td> </tr> <tr> <td>包头</td><td>2 Byte</td><td colspan="4">Default: 0x55 0xAA</td> <td>包头</td><td>1Byte</td><td>Default: 0x55 0xAA</td> </tr> <tr> <td>命令字</td><td>1 Byte</td><td colspan="4">0x52</td> <td>命令字</td><td>1Byte</td><td>0x52</td> </tr> <tr> <td>数据域长度</td><td>2 Byte</td><td colspan="4">N</td> <td>标识字</td><td>1Byte</td><td>0x00 : 成功<br>非0 : 参见附录1</td> </tr> <tr> <td rowspan="5">数据域</td><td rowspan="5">N Byte</td> <td colspan="2">密钥类型</td><td>1 Byte</td><td>0x60 -> KEY A<br>0x61 -> KEY B</td> <td rowspan="2">数据域长度</td><td rowspan="2">2Byte</td><td rowspan="2"> N</td> </tr> <tr> <td colspan="2">块号</td><td>1 Byte</td><td>0 ~ 0xFF</td> </tr> <tr> <td colspan="2">密钥</td><td>6 Byte</td><td> </td> <td rowspan="3">数据域</td><td rowspan="3">NByte</td><td rowspan="3">当标识字为非0,此时V表示子错误码<br> 当标识字为0,无此项</td> </tr> <tr> <td colspan="2">数据</td><td>16 Byte</td><td></td> </tr> <tr> <td colspan="2">命令标志位</td><td>1 Byte</td><td>0x01 -> 不是最后一条指令<br>0x02 -> 最后一条指令</td> </tr> <tr> <td>校验字</td><td>1 Byte</td><td colspan="4"> </td> <td>校验字</td><td>1Byte</td><td></td> </tr> </tbody> </table> <b>例:</b> 用key A(0x60)密钥做认证,向1扇区第2块(即绝对块号为0x01)写数据。 认证密钥为FF FF FF FF FF FF PC-->Reader : 55 aa 52 19 00 60 01 ff ff ff ff ff ff 11220000000000000000000000001122 01 d4 Reader-->PC :55 aa 52 00 00 00 ad 写数据成功 Reader-->PC :55 aa 52 90 01 00 01 3d 失败或无卡 ### 2.6.3 指令0xA0读M1卡扇区内多个块 <table> <thead> <tr> <th colspan="3">指令: 0xA0</th><th colspan="6">读M1卡扇区内多个块</th> </tr> </thead> <tbody> <tr> <td colspan="9">说明: 可读S50/S70卡,扇区号、偏移、块数的取值根据卡片类型而定<br>偏移--以选取的扇区0块为起始地址计算待读块的基地址。<br>块数--以选定的基地址块为读卡开始块,连续读取选中的块数。<br> <br>命令解析:<br>读取一张卡的2扇区1块和2块数据<br>55 AA A0 0B 00 00 60 02 01 02 FF FF FF FF FF FF 35<br> <br><font color='red'>注:读取的块数不可为0,若为0视为无效指令;一条指令中不可跨扇区读取块数据</font></td> </tr> <tr> <td colspan="6">PC->Reader(Send)</td> <td colspan="3">Reader->PC(Receive)</td> </tr> <tr> <td>项目</td><td>字节</td><td colspan="4">说明</td> <td>项目</td><td>字节</td><td>说明</td> </tr> <tr> <td>包头</td><td>2Byte</td><td colspan="4">Default: 0x55 0xAA</td> <td>包头</td><td>1Byte</td><td>Default: 0x55 0xAA</td> </tr> <tr> <td>命令字</td><td>1Byte</td><td colspan="4">0xA0</td> <td>命令字</td><td>1Byte</td><td>0x51</td> </tr> <tr> <td>数据域长度</td><td>2Byte</td><td colspan="4">N</td> <td>标识字</td><td>1Byte</td><td>0x00 : 成功<br>非0 : 参见附录1</td> </tr> <tr> <td rowspan="6">数据域</td><td rowspan="6">11 Byte</td> <td colspan="2">命令标志位</td><td>1 Byte</td><td>0x01 -> 不是最后一条指令<br>0x02 -> 最后一条指令</td><td rowspan="3">数据域长度</td><td rowspan="3">2Byte</td><td rowspan="3">N</td> </tr> <tr> <td colspan="2">密钥类型</td><td>1 Byte</td><td>0x60 -> KEY A<br>0x61 -> KEY B</td> </tr> <tr> <td colspan="2">扇区号</td><td>1 Byte</td><td>S50 -> 0x00~0x0F<br>S70 -> 0x00~0x27</td> </tr> <tr> <td colspan="2">偏移</td><td>1 Byte</td><td>S50 -> 0x00~0x03<br>S70 -> 0x00~0x03或<br> 0x00~0x0F</td><td rowspan="3">数据域</td><td rowspan="3">NByte</td><td rowspan="3">当标识字为非0,此时V表示子错误码<br>当标识字为0, 此时V表示读取到的内容</td> </tr> <tr> <td colspan="2">块数</td><td>1Byte</td><td>S50 -> 0x01~0x04<br>S70 -> 0x01~0x04或 <br>0x01~0x10</td></tr><tr><td colspan="2">密钥</td><td>6 Byte</td><td></td> </tr> <tr> <td>校验字</td><td>1Byte</td><td colspan="4"> </td> <td>校验字</td><td>1Byte</td><td></td> </tr> </tbody> </table> <b>例:</b><br> 用A(0x60)密钥做认证,读取1扇区0块、1块、2块、3块数据,即以0块为基地址连续读4块。认证密钥为FF FF FF FF FF FF<br> <strong>PC-->Reader:55 aa a0 0b 00 02 60 01 00 04 ffffffffffff 33 <br> <strong>Reader-->PC:55aa a0 00 40 00 <font color='green'>00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0f f0 78 09 ff ff ff ff ff ff </font>0e ### 2.6.4 指令0xA1写M1卡扇区内多个块 <table> <thead> <tr> <th colspan="5">指令: 0xA1</th> <th colspan="3">写多块数据</th> </tr> </thead> <tbody> <tr> <td colspan="8">说明: 可读S50/S70卡,扇区号、偏移、块数的取值根据卡片类型而定<br>偏移--以选取的扇区0块为起始地址计算待写块的基地址。<br>块数--以选定的基地址块为写卡开始块,连续写数据到选中的块数。<br> <font color='red'>注:待写入的块数不可为0,若为0视为无效指令;一条指令中不可跨扇区写入数据</font><br></td> </tr> <tr> <td colspan="5">PC->Reader(Send)</td> <td colspan="3">Reader->PC(Receive)</td> </tr> <tr> <td>项目</td><td>字节</td><td colspan="3">说明</td> <td>项目</td><td>字节</td><td>说明</td> </tr> <tr> <td>包头</td><td>2 Byte</td><td colspan="3">Default: 0x55 0xAA</td> <td>包头</td><td>1 Byte</td><td>Default: 0x55 0xAA</td> </tr> <tr> <td>命令字</td><td>1 Byte</td><td colspan="3">0xA1</td> <td>命令字</td><td>1 Byte</td><td>0xA1</td> </tr> <tr> <td>数据域长度</td><td>2 Byte</td><td colspan="3">N</td> <td>标识字</td><td>1 Byte</td><td>0x00 : 成功; 非0 : 失败</td> </tr> <tr> <td rowspan="7">数据域</td><td rowspan="7">N Byte</td> <td>命令标志位</td><td>1 Byte</td><td>0x01 -> 不是最后一条指令<br>0x02 -> 最后一条指令</td> <td rowspan="3">数据域长度</td><td rowspan="3">2 Byte</td> <td rowspan="3"> N</td> </tr> <tr> <td>密钥类型</td> <td >1 Byte</td> <td>0x60 -> KEY A<br>0x61 -> KEY B</td> </tr> <tr> <td>扇区号</td> <td>1 Byte</td> <td>S50 -> 0x00~0x0F<br>S70 -> 0x00~0x27</td> </tr> <tr> <td>偏移</td> <td>1 Byte</td> <td>S50 -> 0x00~0x03<br>S70 -> 0x00~0x03或<br> 0x00~0x0F</td> <td rowspan="4">数据域</td> <td rowspan="4">N Byte</td> <td rowspan="4"></td> </tr> <tr> <td>块数</td> <td>1Byte</td> <td>S50 -> 0x01~0x04<br>S70 -> 0x01~0x04或 <br>0x01~0x10</td> </tr> <tr> <td>密钥</td> <td>6 Byte</td><td></td> </tr> <tr> <td>数据</td> <td>N Byte</td> <td>N = 16 * 块数</td> </tr> <tr> <td>校验字</td> <td>1 Byte</td> <td colspan="3"> </td> <td>校验字</td> <td>1 Byte</td> <td colspan="3"></td> </tr> </tbody> </table> 例:<br> ### 2.6.5 指令0x90 : Tag(0xA0 ): M1卡读扇区(指令0xA0的加密通信版) <table> <thead> <tr> <th colspan="4">指令: 0xA1</th> <th colspan="5">写多块数据</th> </tr> </thead> <tbody> <td colspan="9">说明: <br> P1: 0使用微光用户, 1:使用其他用户。注:每个用户都用自己的会话根密钥。<br>V的明文格式:<br> <table> <tr> <td>密钥类型 </td> <td>1 Byte</td> <td>0x60 -> KEY_A; 0x61 -> KEY_B;</td></tr> <tr> <td>扇区号</td><td>1 Byte</td><td>S50 -> 0x00~0x0F; S70 -> 0x00~0x27;</td></tr> <tr> <td>偏移</td><td> 1 Byte</td><td> S50 -> 0x00~0x03; S70 -> 0x00~0x03或0x00~0x0F</td></tr> <tr> <td>块数 </td><td>1Byte</td><td> S50 -> 0x01~0x04; S70 -> 0x01~0x04或 0x01~0x10;</td></tr> <tr> <td>密钥</td><td> 6 Byte</td><td> 此扇区的密钥</td></tr> <tr> <td>RFU </td><td>4 Byte</td><td> 值为0</td></tr> <tr> <td>CRC16</td><td> 2 Byte</td><td> 从’密钥类型’到 ‘RFU’的CRC16 (CRC 码采用的生成多项式为 X 16+X15+X2+X0)。低位在前</td></tr> </table> <font color='red'>注:待写入的块数不可为0,若为0视为无效指令;一条指令中不可跨扇区写入数据</font><br>V密文:<br>使用会话密钥进行加密,生成密文。 应答数据中EncData: EncData的明文格式: 读取的扇区数据 注:每次加密/解密时,IV都为0<tr> <td colspan="5">PC->Reader(Send)</td> <td colspan="5">Reader->PC(Receive)</td> </tr> <tr> <td>项目</td> <td>字节</td> <td colspan="3">说明</td> <td>项目</td> <td>字节</td> <td colspan="3">说明</td> </tr> <tr> <td>T</td> <td>1 Byte</td> <td colspan="3">0xA0</td> <td>T</td> <td>1 Byte</td> <td colspan="3">0xA0</td> </tr> <tr> <td>L</td> <td>1 Byte</td> <td colspan="3">N</td> <td>L</td> <td>1 Byte</td> <td colspan="3">N</td> </tr> <tr> <td rowspan="3">V</td> <td rowspan="3">N Byte</td> <td>P1</td> <td>1 Byte</td><td>密钥空间</td> <td rowspan="3">V</td> <td rowspan="3">N Byte</td> <td >结果标志</td><td>1 Byte</td> <td>0: 成功<br>oth: 参见附录2</td> </tr> <tr> <td rowspan="2">V</td> <td rowspan="2">N Byte</td> <td rowspan="2">密文</td> <td>EncData</td><td>N Byte</td><td></td></tr> <tr> <td>CRC16</td> <td>2 Byte</td><td>对EncData的明文计算所得</td> </tr> <tr> <td>校验字</td> <td>1 Byte</td> <td colspan="3"> </td> <td>校验字</td> <td>1 Byte</td> <td colspan="3"></td> </tr> </tbody> </table> 例:<br> ### 2.6.6 指令0x90 : Tag(0xA1 ): M1卡写扇区(指令0xA1的加密通信版) <table> <thead> <tr> <th colspan="4">Tag: 0xA1</th> <th colspan="5">写多块数据</th> </tr> </thead> <tbody> <tr> <td colspan="9">说明: <br>1. P1: 0使用微光用户, 1:使用其他用户。注:每个用户都用自己的会话根密钥。<br>2. 可读S50/S70卡,扇区号、偏移、块数的取值根据卡片类型而定<br>3. 偏移--以选取的扇区0块为起始地址计算待写块的基地址。<br>4. 块数--以选定的基地址块为写卡开始块,连续写数据到选中的块数。<br> <br>V的明文格式:<br> <table> <thead> <tr> <td>密钥类型 </td> <td>1 Byte</td> <td>0x60 -> KEY_A; 0x61 -> KEY_B;</td> </tr> <tr> <td>扇区号</td><td>1 Byte</td><td>S50 -> 0x00~0x0F; S70 -> 0x00~0x27;</td></tr> <tr> <td>偏移</td><td> 1 Byte</td><td> S50 -> 0x00~0x03; S70 -> 0x00~0x03或0x00~0x0F</td></tr> <tr> <td>块数 </td><td>1Byte</td><td> S50 -> 0x01~0x04; S70 -> 0x01~0x04或 0x01~0x10;</td></tr> <tr> <td>密钥</td><td> 6 Byte</td><td> 此扇区的密钥</td></tr> <tr> <tr> <td>块数据</td><td> Y Byte</td><td> Y = 16 * 块数<td></tr> <tr> <td>RFU </td><td>4 Byte</td><td> 值为0</td></tr> <tr> <td>CRC16</td><td> 2 Byte</td><td> 从’密钥类型’到 ‘RFU’的CRC16 (CRC 码采用的生成多项式为 X 16+X15+X2+X0)。低位在前</td> </tr> </thead> </table> <font color='red'>注:1. 待写入的块数不可为0,若为0视为无效指令;一条指令中不可跨扇区写入数据<br>2. 使用会话密钥进行加密,生成密文。<br>3. 每次加密/解密时,IV都为0 </font></td> </tr> <tr> <td colspan="5">PC->Reader(Send)</td> <td colspan="5">Reader->PC(Receive)</td> </tr> <tr> <td>项目</td> <td>字节</td> <td colspan="3">说明</td> <td>项目</td> <td>字节</td> <td colspan="3">说明</td> </tr> <tr> <td>T</td> <td>1 Byte</td> <td colspan="3">0xA1</td> <td>T</td> <td>1 Byte</td> <td colspan="3">0xA1</td> </tr> <tr> <td>L</td> <td>1 Byte</td> <td colspan="3"></td> <td>L</td> <td>1 Byte</td> <td colspan="3" >1 </td> </tr> <tr> <td rowspan="2">V</td> <td rowspan="2">N Byte</td> <td >P</td><td >1 Byte</td><td ></td> <td rowspan="2">V</td> <td rowspan="2">1 Byte</td><td rowspan="2">结果标志</td><td rowspan="2">1 Byte</td><td rowspan="2">0: 成功<br>oth: 参见附录2</td> </tr> <tr> <td>V</td> <td>X Byte</td> <td>密文</td> </tr> </tbody> </table> 例:<br> ### 2.6.7 指令0x92 MF0卡操作 <table> <thead> <tr> <th colspan="3">指令: 0x92</th> <th colspan="6"> </th> </tr> </thead> <tbody> <tr> <td colspan="9">说明: <br>本指令支持的卡片: I14443A,ATQA: 4400h, SAK: 00h<br>V: Tag1 + (Tag2 + (Tag3 + .....))。每个Tag都是TLV格式,设备会按顺序执行,应答tag会按顺序排列。<br>支持的Tag:详见此目录的子节.<br> </td> </tr> <tr> <td colspan="6">PC->Reader(Send)</td> <td colspan="3">Reader->PC(Receive)</td> </tr> <tr> <td>项目</td> <td>字节</td> <td colspan="4">说明</td> <td>项目</td> <td>字节</td> <td>说明</td> </tr> <tr> <td>包头</td> <td>2 Byte</td> <td colspan="4">Default: 0x55 0xAA</td> <td>包头</td> <td>1Byte</td> <td>Default: 0x55 0xAA</td> </tr> <tr> <td>命令字</td> <td>1 Byte</td> <td colspan="4">0x92</td> <td>命令字</td> <td>1Byte</td> <td>0x92</td> </tr> <tr> <td>数据域长度</td> <td>2 Byte</td> <td colspan="4">N</td> <td>标识字</td> <td>1Byte</td> <td>0x00 : 成功<br>非0 : 参见附录1</td> </tr> <tr> <td rowspan="2">数据域</td> <td rowspan="2">N Byte</td> <td colspan="2">命令标志位</td> <td>1 Byte</td> <td>0x01: 不是最后一条指令<br>0x02:最后一条指令</td> <td>数据域长度</td> <td>2Byte</td> <td> N</td> </tr> <tr> <td colspan="2">V</td> <td> X Byte</td> <td>命令tag</td> <td>数据域</td> <td>NByte</td> <td>数据 N = 0时没有此项</td> </tr> <tr> <td>校验字</td> <td>1 Byte</td> <td colspan="4"> </td> <td>校验字</td> <td>1Byte</td> <td></td> </tr> </tbody> </table> #### 2.6.7.1 Tag(0x60): GET_VERSION <table> <thead> <tr> <th colspan="3">Tag: 0x60</th> <th colspan="6"> </th> </tr> </thead> <tbody> <tr> <td colspan="9">说明:<br>此命令支持的卡: NTAG213/215/216, MIFARE Ultralight EV1, <br> </td> </tr> <tr> <td colspan="4">PC->Reader(Send)</td> <td colspan="5">Reader->PC(Receive)</td> </tr> <tr> <td>项目</td> <td>字节</td> <td colspan="2">说明</td> <td>项目</td> <td>字节</td> <td colspan="3">说明</td> </tr> <tr> <td>T</td> <td>1 Byte</td> <td colspan="2">0x60</td> <td>T</td> <td>1Byte</td> <td colspan="3">0x60</td> </tr> <tr> <td>L</td> <td>1 Byte</td> <td colspan="2">0</td> <td>L</td> <td>1Byte</td> <td colspan="3">N</td> </tr> <tr> <td rowspan="2">V</td> <td rowspan="2">0 Byte</td> <td colspan="2" rowspan="2">无</td> <td rowspan="2">V</td> <td rowspan="2">N Byte</td> <td>结果标志</td> <td>1 Byte</td> <td>0: 成功<br>oth: 参见附录2</td> </tr> <tr> <td>结果</td> <td>X Byte</td> <td></td> </tr> </tbody> </table> #### 2.6.7.2 Tag(0xA2): FAST_WRITE <table> <thead> <tr> <th colspan="4">Tag: 0xA2</th> <th colspan="7">写入一页 </th> </tr> </thead> <tbody> <tr> <td colspan="11">说明:<br>此命令支持的卡: NTAG213/215/216, MIFARE Ultralight EV1, <br> </td> </tr> <tr> <td colspan="6">PC->Reader(Send)</td> <td colspan="5">Reader->PC(Receive)</td> </tr> <tr> <td>项目</td> <td>字节</td> <td colspan="4">说明</td> <td>项目</td> <td>字节</td> <td colspan="3">说明</td> </tr> <tr> <td>T</td> <td>1 Byte</td> <td colspan="4">0xA2</td> <td>T</td> <td>1Byte</td> <td colspan="3">0xA2</td> </tr> <tr> <td>L</td> <td>1 Byte</td> <td colspan="4">1</td> <td>L</td> <td>1Byte</td> <td colspan="3">N</td> </tr> <tr> <td rowspan="2">V</td> <td rowspan="2">5 Byte</td> <td>addr</td> <td colspan="2">1 Byte</td> <td>页地址</td> <td rowspan="2">V</td> <td rowspan="2">N Byte</td> <td>结果标志</td> <td>1 Byte</td> <td>0:成功</td> </tr> <tr> <td>Data</td> <td colspan="2">4 Byte</td> <td>页数据</td> <td>结果</td> <td>X Byte</td> <td></td> </tr> </tbody> </table> #### 2.6.7.3 Tag(0x3A): FAST_READ <table> <tbody> <tr> <td colspan="4">Tag: 0x3A</td> <td colspan="7">读连续的页</td> </tr> <tr> <td colspan="11">说明:<br>FAST_READ命令需要起始页地址和结束页地址,并返回已寻址页的所有n*4字节。例如, <br>如果起始地址为03h,结束地址为07h,则返回页03h、04h、05h、06h和07h。所读取的页数不能超过120页。<br> <br>应答Tag:<br>结果标志为0时,应答tag中的数据域长度为: (Tag->L -1 )* 4<br></td> </tr> <tr> <td colspan="6">PC->Reader(Send)</td> <td colspan="5">Reader->PC(Receive)</td> </tr> <tr> <td>项目</td> <td>字节</td> <td colspan="4">说明</td> <td>项目</td> <td>字节</td> <td colspan="3">说明</td> </tr> <tr> <td>T</td> <td>1 Byte</td> <td colspan="4">0x3A</td> <td>T</td> <td>1Byte</td> <td colspan="3">0x3A</td> </tr> <tr> <td>L</td> <td>1 Byte</td> <td colspan="4">2</td> <td>L</td> <td>1Byte</td> <td colspan="3">N</td> </tr> <tr> <td>V</td> <td>2 Byte</td> <td>StartAdddr</td> <td colspan="2">1 Byte</td> <td> </td> <td>V</td> <td>N Byte</td> <td>结果标志</td> <td>1 Byte</td> <td>0: 成功<br>oth: 参见附录2</td> </tr> <tr> <td> </td> <td> </td> <td>EndAddr</td> <td colspan="2">1 Byte</td> <td> </td> <td> </td> <td> </td> <td>结果</td> <td>X Byte</td> <td></td> </tr> </tbody> </table> #### 2.6.7.4 Tag(0x39): READ_CNT <table> <tbody> <tr> <td colspan="3">Tag: 0x39</td> <td colspan="6">读出计数器的当前值<br> </td> </tr> <tr> <td colspan="9">说明:<br>此命令支持的卡: MIFARE Ultralight EV1, <br> <br> </td> </tr> <tr> <td colspan="4">PC->Reader(Send)</td> <td colspan="5">Reader->PC(Receive)</td> </tr> <tr> <td>项目</td> <td>字节</td> <td colspan="2">说明</td> <td>项目</td> <td>字节</td> <td colspan="3">说明</td> </tr> <tr> <td>T</td> <td>1 Byte</td> <td colspan="2">0x39</td> <td>T</td> <td>1Byte</td> <td colspan="3">0x39</td> </tr> <tr> <td>L</td> <td>1 Byte</td> <td colspan="2">1</td> <td>L</td> <td>1Byte</td> <td colspan="3">N</td> </tr> <tr> <td rowspan="2">V</td> <td rowspan="2">1 Byte</td> <td colspan="2" rowspan="2">counter number from 00h to 02h </td> <td rowspan="2">V</td> <td rowspan="2">N Byte</td> <td>结果标志</td> <td>1 Byte</td> <td>0: 成功<br>oth: 参见附录2</td> </tr> <tr> <td>结果</td> <td>X Byte</td> <td></td> </tr> </tbody> </table> #### 2.6.7.5 Tag(0xA5): INCR_CNT <table> <tbody> <tr> <td colspan="4">Tag: 0xA5</td> <td colspan="7"> </td> </tr> <tr> <td colspan="11">说明:<br>此命令支持的卡: MIFARE Ultralight EV1, <br> </td> </tr> <tr> <td colspan="6">PC->Reader(Send)</td> <td colspan="5">Reader->PC(Receive)</td> </tr> <tr> <td>项目</td> <td>字节</td> <td colspan="4">说明</td> <td>项目</td> <td>字节</td> <td colspan="3">说明</td> </tr> <tr> <td>T</td> <td>1 Byte</td> <td colspan="4">0xA5</td> <td>T</td> <td>1Byte</td> <td colspan="3">0xA5</td> </tr> <tr> <td>L</td> <td>1 Byte</td> <td colspan="4">5</td> <td>L</td> <td>1Byte</td> <td colspan="3">N</td> </tr> <tr> <td rowspan="2">V</td> <td rowspan="2">5 Byte</td> <td> Num</td> <td colspan="2">1 Byte</td> <td>counter<br>number </td> <td rowspan="2">V</td> <td rowspan="2">N Byte</td> <td>结果标志</td> <td>1 Byte</td> <td>0: 成功<br>oth: 参见附录2</td> </tr> <tr> <td>IncrVal</td> <td colspan="2">4 Byte</td> <td>低位在前</td> <td>结果</td> <td>X Byte</td> <td></td> </tr> </tbody> </table> #### 2.6.7.6 Tag(0x1B): PWD_AUTH <table> <tbody> <tr> <td colspan="3">Tag: 0x1B</td> <td colspan="6"> </td> </tr> <tr> <td colspan="9">说明:<br>此命令支持的卡: NTAG213/215/216, MIFARE Ultralight EV1, <br> </td> </tr> <tr> <td colspan="4">PC->Reader(Send)</td> <td colspan="5">Reader->PC(Receive)</td> </tr> <tr> <td>项目</td> <td>字节</td> <td colspan="2">说明</td> <td>项目</td> <td>字节</td> <td colspan="3">说明</td> </tr> <tr> <td>T</td> <td>1 Byte</td> <td colspan="2">0x1B</td> <td>T</td> <td>1Byte</td> <td colspan="3">0x1B</td> </tr> <tr> <td>L</td> <td>1 Byte</td> <td colspan="2">4</td> <td>L</td> <td>1Byte</td> <td colspan="3">N</td> </tr> <tr> <td rowspan="2">V</td> <td rowspan="2">4 Byte</td> <td colspan="2" rowspan="2"> <br> <br> </td> <td rowspan="2">V</td> <td rowspan="2">N Byte</td> <td>结果标志</td> <td>1 Byte</td> <td>0: 成功<br>oth: 参见附录2</td> </tr> <tr> <td>结果</td> <td>X Byte</td> <td></td> </tr> </tbody> </table> #### 2.6.7.7 Tag(0x3E): CHECK_TEARING_EVENT <table> <tbody> <tr> <td colspan="3">Tag: 0x3E</td> <td colspan="6">识别在指定的计数器上是否发生了撕裂事件</td> </tr> <tr> <td colspan="9">说明:<br>此命令支持的卡: MIFARE Ultralight EV1, <br> </td> </tr> <tr> <td colspan="4">PC->Reader(Send)</td> <td colspan="5">Reader->PC(Receive)</td> </tr> <tr> <td>项目</td> <td>字节</td> <td colspan="2">说明</td> <td>项目</td> <td>字节</td> <td colspan="3">说明</td> </tr> <tr> <td>T</td> <td>1 Byte</td> <td colspan="2">0x3E</td> <td>T</td> <td>1Byte</td> <td colspan="3">0x3E</td> </tr> <tr> <td>L</td> <td>1 Byte</td> <td colspan="2">1</td> <td>L</td> <td>1Byte</td> <td colspan="3">N</td> </tr> <tr> <td rowspan="2">V</td> <td rowspan="2">1Byte</td> <td colspan="2" rowspan="2"> 计数器标号</td> <td rowspan="2">V</td> <td rowspan="2">N Byte</td> <td>结果标志</td> <td>1 Byte</td> <td>0: 成功<br>oth: 参见附录2</td> </tr> <tr> <td>结果</td> <td>X Byte</td> <td></td> </tr> </tbody> </table> #### 2.6.7.8 Tag(0x3C): READ_SIG <table> <tbody> <tr> <td colspan="3">Tag: 0x3C</td> <td colspan="6">获取卡的ECC签名</td> </tr> <tr> <td colspan="9">说明:<br>此命令支持的卡: NTAG213/215/216, MIFARE Ultralight EV1, <br> </td> </tr> <tr> <td colspan="4">PC->Reader(Send)</td> <td colspan="5">Reader->PC(Receive)</td> </tr> <tr> <td>项目</td> <td>字节</td> <td colspan="2">说明</td> <td>项目</td> <td>字节</td> <td colspan="3">说明</td> </tr> <tr> <td>T</td> <td>1 Byte</td> <td colspan="2">0x3C</td> <td>T</td> <td>1Byte</td> <td colspan="3">0x3C</td> </tr> <tr> <td>L</td> <td>1 Byte</td> <td colspan="2">0</td> <td>L</td> <td>1Byte</td> <td colspan="3">N</td> </tr> <tr> <td rowspan="2">V</td> <td rowspan="2">0 Byte</td> <td colspan="2" rowspan="2"> <br> <br> </td> <td rowspan="2">V</td> <td rowspan="2">N Byte</td> <td>结果标志</td> <td>1 Byte</td> <td>0: 成功<br>oth: 参见附录2</td> </tr> <tr> <td>结果</td> <td>X Byte</td> <td></td> </tr> </tbody> </table> ## 2.7 指令0xA6发送APDU指令 <table> <thead> <tr> <td colspan="3">指令: 0xA6</td> <td colspan="6">将APDU指令头透传给卡片 </td> </tr> </thead> <tbody> <tr> <td colspan="9">说明: <br>  1. 当命令标志位为2时,此时APDU DATA可以为空,表示关闭nfc模块。</td> </tr> <tr> <td colspan="6">PC->Reader(Send)</td> <td colspan="3">Reader->PC(Receive)</td> </tr> <tr> <td>项目</td> <td>字节</td> <td colspan="4">说明</td> <td>项目</td> <td>字节</td> <td>说明</td> </tr> <tr> <td>包头</td> <td>2 Byte</td> <td colspan="4">Default: 0x55 0xAA</td> <td>包头</td> <td>1 Byte</td> <td>Default: 0x55 0xAA</td> </tr> <tr> <td>命令字</td> <td>1 Byte</td> <td colspan="4">0xA6</td> <td>命令字</td> <td>1 Byte</td> <td>0xA6</td> </tr> <tr> <td>数据域长度</td> <td>2 Byte</td> <td colspan="4">N</td> <td>标识字</td> <td>1 Byte</td> <td>参见附录1</td> </tr> <tr> <td rowspan="2">数据域</td> <td rowspan="2">N Byte</td> <td colspan="2">命令标志位</td> <td>1 Byte</td> <td>0x01 -> START<br>0X02 -> FINISH</td> <td>数据域长度</td> <td>2 Byte</td> <td> N</td> </tr> <tr> <td colspan="2">APDU DATA</td> <td>N Byte</td> <td>符合ISO7816-4的数据结构</td> <td>数据域</td> <td>N Byte</td> <td>数据 N = 0时没有此项</td> </tr> <tr> <td>校验字</td> <td>1 Byte</td> <td colspan="4"> </td> <td>校验字</td> <td>1 Byte</td> <td></td> </tr> </tbody> </table> ## 2.8 指令0x91 SAM卡操作指令 <table> <thead> <tr> <th colspan="3">指令: 0x91 </th> <th colspan="6"> </th> </tr> </thead> <tbody> <tr> <td colspan="9">说明: 请求数据域的格式为TLV:<br>若应答数据域存在,则格式为TLV:<br>Tag: 与请求中的Tag相等<br>Val: 当标识字标识成功时,Val表示此操作的结果。当标识字指示失败时, Val表示此操作的错误码<br>支持的Tag:<br>Tag: 0x19 SAM卡复位<br>Tag: 0x1A SAM卡apdu指令<br>Tag: 0x1B SAM卡关闭</td> </tr> <tr> <td colspan="6">PC->Reader(Send)</td> <td colspan="3">Reader->PC(Receive)</td> </tr> <tr> <td>项目</td> <td>字节</td> <td colspan="4">说明</td> <td>项目</td> <td>字节</td> <td>说明</td> </tr> <tr> <td>包头</td> <td>2 Byte</td> <td colspan="4">Default: 0x55 0xAA</td> <td>包头</td> <td>1 Byte</td> <td>Default: 0x55 0xAA</td> </tr> <tr> <td>命令字</td> <td>1 Byte</td> <td colspan="4">0x91 </td> <td>命令字</td> <td>1 Byte</td> <td>0x91 </td> </tr> <tr> <td>数据域长度</td> <td>2 Byte</td> <td colspan="4">N</td> <td>标识字</td> <td>1 Byte</td> <td>0x00 : 成功<br>非0 : 失败</td> </tr> <tr> <td rowspan="2">数据域</td> <td rowspan="2">N Byte</td> <td colspan="2" rowspan="1">CardNum: </td> <td colspan="2" rowspan="1">0x01: 小卡槽的卡<br>0x02: 中卡槽的卡<br>0x04: 大卡槽的卡<br> </td> <td>数据域长度</td> <td>2 Byte</td> <td> N</td> </tr> <tr> <td colspan="2" rowspan="1"> 命令Tag <br></td> <td colspan="2" rowspan="1"> <br></td> <td>数据域</td> <td>N Byte</td> <td>数据 N = 0时没有<br>此项</td> </tr> <tr> <td>校验字</td> <td>1 Byte</td> <td colspan="4"> </td> <td>校验字</td> <td>1 Byte</td> <td></td> </tr> </tbody> </table> ### 2.8.1 Tag(0x19 ): SAM卡复位 <table> <thead> <tr> <th colspan="3">Tag: 0x19</th> <th colspan="4"> </th> </tr> </thead> <tbody> <tr> <td colspan="7">说明:<br>子错误码:<br> 0x01: 未发现卡</td> </tr> <tr> <td colspan="4">PC->Reader(Send)</td> <td colspan="3">Reader->PC(Receive)</td> </tr> <tr> <td>项目</td> <td>字节</td> <td colspan="2">说明</td> <td>项目</td> <td>字节</td> <td>说明</td> </tr> <tr> <td>T</td> <td>1 Byte</td> <td colspan="2">0x19</td> <td>T</td> <td>1Byte</td> <td>0x19</td> </tr> <tr> <td>L</td> <td>1 Byte</td> <td colspan="2">0</td> <td>L</td> <td>1Byte</td> <td>N</td> </tr> <tr> <td>V</td> <td> Byte</td> <td colspan="2"><br> </td> <td>V</td> <td>N Byte</td> <td>当标识字为非0,此时V表示子错误码<br>当标识字为0, 此时V表示ATQA</td> </tr> </tbody> </table> ### 2.9.2 Tag(0x1A ): SAM卡apdu指令 <table> <thead> <tr> <th colspan="3">Tag: 0x1A</th> <th colspan="5"> </th> </tr> </thead> <tbody> <tr> <td colspan="8">说明:<br> <br>子错误码:<br> 0x01: 未发现卡。0x02: 卡未复位,先复位。0x04 : 响应超时</td> </tr> <tr> <td colspan="5">PC->Reader(Send)</td> <td colspan="3">Reader->PC(Receive)</td> </tr> <tr> <td>项目</td> <td>字节</td> <td colspan="3">说明</td> <td>项目</td> <td>字节</td> <td>说明</td> </tr> <tr> <td>T</td> <td>1 Byte</td> <td colspan="3">0x1A</td> <td>T</td> <td>1Byte</td> <td>0x1A</td> </tr> <tr> <td>L</td> <td>1 Byte</td> <td colspan="3">N</td> <td>L</td> <td>1Byte</td> <td>N</td> </tr> <tr> <td >V</td> <td >N Byte</td> <td colspan="3">APDU</td> <td >V</td> <td >N Byte</td> <td >当标识字为非0,此时V表示子错误码<br>当标识字为0, 此时V表示应答</td> </tr> </tbody> </table> ## 2.9 指令0x54 开始传输数据 <table> <thead> <tr> <td colspan="3">指令: 0x54</td> <td colspan="3">发送固件包大小</td> </tr> </thead> <tbody> <tr> <td colspan="6">说明<br> </td> </tr> <tr> <td colspan="3">PC->Reader(Send)</td> <td colspan="3">Reader->PC(Receive)</td> </tr> <tr> <td>项目</td><td>字节</td><td>说明</td> <td>项目</td><td>字节</td><td>说明</td> </tr> <tr> <td>包头</td><td>2Byte</td><td>0x55 0xAA</td> <td>包头</td><td>1Byte</td><td>0x55 0xAA</td> </tr> <tr> <td>命令字</td><td>1Byte</td><td>0x58</td> <td>命令字</td><td>1Byte</td><td>0x58</td> </tr> <tr> <td>数据域长度</td><td>2Byte</td><td>N</td> <td>标识字</td><td>1Byte</td><td>0x00 : 成功<br>非0 : 失败</td> </tr> <tr> <td rowspan="2">数据域</td><td rowspan="2">1 Byte</td><td rowspan="2">升级包大小,单位byte;<br>低位在前,高位在后</td><td>数据域长度</td><td>2Byte</td><td>N</td> </tr> <tr> <td>数据域</td><td>N Byte</td><td>数据N = 0时没有此项</td> </tr> <tr> <td>校验字</td><td>1Byte</td><td> </td> <td>校验字</td><td>1Byte</td><td></td> </tr> </tbody> </table> ## 2.110 指令0x58 传输数据 <table> <tbody> <tr> <td colspan="3">指令: 0x82</td> <td colspan="3"> </td> </tr> <tr> <td colspan="6">说明:分包规则<br> </td> </tr> <tr> <td colspan="3">PC->Reader(Send)</td> <td colspan="3">Reader->PC(Receive)</td> </tr> <tr> <td>项目</td><td>字节</td><td>说明</td> <td>项目</td><td>字节</td><td>说明</td> </tr> <tr> <td>包头</td> <td>2Byte</td><td>0x55 0xAA</td> <td>包头</td><td>1Byte</td><td>0x55 0xAA</td> </tr> <tr> <td>命令字</td><td>1Byte</td><td>0x58</td> <td>命令字</td><td>1Byte</td><td>0x58</td> </tr> <tr> <td>数据域长度</td><td>2Byte</td><td>N</td> <td>标识字</td><td>1Byte</td> <td>0x00 : 成功<br>非0 : 失败</td> </tr> <tr> <td rowspan="2">数据域</td><td rowspan="2">1 Byte</td> <td rowspan="2"> <br>包数据</td> <td>数据域长度</td> <td>2Byte</td> <td>N</td> </tr> <tr> <td>数据域</td><td>N Byte</td><td>数据N = 0时没有此项</td> </tr> <tr> <td>校验字</td><td>1Byte</td><td> </td> <td>校验字</td><td>1Byte</td><td></td> </tr> </tbody> </table> ## 2.11 指令0x56 停止传输数据 <table> <thead> <tr> <th colspan="5">指令:0x56</th><th colspan="3">停止传输数据</th> </tr> </thead> <tbody> <tr> <td colspan="8">说明:</td> </tr> <tr> <td colspan="5">PC->Reader(Send)</td><td colspan="3">Reader->PC(Receive)</td> </tr> <tr> <td>项目</td><td>字节</td><td colspan="3">说明</td> <td>项目</td><td>字节</td><td>说明</td> </tr> <tr> <td>包头</td><td>2Byte</td><td colspan="3">0x55 0xAA</td> <td>包头</td><td>2Byte</td><td>0x55 0xAA</td> </tr> <tr> <td>命令字</td><td>1Byte</td><td colspan="3">0x56</td> <td>命令字</td><td>1Byte</td><td>0x56</td> </tr> <tr> <td>数据域长度</td><td>2Byte</td><td colspan="3">0</td> <td>标识字</td><td>1Byte</td><td>0x00:成功<br>非0:失败</td> </tr> <tr> <td rowspan="2">数据域</td><td rowspan="2">N Byte</td><td rowspan="2" colspan="3">无</td> <td>数据域长度</td><td>2Byte</td><td>N</td> </tr> <tr> <td>数据域</td><td>N Byte</td><td>数据N = 0时没有此项</td> </tr> <tr> <td>校验字</td><td>1 Byte</td><td colspan="3"></td> <td>校验字</td><td>1 Byte</td><td></td> </tr> </tbody> </table> ## 2.12 指令0x57 覆盖安装 <table> <thead> <tr> <td colspan="5">指令:0x57</td> <td colspan="3">覆盖安装</td> </tr> </thead> <tbody> <tr> <td colspan="8">说明:</td></tr><tr><td colspan="5">PC->Reader(Send)</td> <td colspan="3">Reader->PC(Receive)</td> </tr> <tr> <td>项目</td><td>字节</td><td colspan="3">说明</td> <td>项目</td><td>字节</td><td>说明</td> </tr> <tr> <td>包头</td><td>2Byte</td><td colspan="3">0x55 0xAA</td> <td>包头</td><td>2Byte</td><td>0x55 0xAA</td> </tr> <tr> <td>命令字</td><td>1Byte</td><td colspan="3">0x57</td> <td>命令字</td><td>1Byte</td><td>0x57</td> </tr> <tr> <td>数据域长度</td><td>2Byte</td><td colspan="3">N</td> <td>标识字</td><td>1Byte</td><td>0x00:成功<br>非0:失败</td> </tr> <tr> <td rowspan="2">数据域</td><td rowspan="2">1 Byte</td> <td colspan="3" rowspan="2"></td><td>数据域长度</td><td>2Byte</td><td>N</td> </tr> <tr> <td>数据域</td><td>N Byte</td><td>数据N = 0时没有此项</td> </tr> <tr> <td>校验字</td><td>1 Byte</td><td colspan="3"></td> <td>校验字</td><td>1 Byte</td><td></td> </tr> </tbody> </table> # **使用例程** ## TypeA 操作流程 $~~~~$ (1)寻A卡 指令0x90 $~~~~~~~~$ 1.TAG_0X46 寻卡 ---> 发送REQA接收ATQA $~~~~~~~~$ 2.TAG_0X47防冲突以及选卡 --->ANTICOLLSION SELECT $~~~~$ (2)APDU指令操作 $~~~~~~~~$ 1.TAG_0X2A设备发送选择应答请求RATS 接收ATS $~~~~~~~~$ 2.指令0XA6 $~~~~$ (3) tag可叠加使用(TLV格式) $~~~~~~~~$ 例:55 aa 90 06 00 02(最后一条指令)<font color='red'> 46 01 26</font> <font color='green'>47 00</font> 09 $~~~~~~~~$ <font color='red'>顺序执行:46->以REQA方式执行寻卡</font><font color='green'> 47->执行防冲突以及选卡</font> ## TypeB 操作流程 $~~~~$ (1)寻B卡 指令0x90 $~~~~~~~~$ 1.TAG_0X30设置芯片为寻B卡模式 $~~~~~~~~$ 2.TAG_0X30寻卡 发送REQB接收ATQB $~~~~~~~~$ 3.TAG_0X31防冲突以及选卡 发送ATTRIB 接收attrib_ack $~~~~~~~~$ 4.TAG_0X32获取身份证卡号 $~~~~$ (2)APDU指令操作 $~~~~~~~~$ 1.指令0xA6 $~~~~$ (3) tag可叠加使用(TLV格式) $~~~~~~~~$ 例:55 aa 90 03 00 02(最后一条指令)<font color='red'> 30 03 08 00 00 </font><font color='green'>31 00</font> 29 $~~~~~~~~$ <font color='red'>顺序执行:30->执行寻卡</font> <font color='green'>31->执行防冲突以及选卡</font> ## M1卡操作流程 $~~~~$ 读写操作前要进行认证,一次认证一个扇区,当读写的块号是认证过的扇区,就能直接操作,否则重新进行认证,认证失败,卡的状态变为初始态,没有重试功能 $~~~~$ (1)TypeA防冲突及选卡 $~~~~~~~~~~$ req: 55 aa 90 03 00 01 47 00 2a $~~~~~~~~~~$ 55 aa 90 00 07 00 47 05<font color='purple'> 39 38 35 4f</font> <font color='red'>38</font> 59 (<font color='purple'> UID</font> <font color='red'>SAK</font> ) $~~~~$ (2)0x51读块操作 $~~~~~~~~~~$ 防冲突选卡--->认证扇区--->读块操作 $~~~~~~~~~~$ req: 55 aa 51 09 00 60 01 ff ff ff ff ff ff 01 c7 $~~~~~~~~~~~~~~~~$ 命令字为0x51,使用KEYA秘钥ffffffffffff,读绝对块号为0x01的块,不是最后一条指令 $~~~~~~~~~~$ Ack: 55 aa 51 00 10 00 <font color='red'>00000000000000000000000000000000</font> be <font color='red'>读块内容</font> $~~~~$ (3)0x52写块操作 $~~~~~~~~~~$ 防冲突选卡--->认证扇区--->读块操作 $~~~~~~~~~~$ req: 55 aa 52 19 00 60 01 ffffffffffff 11220000000000000000000000001122 01 d4 $~~~~~~~~~~~~~~~~$ <font color='green'>命令字为0x52,使用KEYA秘钥ffffffffffff,写绝对块号为0x01的块,写入内容为 $~~~~~~~~~~~~~~~~$ 11220000000000000000000000001122,不是最后一条指令</font> $~~~~~~~~~~$ ack:55 aa 52 00 0000 ad 成功 $~~~~~~~~~~$ ack: 55 aa 52 90 0100 01 3d 失败 $~~~~$ (4)0xA0读多块操作 $~~~~~~~~~~$ 防冲突选卡--->检查参数的合法性--->认证扇区--->读块操作 $~~~~~~~~~~~~~~~~$ req: 55 aa a0 0b 00 02 60 01 00 04 ffffffffffff 33 $~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~$ <font color='green'>命令字为0xa0,使用KEYA秘钥ffffffffffff,0x02代表最后一条指令,读扇区号01,偏移0,读4块</font> $~~~~~~~~~~~~~~~~$ sak: 55 aa a0 00 40 00 $~~~~~~~~~~~~~~~~$ <font color='red'>00000000000000000000000000000000000000000 $~~~~~~~~~~~~~~~~$ 00000000000000000000000000000000000000000 $~~~~~~~~~~~~~~~~$ 00000000000000000000000000ff078069ffffffffffff 读取到的内容</font> $~~~~~~~~~~~~~~~~$ 0e # **附录 1** <table> <thead> <tr> <th>标识号</th> <th>说明</th> <th>response state</th> </tr> </thead> <tbody> <tr> <td>0x00</td> <td>成功</td> <td>VG_PRO_RESPONSE_SUCCESS</td> </tr> <tr> <td>0x90</td> <td>失败</td> <td>VG_PRO_RESPONSE_FAILED</td> </tr> <tr> <td>0x01</td> <td>校验失败</td> <td>VG_PRO_RESPONSE_CHECK_FAILED</td> </tr> <tr> <td>0x02</td> <td>分组结束</td> <td>VG_PRO_RESPONSE_PACKET_OVERLEN</td> </tr> <tr> <td>0x03</td> <td>本指令不支持</td> <td>VG_PRO_RESPONSE_NO_RESOURCES</td> </tr> <tr> <td>0x04</td> <td>Json解析失败</td> <td>VG_PRO_RESPONSE_JSON_ERR</td> </tr> <tr> <td>0x05</td> <td>内存不足</td> <td>VG_PRO_RESPONSE_NO_MEMERY</td> </tr> <tr> <td>0x06</td> <td>密码长度错误</td> <td>VG_PRO_RESPONSE_ERR_PWD_LEN</td> </tr> <tr> <td>0x07</td> <td>密码校验错误</td> <td>VG_PRO_RESPONSE_ERR_PWD_CHECK</td> </tr> <tr> <td>0x08</td> <td>功能未开启</td> <td>VG_PRO_RESPONSE_FUN_NO_START</td> </tr> <tr> <td>0x09</td> <td>卡号长度越界</td> <td>VG_PRO_RESPONSE_CARD_NUM_OVERLEN</td> </tr> <tr> <td>0x0a</td> <td>升级超时失败</td> <td>VG_PRO_RESPONSE_UPDATE_TIMEOUT_FAILED</td> </tr> <tr> <td>0x0b</td> <td>写入文件错误</td> <td>VG_PRO_RESPONSE_ERR_FILE_WRITE</td> </tr> <tr> <td>0x0c</td> <td>包序号错误</td> <td>VG_PRO_RESPONSE_ERR_PACKAGE_ID</td> </tr> <tr> <td>0x0d</td> <td>不支持的压缩方式</td> <td>VG_PRO_RESPONSE_ERR_COMPRESS_TYPE</td> </tr> <tr> <td>0x0e</td> <td>无效参数</td> <td>VG_PRO_RESPONSE_INVALID_PARAM</td> </tr> <tr> <td>0x0F</td> <td>文件不存在</td> <td>VG_PRO_RESPONSE_FILE_NO_EXISt</td> </tr> <tr> <td>0x91</td> <td>外部身份验证不通过</td> <td>VG_PRO_RESPONSE_EXTERN_AUTH_NO_PASS</td> </tr> <tr> <td>0x92</td> <td>解压失败</td> <td>VG_PRO_RESPONSE_UNCOMPRESS_FAILED</td> </tr> <tr> <td>0x93</td> <td>flash空间不足</td> <td>VG_PRO_RESPONSE_NO_FREEFLASH</td> </tr> <tr> <td>0x94</td> <td>没有许可证</td> <td>VG_PRO_RESPONSE_NO_PERMISSION</td> </tr> <tr> <td>0x95</td> <td>无效固件</td> <td>VG_PRO_RESPONSE_INVALID_FIRMWARE</td> </tr> <tr> <td>0x96</td> <td>内存操作失败</td> <td>VG_PRO_RESPONSE_FLASH_OPS_FAILED</td> </tr> <tr> <td>0x97</td> <td>不符合TLV格式</td> <td>VG_PRO_RESPONSE_NOT_TLV_DATA,</td> </tr> <tr> <td>0x98</td> <td>不支持的TLV的Tag</td> <td>VG_PRO_RESPONSE_NOT_SUPPORT_TLV_TAG</td> </tr> <tr> <td>0x99</td> <td>发生内部错误</td> <td>VG_PRO_RESPONSE_OCCUR_INTER_ERR</td> </tr> <tr> <td>0x9A</td> <td>未使用外部身份验证</td> <td>VG_PRO_RESPONSE_EXTERN_AUTH_NO_USE</td> </tr> <tr> <td>0x9B</td> <td>密钥丢失</td> <td>VG_PRO_RESPONSE_KEY_LOSE</td> </tr> <tr> <td>0x9C</td> <td>格式错误</td> <td>VG_PRO_RESPONSE_ERR_FORMAT</td> </tr> <tr> <td>0x9D</td> <td>SM2私钥错误</td> <td>VG_PRO_RESPONSE_ERR_SM2PriKey</td> </tr> <tr> <td>0x9E</td> <td>SM2密钥不是一对</td> <td>VG_PRO_RESPONSE_SM2KEY_ISNOT_PAIR</td> </tr> <tr> <td>0x9F</td> <td>解密失败</td> <td>VG_PRO_RESPONSE_DECRYPTO_FAILED</td> </tr> <tr> <td>0xA0</td> <td>不是SM2的加密数据</td> <td>VG_PRO_RESPONSE_ISNOT_SM2_ENCDATA</td> </tr> <tr> <td>0xA1</td> <td>签入更新程序掩码失败</td> <td>VG_PRO_RESPONSE_LOSE_CHK_INTO_UPDATER_MASK</td> </tr> </tbody> </table> # **附录 2** NFC卡片操作相关错误码 <table> <thead> <tr> <th>标识号</th> <th>说明</th> </tr> </thead> <tbody> <tr> <td>0x00</td> <td>成功</td> </tr> <tr> <td>0x01</td> <td>超时或没有卡</td> </tr> <tr> <td>0x02</td> <td>内部缓存区越界</td> </tr> <tr> <td>0x03</td> <td>用户使用错误</td> </tr> <tr> <td>0x05</td> <td>A卡碰撞</td> </tr> <tr> <td>0x06</td> <td>失败</td> </tr> <tr> <td>0x07</td> <td>通信协议错误</td> </tr> <tr> <td>0x08</td> <td>此卡片不支持调速</td> </tr> <tr> <td>0x09</td> <td>无效参数</td> </tr> <tr> <td>0x0a</td> <td>块号越界</td> </tr> <tr> <td>0x0b</td> <td>FLASH错误</td> </tr> <tr> <td>0x12</td> <td>M1卡扇区认证错误</td> </tr> </tbody> </table>
石磊
2025年6月18日 14:05
2
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
Word文件
PDF文档
PDF文档(打印)
分享
链接
类型
密码
更新密码
有效期