AN945 EFM8 Factory Bootloader用户指南中文版

AN945  EFM8 Factory Bootloader用户指南中文版
AN945  EFM8 Factory Bootloader用户指南中文版

AN945:EFM8 Factory Bootloader用户指南

本文档介绍了工厂编程的引导加载程序可用于EFM8设备。除了描述引导程序的功能,本文档还详细介绍了如何使用引导加载程序并更新Bootloader固件源代码或python主机软件,如果需要定制。

关键点

EFM8工厂编程的引导加载程序提供基本的生产编程或现场更新支持。?主机端都提供源代码python工具和bootloader 件来启用自定义。

1介绍

EFM8设备在工厂中使用引导加载程序进行编程。此引导程序启用:

1. 生产编程- 可以在生产环境中对设备进行编程,而无需使用调试接口需要PCB上的接入点和调试适配器。

2. 2.现场更新- 可以在现场的设备上发布更新,无需最终用户访问调试引脚或使用调试适配器硬件。

引导加载程序主要用于具有最小功能集的生产编程,但也可用于现场更新。因为几个EFM8变体可以有2 KB的闪存,引导程序的设计尽可能小。例如,UART和SMBus版本消耗单个512闪存页面,USB版本消耗1.5 KB闪存。另外,bootloader通常位于代码安全页面中,以使引导程序能够写入和擦除锁定的应用程序空间。更多信息在每个设备上的引导加载程序放置位置可以在设备数据手册或参考手册中找到。

22. USB或UART引导加载程序入门

这些步骤假定使用入门套件。使用自定义硬件时,步骤相同。

这些步骤还假设应用笔记zip文件已经下载到PC,或者使用Simplicity访问文件

