基于CAN总线的STM32G4 Bootloader设计说明

news2024/10/5 7:38:36

1 设计目的

根据芜湖铂科新能源自身企业发展需要,开发一款基于ST公司STM32G4系列MCU(具体开发用型号STM32G473和STM32G431微处理器)的CAN总线bootloader,方便应用程序的刷写。CAN设备采用周立功CAN卡(USBCAN-II、CAN-E-U、CAN-2E-U)。
考虑兼容沈阳广成的CAN卡。

2 专有信息

2.1 STMG4

STM32G4高性能微控制器是意法半导体有限公司独特打造的新一代数模混合微控制器,是STM32F3的升级版,于2019年推出。STM32G4在性能、内置数模外设、功能安全与信息安全,以及完整的产品等4个方面都有创新和技术优势。STM32G4具有170MHz Cortex-M4内核,集成浮点运算、单指令乘加单元和坐标旋转数字计算机(Coordinate Rotation Digital Computer,CORDIC),内部集成高速比较器、高速运算放大器(简称运放)、高速ADC、高速DAC,支持CAN FD、在线升级,以及高级加密标准(Advanced Encryption Standard,AES)和信息安全,集成USB Type-C PD 3.0,同时具备高性能和低功耗特性。
STM32G4分为三大产品系列:入门型、性能型和高精度PWM型,对应的产品分别是STM32G4x1、STM32G4x3和STM32G4x4。
在温度方面,STM32G4有更高温度的认证,它可以在环境温度达到高温125℃的场景应用。
在这里插入图片描述

2.2 CAN总线

CAN总线的全称为控制器局域网络(Controller Area Network,CAN),是一种可以利用多物理介质传输数据的多主方式串行通信总线,如双绞线、光纤等,其中最为常用的是双绞线。CAN总线上的两条信号线分别被称为“CAN_H”和“CAN_L”,其使用方式是差分电压传送。

2.3 Bootloader

嵌入式系统引导加载程序(Bootloader)是BSP的一部分,是嵌入式系统上电后运行的第一段软件代码,是整个系统执行的第一步。Bootloader依赖于具体的嵌入式硬件结构,核心功能是操作系统引导(boot)和加载(load),此外还可以支持简单的用户命令交互、操作系统启动参数设置、系统自检和硬件调试等功能。Bootloader通常会存放在被称为boot ROM的非易失性的存储器(通常是NOR Flash ROM)中,可以存储操作系统映像、应用程序代码和用户配置数据等信息。
在汽车电子和工业控制应用中,常常需要设计基于CAN总线的Bootloader,用来实现对封装好外壳的ECU等控制器升级,而不用对控制器进行拆卸、拆解等,破环控制器的封装结构。方便系统的软件升级和维护。

2.4 编程方式

STM32G4将应用程序固化到片上Flash主要有二种方式:在电路编程(In Circuit Programing,ICP)、和在应用编程(In Application Programing,IAP)。其中,ICP是指在微控制器安装在用户应用电路板上时,使用JTAG协议、SWD协议或引导加载程序对其闪存进行编程的能力;IAP是一种在用户程序运行时对微控制器闪存重新编程的能力。本设计实现IAP,即在应用编程。参考手册上定义如下:
在这里插入图片描述

3 方案概述

本设计为基于STM32G4芯片,定制开发的在应用编程(IAP)Bootloader软件,由上位机程序,bootloader引导程序(也可称二次bootloader程序)和应用程序3部分组成。上位机为CAN刷写控制和操作界面,编程数据传输媒介为CAN总线,即上位机驱动CAN卡通过CAN向芯片传输flash文件,bootloader引导程序接收flash文件,并执行对flash的刷写工作,实现对芯片应用程序的更新。
其上位机采用VC++编写,以windows应用的方式呈现。Bootloader引导程序在keil5中编码,以C源码的方式呈现。用户应用也在CCS中编码,以C源码的方式作为应用示例呈现,作为应用开发的参考。

4 开发资源

4.1 硬件资源

STM32G4开发板或功能板、ST-LINK仿真调试器、周立功CAN卡USB-E-mini

4.2 软件资源

STM32CubeMX、STM32CubeIDE
基于CubeIDE的最小系统代码框架+CAN驱动程序+flash驱动程序
Visual Studio 2010

4.3 其他资源

其它bootloader参考程序(如基于S32K144的bootloader、基于F28335的bootloader)、电源、调试电脑、数据监测电脑和CAN卡。

4.4 参考资料(书籍或文献)

