EFM8SB1通过串口升级固件
目录
1 简介
EFM8SB1 UART Bootloader是官方的引导程序,用于EFM8SB1系列微控制器。它可以通过UART接口将固件传输到EFM8SB1微控制器中进行更新或配置。
EFM8各型号及其支持的固件升级方式如下图所示:
2 原理
2.1 固件升级流程
升级流程图如下:
简单来说就是先新固件(.hex文件)通过hex2boot工具转换成boot格式文件(.efm8),然后使用efm8load工具经串口将新固件下载到MCU。
2.2 内存分布
EFM8的Flash没有单独区分Boot和App,全都都放在同一块用户内存里面。其中,官方Bootloader的大小为512byte,存放在MCU Flash的最后512byte中。
EFM8 Flash分区如下:
分区 | 起始地址 | 大小(byte) |
---|---|---|
App | 0x0000 | flash size - 512 |
Boot | flash size - 512 | 512 |
以EFM8SB10F8G为例,其Flash大小为8K,内存分布如下:
例子2:
EFM8SB10F2G的Flash大小为2K,所以App分区的地址为0x0000-0x5FF,大小为1.5K,Bootloader分区的地址为0x600-0x7FF,大小为0.5K。
2.3 引导程序启动方式
根据官方手册描述,进入引导程序的方式有以下3种,但实际上,第1种方式似乎不起作用,第3种方式我没试过,仅供参考。
- 内存地址0x0000的值为0xFF(即没有app或者app不完整),上电自动运行boot程序。
- MCU上电时检测到C2D引脚被拉低,会自动进入boot程序。
- App运行时把0x0000的值改为0xA5,然后软复位,重启后会先进入boot。
3 升级固件
3.1 硬件工具
工具 | 名称 | 说明 |
---|---|---|
USB转TTL模块 | 如:CH340G/PL2303等 | 用于将USB接口转换为TTL电平,方便与MCU进行通信 |
JLINK/C2调试器 | 如:JLINK/V2等 | 用于下载和调试MCU的固件,支持JTAG和SWD调试模式 |
3.2 软件工具
软件 | 名称 | 说明 |
---|---|---|
hex2boot | 固件格式转换工具 | 用于将hex文件转换成efm8文件 |
efm8load | 固件升级工具 | 用于下载升级MCU的固件 |
上述工具可以在官网上下载AN945SW
文件。
找不到的话也可以在下面这个链接下载:
https://download.csdn.net/download/ShenZhen_zixian/91149465
3.3 固件
固件 | 名称 | 说明 |
---|---|---|
Bootloader | 官方引导程序 | 用于下载升级MCU的固件 |
App | 用户程序 | 升级的固件 |
官方引导程序获取方式:
- 从官网上下载。官网下载的AN945SW文件夹有各种型号的Bootloader。
- 从Simplicity Studio运行examples获得。
3.2 烧录引导程序
首先需要将引导程序(Bootloader)烧录到空片中,才能使用UART Bootloader进行固件升级,存放位置为芯片内部Flash的最后512byte。
注:有些芯片可能官方出厂时就已经将引导程序烧录到芯片上了,不需要再烧录Bootloader。
烧录器可以选择官方推荐的C2烧录器,也可以使用JLINK烧录器。
JLINK烧录方法参考文章:EFM8通过JLink烧录固件
参考示例:
3.3 升级
1.硬件连接
将MCU的串口和PC连接(通过USB转TTL模块)。
EFM8 | USB转TTL模块 | 说明 |
---|---|---|
UART0 TX | RX | MCU串口发,PC串口收 |
UART0 RX | TX | MCU串口收,PC串口发 |
GND | GND | 共地 |
VCC | 3.3V | 电源 |
注:MCU电源和USB转TTL模块可以不共用电源,共地即可。
2.制作升级固件
通过Windows命令窗口,调用hex2boot,将hex文件转换成efm8格式。
命令格式如下:
hex2boot <input_filename> -o <output_filename>
使用示例:
hex2boot.exe firmware.hex -o firmware.efm8
3.串口升级固件
使MCU进入boot模式。方法参考2.3 引导程序启动方式。
通过Windows命令窗口,调用efm8load,将efm8格式文件经串口传输到MCU。
命令格式如下:
efm8load.exe -p <port> -t <filename>
使用示例:
efm8load.exe -p COM4 -t firmware.efm8
-p:指定端口号,例如:efm8load.exe -p COM4 firmware.efm8
-t:在下载过程中输出详细信息,例如:efm8load.exe -t firmware.efm8
参考示例:
注:通过输出的信息可以知道升级是否成功。若烧录成功,error的值为0且每一行数据应答都是’@‘。若烧录失败,error的值不为0且每一行数据应答都是’?'。
4 总结
本文介绍了如何通过串口升级EFM8微控制器的固件。需要注意的是,不同的EFM8微控制器可能有不同的引导程序,需要根据具体的芯片型号和引导程序进行升级。
另外,若对官方Bootloader的实现方法感兴趣,可以看下文章EFM8SB1官方Bootloader串口传输协议解析
更多内容,可参考官方文档:AN945: EFM8 Factory Bootloader User’s Guide