EFM8SB1通过串口升级固件

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)
App0x0000flash size - 512
Bootflash size - 512512

以EFM8SB10F8G为例,其Flash大小为8K,内存分布如下:

在这里插入图片描述

例子2:
EFM8SB10F2G的Flash大小为2K,所以App分区的地址为0x0000-0x5FF,大小为1.5K,Bootloader分区的地址为0x600-0x7FF,大小为0.5K。

2.3 引导程序启动方式

根据官方手册描述,进入引导程序的方式有以下3种,但实际上,第1种方式似乎不起作用,第3种方式我没试过,仅供参考。

  1. 内存地址0x0000的值为0xFF(即没有app或者app不完整),上电自动运行boot程序。
  2. MCU上电时检测到C2D引脚被拉低,会自动进入boot程序。
  3. 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用户程序升级的固件

官方引导程序获取方式:

  1. 从官网上下载。官网下载的AN945SW文件夹有各种型号的Bootloader。
  2. 从Simplicity Studio运行examples获得。

在这里插入图片描述

3.2 烧录引导程序

首先需要将引导程序(Bootloader)烧录到空片中,才能使用UART Bootloader进行固件升级,存放位置为芯片内部Flash的最后512byte。
注:有些芯片可能官方出厂时就已经将引导程序烧录到芯片上了,不需要再烧录Bootloader。

烧录器可以选择官方推荐的C2烧录器,也可以使用JLINK烧录器。

JLINK烧录方法参考文章:EFM8通过JLink烧录固件

参考示例:
在这里插入图片描述

3.3 升级

1.硬件连接
将MCU的串口和PC连接(通过USB转TTL模块)。

EFM8USB转TTL模块说明
UART0 TXRXMCU串口发,PC串口收
UART0 RXTXMCU串口收,PC串口发
GNDGND共地
VCC3.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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值