ST官网《RM0440 Reference manual STM32G4 series advanced Arm®-based 32-bit MCUs》2019~2024
《STM32G4入门与电机控制实战》 许少伦 2023-11-01
《嵌入式系统原理及应用—基于ARMCortex-M4体系结构》 杨永杰 许鹏 2018
《基于S32K148的车辆网关CANBootloader开发与实现》 袁锋、张伟等 2021
《STM32G473 固件升级IAP(BootLoader)CAN/USART 详细步骤》CSDN博客
《KILE生成S19或者BIN文件》CSDN博客

5 设计实现

5.1 核心思路

在线升级的核心思想是通过bootloader程序(bootloader引导程序,在STM32G4芯片中,因其内嵌Embedbed bootloader,可以称为二次Bootloader程序)更新程序(应用程序),这两个程序是相互独立的工程,被分别固化在STM32G4片上Flash的不同区间,为避免造成程序运行紊乱,需要对这两个程序所在的存储空间进行合理分配。
特别说明:本bootloader底层程序将不使用Embedbed bootloader区域(也称为一次boot loader),直接跳转到flash地址执行二次Bootloader程序。
在这里插入图片描述
片上Flash的空间分配,通过在开发环境STM32CubeIDE中设置完成。初步地址分配如下:
Bootloader存放的地址初步分配为0x0800_0000~0x0800_4FFF,大小为20kB。
应用程序存放的地址初步分配为0x0800_5000~0x0803_FFFF,大小为236 kB
在这里插入图片描述
固件完成后,根据固件大小的实际情况,尽量降低bootloader的代码空间的大小。如以下的分配方案:
在这里插入图片描述
二次Bootloader程序通过仿真器烧录,且固化在芯片中,一般不需要更改。如需更改,需要使用仿真器再次烧录。应用程序可通过CAN总线多次重复烧录,不需要调试器。

5.2 芯片内核资源分析

5.2.1 时钟树(RM page275)

在这里插入图片描述

时钟可以在Cube MX中配置,本设计采用16MHz HSL时钟作为CAN时钟源。配置FDCAN_clock时钟为16MHz。
FLASH操作需要开启HSI时钟。

5.2.2 看门狗

喂狗,本bootloader不使能看门狗。

5.2.3 地址空间(参考RM page82 category 3),

更详细的地址空间,见参考手册。总的来说,地址分配如下:
SRAM1 空间为:0x2000_0000 ~ 0x2001_3FFF (80kB)
SRAM2 空间为:0x2001_4000 ~ 0x2001_7FFF (16kB)
FLASH BANK1空间为:0x0800_0000 ~ 0x0803_FFFF (256kB,2kB一扇区)
FLASH BANK2空间为:0x0804_0000 ~ 0x0807_FFFF (256kB,2kB一扇区)
在这里插入图片描述

5.2.4 FLASH地址映射

STM32G473VETx片上有512kB嵌入式FLASH存储器,分为2个bank,每bank大小为256kB。Bank下再分为扇区,每扇区2kB。用户可对其中任意一个扇区擦除、编程和校验,而其他扇区不变。
Flash工作,需要开启HIS时钟。

5.2.5 STM32G473VETx的CODE存储器的映像

在这里插入图片描述

5.2.6 CAN驱动模块

STM32G473VETx具有3路FDCAN,分别为CAN1,CAN2,CAN3。本设计采用CAN_2【受到目前手上的硬件的限制,量产电路板采用CAN_1】实现bootlaoder数据传输。
CAN模块的设计通过cube_MX实现。
使用CAN模块主要是实现:
1、初始化(重点在时钟设置、波特率和邮箱配置);
2、发送函数;
3、接收函数;
4、CAN接收中断服务函数,采用it0。
在这里插入图片描述

波特率设置:设置波特率为500kpbs。
波特率公式:
在这里插入图片描述

1Mkpbs: 预分频=2;SWJ=1;SEG1 =4;SEG2 =3
500kpbs: 预分频=4;SWJ=1;SEG1 =4;SEG2 =3
250kpbs: 预分频=8;SWJ=1;SEG1 =4;SEG2 =3
注意:1、记得开启CAN外设时钟。

5.2.7 Flash驱动模块

参考《相关文档》里的相关描述,在cubeMX中配置。
需要注意几点
【1、 flash时钟】
【2、 擦除和编程函数的调用】
【3、 Flash编程字节顺序】

5.2.8 中断向量

外设中断向量表起始地址:0x08005004。
中断向量需要在APP中修改。

