联系我们大型铝电解电容小微型铝电解电容贴片铝电解电容器聚合物铝电解电容器

品质诚信服务

当前位置:首页 >> 产品和行业资讯 >> 单片机的Bootloader可以实现用户对程序的轻松升级

单片机的Bootloader可以实现用户对程序的轻松升级

这次商务旅行的目的是升级程序以解决该错误。

用户已经包装好产品,无法打开盖子。

只有CAN总线才能用于更新程序,该程序是通过Bootloader实现的。

实际上,.bin / hex文件通过主机的CAN通信发送到单片机,并存储在指定的Flash中。

此过程类似于在手机上更新APP。

以STM8单片机为例,如何实现Bootloader?立即与您分享。

01什么是Bootloader Bootloader是一段代码,用于更新其自己的应用程序软件并独立运行。

它通常用于升级产品和修复产品错误。

如果要下载STM8微控制器的十六进制文件,则需要通过STVP和STLINK来实现。

微控制器的SWIM引脚是下载接口。

如果产品包装在用户端而无法通过SWIM下载怎么办?仅使用Bootloader,STM支持CAN和UART来实现Bootloader。

通过CAN通讯或UART通讯将数据存储在STM8的Flash中。

02划分闪存间隔STM8的中断向量的跳转地址是固定的,并且跳转到与0x8000对应的中断的偏移地址,因此Bootloader将存储在从0x8000开始的空间中。

例如,为Bootloader代码分配的空间为4k。

那么该空间的起始地址为:0x8000-0x8FFF;那么应用程序代码的起始地址可以从0x9000开始。

03修改中断向量表STM8的中断向量表由特定代码实现,需要根据上述空间划分进行修改。

STM8应用程序的起始地址为0x8400,默认矢量表如以下代码所示。

__root const long reintvec [] @“。

intvec” = {0x82008080,0x82008404,0x82008408,0x8200840c,0x82008410,0x82008414,0x82008418,0x8200841c,0x82008420,0x820088444444,0x820084440,0x820084440,0x820084440,0x820084440,0x820084440,0x820084440,0x820084440,0x820084440,0x820 0x82008450,0x82008454,0x82008458,0x8200845c,0x82008460,0x82008464,0x82008468,0x8200846c,0x82008470,0x82008474,0x82008478,0x8200847c,0x9000,因此向量表的起始地址已修改为0x9000如:除第一个元素外,其他元素从8更改为9。

修改后,代码如下:__root const long reintvec [] @“。

intvec” = {0x82008080,0x82009404,0x82009408,0x8200940c, 0x82009010,0x82009014,0x82009018,0x8200901c,0x82009020,0x82009024,0x82009028,0x8200902c,0x82009030,0x82009034,0x82009038,0x8200903c,0x82009040,0x82009044,0x82009048,0x8200904c,0x82009050,0x82009054,0x82009058,0x8200905c,0x82009060,0x82009064,0x82009068,0x8200906c,0x82009070, 0x82009074,0x82009078,0x8200907c,}; 04修改ICF文件ICF文件存储在编程环境的安装目录中。

每个型号/系列的单片机都将对应一个ICF文件。

您需要修改ICF文件。

在这里,您需要根据闪存空间的划分对其进行修改。

将引导加载程序的终止地址设置为0x9FFF,因此,请对其进行如下修改:定义区域NearFuncCode = [从0x8000到0x8FFF];定义大小为0x80的块INTVEC {ro section.intvec};放置在NearFuncCode {block INTVEC}的开头; 05 Jump命令跳转,即应用程序中的Jump to Boot升级;升级完成后,需要跳转到应用程序,跳转的起点是起始地址。

引导加载程序如下跳转到应用程序代码: ); asm(“ JPF $ 9000”);应用程序跳转到Bootloader的代码如下:sm(“ LDW X,SP”)​​; asm(“ LD A,$ FF”); asm(“ LD XL,A”); asm(“ LDW SP,X”); asm(“ JPF $ 8000”); 06编写交互式代码设置完上述设置之后,您就可以编写交互式代码,因此,交互式代码实际上是一组协议,用于指定应用程序如何跳转到Boot,如何在Boot中处理和存储数据,需要以下支持:主机。

如果仅用于您自己的产品,则可以自己定义协议。

也可以使用标准协议,例如汽车行业中的UDS(统一诊断服务)。

实现Bootloader后,可以使用CAN / UART升级产品固件。

这是Bootloader的关键内容,您是否了解本文?发表评论并进行讨论。

-END-来源|有趣的嵌入式作者|刘小树|整理有关技术文章的传播,著作权归原作者| |如果有任何侵权,请联系以将其删除| [1]嵌入式研发超过10年,en