6ac599c3
何征华
20241210 增加了usb 传...
|
1
|
[TOC]
|
e1c76669
何征华
a,完善了usbjson 基础通信...
|
2
|
# 概述
|
331127c2
何征华
增加了usb json通信机制说明
|
3
4
5
|
### 通信流程
相对usb 64byte传输,json格式命令数据长度大多都是比较长的。使用常规的一问一答的方式效率较低;
所以设计了如下通信方式:
|
e20a7371
李傲寒
修改通信方式
|
6
7
8
9
10
11
|
- STEP 1,发送包头数据信息 ==》 发送纯数据 ==》 发送询问
- STEP 2,接收方回复:
- 正确->本次通信结束; ==》 后续接收方附加信息可以在ACK之后紧跟回复。再进step1
- 错误->回复丢失包 进入step3
- STEP 3,发送方法发送丢数据 ==》 发送询问 进入step2
|
6ac599c3
何征华
20241210 增加了usb 传...
|
12
|
|
331127c2
何征华
增加了usb json通信机制说明
|
13
|
### 说明:
|
e1c76669
何征华
a,完善了usbjson 基础通信...
|
14
|
- 为了避免通信失败时重发的代价太大,在step 1中将数据包拆分成N个以1024bytes为单位的小数据包;
|
331127c2
何征华
增加了usb json通信机制说明
|
15
|
当如上传输出错时,只需重传当前的1024bytes即可;
|
e1c76669
何征华
a,完善了usbjson 基础通信...
|
16
|
- 为了解决通信双方随时都可以主动发起,通信双方在所有数据头上加上明显辨识,用于接收方识别收到的数据是对方主动发送还是ack;
|
6ac599c3
何征华
20241210 增加了usb 传...
|
17
|
|
e1c76669
何征华
a,完善了usbjson 基础通信...
|
18
19
20
21
22
23
24
25
26
27
28
29
30
|
如下是基站主动发送的数据头
| **基站发送数据头** | **描述** | **sdk回复数据头** |
| --- | --- | --- |
| 0xB1 | 基站主动发送数据信息 | 0xB1 |
| 0xB2 | 基站主动发送纯数据 | 无需回复 |
| 0xB3 | 基站主动发送询问 | 0xB3 |
如下是SDK主动发送的数据头
| **SDK发送数据头** | **描述** | **基站回复数据头** |
| --- | --- | --- |
| 0xD1 | SDK主动发送数据信息 | 0xD1 |
| 0xD2 | SDK主动发送纯数据 | 无需回复 |
| 0xD3 | SDK主动发送询问 | 0xD3 |
|
6ac599c3
何征华
20241210 增加了usb 传...
|
31
32
|
|
6ac599c3
何征华
20241210 增加了usb 传...
|
33
|
|
e1c76669
何征华
a,完善了usbjson 基础通信...
|
34
|
# 一, 协议描述
|
6ac599c3
何征华
20241210 增加了usb 传...
|
35
36
|
|
e1c76669
何征华
a,完善了usbjson 基础通信...
|
37
38
|
## 1.1 发送数据信息
发送方发送数据:(所有非1字节数据都是高字节在前)
|
6ac599c3
何征华
20241210 增加了usb 传...
|
39
40
|
| **字节** | **标识符** | **描述** |
| --- | --- | --- |
|
e1c76669
何征华
a,完善了usbjson 基础通信...
|
41
42
43
44
45
46
47
48
49
50
51
|
| 0 | Header | 数据包头:基站主动发送0xB1;sdk主动发送0xD1 |
| 1-2 | defualt | |
| 3-4 | com seq | 通信序号 |
| 5 | BASEID | 指定的基站编号,为0时候不指定 |
| 6 | DATA-type | 1:json数据 <br>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 |
|
6ac599c3
何征华
20241210 增加了usb 传...
|
52
53
54
|
|default | | |
|60-63 | crc32 | 此数据包的crc32;从byte0-59共60个字节 |
|
e1c76669
何征华
a,完善了usbjson 基础通信...
|
55
|
举例:sdk要发送(1071 * 2 +512 bytes)数据给基站
|
6ac599c3
何征华
20241210 增加了usb 传...
|
56
57
|
第一个发送单元:
step1:
|
e1c76669
何征华
a,完善了usbjson 基础通信...
|
58
59
60
61
62
63
64
|
3-4:100
7-10 bytes: (1071 * 2 +512 bytes)
11-14 :数据总长度的crc
15 : 3
16 : 0
17-18 : 1071
19-22 :1071数据的crc
|
6ac599c3
何征华
20241210 增加了usb 传...
|
65
66
|
60-63 : crc
step2: 基站ack
|
e1c76669
何征华
a,完善了usbjson 基础通信...
|
67
|
step3: sdk发送1071长度数据;63byte * 17包;
|
6ac599c3
何征华
20241210 增加了usb 传...
|
68
69
70
71
72
|
step4: sdk发送询问信息
step5: 基站ack
第二个发送单元:
step1:
|
e1c76669
何征华
a,完善了usbjson 基础通信...
|
73
74
75
76
77
78
79
|
3-4:100
7-10 bytes: (1071 * 2 +512 bytes)
11-14 :数据总长度的crc
15 : 3
16 : 1
17-18 : 1071
19-22 :1071数据的crc
|
6ac599c3
何征华
20241210 增加了usb 传...
|
80
81
|
60-63 : crc
step2: 基站ack
|
e1c76669
何征华
a,完善了usbjson 基础通信...
|
82
|
step3: sdk发送1071长度数据;63byte * 17包;
|
6ac599c3
何征华
20241210 增加了usb 传...
|
83
84
85
86
87
|
step4: sdk发送询问信息
step5: 基站ack
第三个发送单元:
step1:
|
e1c76669
何征华
a,完善了usbjson 基础通信...
|
88
89
90
91
92
93
94
95
|
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
|
6ac599c3
何征华
20241210 增加了usb 传...
|
96
|
step2: 基站ack
|
e1c76669
何征华
a,完善了usbjson 基础通信...
|
97
|
step3: sdk发送512长度数据;63byte * 9包;
|
6ac599c3
何征华
20241210 增加了usb 传...
|
98
99
100
|
step4: sdk发送询问信息
step5: 基站ack
|
e1c76669
何征华
a,完善了usbjson 基础通信...
|
101
|
接收方应答:
|
6ac599c3
何征华
20241210 增加了usb 传...
|
102
103
|
| **字节** | **标识符** | **描述** |
| --- | --- | --- |
|
e1c76669
何征华
a,完善了usbjson 基础通信...
|
104
105
106
107
108
109
110
111
112
113
114
|
| 0 | Header | 数据包头:sdk应答0xB1;基站应答0xD1 |
| 1-2 | defualt | |
| 3-4 | com seq | 通信序号 |
| 5 | BASEID | 指定的基站编号,为0时候不指定 |
| 6 | DATA-type | 1:json数据 <br>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 |
|
6ac599c3
何征华
20241210 增加了usb 传...
|
115
|
|
e1c76669
何征华
a,完善了usbjson 基础通信...
|
116
117
|
## 1.2 发送方连续发送N包数据包,接收方无需回复
每个数据包都带一个字节的数据头:
|
82e9cb74
李傲寒
USB JSON协议
|
118
119
|
- 基站主动发送0xB2;下一字节表示当次传输序号从1开始 1-N
- sdk主动发送0xD2下一字节表示当次传输序号从1开始 1-N
|
6ac599c3
何征华
20241210 增加了usb 传...
|
120
|
|
e1c76669
何征华
a,完善了usbjson 基础通信...
|
121
|
## 1.3 发送方发送询问
|
6ac599c3
何征华
20241210 增加了usb 传...
|
122
123
|
| **字节** | **标识符** | **描述** |
| --- | --- | --- |
|
e1c76669
何征华
a,完善了usbjson 基础通信...
|
124
125
126
127
128
129
130
131
132
133
134
|
| 0 | Header | 数据包头:基站主动发送0xB3;sdk主动发送0xD3 |
| 1-2 | defualt | |
| 3-4 | com seq | 通信序号 |
| 5 | BASEID | 指定的基站编号,为0时候不指定 |
| 6 | DATA-type | 1:json数据 <br>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 |
|
6ac599c3
何征华
20241210 增加了usb 传...
|
135
|
|
e1c76669
何征华
a,完善了usbjson 基础通信...
|
136
|
接收方应答:
|
6ac599c3
何征华
20241210 增加了usb 传...
|
137
138
|
| **字节** | **标识符** | **描述** |
| --- | --- | --- |
|
e1c76669
何征华
a,完善了usbjson 基础通信...
|
139
140
141
142
143
144
145
146
147
148
149
150
|
| 0 | Header | 数据包头:基站主动发送0xB3;sdk主动发送0xD3 |
| 1-2 | defualt | |
| 3-4 | com seq | 通信序号 |
| 5 | BASEID | 指定的基站编号,为0时候不指定 |
| 6 | DATA-type | 1:json数据 <br>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-失败 |
|
82e9cb74
李傲寒
USB JSON协议
|
151
152
153
154
|
| 24-N | result_information | 接收到的包号,依次往下写。接收方判断result为失败的时候查看这里可以直接做补传,后续直接发送0XB2 or0XD2 补传对应包 再询问|
|
e1c76669
何征华
a,完善了usbjson 基础通信...
|
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
|
# 二, 功能协议
## 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||是|状态<br>"start"-开始升级<br>"stop"-停止升级
|+partition|string||是|"base_fw" 基站固件 <br> "base_fw_bk" 基站备份固件 <br> "keypad_fw" 键盘固件<br> "front" 字库文件|
|+file len|uint||是|升级固件文件的大小(字节数),10进制数字|
|+version|string||是|待升级的基站固件版本|
|+crc|uint||是|固件CRC校验码,10进制数字|
<!-- |+time|string||是|时间,yyyyMMddHHmmss|
|+verCode|string||是|内部主题校验码,时间+固定key加密| -->
- **示例代码**
```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||是|状态<br>"start"-开始升级<br>"stop"-停止升级 <br>"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"
}
}
```
|
6ac599c3
何征华
20241210 增加了usb 传...
|
|
|
6ac599c3
何征华
20241210 增加了usb 传...
|
|
|
6ac599c3
何征华
20241210 增加了usb 传...
|
|
|
6ac599c3
何征华
20241210 增加了usb 传...
|
|
|
6ac599c3
何征华
20241210 增加了usb 传...
|
|
|