5.2.9 编译和链接设置

5.2.9.1 在DL中设置分配IAP的地址空间,分配boot引导程序的存储空间为:

在这里插入图片描述
在DL文件中配置。

5.2.9.2 在开发环境中设置分配应用的地址空间,分配APP程序的存储空间为:

在这里插入图片描述

5.2.9.3 在开发环境中设置输出文件

输出HEX文件或S19文件【可正常输出,输出格式为S37】,本开发输出S文件。

5.3 启动分析

STM32系列的MCU上电启动后会自动跳转到0x08000000地址开始执行,其内部通过一张“中断向量表”来响应中断。程序启动后,将首先从“中断向量表”取出复位中断向量执行复位中断程序进行复位,复位完成后跳转到我们的main函数。

5.4 中断响应过程

5.4.1 原生应用中断响应过程

在没有bootloader的应用中,STM32“中断向量表”的起始地址是0x08000004,当中断来临,STM32的内部硬件机制亦会自动将PC指针定位到“中断向量表”处,并根据中断源取出对应的中断向量执行中断服务程序。

5.4.2 Bootloader应用的中断响应过程

在具有bootloader的程序中,STM32复位后,还是从0x08000004地址取出复位中断向量的地址,并跳转到复位中断服务程序,在运行完复位中断服务程序之后跳转到IAP的main函数,新程序的复位中断向量起始地址为0x08000004+N+M),跳转至新写入程序的复位向量表,取出新程序的复位中断向量的地址,并跳转执行新程序的复位中断服务程序,随后跳转至新程序的main函数。
在main函数执行过程中,如果CPU得到一个中断请求,PC指针仍强制跳转到地址 0x08000004中断向量表处,而不是新程序的中断向量表,程序再根据我们设置的中断向量表偏移量,跳转到对应中断源新的中断服务程序中; 在执行完中断服务程序后,程序返回main 函数继续运行。

5.5 bootloader流程分析

升级流程框图见下图:
CAN总线升级流程

5.6 系统组成框架

在这里插入图片描述
在这里插入图片描述

5.6.1 上位机软件设计

上位机端软件首先读取.hex文件,通过解析.hex文件内容,将其拆分为多条数据帧结构。上位机端软件与DSP端软件通过CAN总线进行通讯。
上位机端软件向DSP端软件发送的每帧数据都带有校验和,当DSP端程序接收到该帧数据后,通过校验和对接收数据进行确认。确认完毕后,DSP端软件将确认帧发送给上位机端软件,上位机端软件收到DSP端发送的确认帧后,再向DSP端软件发送下一帧数据;当上位机软件将全部数据发送完毕后,上位机端软件向DSP端软件发送数据的总长度,DSP端软件将该总长度与接收到的数据长度进行比较,将比较结果发送给上位机端软件,完成了整个数据的总校验。参考界面如下:
在这里插入图片描述

5.6.2 bootloader软件设计

MCU端软件主要包括引导程序主要为二次bootloader程序,用来和上位机软件进行CAN总线通讯接收MCU程序可执行代码文件,并将接收到的可执行代码文件烧写到FLASH中,而且会在系统上电复位后会判断是执行FLASH烧写工作还是运行用户应用程序工作;
在这里插入图片描述

为保证接收数据的准确性和完整性,MCU端软件在接收数据的过程中,不执行对RAM或FLASH操作的相关代码;同时,关闭其他的外部中断,仅响应CAN总线接收中断,保证了数据接收的实时性。此外,DSP端软件将接收到的数据存储在外扩的FLASH中,等接收完全部数据后,再进行程序的烧写,防止在接收数据过程中出现意外而导致系统程序不能正常工作。
FLASH的烧写工作也是MCU端软件需要实现的重要功能。在擦除或读写FLASH之前,必须先执行相应的命令字序列,即在指定的FLASH地址处写入指定的指令代码。
向FLASH的指定地址中写入数据,需要四个总线周期。前两个是解锁周期,第三个是建立编程命令,最后一个周期完成向编程地址中写入编程数据。待写入的数据为.srec文件内容。
在这里插入图片描述

5.6.3 应用程序设计

应用程序软件需要对地址和输出文件进行配置,以确定地址分配和编程文件输出。代码部分不用特别处理。应用程序关注的重点:
【1、 LD文件对地址的分配】
【2、 中断向量的重定位】
本设计提供模板。

6 参考文献

