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

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

    关注

    6078

    文章

    45624

    浏览量

    675094
  • CAN
    CAN
    +关注

    关注

    59

    文章

    3106

    浏览量

    473798
  • STM8
    +关注

    关注

    18

    文章

    393

    浏览量

    58900

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    探索COP8SA系列8单片机:特点、性能与应用优势

    单片机凭借其卓越的特性,工程师们提供了一个颇具吸引力的选择。 文件下载: COP8SAA716M7.pdf 一、COP8SA系列概述 COP8
    的头像 发表于 04-19 09:05 178次阅读

    Infineon XC866 8单片机:特性、功能与应用解析

    单片机就是其中的佼佼者,它融合了高性能、丰富的外设和灵活的配置,工程师们提供了强大的设计工具。本文将深入探讨XC866的特性、功能和应用,帮助电子工程师更好地了解和应用这款单片机。 文件下载: XC8661FRIABKXUM
    的头像 发表于 03-30 16:30 343次阅读

    Infineon XC87xCLM 8单片机:功能特性与设计要点解析

    Infineon XC87xCLM 8单片机:功能特性与设计要点解析 在电子设计领域,单片机作为核心部件,其性能和特性对整个系统的稳定性和功能实现起着关键作用。今天,我们就来深入探讨
    的头像 发表于 03-30 14:40 346次阅读

    项目选型必看:单片机与PLC究竟怎么选?

    工业控制为何用PLC而不用单片机? 这是一个在工业自动化领域非常经典的问题。简单来说, PLC是工业环境而设计的“加固型”工业控制计算机,而单片机只是一个需要开发者从头搭建系统的核心芯片。 虽然
    的头像 发表于 03-27 15:47 319次阅读
    项目选型必看:<b class='flag-5'>单片机</b>与PLC究竟<b class='flag-5'>该</b>怎么选?

    瑞萨8单片机740族:技术剖析与设计指南

    瑞萨8单片机740族:技术剖析与设计指南 在当今的电子设计领域,单片机以其小巧灵活、功能强大等特点,成为了众多工程师的首选。瑞萨电子的8单片机
    的头像 发表于 03-17 15:15 371次阅读

    单片机里的程序运行方式

    我们想要理解单片机是如何运行程序的,我们首先需要了解单片机的组成,我们这里80C51单片机
    发表于 01-16 06:57

    单片机的入门准备

    、修改例程,学习板载体,自己新建编程工程,用自己的编程思想让外设电路实现想要的功能,程序是灵活的,每个人都有不同的编程思想,多试几种方法,提高程序的执行效率,锻炼自己的编程能力; 单片机
    发表于 12-22 07:39

    MCU单片机CH569实现USB3.0超高速U盘与蓝牙加密应用

    在嵌入式系统设计中,MCU单片机的性能直接决定了终端产品的功能高度。英尚微电子代理的沁恒CH569,这款MCU单片机凭借其高度集成的设
    的头像 发表于 12-15 15:23 829次阅读

    浮思特 | 电子温度计单片机如何选型?ABOV单片机提供几点很关键!

    一个优秀的电子温度计,其核心往往在于内部单片机(MCU)的性能与匹配度。如何选择一款合适的单片机实现精准、稳定、低功耗的温度测量与交互,是产品开发中的重要课题。本文将从技术维度,
    的头像 发表于 12-15 09:43 843次阅读
    浮思特 | 电子温度计<b class='flag-5'>单片机</b>如何选型?ABOV<b class='flag-5'>单片机</b>提供几点很关键!

    单片机位数的思考(8位、16位、32位)

    8位、16位、32位是指单片机的“字长”,也就是一次运算中参与运算的数据长度,这个位是指二进制位。8
    发表于 11-21 08:31

    Bootloader固件升级的步骤

    一、Bootloader 概念及用处 1、BootLoader 是一段引导式程序,就是单片机启动时候运行的一段小程序,这段程序负责单片机固件的更新,也就是
    发表于 11-19 07:41

    浮思特 | 如何通过现代(ABOV)8单片机实现智能家居与工业控制的升级

    8单片机。作为现代(ABOV)的合作代理商,我们(浮思特科技)深知这些单片机智能家居和工业应用带来的卓越价值,致力于将这类高性价比方案推向市场,
    的头像 发表于 09-09 10:07 1053次阅读
    浮思特 | 如何通过现代(ABOV)<b class='flag-5'>8</b>位<b class='flag-5'>单片机</b><b class='flag-5'>实现</b>智能家居与工业控制的升级

    单片机采用什么电流控制

    单片机作为电子系统的控制核心,其电流控制涉及自身工作电流管理与外部设备电流驱动两个层面。由于单片机内部电路的特性,其自身工作电流较小,而控制外部设备时需通过特定电路实现电流放大与调节,
    的头像 发表于 07-30 10:07 955次阅读

    单片机怎么驱动电机?

    在各类自动化设备和智能装置中,电机是重要的执行部件,而单片机作为控制核心,需要通过特定的方式驱动电机运转。单片机驱动电机并非直接连接即可,而是要根据电机类型和功率,搭配合适的驱动电路,才能实现稳定
    的头像 发表于 07-25 09:31 1438次阅读

    STM8 C语言精品编程100

    今天来分享一下关于STM8单片机的相关资料文档,感兴趣的网友可以自行下载。单片机是芯片开发的基础,相信从中会获得您意想不到的知识。 获取完整文档资料可下载附件哦!!!! 如果内容有帮助可以关注、点赞、评论支持一下哦~
    发表于 07-17 16:08