扫码加入

  • 正文
  • 相关推荐
申请入驻 产业图谱

EFM8SB1 UART Bootloader固件传输协议解析

01/20 08:24
331
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

1 简介

EFM8SB1 UART Bootloader是官方的引导程序,用于EFM8SB1系列微控制器。它可以通过UART接口将固件传输到EFM8SB1微控制器中进行更新或配置。

EFM8各型号及其支持的固件升级方式如下图所示: 在这里插入图片描述

2 原理

固件升级流程图如下: 在这里插入图片描述

3 协议解析

3.1 协议格式

EFM8SB1 UART Bootloader串口下发协议格式如下:

帧头(1byte) 长度(1byte) 命令(1byte) 数据(nbyte)
0x24(‘$’) 总长-2 0x30-0x36(‘0’-‘6’) data

EFM8SB1 UART Bootloader串口应答协议格式如下:

应答(1byte)
0x40-0x43(‘@’ ‘A’ ‘B’ ‘C’)

3.2 命令解析

下发命令如下:

命令 说明
BOOT_CMD_IDENT 0x30(‘0’) 识别命令
BOOT_CMD_SETUP 0x31(‘1’) 设置参数
BOOT_CMD_ERASE 0x32(‘2’) 擦写Flash(先擦后写)
BOOT_CMD_WRITE 0x33(‘3’) 写Flash
BOOT_CMD_VERIFY 0x34(‘4’) 校验Flash
BOOT_CMD_LOCK 0x35(‘5’) 加锁Flash
BOOT_CMD_RUNAPP 0x36(‘6’) 运行应用程序

注意:上述命令是根据官方Bootloader的demo定义的,实际使用有所差异,如0x30和0x35命令在实际升级过程中并没有使用。

应答命令如下:

应答 说明
BOOT_ACK_REPLY 0x40(‘@’) 回复命令
BOOT_ERR_RANGE 0x41(‘A’) 地址范围错误
BOOT_ERR_BADID 0x42(‘B’) ID错误
BOOT_ERR_CRC 0x43(‘C’) 校验错误

3.2 数据传输

数据传输过程如下: 1. 主机发送设置参数命令0x31,设置Flash参数

命令下发如下:

帧头(1byte) 长度(1byte) 命令(1byte) 数据(3byte)
0x24 0x04 0x31 flash keys(2byte,大端模式) + flash bank(1byte)

如:24 04 31 a5 f1 00 根据EFM8SB1参考手册,flash key code就是 0xa5f1。

应答如下:

应答(1byte)
0x40(‘@’)

2. 主机发送写Flash命令0x32/0x33,传输数据

命令下发如下:

帧头(1byte) 长度(1byte) 命令(1byte) 数据(nbyte)
0x24 0x83 0x32/0x33 flash地址(2byte,大端模式) + 新固件数据(128byte)

注: 1.无论是0x32还是0x33命令,都是传输128byte的固件数据,但区别在于0x32命令需要先擦除对应区域的Flash,再写数据;0x33命令则不需要擦除直接写入。按照EFM8的内存分布,一个扇区是512byte,也就是说,每4条命令中,第1条命令是0x32,其余的3条命令都是0x33。 2.新固件第一帧第一个字节为0xFF,而非实际值,后续数据字节为实际值。若新固件传输异常中断,需重新传输时,因为首字节为0xFF,因此MCU启动时会自动跳转到Bootloader,而不会跳转到应用程序。

应答如下:

应答(1byte)
成功:0x40(‘@’),地址错误:0x41(‘A’)

3. 主机发送校验Flash命令0x34,校验数据

命令下发如下:

帧头(1byte) 长度(1byte) 命令(1byte) 数据(nbyte)
0x24 0x07 0x34 flash起始地址(2byte,大端模式) + flash大小(2byte,大端模式) + 校验数据(2byte,大端模式)

应答如下:

应答(1byte)
成功:0x40(‘@’),校验错误:0x43(‘C’)

4. 主机发送写Flash命令0x33,传输数据

命令下发如下:

帧头(1byte) 长度(1byte) 命令(1byte) 数据(nbyte)
0x24 0x04 0x33 flash地址(2byte,大端模式) + 新固件首字节(1byte)

应答如下:

应答(1byte)
成功:0x40(‘@’),地址错误:0x41(‘A’)

注:该命令和前面第2步命令相同,区别在于前面传输的固件首字节为0xFF,而该命令传输的固件首字节为实际值。

应答如下:

应答(1byte)
0x40(‘@’)

5. 主机发送运行应用程序命令0x36,重启MCU

命令下发如下:

帧头(1byte) 长度(1byte) 命令(1byte) 数据(0byte)
0x24 0x03 0x36 0x00 0x00

应答如下:

应答(1byte)
0x40(‘@’)

4 结束语更多内容,可参考官方文档:AN945: EFM8 Factory Bootloader User’s Guide

相关推荐