[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 |