软件协议文档
终端设备协议文档
功能&协议池(所有功能协议)
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协议
文档
-
+
首页
CR90指令文档
> # 1 设备支持的基础指令 <br> <td><a href="http://wiki.koodle.cn:10086/doc/480/"><div>参见:刷卡模块通信协议</div></a></td> # 2 设备控制相关指令 ## 2.1 指令0x0E内部认证指令(APP校验设备) <table> <tr> <td bgcolor=#1E90FF colspan="6">指令:0x0E</td><td colspan="4">上位机校验设备是否合法</td> </tr> <tbody> <tr> <td colspan="10">说明:<br>P:用于约定密钥相关的参数。 不同设备可能使用不同的值</td> </tr> <tr> <td colspan="6">PC->Reader(Send)</td><td colspan="4">Reader->PC(Receive)</td></tr> <tr> <td>项目</td><td>字节</td> <td colspan="4">说明</td> <td>项目</td><td>字节</td> <td colspan="2">说明</td></tr> <tr> <td>包头</td><td>2Byte</td> <td colspan="4">0x55 0xAA</td> <td>包头</td><td>2Byte</td><td>0x55 0xAA</td></tr> <tr> <td>命令字</td><td>1Byte</td><td colspan="4">0x0E</td> <td>命令字</td><td>1Byte</td><td colspan="2">0x0E</td></tr> <tr> <td>数据域长度</td><td>2Byte</td><td colspan="4"> </td> <td>标识字</td><td>1Byte</td> <td colspan="2">0x00:成功<br>非0:失败</td></tr> <tr> <td rowspan="2">数据域</td> <td rowspan="2">N Byte</td> <td>P</td> <td>1 Byte</td> <td colspan="2"></td> <td>数据域长度</td> <td>2Byte</td> <td colspan="2">N</td></tr> <tr> <td>v</td><td>L Byte</td><td colspan="2"> 明文</td> <td>数据域</td><td>N Byte</td><td>密文</td></tr> <tr> <td>校验字</td><td>1 Byte</td><td colspan="4"></td><td>校验字</td><td>1 Byte</td><td></td></tr></tbody></table> 1. 上位机使用此指令发送一段随机数 2. 设备将随机树加密,将密文回送给上位机 3. 上位机解密校验随机数是否是自己发送的 支持<br> P=0:使用私有密钥空间中的0号密钥<br>P=1:使用用户密钥空间中的0号密钥 校验方式:参考2.3节 ## 2.2 设备密钥配置指令 ### 2.2.1 0x0D 设备密钥配置指令 <table> <tr> <td bgcolor=#1E90FF colspan="4">指令:0x0D</td> <td colspan="5">修改设备密钥区中的密钥</td> </tr> <tr> <td colspan="9">说明:<br>P1:指向设备的密钥空间。不同的设备类型可能存在多个密钥空间<br>P2:密钥空间中的密钥索引。用于指向要更改的密钥<br></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>2Byte</td> <td colspan="3">0x55 0xAA</td> <td>包头</td> <td>2Byte</td> <td colspan="2">0x55 0xAA</td> </tr> <tr> <td>命令字</td> <td>1Byte</td> <td colspan="3">0x0D</td> <td>命令字</td> <td>1Byte</td> <td colspan="2">0x0D</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="3">数据域</td> <td rowspan="3">N Byte</td> <td>P1</td> <td>1 Byte</td> <td>密钥空间索引</td> <td>数据域长度</td> <td>2Byte</td> <td colspan="2">N</td> </tr> <tr> <td>P2</td> <td>1 Byte</td> <td>密钥空间中密钥索引</td> <td rowspan="2">数据域</td> <td rowspan="2">N Byte</td> <td rowspan="2"></td> </tr> <tr> <td><font color=#FF00>V<sub>e</sub></font></td><td>L Byte</td><td>密文数据</td> </tr><tr><td>校验字</td><td>1 Byte</td><td colspan="3"></td><td>校验字</td><td>1 Byte</td><td></td></tr> </table> ### 2.2.2 <font color=#FF00>V<sub>e</sub></font>的明文:<font color=#FF00>V<sub>d</sub></font> <table> <tr><td>T</td><td>L</td><td>V</td> </tr> <tr><td> 密钥参数(0x01)</td><td></td><td>新密钥,密钥数据组织方式根据P2确定</td></tr> <tr><td> 随机数(0x03)</td><td>16/32byte</td><td>向设备获取</td></tr> <tr><td>补全数据(0x04):可选项</td><td></td><td>用于加密算法中要求的补全数据。此项不一定存在</td></tr> </table><br> V<sub>d</sub>= TAG<sub>密钥参数</sub>+ TAG<sub>随机数</sub>+ TAG<sub>补全数据</sub>+ V<sub>sha256</sub> V<sub>sha256</sub>=SHA256(P1 + P2 + TAG<sub>密钥参数</sub>+ TAG<sub>随机数</sub> + TAG<sub>补全数据</sub>)<br> V<sub>e</sub>=F<sub>enc</sub>(V<sub>d</sub>):F<sub>enc</sub> 加密函数:修改什么密钥,就用其旧密钥加密 ### 2.2.3 操作流程 1. 先向设备获取随机数,用于确定TAG<sub>随机数</sub> 2. 根据1.1节计算<font color=#FF00>V<sub>e</sub></font> 3. 发送数据包 ### 2.2.4 P1,P2的具体值 CR90:参见 ### 2.2.5 P1,P2及密钥的说明 P1: 指示密钥空间。 P1 = 0: 私有密钥空间 P1 = 1: 用户密钥空间 P2: 密钥空间中的密钥索引,高4bit标识密钥标号值,低4bit指示密钥类型。 密钥标号:0 ~ 14 密钥类型:AES =1,M2= 2,SM4=4 AES密钥:此时密钥参数中V:iv + aes_key(只支持AES 256或128) M2密钥:此时密钥参数中V: sm2_pubkey(0x04 + X0,X1 ... Y0Y1....) + sm2_prikey(32 Byte) SM4密:此时密钥参数中V: Key + Iv 用户密钥空间中的初始密钥: 初始密钥为AES256 KEY: 全为0xff IV: 全为0xff 私有密钥空间初始密钥: 不开放 CR90:<br>密钥空间中的0号密钥用于内部认证,1号密钥用于会话根密钥 ## 2.3 指令0x53工作模式配置指令 <table> <thead> <tr> <th colspan="5">指令:0x09</th> <th colspan="3">配置设备的一些行为</th> </tr> </thead> <tbody> <tr> <td colspan="8">说明:<br>一. 配置流程:<br> 1. 先向设备获取随机数, 使用选定的密钥空间的会话根密钥加密此随机数,即生成此次的会话密钥<br> 2.按照数据格式发送此指令<br>3. SHA256_Enc: 从P1 到V,计算其SHA256, 其结果用会话密钥加密(AES256/128, CBC),即生成SHA256_Enc。<br>4. 会话根密钥:密钥空间中的1号密钥<br> 二. V的数据格式: 支持的配置项TLV如下<br>配置项(数据域可以存在多项配置,每项配置采用TLV结构,并且按照T的升序排列).<br> <table> <thead> <tr> <th>T (1Byte)</th> <th>L(1Byte)</th> <th>V (N Byte)</th></tr> </thead> <tbody> <tr> <td>设置SN(0x13)</td> <td>4 < len < 16 Byte</td><td>设置设备的SN号; 当SN号为大数(整数)时,低位在前</td> </tr> <tr> <td>休眠时间(0x15)</td> <td>4 Byte</td><td>设备空闲设定的时间后,进入休眠</td> </tr> <tr> <td>更改串口波特率(0x16) </td> <td>4 Byte</td> <td>更改当前通道的波特率</td> </tr> <tr><td>0xAE</td><td>1 Byte</td><td>配置设备进入升级模式时,是否进行权限校验</td></tr> </tbody> </table><br> </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>2Byte</td><td colspan="3">0x55 0xAA</td> <td>包头</td><td>2Byte</td><td colspan="3">0x55 0xAA</td> </tr> <tr> <td>命令字</td><td>1Byte</td><td colspan="3">0x53</td> <td>命令字</td><td>1Byte</td><td colspan="2">0x53</td> </tr> <tr> <td>数据域长度</td><td>2Byte</td><td colspan="3">0x00 0x00</td> <td>标识字</td><td>1Byte</td><td colspan="2">0x00:成功<br>非0:参见附录1</td> </tr> <tr> <td rowspan="4">数据域</td><td rowspan="4">N Byte</td> <td>P1</td><td>1 Byte</td><td>0x01</td> <td rowspan="2">数据域长度</td> <td rowspan="2">2Byte</td><td rowspan="2" colspan="2">N</td> </tr> <tr> <td>P2</td><td>1 Byte</td><td>密钥空间标号</td></tr> <tr> <td>V</td><td>L Byte</td><td></td> <td rowspan="2">数据域</td> <td rowspan="2">N Byte</td> <td rowspan="2" colspan="2"></td> </tr> <tr> <td>SHA256_Enc</td><td>32 Byte</td><td></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.3.1 Tag(0x13 ): 设置SN <table> <thead> <tr> <th colspan="3">Tag: 0x13</th> <th colspan="4"> </th> </tr> </thead> <tbody> <tr> <td colspan="7">说明:</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">0x13</td> <td>T</td> <td>1Byte</td> <td>0x13</td> </tr> <tr> <td>L</td> <td>1 Byte</td> <td colspan="2">N</td> <td>L</td> <td>1Byte</td> <td>N</td> </tr> <tr> <td>V</td> <td>N Byte</td> <td colspan="2"> </td> <td>V</td> <td>N Byte</td> <td>当标识字为非0,此时V表示子错误码<br>当标识字为0, 此时V表示应答</td> </tr> </tbody> </table> ### 2.3.2 Tag(0x15 ): 休眠时间 <table> <thead> <tr> <th colspan="3">Tag: 0x15</th> <th colspan="4"> RM04/05不支持</th> </tr> </thead> <tbody> <tr> <td colspan="7">说明:<br>设备初始值为0</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">0x15</td> <td>T</td> <td>1Byte</td> <td>0x15</td> </tr> <tr> <td>L</td> <td>1 Byte</td> <td colspan="2">1</td> <td>L</td> <td>1Byte</td> <td>N</td> </tr> <tr> <td>V</td> <td>4 Byte</td> <td colspan="2">单位(3秒)。(x >=10)<br> x: 3x秒后进入休眠(低位在前)</td> <td>V</td> <td>N Byte</td> <td>当标识字为非0,此时V表示子错误码<br>当标识字为0, 此时V表示应答</td> </tr> </tbody> </table> ### 2.3.3 Tag(0xAE): 配置设备进入升级模式时,是否进行权限校验 <table> <thead> <tr> <th colspan="4">Tag: 0xAE</th> <th colspan="4"> </th> </tr> </thead> <tbody> <tr> <td colspan="8">说明:<br>设备初始值为0</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 colspan="2">说明</td> </tr> <tr> <td>T</td> <td>1 Byte</td> <td colspan="3">0xAE</td> <td>T</td> <td>1Byte</td> <td>0xAE</td> </tr> <tr> <td>L</td> <td>1 Byte</td> <td colspan="3">1</td> <td>L</td> <td>1Byte</td> <td>N</td> </tr> <tr> <td rowspan="2">V</td> <td rowspan="2">1 Byte</td> <td >KeySpace</td> <td >1 Byte</td> <td>密钥空间</td> <td rowspan="2">V</td> <td rowspan="2">N Byte</td> <td>当标识字为非0,此时V表示子错误码<br>当标识字为0, 此时V表示应答</td> </tr> <tr> <td>P</td> <td >1 Byte</td> <td ></td> </tr> </tbody> </table> ### 2.3.5 Tag(0x16 ): 更改串口波特率 <table> <thead> <tr> <th colspan="3">Tag: 0x16</th> <th colspan="4"> 不支持虚拟串口</th> </tr> </thead> <tbody> <tr> <td colspan="7">说明:<br>只能更改当前使用的通道<br>支持的波特率:<br> 19200, 38400, 57600, ,115200, 921600, 1000000, ,1152000 <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>T</td> <td>1 Byte</td> <td colspan="3">0x16</td> <td>T</td> <td>1Byte</td> <td>0x16</td> </tr> <tr> <td>L</td> <td>1 Byte</td> <td colspan="3">1</td> <td>L</td> <td>1Byte</td> <td>N</td> </tr> <tr> <td rowspan="2">V</td> <td rowspan="2">5 Byte</td> <td colspan="1">P</td> <td> 1 Byte </td> <td> 串口号 </td> <td rowspan="2">V</td> <td rowspan="2">N Byte</td> <td rowspan="2"></td> </tr> <tr> <td >baud</td> <td> 4 Byte></td> <td> 低位在前</td> </tr> </tbody> </table> ## 2.4 指令0x02 获取设备ID <table> <thead> <tr> <th colspan="3">指令: 0x02</th> <th colspan="4">获取设备SN号</th> </tr> </thead> <tbody> <tr> <td colspan="7">说明:</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>包头</td> <td>2Byte</td> <td colspan="2">Default: 0x55 0xAA</td> <td>包头</td> <td>1Byte</td> <td>Default: 0x55 0xAA</td> </tr> <tr> <td>命令字</td> <td>1Byte</td> <td colspan="2">0x02</td> <td>命令字</td> <td>1Byte</td> <td>0x02</td> </tr> <tr> <td>数据域长度</td> <td>2Byte</td> <td colspan="2">0x00 0x00</td> <td>标识字</td> <td>1Byte</td> <td>0x00 : 成功<br>非0 : 失败</td> </tr> <tr> <td>数据域</td> <td>0Byte</td> <td colspan="2">无此项</td> <td>数据域长度</td> <td>2Byte</td> <td>N</td> </tr> <tr> <td> </td> <td> </td> <td colspan="2"> </td> <td>数据域</td> <td>N Byte</td> <td>N > 0 设备ID, 低位在前</td> </tr> <tr> <td>校验字</td> <td>1Byte</td> <td colspan="2"> </td> <td>校验字</td> <td>1Byte</td> <td></td> </tr> </tbody> </table> ## 2.5 指令0x0A 获取设备SN <table> <thead> <tr> <th colspan="3">指令: 0x0A</th> <th colspan="4">获取设备SN号</th> </tr> </thead> <tbody> <tr> <td colspan="7">说明:</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>包头</td> <td>2Byte</td> <td colspan="2">Default: 0x55 0xAA</td> <td>包头</td> <td>1Byte</td> <td>Default: 0x55 0xAA</td> </tr> <tr> <td>命令字</td> <td>1Byte</td> <td colspan="2">0x0A</td> <td>命令字</td> <td>1Byte</td> <td>0x0A</td> </tr> <tr> <td>数据域长度</td> <td>2Byte</td> <td colspan="2">0x00 0x00</td> <td>标识字</td> <td>1Byte</td> <td>0x00 : 成功<br>非0 : 参见附录1</td> </tr> <tr> <td>数据域</td> <td>0Byte</td> <td colspan="2">无此项</td> <td>数据域长度</td> <td>2Byte</td> <td>N</td> </tr> <tr> <td> </td> <td> </td> <td colspan="2"> </td> <td>数据域</td> <td>N Byte</td> <td>N > 0 设备ID, 低位在前</td> </tr> <tr> <td>校验字</td> <td>1Byte</td> <td colspan="2"> </td> <td>校验字</td> <td>1Byte</td> <td></td> </tr> </tbody> </table> ## 2.6 指令0x01设备运行状态查询 <td><a href="http://wiki.koodle.cn:10086/doc/480/"><div>数据包格式,参见:指令 0x01 设备状态查询</div></a></td> 0xAE: 设备等待升级中<br> 0xBE: 设备等待烧录中<br> 0x00: 正常状态<br></td> ## 2.7 指令 0x04 蜂鸣器控制 <table> <tr> <td colspan="9">指令:0x04</td> </tr> <tr> <td colspan="9">说明:</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>包头</td><td>2 Byte</td><td colspan="2">0x55 0xAA</td> <td>包头</td><td>2 Byte</td><td>0x55 0xAA</td> </tr> <tr> <td>命令字</td><td>1 Byte</td><td colspan="2">0x04</td> <td>命令字</td><td>1 Byte</td><td>0x04</td> </tr> <tr> <td>数据域长度</td><td>2 Byte</td><td colspan='2'>0x05 0x00</td> <td>标识字</td><td>1 Byte</td><td>0x00 : 成功<br>非 0 : 参见附录1</td> </tr> <tr> <td rowspan="5">数据域</td><td rowspan="5">5 Byte</td><td>1 Byte</td> <td>开关:0 关闭,1 使能<br>bit3: 蜂鸣器控制位<br>其余位: 保留</td> <td>数据域长度</td> <td>2 Byte</td><td>N</td> </tr> <tr> <td>1 Byte</td><td>次数</td><td rowspan="4">数据域</td> <td rowspan="4">N Byte</td><td rowspan="4">数据 N = 0 时没有此项</td> </tr> <tr> <td>1 Byte</td><td>每次持续时间(单位 50MS)</td> </tr> <tr> <td>1 Byte</td><td>每次间隔时间(单位 50MS)</td> </tr> <tr> <td>1 Byte</td><td>保留</td> </tr> <tr> <td>校验字</td><td>1 Byte</td><td colspan="2"></td> <td>校验字</td><td>1 Byte</td><td></td> </tr> </table> 例:每次闪亮 0x<font color='#00dddd'>50</font>\*50ms<font color='#00dddd'>(十进制 80)</font>间隔 0x<font color='#ffd700'>0A</font>*50ms<font color='#ffd700'>(十进制10)</font> 55 AA 04 05 00 <font color='red'>08</font> 03 <font color='#00dddd'>50</font> <font color='#ffd700'>0A</font> 00 AF 蜂鸣器响三次,时间 4 秒,间隔 0.5s ## 2.8 蓝牙设备控制指令 ### 2.8.1 0x60 :蓝牙设备控制指令 <br> <table> <thead> <tr> <td bgcolor=#1E90FF colspan="5">指令: 0x60</td> <td colspan="5">修改/获取蓝牙的一些参数 </td> </tr> </thead> <body> <tr> <td colspan="10"> 说明:<br>P1: 指示V的数据格式和功能<br>P2:根据P1和设备类型不同,而不同 </td> </tr> <tr> <td bgcolor=#FFFF00> 项目</td><td> 字节</td> <td colspan="3">说明</td> <td> 项目</td><td> 字节</td> <td colspan="3">说明</td> </tr> <tr> <td>包头 </td><td>2Byte </td><td colspan="3"> 0x55 0xAA </td><td>包头 </td><td>1Byte </td><td colspan="3">0x55 0xAA</td><td> </tr> <tr> <td>命令字</td><td> 1Byte</td><td colspan="3"> 0x60</td><td> 命令字</td><td> 1Byte</td><td colspan="3"> 0x60</td> </tr> <tr> <td>数据域长度</td><td> 2 Byte</td><td colspan="3"> N </td><td>标识字</td><td> 1Byte</td><td colspan="3"> 0x00 : 成功 非0 : 参见附录1</td> </tr> <tr> <td rowspan="4">数据域</td> <td rowspan="4">N Byte</td> <td>P1</td><td> 1 Byte</td><td>指示V的数据格式和功能</td><td> 数据域长度 </td><td>2 Byte <td colspan="3">N</td> </tr> <tr> <td>P2</td><td> 1 Byte</td><td> X </td><td rowspan="3">数据域</td><td rowspan="3"> N Byte</td><td rowspan="3" colspan="3"></td> </tr> <tr> <td>V<sub>d</sub> </td><td>L Byte</td><td> 根据P1值确定</td> </tr> <tr> <td>SHA256 _ENC </td><td> </td><td>不一定存在</td><td></td> </tr> <tr> <td>校验字</td><td> 1 Byte</td><td colspan="3"> </td><td> 校验字</td><td> 1 Byte </td><td colspan="3"></td> </tr> </body> </table> ### 2.8.1.1 P1 = 0x01 配置蓝牙相关参数 支持的蓝牙相关参数如下表格。每项TLV指示蓝牙的一个配置项, 当存在多个配置项时,采用平铺的格式:<font color=#FF000 > V<sub>p</sub></font> = TLV + TLV ....。 对于CR90设备,此时P2=1 <table> <tr> <td bgcolor=#1e90ff> T (1 Byte) </td> <td>L(1 Byte)<td bgcolor=#00BFFF> V</td> </tr> <tr> <td > 蓝牙名称(0x10) </td> <td >N Byte</td> <td> N=0: 获取<br>N !=0 :设置 </td> </tr> <tr> <td>蓝牙地址 (0x11) </td><td>N Byte</td><td colspan="3">N=0: 获取<br>N !=0 :设置</td> </tr> <tr> <td>蓝牙固件版本号(0x12)</td><td> 0 Byte </td><td olspan="3"></td> </tr> <tr> <td>广播中的SN(0x14)</td><td> 0/6 Byte</td> <td olspan="3"> <a href="http://wiki.koodle.cn:10086/doc/112/"><div> 设置:参见广播规范</div></a><br>L=0:表示获取</td> </tr> <tr> <td>广播中的设备状态标识(0x15)</td><td> 0/1 Byte </td> <td olspan="3"> <a href="http://wiki.koodle.cn:10086/doc/112/"><div> 设置:参见广播规范</div></a> <br>L=0:表示获取</td> </tr> </table> P2的值: <table> <tr> <td bgcolor=#1e90ff> 设备类型</td> <td> 值 </td> </tr> <tr> <td>CR90</td> <td> 1 </td> </tr> <tr> <td>DW200</td> <td> 0 </td> </tr> </table> ### 2.8.1.2 使用流程 情况一:<font color=#FF000 >V<sub>p</sub></font>中存在修改参数的Tag 1. 向设备请求随机数(16/32 Byte),然后使用会话根密钥加密,加密出的密文就是此次会话密钥<font color=#FF000 >K<sub>sec</sub></font> 2. 计算<font color=#FF000 >V<sub>T</sub></font>, TLV格式,其T = 0xff, V=SHA256 _ENC, SHA256 _ENC的计算方式如下   **V<sub>sha256</sub>**=SHA256(P1 + P2 + <font color=#FF00>V<sub>p</sub></font>)   SHA256_ENC = F<sub>enc</sub>(**V<sub>sha256</sub>**) 3. V<sub>d</sub> = V<sub>p</sub> + V<sub>T</sub> <font color=##FEEE00>注意:1. 加密函数F<sub>enc</sub> 为AES 2. 会话根密钥: 根据具体设备而定 </font> 情况二:<font color=#FF000 >V<sub>p</sub></font>中不存在修改参数的Tag     V<sub>d</sub> = V<sub>p</sub><br> ## 2.8.2 P1=0x7A: 用户主控转发P1=0x01的请求 <td><a href="http://wiki.koodle.cn:10086/doc/481/"><div>见微光通信协议0x60指令的补充说明</div></a></td> ## 2.8.3 P1= 0x7E: 用户主控和蓝牙之间的内部交互使用 <td><a href="http://wiki.koodle.cn:10086/doc/481/"><div>见微光通信协议0x60指令的补充说明</div></a></td> ## 2.9 指令0x59 进入升级模式 <table> <thead> <tr> <th colspan="5">指令: 0x59</th> <th colspan="3"> </th> </tr> </thead> <tbody> <tr> <td colspan="8"> 说明: <br>若当前设备对进入升级模式的设定是需要进行权限校验,则需要SHA256_Enc,否则不需要SHA256_Enc。<br>SHA256_Enc的计算方式:<br>   1.先向设备请求随机数,使用1号密钥空间的会话根密钥加密此随机数,即生成此次的会话密钥<br>   2.SHA256(P1 + RFU), 对签名结果使用刚生成的会话密钥进行加密(AES256/128,CBC),其加密结果就是SHA256_En。<br><br> P1: <br>   0: 进入一次升级模式,升级或再次重启,则进入正常模式<br>   1: 常驻升级模式,一直等待升级, 升级后重启,进入正常模式<br> 升级模式:<br>   此模式下,设备会慢闪烁工作灯。 <br> 正常模式:<br>  参见设备工作状态指示章节<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="3">说明</td> <td>项目</td><td>字节</td><td>说明</td> </tr> <tr> <td>包头</td><td>2Byte</td><td colspan="3">Default: 0x55 0xAA</td> <td>包头</td><td>1Byte</td><td>Default: 0x55 0xAA</td> </tr> <tr> <td>命令字</td><td>1Byte</td><td colspan="3">0x59</td> <td>命令字</td><td>1Byte</td><td>0x59</td> </tr> <tr> <td>数据域长度</td><td>2Byte</td><td colspan="3">0/N</td> <td>标识字</td><td>1Byte</td><td>0x00 : 成功<br>非0 : 失败</td> </tr> <tr> <td rowspan="3">数据域</td><td rowspan="3">N Byte</td> <td>P1</td><td>1 Byte</td> <td> </td> <td>数据域长度</td><td>2Byte</td><td>N</td> </tr> <tr> <td>RFU</td> <td>4 Byte</td><td> </td> <td rowspan="2">数据域</td> <td rowspan="2">N Byte</td> <td rowspan="2">数据 N = 0时没有此项</td> </tr> <tr> <td>SHA256_Enc</td><td> 32 Byte</td><td> 可选</td> </tr> <tr> <td>校验字</td> <td>1Byte</td> <td colspan="3"> </td> <td>校验字</td> <td>1Byte</td> <td></td> </tr> </tbody> </table>
石磊
2025年6月18日 14:06
2
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
Word文件
PDF文档
PDF文档(打印)
分享
链接
类型
密码
更新密码
有效期