127 lines
3.0 KiB
Markdown
127 lines
3.0 KiB
Markdown
### bootloader启动
|
||
1. 复位RESET引脚约18ms
|
||
2. pc循环发送0x18 0xFF共10组
|
||
3. mcu应答0x11共9组
|
||
4. 检查mcu状态
|
||
> 01 FC 0B 00 00 02 00 00 00 0A
|
||
< 01 02 EE FF ED (加密)
|
||
< 01 02 FF FF FE (未加密)
|
||
5. 加密则执行解密动作(擦除FLASH上内容)
|
||
> B5 34 84 52 BF
|
||
< 01
|
||
6. 准备下载ramcode
|
||
> 00 00 00 00 20 A4 07 00 00 CB
|
||
< 01
|
||
7. 开始下载ramcode
|
||
> B8 0A ... 9F
|
||
< 01
|
||
8. 启动ramcode
|
||
> C0 00 00 00 00 00 00 00 00 C0
|
||
< happybaby 00 00
|
||
|
||
|
||
### ramcode启动
|
||
启动后mcu端发送字符串 *happybaby*
|
||
> 68 61 70 70 79 62 61 62 79 00 00
|
||
|
||
0. 修改通信用波特率
|
||
- 修改成9600bps (00 00 80 25)
|
||
> 49 01 00 00 00 00 04 00 80 25 00 00 F3
|
||
- 修改成115200bps (00 01 C2 00)
|
||
> 49 01 00 00 00 00 04 00 00 C2 01 00 11
|
||
- 应答
|
||
< 49 00 00 00 00 00 00 00 49
|
||
|
||
1. 请求0x20字节数据 (指定波特率)
|
||
> 49 05 00 00 00 00 20 00 6E
|
||
< 49 00 00 00 00 00 20 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FE FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF EF 38
|
||
|
||
2. 校验错误
|
||
> 49 05 00 00 00 00 20 00 5E
|
||
< 49 01 00 00 00 00 00 00 4A
|
||
|
||
3. 请求0x10字节数据
|
||
> 49 05 00 00 00 00 10 00 5E
|
||
< 49 00 00 00 00 00 10 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FE 48
|
||
|
||
4. 请求0x0200字节数据
|
||
> 49 05 00 00 00 00 00 02 50
|
||
> 49 05 00 02 00 00 00 02 52
|
||
> ...
|
||
> 49 05 00 3C 00 00 00 02 8C
|
||
> 49 05 00 3E 00 00 00 02 8E
|
||
|
||
5. 空白检测
|
||
> 49 07 00 00 00 00 04 00 00 40 00 00 94
|
||
< 49 00 00 00 00 00 01 00 01 4B
|
||
> 49 07 00 00 00 00 04 00 00 02 00 00 56
|
||
< 49 00 0F 00 00 00 01 00 00 59
|
||
|
||
6. 整片擦除
|
||
> 49 02 00 00 00 00 00 00 4B
|
||
|
||
7. 页擦除(1sector=512Bytes)
|
||
> 49 03 00 00 00 00 00 00 4C
|
||
< 49 00 00 00 00 00 00 00 49
|
||
> 49 03 00 02 00 00 00 00 4E
|
||
< 49 00 00 02 00 00 00 00 4B
|
||
> ...
|
||
> 49 03 00 3E 00 00 00 00 8A
|
||
> 49 00 00 3E 00 00 00 00 87
|
||
|
||
8. 编程
|
||
> 49 04 00 00 00 00 20 00 <data> CHK
|
||
< 49 00 00 00 00 00 00 00 49
|
||
|
||
9. 校验,所有数据的累加和取最后两个字节
|
||
> 49 06 00 00 00 00 04 00 20 00 00 00 73
|
||
< 49 00 00 00 00 00 02 00 CF 1F 39
|
||
> 49 06 00 00 00 00 04 00 00 40 00 00 93
|
||
< 49 00 00 00 00 00 02 00 00 C0 0B
|
||
|
||
|
||
#### 读取FLASH数据
|
||
> 49 05 A0 A1 A2 A3 L0 L1 CHK
|
||
< 49 00 A0 A1 A2 A3 L0 L1 <data> CHK
|
||
* 49 05: 协议头
|
||
* A3..0: 起始地址
|
||
* L1..0: 字节长度
|
||
* data: FLASH数据
|
||
|
||
#### 按页擦除FLASH数据
|
||
> 49 03 A0 A1 A2 A3 00 00 CHK
|
||
< 49 00 A0 A1 A2 A3 00 00 CHK
|
||
* 49 03: 协议头
|
||
* A3..0: 起始地址
|
||
|
||
#### 整片擦除FLASH数据,耗时约40ms
|
||
> 49 02 00 00 00 00 00 00 4B
|
||
< 49 00 00 00 00 00 00 00 49
|
||
* 49 02: 协议头
|
||
|
||
|
||
#### 空白检测
|
||
> 49 07 00 00 00 00 04 00 A0 A1 A2 A3 CHK
|
||
< 49 C1 C0 00 00 00 01 00 00 CHK
|
||
* 49 07: 协议头
|
||
* C1..0: 检测值
|
||
* A3..0: 字节长度
|
||
|
||
#### 校验
|
||
> 49 06 00 00 00 00 04 00 L0 L1 L2 L3 CHK
|
||
< 49 00 00 00 00 00 02 00 S1 S0 CHK
|
||
* 49 06: 协议头
|
||
* S1..0: 校验和
|
||
* L3..0: 字节长度
|
||
|
||
#### 编程
|
||
> 49 04 A0 A1 A2 A3 L0 L1 <data> CHK
|
||
< 49 00 A0 A1 A2 A3 00 00 CHK
|
||
* 49 04: 协议头
|
||
* A3..0: 起始地址
|
||
* L1..0: 字节长度,最大支持0x40字节
|
||
|
||
#### 加密
|
||
> 49 09 00 00 00 00 00 00 52
|
||
< 49 00 00 00 00 00 00 00 49
|