0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

以STM8单片机为例,该如何实现Bootloader呢?

Q4MP_gh_c472c21 来源:玩转嵌入式 作者:刘小舒 2020-11-16 16:52 次阅读

这次出差是为了升级程序解决Bug,用户已经将产品封装起来,无法开盖,只能使用CAN总线来更新程序,用Bootloader实现。其实就是通过上位机把.bin/hex文件以CAN通讯的方式发送给单片机并存储在规定的Flash中。这个过程与手机端更新APP类似。

STM8单片机为例,该如何实现Bootloader呢?今天和大家分享一下。

01

什么是Bootloader

Bootloader是一段用于更新自身应用软件并独立运行的代码,常被用于升级产品和修复产品bug。STM8单片机如果要下载hex文件的话需要通过STVP和STLINK来实现,单片机的引脚SWIM就是下载接口。如果产品在用户端被封装好了,无法通过SWIM来下载该怎么办呢?就使用Bootloader,STM支持CAN和UART实现Bootloader。就是通过CAN通信或者UART通信将数据存放在STM8的Flash上。

02

划分Flash区间

STM8的中断向量跳转地址是固定的,会跳转到0x8000对应中断的偏移地址,所以会把Bootloader存放在0x8000开始的空间内,比如给Bootloader代码所划分的空间为4k,那么空间起始地址为:0x8000-0x8FFF;那么应用代码的起始地址就可以从0x9000开始。

03

修改中断向量表

STM8的中断向量表通过一段特定的代码来实现,并需要根据前文提到的空间划分来修改。STM8的应用程序起始地址是0x8400,默认的向量表如下代码所示。

__rootconstlongreintvec[]@".intvec"={0x82008080,0x82008404,0x82008408,0x8200840c,0x82008410,0x82008414,0x82008418,0x8200841c,0x82008420,0x82008424,0x82008428,0x8200842c,0x82008430,0x82008434,0x82008438,0x8200843c,0x82008440,0x82008444,0x82008448,0x8200844c,0x82008450,0x82008454,0x82008458,0x8200845c,0x82008460,0x82008464,0x82008468,0x8200846c,0x82008470,0x82008474,0x82008478,0x8200847c,};前文已经将应用程序的起始地址修改为0x9000,所以,向量表的的修改方法为:除了第一个元素为,其余的元素将8改为9,修改完后代码如下:

__rootconstlongreintvec[]@".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文件,这里需要根据flash空间的划分来修改,前面将Bootloader的终止地址设置为0x9FFF,所以修改如下:

defineregionNearFuncCode=[from0x8000to0x8FFF];defineblockINTVECwithsize=0x80{rosection.intvec};place at start of NearFuncCode { block INTVEC };

05

跳转命令

所谓跳转,就是在应用程序中跳转到Boot中去升级;升级完成后需要跳转到应用程序中,所跳转的起始就是起始地址。Bootloader跳转到应用程序的代码如下,

asm("LDW X, SP ");asm("LDA,$FF");asm("LDXL,A");asm("LDWSP,X");asm("JPF$9000");应用程序跳转到Bootloader中的代码如下

sm("LDW X, SP ");asm("LDA,$FF");asm("LDXL,A");asm("LDWSP,X");asm("JPF$8000");

06

编写交互代码

以上设置好之后,就可以编写交互代码了,所以交互代码其实就是一套协议,规定了应用程序如何跳转到Boot,在Boot中如何处理和存储数据,这需要上位机的支持。如果只是用于自家的产品,就可以自己定义协议。也可以使用标准的协议,比如汽车行业中的UDS(统一诊断服务)。 Bootloader实现之后,就可以使用CAN/UART来实现产品固件的升级了。这就是Bootloader的关键内容,本文你学会了吗?留言讨论一下吧。

责任编辑:lq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    5997

    文章

    43948

    浏览量

    620550
  • CAN
    CAN
    +关注

    关注

    56

    文章

    2459

    浏览量

    459050
  • STM8
    +关注

    关注

    18

    文章

    391

    浏览量

    56226

原文标题:单片机的Bootloader,可以实现用户轻松升级程序

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    STM8单片机设计时钟要注意什么?

    刚开始学习STM8单片机,想利用该系列单片机实践设计一款LED数码管时钟。请求大家说明一些注意事项(事先查阅了一些资料;方案确认的元器件有6位数码管和TM1620驱动芯
    发表于 04-18 08:23

    STM8单片机的中断优先级如何配置?

    STM8单片机的中断优先级如何配置,STM8刚开始接触,而且相关资料比较少。 麻烦用过的大佬答疑一下。
    发表于 11-08 06:56

    stm8单片机只能用stlink进行下载仿真吗?

    stm8单片机只能用stlink进行下载仿真吗
    发表于 11-01 08:20

    怎样给单片机编写bootloader?

    怎样给单片机编写bootloader
    发表于 10-30 07:45

    单片机BootLoader与APP如何合并?

    单片机BootLoader与APP如何合并?
    的头像 发表于 10-25 17:17 621次阅读
    <b class='flag-5'>单片机</b><b class='flag-5'>BootLoader</b>与APP如何合并?

    STM8如何实现编码器的脉冲处理

    STM8如何实现编码器的脉冲处理
    发表于 10-23 07:42

    STM8单片机CAN滤波器的设置

    STM8单片机CAN滤波器的设置
    的头像 发表于 10-17 14:50 1156次阅读
    <b class='flag-5'>STM8</b><b class='flag-5'>单片机</b>CAN滤波器的设置

    移植stm8到stc单片机上需要修改什么?

    移植stm8到stc单片机上,需要修改什么?
    发表于 10-16 06:18

    STM8系列单片机入门

    ST 的 8 位微控制器平台基于高性能 8 位内核,配有先进的成套外设。 平台采用 ST的 130 nm 嵌入式非易性存储器专有技术。STM8 通过增强型堆栈指针运算、先进的寻址模式
    发表于 10-10 08:05

    基于单片机STM8在线编程器

    抽象的工业生产经常会带来问题在更新MCU(微控制器单元)的程序时过程参数不能根据需要实时更新time.in以便于STM8的在线更新微控制器,本文设计了u STM8 onHne基于STM32单片机
    发表于 10-10 06:46

    STM8系列单片机开发与应用

    公司推出的STM8系列单片机即是典型代表之一。本文首先把STM8系列单片机做一简要介绍,并与传统的Intel 80C51系列单片机进行对比,
    发表于 10-10 06:36

    STM8系列单片机入门

    电子发烧友网站提供《STM8系列单片机入门.pdf》资料免费下载
    发表于 10-07 16:09 2次下载
    <b class='flag-5'>STM8</b>系列<b class='flag-5'>单片机</b>入门

    STM8系列单片机入门

    ST 的 8 位微控制器平台基于高性能 8 位内核,配有先进的成套外设。 平台采用 ST的 130 nm 嵌入式非易性存储器专有技术。STM8 通过增强型堆栈指针运算、先进的寻址模式
    发表于 09-28 08:05

    适合单片机的几款开源Bootloader

    如果日常工作中经常使用linux,那么对U-Boot,LILO,GRUB等常用Bootloader一定不陌生。但是这些Bootloader主要用于引导linux启动,不太适合单片机产品。
    发表于 05-25 15:42 4519次阅读
    适合<b class='flag-5'>单片机</b>的几款开源<b class='flag-5'>Bootloader</b>

    如何实现单片机与CPLD通讯

    单片机P89V51RD2,CPLDATF1508AS,现在要实现单片机与CPLD的通讯,如何实现
    发表于 04-23 14:22