diff --git a/通讯协议-教育新版-基站部分usb json.md b/通讯协议-教育新版-基站部分usb json.md index 00a4a21..71d8692 100644 --- a/通讯协议-教育新版-基站部分usb json.md +++ b/通讯协议-教育新版-基站部分usb json.md @@ -1,5 +1,5 @@ [TOC] -# 一、概述 +# 概述 ### 通信流程 相对usb 64byte传输,json格式命令数据长度大多都是比较长的。使用常规的一问一答的方式效率较低; 所以设计了如下通信方式: @@ -10,226 +10,289 @@ - 错误->接收方从step 1开始重发; ### 说明: -为了避免通信失败时重发的代价太大,在step 1中将数据包拆分成N个以1024bytes为单位的小数据包; +- 为了避免通信失败时重发的代价太大,在step 1中将数据包拆分成N个以1024bytes为单位的小数据包; 当如上传输出错时,只需重传当前的1024bytes即可; +- 为了解决通信双方随时都可以主动发起,通信双方在所有数据头上加上明显辨识,用于接收方识别收到的数据是对方主动发送还是ack; -### 通信机制 -在"通信流程" step 2中传输的是纯数据,接收方会把所有当前收到的数据都当作是纯数据,这样在收发双方通信时就会有如下限制: - - 发送方必须在完成当前数据传输流程后才可以开始下一个传输流程; - - 接收方必须在完成当前数据传输流程后才可以主动发起传输。 +如下是基站主动发送的数据头 +| **基站发送数据头** | **描述** | **sdk回复数据头** | +| --- | --- | --- | +| 0xB1 | 基站主动发送数据信息 | 0xB1 | +| 0xB2 | 基站主动发送纯数据 | 无需回复 | +| 0xB3 | 基站主动发送询问 | 0xB3 | + +如下是SDK主动发送的数据头 +| **SDK发送数据头** | **描述** | **基站回复数据头** | +| --- | --- | --- | +| 0xD1 | SDK主动发送数据信息 | 0xD1 | +| 0xD2 | SDK主动发送纯数据 | 无需回复 | +| 0xD3 | SDK主动发送询问 | 0xD3 | -# 二, -## 1.1 sdk下载多包给基站 +# 一, 协议描述 -### 1.1.1 sdk发送数据信息 -电脑向基站发送: +## 1.1 发送数据信息 +发送方发送数据:(所有非1字节数据都是高字节在前) | **字节** | **标识符** | **描述** | | --- | --- | --- | -| 0-1 | Header | 数据包头:固定0xFF 0x5A | -| 2-3 | Len | 有效数据长度 | -| 4 | Direct | 0x01 : sdk主动发起的通信 | -| 5-6 | com seq | 通信序号 | -| 7 | BASEID | 指定的基站编号,为0时候不指定 | -| 8 | type | 1 要下载的数据信息 | -| 9 | DATA-type | 1:json数据
2:普通数据; | -| 10-13 | DATA_total| 数据总字节数 高位在前 | -| 14-17 | total DATA crc32 | 总数据crc32 高位在前| -| 18 | transfer total | 总传输次数 | -| 19 | transfer cur | 当前传输次数 | -| 20-21 | This PACK Len |本次要传输的数据包长度 高位在前 | -| 22-25 | This Pack crc32 | 本次要传输的数据crc32 | +| 0 | Header | 数据包头:基站主动发送0xB1;sdk主动发送0xD1 | +| 1-2 | defualt | | +| 3-4 | com seq | 通信序号 | +| 5 | BASEID | 指定的基站编号,为0时候不指定 | +| 6 | DATA-type | 1:json数据
2:普通数据; | +| 7-10 | DATA_total| 数据总字节数 | +| 11-14 | total DATA crc32 | 总数据(DATA_total长度)crc32| +| 15 | transfer total | 总传输次数 | +| 16 | transfer cur | 当前传输次数 | +| 17-18 | This PACK Len |本次要传输的数据包长度 | +| 19-22 | This Pack crc32 | 本次要传输的数据(This PACK Len长度)crc32 | |default | | | |60-63 | crc32 | 此数据包的crc32;从byte0-59共60个字节 | -举例:sdk要发送(1024X2 +512 bytes)数据给基站 +举例:sdk要发送(1071 * 2 +512 bytes)数据给基站 第一个发送单元: step1: - 5-6:100 - 10-13 bytes: (1024*2 +512 bytes) - 14-17 :数据总长度的crc - 18 : 3 - 19 : 0 - 20-21 : 1024 - 22-25 :1024数据的crc + 3-4:100 + 7-10 bytes: (1071 * 2 +512 bytes) + 11-14 :数据总长度的crc + 15 : 3 + 16 : 0 + 17-18 : 1071 + 19-22 :1071数据的crc 60-63 : crc step2: 基站ack - step3: sdk发送1024长度数据;64byte*16包; + step3: sdk发送1071长度数据;63byte * 17包; step4: sdk发送询问信息 step5: 基站ack 第二个发送单元: step1: - 5-6:101 - 10-13 bytes: (1024*2 +512 bytes) - 14-17 :数据总长度的crc - 18 : 3 - 19 : 1 - 20-21 : 1024 - 22-25 :1024数据的crc + 3-4:100 + 7-10 bytes: (1071 * 2 +512 bytes) + 11-14 :数据总长度的crc + 15 : 3 + 16 : 1 + 17-18 : 1071 + 19-22 :1071数据的crc 60-63 : crc step2: 基站ack - step3: sdk发送1024长度数据;64byte*16包; + step3: sdk发送1071长度数据;63byte * 17包; step4: sdk发送询问信息 step5: 基站ack 第三个发送单元: step1: - 5-6:102 - 10-13 bytes: (1024*2 +512 bytes) - 14-17 :数据总长度的crc - 18 : 3 - 19 : 2 - 20-21 : 512 - 22-25 :512数据的crc - 60-63 : crc + 3-4:100 + 7-10 bytes: (1071 * 2 +512 bytes) + 11-14 :数据总长度的crc + 15 : 3 + 16 : 2 + 17-18 : 512 + 19-22 :512数据的crc + 60-63 : crc step2: 基站ack - step3: sdk发送512长度数据;64byte*8包; + step3: sdk发送512长度数据;63byte * 9包; step4: sdk发送询问信息 step5: 基站ack -基站应答: +接收方应答: | **字节** | **标识符** | **描述** | | --- | --- | --- | -| 0-1 | Header | 数据包头:固定0xFF 0x5A | -| 2-3 | Len | 有效数据长度 | -| 4 | Direct | 0x01 : sdk主动发起的通信 | -| 5-6 | com seq | 通信序号 | -| 7 | BASEID | 指定的基站编号,为0时候不指定 | -| 8 | type | 1 要下载的数据信息 | -| 9 | DATA-type | 1:json数据
2:普通数据; | -| 10-13 | DATA_total| 数据总字节数 高位在前 | -| 14-17 | total DATA crc32 | 总数据crc32 高位在前| -| 18 | transfer total | 总传输次数 | -| 19 | transfer cur | 当前传输次数 | -| 20-21 | This PACK Len |本次要传输的数据包长度 高位在前 | -| 22-25 | This Pack crc32 | 本次要传输的数据crc32 | -|default | | | -|60-63 | crc32 | 此数据包的crc32 | +| 0 | Header | 数据包头:sdk应答0xB1;基站应答0xD1 | +| 1-2 | defualt | | +| 3-4 | com seq | 通信序号 | +| 5 | BASEID | 指定的基站编号,为0时候不指定 | +| 6 | DATA-type | 1:json数据
2:普通数据; | +| 7-10 | DATA_total| 数据总字节数 | +| 11-14 | total DATA crc32 | 总数据crc32 | +| 15 | transfer total | 总传输次数 | +| 16 | transfer cur | 当前传输次数 | +| 17-18 | This PACK Len |本次要传输的数据包长度 | +| 19-22 | This Pack crc32 | 本次要传输的数据crc32 | -### 1.1.2 sdk连续发送N包纯数据包,基站无需回复 - -### 1.1.3 sdk发送询问 +## 1.2 发送方连续发送N包数据包,接收方无需回复 +每个数据包都带一个字节的数据头: +- 基站主动发送0xB2; +- sdk主动发送0xD2 +## 1.3 发送方发送询问 | **字节** | **标识符** | **描述** | | --- | --- | --- | -| 0-1 | Header | 数据包头:固定0xFF 0x5A | -| 2-3 | Len | 有效数据长度 | -| 4 | Direct | 0x01 : sdk主动发起的通信 | -| 5-6 | com seq | 通信序号 | -| 7 | BASEID | 指定的基站编号,为0时候不指定 | -| 8 | type | 2 询问基站 | -| 9 | DATA-type | 1:json数据
2:普通数据; | -| 10-13 | DATA_total| 数据总字节数 高位在前 | -| 14-17 | total DATA crc32 | 总数据crc32 高位在前| -| 18 | transfer total | 总传输次数 | -| 19 | transfer cur | 当前传输次数 | -| 20-21 | This PACK Len |本次要传输的数据包长度 高位在前 | -| 22-25 | This Pack crc32 | 本次要传输的数据crc32 | -|default | | | -|60-63 | crc32 | 此数据包的crc32 | +| 0 | Header | 数据包头:基站主动发送0xB3;sdk主动发送0xD3 | +| 1-2 | defualt | | +| 3-4 | com seq | 通信序号 | +| 5 | BASEID | 指定的基站编号,为0时候不指定 | +| 6 | DATA-type | 1:json数据
2:普通数据; | +| 7-10 | DATA_total| 数据总字节数 | +| 11-14 | total DATA crc32 | 总数据crc32 | +| 15 | transfer total | 总传输次数 | +| 16 | transfer cur | 当前传输次数 | +| 17-18 | This PACK Len |本次要传输的数据包长度 | +| 19-22 | This Pack crc32 | 本次要传输的数据crc32 | -基站应答: +接收方应答: | **字节** | **标识符** | **描述** | | --- | --- | --- | -| 0-1 | Header | 数据包头:固定0xFF 0x5A | -| 2-3 | Len | 有效数据长度 | -| 4 | Direct | 0x01 : sdk主动发起的通信 | -| 5-6 | com seq | 通信序号 | -| 7 | BASEID | 指定的基站编号,为0时候不指定 | -| 8 | type | 2 询问基站 | -| 9 | DATA-type | 1:json数据
2:普通数据; | -| 10-13 | DATA_total| 数据总字节数 高位在前 | -| 14-17 | total DATA crc32 | 总数据crc32 高位在前| -| 18 | transfer total | 总传输次数 | -| 19 | transfer cur | 当前传输次数 | -| 20-21 | This PACK Len |本次要传输的数据包长度 高位在前 | -| 22-25 | This Pack crc32 | 本次要传输的数据crc32 | -| 26 | result | 1:成功
2:失败; | -|60-63 | crc32 | 此数据包的crc32 | - - -## 1.2 基站上传多包给SDK - -### 1.2.1 sdk发送数据信息 -基站主动发送: -| **字节** | **标识符** | **描述** | -| --- | --- | --- | -| 0-1 | Header | 数据包头:固定0xFF 0x5A | -| 2-3 | Len | 有效数据长度 | -| 4 | Direct | 0x81:基站主动发起的通信 | -| 5-6 | com seq | 通信序号 | -| 7 | BASEID | 指定的基站编号,为0时候不指定 | -| 8 | type | 1 要下载的数据信息 | -| 9 | DATA-type | 1:json数据
2:普通数据; | -| 10-13 | DATA_total| 数据总字节数 高位在前 | -| 14-17 | total DATA crc32 | 总数据crc32 高位在前| -| 18 | transfer total | 总传输次数 | -| 19 | transfer cur | 当前传输次数 | -| 20-21 | This PACK Len |本次要传输的数据包长度 高位在前 | -| 22-25 | This Pack crc32 | 本次要传输的数据crc32 | -|default | | | -|60-63 | crc32 | 此数据包的crc32 | +| 0 | Header | 数据包头:基站主动发送0xB3;sdk主动发送0xD3 | +| 1-2 | defualt | | +| 3-4 | com seq | 通信序号 | +| 5 | BASEID | 指定的基站编号,为0时候不指定 | +| 6 | DATA-type | 1:json数据
2:普通数据; | +| 7-10 | DATA_total| 数据总字节数 | +| 11-14 | total DATA crc32 | 总数据crc32 | +| 15 | transfer total | 总传输次数 | +| 16 | transfer cur | 当前传输次数 | +| 17-18 | This PACK Len |本次要传输的数据包长度 | +| 19-22 | This Pack crc32 | 本次要传输的数据crc32 | +| 23 | result | 接收方验证后回复结果:1-成功;2-失败 | + + +# 二, 功能协议 + +## 2.1 固件升级类协议 +### 2.1.0 固件升级类的流程: +- step1: 上层软件发送固件升级指令信息: + - 升级对象(基站,键盘,字库...) + - 固件字节数 + - 固件crc32 + - 其他 +- step2: 基站回复表示收到命令,开始为固件升级做准备 +- step3: 基站发送数据申请信息: + - 固件起始位置 + - 固件数据长度 +- step4: 上层软件根据基站申请读取对应数据发送给基站; + - 固件起始地址 + - 固件数据长度 + - 数据数据 +- 重复step3,step4直到基站获取到全部固件数据 +- step5: 基站发送固件升级完成信息,通知上层可以退出固件升级模式 + - 升级对象 + + +### 2.1.1 固件升级协议 +#### 2.1.1.1 setFwUpdateState + +- **功能描述**:固件升级 +- **参数说明** + +|参数名|类型|限制|是否必填|说明| +|---|---|---|---|---| +|fun|string|-|是|指令名称| +|dataTag|string|-|否|数据包标识,可为空字符串| +|baseSn|string||是|基站的出厂编码| +|data|object|-|是|传送参数的对象| +|+state|string||是|状态
"start"-开始升级
"stop"-停止升级 +|+partition|string||是|"base_fw" 基站固件
"base_fw_bk" 基站备份固件
"keypad_fw" 键盘固件
"front" 字库文件| +|+file len|uint||是|升级固件文件的大小(字节数),10进制数字| +|+version|string||是|待升级的基站固件版本| +|+crc|uint||是|固件CRC校验码,10进制数字| + + +- **示例代码** +```json +{ + "fun":"setFwUpdateState", + "dataTag":"1", + "baseSn":"2024061101", + "data":{ + "state":"start", + "partition":"base_fw", + "file_len":12000, + "version":"1.0.3", + "crc":1429319861 + } +} +``` + +#### 2.1.1.2 fEvtFwUpateState +- **功能描述**:返回升级状态 +- **参数说明** + +|参数名|类型|限制|非空|说明| +|---|---|---|---|---| +|fun|string|-|是|指令名称| +|dataTag|string|-|否|数据包标识,可为空字符串| +|baseSn|string||是|基站的出厂编码| +|data|object|-|是|传送参数的对象| +|+state|string||是|状态
"start"-开始升级
"stop"-停止升级
"complete"-完成升级 +|+msg|string||否|返回的失败原因 + +- **示例代码** +```json +{ + "fun":"fEvtFwUpateState", + "dataTag":"1", + "baseSn":"2024061101", + "data":{ + "state":"start", + "msg":"error msg" + } +} +``` + +#### 2.1.1.3 sEvtReqeustFwData +- **功能描述**:返回升级状态 +- **参数说明** + +|参数名|类型|限制|非空|说明| +|---|---|---|---|---| +|fun|string|-|是|指令名称| +|dataTag|string|-|否|数据包标识,可为空字符串| +|baseSn|string||是|基站的出厂编码| +|data|object|-|是|传送参数的对象| +|+offset|uint||是|数据段的起始地址 +|+len|uint||是|数据段长度 + +- **示例代码** +```json +{ + "fun":"sEvtReqeustFwData", + "dataTag":"1", + "baseSn":"2024061101", + "data":{ + "offset":0, + "len":5 + } +} +``` + + +#### 2.1.1.4 fwDataInfo +- **功能描述**:返回升级状态 +- **参数说明** + +|参数名|类型|限制|非空|说明| +|---|---|---|---|---| +|fun|string|-|是|指令名称| +|dataTag|string|-|否|数据包标识,可为空字符串| +|baseSn|string||是|基站的出厂编码| +|data|object|-|是|传送参数的对象| +|+offset|uint||是|数据段的起始地址 +|+len|uint||是|数据段长度,指十六进制字节个数 +|+data|string||是|数据段,十六进制字符串 +- **示例代码** +```json +{ + "fun":"fwDataInfo", + "dataTag":"1", + "baseSn":"2024061101", + "data":{ + "offset":0, + "len":5, + "data": "bc1234ffff" + } +} +``` + + + + -SDK应答: -| **字节** | **标识符** | **描述** | -| --- | --- | --- | -| 0-1 | Header | 数据包头:固定0xFF 0x5A | -| 2-3 | Len | 有效数据长度 | -| 4 | Direct | 0x81:基站主动发起的通信 | -| 5-6 | com seq | 通信序号 | -| 7 | BASEID | 指定的基站编号,为0时候不指定 | -| 8 | type | 1 要下载的数据信息 | -| 9 | DATA-type | 1:json数据
2:普通数据; | -| 10-13 | DATA_total| 数据总字节数 高位在前 | -| 14-17 | total DATA crc32 | 总数据crc32 高位在前| -| 18 | transfer total | 总传输次数 | -| 19 | transfer cur | 当前传输次数 | -| 20-21 | This PACK Len |本次要传输的数据包长度 高位在前 | -| 22-25 | This Pack crc32 | 本次要传输的数据crc32 | -|default | | | -|60-63 | crc32 | 此数据包的crc32 | -### 1.2.2 基站连续发送N包纯数据包,SDK无需回复 -### 1.2.3 基站发送询问 -| **字节** | **标识符** | **描述** | -| --- | --- | --- | -| 0-1 | Header | 数据包头:固定0xFF 0x5A | -| 2-3 | Len | 有效数据长度 | -| 4 | Direct | 0x81:基站主动发起的通信 | -| 5-6 | com seq | 通信序号 | -| 7 | BASEID | 指定的基站编号,为0时候不指定 | -| 8 | type | 2 询问基站 | -| 9 | DATA-type | 1:json数据
2:普通数据; | -| 10-13 | DATA_total| 数据总字节数 高位在前 | -| 14-17 | total DATA crc32 | 总数据crc32 高位在前| -| 18 | transfer total | 总传输次数 | -| 19 | transfer cur | 当前传输次数 | -| 20-21 | This PACK Len |本次要传输的数据包长度 高位在前 | -| 22-25 | This Pack crc32 | 本次要传输的数据crc32 | -|default | | | -|60-63 | crc32 | 此数据包的crc32 | -基站应答: -| **字节** | **标识符** | **描述** | -| --- | --- | --- | -| 0-1 | Header | 数据包头:固定0xFF 0x5A | -| 2-3 | Len | 有效数据长度 | -| 4 | Direct | 0x81:基站主动发起的通信 | -| 5-6 | com seq | 通信序号 | -| 7 | BASEID | 指定的基站编号,为0时候不指定 | -| 8 | type | 2 询问基站 | -| 9 | DATA-type | 1:json数据
2:普通数据; | -| 10-13 | DATA_total| 数据总字节数 高位在前 | -| 14-17 | total DATA crc32 | 总数据crc32 高位在前| -| 18 | transfer total | 总传输次数 | -| 19 | transfer cur | 当前传输次数 | -| 20-21 | This PACK Len |本次要传输的数据包长度 高位在前 | -| 22-25 | This Pack crc32 | 本次要传输的数据crc32 | -| 26 | result | 1:成功
2:失败; | -|60-63 | crc32 | 此数据包的crc32 |