ST官网《RM0440 Reference manual STM32G4 series advanced Arm®-based 32-bit MCUs》2019~2024
《STM32G4入门与电机控制实战》 许少伦 2023-11-01
《嵌入式系统原理及应用—基于ARMCortex-M4体系结构》 杨永杰 许鹏 2018
《基于S32K148的车辆网关CANBootloader开发与实现》 袁锋、张伟等 2021
《STM32G473 固件升级IAP(BootLoader)CAN/USART 详细步骤》CSDN博客
《KILE生成S19或者BIN文件》CSDN博客

7 设计总结

1、在开发环境上,使用STM32CubeIDE进行嵌入式软件开发是趋势。
2、STM32G4高性能微控制器是意法半导体有限公司独特打造的新一代数模混合微控制器,是STM32F3的升级版,于2019年推出。STM32G4在性能、内置数模外设、功能安全与信息安全,以及完整的产品等4个方面都有创新和技术优势。开发STM32G4的bootloader,丰富产品平台,具有重大意义。
3、bootloader的开发,可以形成系列化的平台方案,在具体的板级平台上做适应性修改。
4、开发过程应多测试,尽量少的使用flash资源。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2189528.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Docker安装人大金仓(kingbase)关系型数据库教程

人大金仓数据库(KingbaseES)是由中国人民大学金仓公司研发的一款自主知识产权的关系型数据库管理系统。 官网地址:https://www.kingbase.com.cn/ 本章教程,主要介绍如何用Docker安装启动人大金仓(kingbase)关系型数据库。 一、下载镜像 下载地址:https://www.kingbase.c…

【黑马软件测试三】web功能测试、抓包

阶段三,内容看情况略过 Web功能测试链接测试表单测试搜索测试删除测试cookies/session测试数据库测试抓包工具的使用一个APP的完整测试流程熟悉APP业务流程功能测试APP专项测试兼容性安装、卸载和升级交叉测试(干扰测试)push消息测试用户体验测试 Web功能测试 通过…

Python画笔案例-075 绘制趣味正方形