工作室。应用程序zip文件可以在Silicon Labs网站(https://www.360docs.net/doc/40187142.html,/8bit-appnotes)上找到。

?将Bootloader下载到设备

如果引导加载程序尚未在设备上,请使用Simplicity Studio将Bootloader下载到设备,并按以下步骤操作。

日期代码在设备勘误表中列出的日期之后的顶部标记的设备可以支持引导加载程序并可能具有

bootloader预装。在此之前的日期代码的设备将不能与引导程序一起使用。

?打开Simplicity Studio。

?将入门工具包连接到PC。

?将套件开关移动到[AEM]位置。

?单击Simplicity Studio左窗格中的[Refresh detected hardware]按钮。该套件应显示在[Detected Hardware]

区。

?单击工具包,然后单击Simplicity Studio的[tool]区域中的[Flash Programmer]图块。

?单击[Erase]按钮。

?单击[Browse]按钮,导航到套件设备的预编译引导加载程序十六进制文件,单击[Open],然后单击[Program]。

使用引导加载程序将应用程序下载到设备

?由于闪存最初为空(从上一步中的擦除命令开始),器件将在引导加载模式下自动启动。

?对于USB引导加载设备(即EFM8UB1),请将第二条USB电缆连接到设备USB接口的底部边缘

入门套件

?在与Windows中的efm8load Python主机工具([Start]> [Run]> [command]相同的目录中打开命令行窗口)。?键入efm8load.exe,后跟Bootload记录的名称。例如:

efm8load.exe EFM8UB1_RainbowBlinky.efm8

这将将文件下载到入门工具包并自动运行应用程序。

注意:请注意,bootload记录是由hex2boot.exe主机端工具创建的。有关此工具的更多信息,请参见

5.使用主机端工具。

3. 启动SMBus引导加载程序

这些步骤假定使用入门套件。使用自定义硬件时,步骤相同。

这些步骤还假设应用笔记zip文件已经下载到PC,或者使用Simplicity访问文件

工作室。应用程序zip文件可以在Silicon Labs网站(https://www.360docs.net/doc/40187142.html,/8bit-appnotes)上找到。

由于SMBus不是作为PC上端口的总线类型,因此这些步骤使用CP2112 USB to SMBus评估板

示范目的。

?将EFM8LB1 STK连接到CP2112 EK。

?在EFM8LB1 STK和CP2112 EK之间安装三条跳线,以连接SDA,SCK和GND信号。使用

下表作为指导。请注意,EFM8LB1 STK的SMBus引导加载程序使用SDA和SCK的非标准引脚分配

以适应STK设计。另外,请确保在CP2112 EK的J7引脚1:2上安装跳线以启用SMBus上拉

电阻器。

?使用USB电缆将两个电路板连接到PC。

?将Bootloader下载到设备

如果SMBus引导加载程序尚未在设备上,请使用Simplicity Studio将引导加载程序下载到设备,步骤如下

下面。

注意:请注意,用于STK的SMBus引导加载程序的引脚分配与预加载的标准SMBus引导加载程序不同

EFM8LB1设备。

?开放简约工作室。

?将入门工具包连接到PC。

?将套件开关移动到[AEM]位置。

?单击Simplicity Studio左窗格中的[刷新检测到的硬件]按钮。该套件应显示在[检测硬件]

区。

?单击工具包,然后单击Simplicity Studio的[工具]区域中的[Flash程序员]图块。

?单击[擦除]按钮。

?单击[浏览]按钮,导航到套件设备(EFM8LB12F64E_QFN32)的预编译引导加载程序十六进制文件,单击

[打开],然后单击[程序]。

?使用引导加载程序将应用程序下载到设备

?由于闪存最初为空(从上一步中的擦除命令开始),器件将在引导加载模式下自动启动。

?在与Windows中的efm8load Python主机工具([Start]> [Run]> [command]相同的目录中打开命令行窗口)。?键入efm8load.exe,后跟SMBus引导加载程序开关和引导加载记录的名称。例如:

efm8load.exe -psmb EFM8LB1_RainbowBlinky.efm8

这将通过CP2112 EK将文件下载到入门工具包。efm8load实用程序使用默认的100 kHz时钟速率。使用

[-baud]开关调节时钟频率。使用RainbowBlinky应用程序在STK上运行时,按[PB0]按钮

启动引导程序。RainbowBlinky预制引导映像位于:。\ AN945SW_SMB \ Firmware \ EFM8LB1_SLSTK2030A \ RainbowBlinky \ BIN \ EFM8LB1_RainbowBlinky.efm8。

注意:请注意,bootload记录是由hex2boot.exe主机端工具创建的。有关此工具的更多信息,请参见

5.使用主机端工具。

4.功能概述

4.1系统架构

如下图所示,EFM8引导加载程序工具将读取一个映像文件(十六进制或二进制),并将其转换为一系列引导程序2命令。这些命令格式化为引导记录,存储在文件中或直接发送到EFM8设备。使用相同的二进制记录格式,无论是保存到文件还是通过引导加载程序传输。引导程序命令被设计为不返回任何数据,并且它们包含执行命令所需的所有信息并确定成功或失败。要实现嵌入式主机,请从文件读取每个记录,将其发送到EFM8设备,并等待确认。因为引导记录文件是二进制的,所以它对图像增加了很少的开销,应该很容易嵌入。

4.2引导程序概述

所有设备都使用UART(?500字节),SMBus(?500字节)或USB HID(?1.5 kB)引导加载程序进行预编程。这个引导程序驻留在代码安全页面中。如果它太大,不适合代码安全页面,它也将占用最后一页代码闪存。它可以擦除如果不需要。锁定字节之前的字节是Bootloader签名字节。将此字节设置为值0xA5表示引导加载程序的存在

在系统中。此位置中的任何其他值表示引导加载程序不存在于闪存中。当存在引导加载程序时,设备将在任何重置后跳转到引导加载程序向量,从而允许引导程序运行。引导程序然后确定设备是否应保持在引导加载模式或跳转到位于0x0000的复位向量。当bootloader不存在,任何复位后,器件将跳转到0x0000的复位向量。

4.3引导加载程序功能特性

本节讨论引导程序固件的特定功能。

请注意,引导加载程序源代码和预构建的十六进制文件可在Simplicity Studio中使用[Software Examples]图块或可用在Silicon Labs网站(https://https://www.360docs.net/doc/40187142.html,/8bit-appnotes)上。这使Bootloader可以在任何设备上进行重新编程如果意外删除,并且可以根据需要为任何应用程序定制引导程序。AN945:EFM8 Factory Bootloader用户指南功能概述SILABS。

4.3.1进入引导加载模式

?在任何复位时,如果闪存地址0x0000为0xFF(即,未编程复位向量的第一个字节),引导加载程序将启动。这个确保新的或已擦除的部件启动引导程序进行生产编程。为了强壮,Bootloader将首先擦除Flash页面0,最后写入闪存地址

0x0000。这样可以确保任何中断引导加载操作将在中断擦除结束重新启动。?要根据需要启动引导加载程序,应用程序固件可以在Bank 0(数据地址0x00)的R0中设置签名值0xA5,然后启动设备的软件复位。如果引导加载程序使用R0中的签名值看到软件复位,则它将启动引导程序执行而不是跳转到应用程序。

?为了在应用程序损坏的情况下提供故障安全操作,引导加载程序将在上电复位(POR)或引脚复位时启动如果引脚保持低电平超过50μs。表4.1总结中提供了每个设备和包的入口引脚的完整列表引导加载模式条目的引脚第10页。此引导

加载程序输入法的引脚也可以通过查看efm8_device.h文件中的bootloader源代码。没有选项禁用此条目方法。

4.3.1.1Rainbow Blinky示例

[Demo]文件夹中的[Rainbow Blinky](或EFM8SB1的[PWM Blinky])示例可以使用[Software Examples] Simplicity Studio演示如何使用软件重置条目方法创建可以进入引导加载模式的应用程序。

除了标准的Rainbow Blinky操作之外,本应用程序还查看入门工具包上的PB0是否被按下。如果是,那么示例在LCD屏幕上显示[Loader],将0xA5的签名值写入R0地址(数据地址0x00),并启动

软件重置。当这种情况发生时,引导加载程序会看到数据地址的签名值,并保持在引导加载模式。该

这样做的代码很简单,如下所示:

// Start the bootloader if PB0 is pressed

if (BSP_PB0 == BSP_PB_PRESSED)

{

// Print "Loader" to the screen

colorIndex = 8;

DrawColorName();

// Write R0 and issue a software reset

*((uint8_t SI_SEG_DATA *)0x00) = 0xA5;

RSTSRC = RSTSRC_SWRSF__SET | RSTSRC_PORSF__SET;

}

4.3.2通讯接口

?引导加载程序通信接口被轮询,因为引导加载程序无法访问第0页的中断向量。?通信使用自定义二进制协议。该协议在所有通信接口中是常见的,并在其中描述Bootloader协议中的更多细节。

UART

?UART引导加载程序支持使用0xFF作为自动波特率训练字节的自动波特率机制。节省空间,机制只能支持最高的T1预分频范围,这将限制UBx设备的最低波特率为115200,而在57600所有其他设备。所有设备的最大波特率为460800。?为了支持一致的波特率范围,引导加载程序将为系统时钟选择HFOSC0,即24.5或20MHz大部分。

USB

?USB引导加载程序使用HID类。此类不需要驱动程序安装并实现较小的实现。保存引导加载程序不支持USB字符串描述符(例如序列号)。这意味着只有一个USB引导加载程序设备可以一次连接到PC,因为PC无法区分多个设备。

?USB引导加载程序通过第9章一致性测试,但不支持暂停和恢复。

?USB引导加载程序使用Silicon Labs VID(0x10C4),每个器件系列将具有唯一的PID,如表USB引导加载程序PID的总结(第12页)。PID不可自定义。

SMBus

?SMBus引导加载程序仅为从站接口。

?字节对齐的从站地址为0xF0。

?SMBus引导加载程序使用SMB模块(而不是I2CSLAVE模块)。

?在SCK时钟速率高于100 kHz的情况下,SMBus从机可以通过在确认后保持SCK信号为低电平来采用时钟延长位。这个时钟延长是必要的,以使引导程序有足够的时间来完成闪存写入周期。防止a在闪存擦除期间长时钟延长,当使用hex2boot实用程序创建引导映像时,需要使用[-e1]选项。有关此新的hex2boot选项的更多信息,请参阅5.1.2命令。?Bootloader擦除和验证命令可能需要几十毫秒才能完成。当这些命令正在处理中时,引导程序无法服务SMBus从站。作为引导加载程序协议的一部分,SMBus主机必须查询从机接收最后一个命令的结果。为了让主人知道正在处理最后一个命令,引导程序使用ACK轮询机制。这是与I2C EEPROM器件在闪存写周期期间使用的机制相同的机制。的主要特点ACK轮询是在处理当前引导记录时,SMBus引导加载程序将NAK其从站地址。主调查引导程序通过尝试主读取传输。如果从站地址为NAK'd,则主站知道引导程序仍在忙最后一个命令。主机应继续重试传输,直到从机地址被ACK'并且读取传输完成。在这一点上,主人可以写下一个引导记录。

?SMBus引导加载程序将所有EFM8LB1软件包的SDA分配给P0.2和SCK至P0.3。STK将这些引脚用于另一个引脚目的,所以有一个特殊的SMBus引导加载程序构建为STK只。

4.3.3内存

?引导加载程序始终位于安全页面中。这允许它擦除和写入所有应用程序闪存页面,而不管锁定字节状态。这也防止引导程序被应用程序代码意外擦除。如果引导程序大于安全页面,它使用最顶层的应用程序空间页面。

?可以通过擦除设备来恢复所有引导加载程序内存以供应用程序使用。唯一的例外是Bootloader签名字节,如果引导加载程序不存在,则不应将其编程为0xA5。

?设备从工厂出货,闪光灯解锁。

?引导程序提供写入锁定字节和引导加载程序签名字节的方法。

?可以通过将0x00写入引导加载程序签名字节来禁用引导加载程序。通过这样做,MCU直接跳转到应用程序,从不调用引导程序。因此,所有引导加载程序输入方法也被禁用。

?出于安全考虑,引导程序不支持读取。闪存内容的验证可以使用CRC进行。

4.3.4安全和加密

?加密或认证不作为引导加载程序的一部分内置。

?启动时的应用程序验证(例如,CRC over app)不作为引导程序的一部分内置。

5.使用主机端工具

主机端引导加载程序工具由两部分组成:hex2boot,它从十六进制文件创建一个引导加载记录和efm8load,其中将引导加载记录下载到EFM8设备。

5.1 Hex2Boot - 十六进制到引导加载记录转换器

5.1.1介绍

hex2boot工具可将标准的Intel hex文件转换为8051构建工具(如Keil)成功构建后的输出。记录。引导加载记录是由引导加载程序协议中描述的引导加载程序命令组成的纯二进制文件。注意:有关intelhex模块的限制的信息,请参阅本文档附带的zip文件中的各个许可证,这是由hex2boot使用的。

相关主题
相关文档
最新文档