浅谈芯片中的Bootloader、Flash

本文介绍了Bootloader在单片机系统中的作用,特别是针对STM8单片机如何实现Bootloader,包括Bootloader的定义、Flash空间划分、中断向量表修改、ICF文件调整、跳转命令及交互代码编写。同时,文章讨论了Flash存储器的特点和烧写过程,强调了带Bootloader软件的烧写注意事项。
摘要由CSDN通过智能技术生成

Bootloader、Flash浅谈


在文章 Bootloader详解,理解Bootloader看这篇就够了中介绍了在PC机上电后Bootloader的作用,与PC机不同,在芯片中,Bootloader的作用主要是为了对软件进行升级、更新。

软件分为底层和应用层,在对芯片进行烧写时,处在应用层逻辑中,然后发指令切换到Boot代码中去,因为升级的话要跑到Boot里把应用软件擦掉,然后进行升级,将发过去的数据存到应用软件原来位置完成升级,升级完成后再跳回到应用层中。功能在应用层中进行。

在开发过程中,如果一个软件的功能出现了问题,需要进行修改、更新然后重新烧录软件,不同的芯片使用的刷写工具不同,其中PE、J-Link烧写的都是带Boot的软件,UDS上位机刷写的是不带Boot的软件,如果用户将产品封装起来了,无法开盖,那么只能用CAN总线来更新程序,用Bootloader实现。其实就是通过上位机把.bin/hex文件以CAN通讯的方式发送给单片机并存储在规定的Flash中,要自己做一个Bootloader上位机,在里面加载Flash文件和APP文件后即可进行刷写,用什么上位机每个项目都不同。这个过程与手机端更新APP类似。
在第一次给芯片刷软件时,要先把底层boot刷进去,用j-link、pe之类的可以刷boot的刷写工具刷件,之后如果要更新应用层就直接用Kvaser通过can通讯刷应用层软件就行了,在刷写时需要flash文件和应用软件。不用刷底层了,前提是底层得保持和应用层的匹配,没有变过才行。

在这里插入图片描述

浅谈Bootloader:

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

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

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

__root const long reintvec[]@".intvec"= 
{
   
0x82008080,0x82008404,0x82008408,0x8200840c, 
0x82008410,0x82008414
  • 17
    点赞
  • 84
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值