1、绘制趣味正方形 通过 python 的turtle 库绘制 趣味正方形,如下图: 2、实现代码 绘制趣味正方形,以下为实现代码: """趣味正方形.py画个正方形后,单击它会移动,并且碰到边缘就反弹。这个版本采用画布的move命令让当前线条项目移动实现的。也可以用纯动画…

华夏ERP账号密码泄露漏洞

漏洞描述 华夏ERP账号密码泄露漏洞 漏洞复现 FOFA "jshERP-boot" POC IP/jshERP-boot/user/getAllList;.ico

解决 IntelliJ IDEA 中 JSP 页面无法识别 getParameter() 方法的问题

目录 背景: 过程: getParameter优点&#xff1a; 背景: 在IDEA中&#xff0c;我正在编写一个.jsp文件&#xff0c;想要测试一下数据是否能够从HTTP请求中成功获取到userId参数的数据&#xff0c;下面代码是我用来测试的&#xff0c;但是出现了错误。 <% String userId …

【EXCEL数据处理】000016案例 vlookup函数。

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 【EXCEL数据处理】000016案例 vlookup函数。使用的软件&#xff1a;off…

SpringBoot整合QQ邮箱

SpringBoot可以通过导入依赖的方式集成多种技术&#xff0c;这当然少不了我们常用的邮箱&#xff0c;现在本章演示SpringBoot整合QQ邮箱发送邮件.... 下面按步骤进行&#xff1a; 1.获取QQ邮箱授权码 1.1 登录QQ邮箱 1.2 开启SMTP服务 找到下图中的SMTP服务区域&#xff0c;…

C/C++/EasyX——入门图形编程(4)

【说明】紧接上文(&#xff61;&#xff65;ω&#xff65;&#xff61;)&#xff0c;好了&#xff0c;接下来&#xff0c;就让我们开始学习图像处理和获取鼠标消息的函数吧。&#xff08;各位友友们不要着急&#xff0c;想在短时间内就想做小游戏或者写出各种好看的画面是不简…

【韩顺平Java笔记】第7章:面向对象编程(基础部分)【214-226】

文章目录 214. 递归解决什么问题215. 递归执行机制1216. 递归执行机制2217 递归执行机制3217.1 阶乘218. 递归执行机制4219. 斐波那契数列220. 猴子吃桃221. 222. 223. 224. 老鼠出迷宫1,2,3,4224.1 什么是回溯 225. 汉诺塔226. 八皇后 214. 递归解决什么问题 简单的说: 递归就…

Koa2+mongodb项目实战1(项目搭建)

Koa中文文档 Koa 是一个基于 Node.js 的 Web 应用框架&#xff0c;由 Express 原班人马打造。 Koa 并没有捆绑任何中间件&#xff0c;而是提供了一套优雅的方法&#xff0c;帮助开发者快速地编写服务端应用程序。 项目初始化 创建一个文件夹&#xff1a;ko2-mongodb 打开文件…

Nginx的基础讲解之重写conf文件

一、Nginx 1、什么是nginx&#xff1f; Nginx&#xff08;engine x&#xff09;是一个高性能的HTTP和反向代理web服务器&#xff0c;同时也提供了IMAP/POP3/SMTP服务。 2、用于什么场景 Nginx适用于各种规模的网站和应用程序&#xff0c;特别是需要高并发处理和负载均衡的场…

Python | Leetcode Python题解之第452题用最少数量的箭引爆气球

题目&#xff1a; 题解&#xff1a; class Solution:def findMinArrowShots(self, points: List[List[int]]) -> int:if not points:return 0points.sort(keylambda balloon: balloon[1])pos points[0][1]ans 1for balloon in points:if balloon[0] > pos:pos balloo…

【EO-1(Earth Observing-1)卫星】

EO-1&#xff08;Earth Observing-1&#xff09;卫星是美国国家航空航天局&#xff08;NASA&#xff09;新千年计划&#xff08;New Millennium Program&#xff0c;NMP&#xff09;地球探测部分中的第一颗对地观测卫星。以下是对EO-1卫星的详细介绍&#xff1a; 一、发射与服…

国外电商系统开发-运维系统单个添加被管理服务器

提前设置好您的远程主机的信息&#xff0c;这样才能自动执行任务。否则&#xff0c;自动执行根本无从谈起。登录方式有SSH密码登录、SSH-Key登录两种方式。 最后点击保存。 上面的刷新图标表示在请求该服务器的状态。如果该服务器状态正常&#xff0c;则会显示如下图标&#xf…

业务封装与映射 -- 编码方式(QPSK、DQPSK、QAM)

信号在光通信系统中传输&#xff0c;需要在信号的发送端对原始电信号进行调制&#xff0c;接收端进行解调&#xff0c;恢复成原始的二进制电信号。光通信系统有三种基本的调制方式&#xff1a;ASK&#xff08;调幅&#xff09;/FSK&#xff08;调频&#xff09;/PSK&#xff08…

【AIGC】VoiceControl for ChatGPT指南:轻松开启ChatGPT语音对话模式

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;安装VoiceControl for ChatGPT插件&#x1f4af;如何使用VoiceControl for ChatGPT进行语音输入VoiceControl for ChatGPT快捷键注意点 &#x1f4af;VoiceControl for C…

看门狗电路设计

看门狗电路设计 看门狗是什么应用架构图TPV6823芯片功能硬件时序图为什么要一般是要保持200个毫秒左右的这种低电平的时间看门狗电路实际应用与条件 看门狗是什么 硬件看门狗芯片&#xff0c;Watch DogTimer&#xff0c;可用于受到电气噪音、电源故障、静电放电等影响(造成软件…

【AI学习笔记】基于Unity+DeepSeek开发的一些BUG记录解决方案

【AI学习笔记】基于UnityDeepSeek开发的一些BUG记录&解决方案 背景前摇&#xff1a;&#xff08;省流可不看&#xff09; Unity是大学学的&#xff0c;AI是研究生学的&#xff0c;DeepSeek是第一份实习偷师的&#xff0c;三合一的梦是最近开始做的&#xff0c;BUG是今天遇…

VRRP协议个人理解+报文示例+典型配置-RFC2338/RFC3768/RFC5798/RFC9568

个人认为&#xff0c;理解报文就理解了协议。通过报文中的字段可以理解协议在交互过程中相关传递的信息&#xff0c;更加便于理解协议。 因此本文将在VRRP协议报文的基础上进行介绍。 VRRP协议发展 关于VRRPv2基本原理&#xff0c;可重点参考2004年发布的RFC3768-Virtual Ro…

【python实操】python小程序之函数的方法和赋值的区别

引言 python小程序之函数的方法和赋值 文章目录 引言一、函数的方法和赋值1.1 题目1.2 代码1.2.1 append方法1.2.2 赋值 1.3 代码解释1.3.1 append方法1.3.2 赋值 二、思考2.1 append方法和赋值的区别2.1.1 append方法2.1.2 赋值操作2.1.3 总结 一、函数的方法和赋值 1.1 题目…