STM8基于CAN协议bootloader实现方案

本文介绍了如何在STM8微控制器上实现基于CAN协议的Bootloader,包括Bootloader的激活流程、命令集、CAN设置等关键步骤,以及如何通过Bootloader进行程序升级。内容涵盖了从Bootloader的激活条件到CAN通信的配置,以及Write、Read、Erase和Go等命令的详细说明。
摘要由CSDN通过智能技术生成

目录

一、引言

二、STM8的Bootloader介绍

三、Bootloader激活流程图

四、CAN设置

五、Bootloader命令集

5.1 Get指令

5.2 Read存储器命令

5.3 Erase存储器命令

5.4 Write存储器命令

5.5 Speed命令

5.6 Go命令

六、运行时间

七、引用


一、引言

STM8自嵌了bootloader代码段,我们只要编写上位机(host)程序和芯片的bootloader程序交互,就可以实现对板级STM8 MCU引导程序的升级,如果该MCU电路板的CAN总线连接或跨接了TBOX,通过TBOX无线下载该MCU待升级的引导程序到上位机host,host再通过bootloader升级MCU器件引导程序,那便可以理解为FOTA了,是新能源车上OTA较普遍解决方案。这里介绍一下STM8利用CAN协议实现bootloader的方案流程。

以下如无特别说明,bootloader都指芯片侧的代码或进程。

二、STM8的Bootloader介绍

器件芯片侧的bootloader的主要任务是上位机借助STM8器件芯片的集成外设(UARTs,SPI, I2C或CAN)下载应用程序到芯片内部存储器中,该存储区可以是RAM/FLASH/EEPROM其中之一,芯片侧的bootloader代码存储在内部boot ROM存储器中,芯片复位后,bootloader代码会检查程序存储器是否空白或者是否相应特殊配置字节被设置,以允许代码被修改。如果以上条件不满足,bootloader会被跳过继续执行用户程序。不是所有芯片都自嵌入了bootloader代码,目前STM8S和AF系列带bootloader代码的如下:

STM8S和AF系列带bootloader代码清单
STM8S和AF系列带bootloader代码清单

一旦满足了bootloader的条件,bootloader进程就会开始,轮询所有支持的串口检测那个外设可用,然后从上位机host接收编程代码,数据,配置字节和/或矢量表等,一切按令行事。

STM8硬件复位向量位于boot ROM(0x00 6000)的起始位置,其他中断向量位于起始于0x00 8004的Flash程序内存起始位置。

STM8S存储器映射图
STM8S存储器映射图

三、Bootloader激活流程图

选定器件的bootloader版本号可以通过"Get command"来从芯片中读取到,bootloader的版本由两位BCD编码为一个字节,比如0x22代表v2.2版本,bootloader版本和bootloader激活流程图是对应的,STM8S和STM8AF的当前的bootloader版本号如下表:

bootloader版本和bootloader激活流程图是对应的
bootloader版本和bootloader激活流程图必须是对应的

下面流程图中虚线部分的进程(EM/WM Erase/Write子程序)是上位机装载到RAM中,他们在程序跳到Flash程序存储器中执行应用程序之前由Go command清除掉。

根据地址0x8000中的内容可以判断Flash存储器是否为virgin,如果[0x8000] ==0x82 or 0xAC,那么Flash就不是空(virgin)的,已经写过程序。

Bootloader激活流程图
Bootloader激活流程图

接下来,我们就解读上面“激活流程图”是如何一步一步执行的:

1st:关闭所有中断

2nd:bootloader开始条件(如下表:bootloader开始三条件)

bootloader开始条件([BL_OPT]=0xFF00 STM8S208xx)
bootloader开始条件([BL_OPT]=0xFF00 STM8S208xx)

条件1:上位机(host)通过检查地址0x008000的内容判断器件存储器是否为空,如果不等于0x82或0xAC说明是空的,bootloader保持激活状态,在不超时的范围内等待上位机命令。

条件2:上位机(host)检查bootloader的option bytes地址对应的两个字节[BL_OPT]是否被提前设置为允许bootloader的内容,如果值为0xFF00 (STM8S208xx)就使能了bootloader,bootloader激活并等待上位机命令,如果在1s的超时时间内没有等到上位机命令,则直接跳转到0x8000执行应用程序。

STM8S208xx Bootloader Option bytes
STM8S208xx Bootloader Option bytes

条件3:如果option bytes不等于0xFF00,即[BL_OPT]=[0x487E,0x487F]不等于0xFF00,则程序内存是ROP读保护的,bootloader是被禁止的,则bootloader进程直接跳转到0x008000执行应用程序用户向量。

3rd:即上面的条件3,即便ROP也可以继续bootloader,这里不在赘述。

4th:如有外部时钟(8MHz,16MHz,或24MHz)的话,CAN才可以用,初始化为125Kbit/s,有6ms的时间等待外部晶振稳定下来。

5th:非CAN通讯的外设配置,本例只介绍CAN通讯,这一步可以忽略。

6th:接口轮询:在超时时限1s之内bootloader轮询所有可能的外设等待一个同步字节(SYNCHR=0x7F),如果超时了,如果

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值