通讯协议-教育新版-基站部分usb json.md 8.88 KB

[TOC]

一、概述

通信流程

相对usb 64byte传输,json格式命令数据长度大多都是比较长的。使用常规的一问一答的方式效率较低; 所以设计了如下通信方式:

  • step 1,发送方先发送整个数据包的信息;接收方回复;
  • step 2,发送方发送纯数据,此时接收方只接收不回复;
  • step 3,发送方发送询问"接收方是否正确的接收到刚刚的数据",接收方回复:
    • 正确->本次通信结束;
    • 错误->接收方从step 1开始重发;

说明:

为了避免通信失败时重发的代价太大,在step 1中将数据包拆分成N个以1024bytes为单位的小数据包; 当如上传输出错时,只需重传当前的1024bytes即可;

通信机制

在"通信流程" step 2中传输的是纯数据,接收方会把所有当前收到的数据都当作是纯数据,这样在收发双方通信时就会有如下限制:

  • 发送方必须在完成当前数据传输流程后才可以开始下一个传输流程;
  • 接收方必须在完成当前数据传输流程后才可以主动发起传输。

二,

1.1 sdk下载多包给基站

1.1.1 sdk发送数据信息

电脑向基站发送: | 字节 | 标识符 | 描述 | | --- | --- | --- | | 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;从byte0-59共60个字节 |

举例:sdk要发送(1024X2 +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
60-63 : crc step2: 基站ack step3: sdk发送1024长度数据;64byte*16包; 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
60-63 : crc step2: 基站ack step3: sdk发送1024长度数据;64byte*16包; 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 step2: 基站ack step3: sdk发送512长度数据;64byte*8包; 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 |

1.1.2 sdk连续发送N包纯数据包,基站无需回复

1.1.3 sdk发送询问

字节 标识符 描述
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-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 |

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 |