扫码加入

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

EFM8SB1通过串口升级固件

01/15 14:31
595
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

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种方式我没试过,仅供参考。

  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模块)。

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

相关推荐