打印
[应用方案]

G32A1445的Bootloader跳转失败原因

[复制链接]
776|45
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 lengrudie 于 2024-8-30 18:27 编辑

1、前言
      在嵌入式设备中,Bootloader常用于设备的远程升级或简化升级步骤。一个简单的Bootloader程序可以进行引导操作,而升级过程通常涉及对约定好的应用程序的Flash进行擦写。常见的升级方式是通过TFTP等协议进行 。
Bootloader主要功能包括硬件初始化(如CPU、时钟、内存控制器等)和内存管理(建立内存空间映射图,识别可用的RAM区域及其大小)等 。

2、需要用到的bin文件
      在产品开发过程中,可以使用Keil工具生成bin文件,并根据其大小约定应用程序在Flash的起始位置 。
在如下位置设置:

fromelf --bin ".\object\xx.axf" --output ".\xx.bin"
注意放代码的深度,根据深度调整。

3、Bootloader关键代码
      定义好APP代码的存放地址,首先关闭全局中断再操作。
关键代码:
void iap_load_app(uint32_t appxaddr)
{
       INT_SYS_DisableIRQGlobal();
       if(((*(volatile unsignedint*)appxaddr)&0x2FF00000)==0x20000000)    //检查栈顶地址是否合法.
       {
              jump2app=(iapfun)*(volatileunsigned int*)(appxaddr+4);            //用户代码区第二个字为程序开始地址(复位地址)
              __set_MSP(*(volatileunsigned int*)appxaddr);//初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地址)

              jump2app();                                                           //跳转到APP.

       }
}
估计这个代码大家都比较熟悉,这里就不详细说明了。

4、APP代码设置FLASH地址和中断向量

大家都习惯了Keil软件的设置地址偏移方法如下:
首先想到的就是像上面这样设置。
而APP代码也会如下设置,目的是实现中断向量的偏移:
大家是不是就觉得可以从bootloader跳转到app程序了?
这也是跟其它常规MCU不一样的地方,上面的设置一定是行不通了,会发现一直跳转失败,总是怀疑这里那里错了,而正确的设置方法应该是如下地址设置。
找到如下位置,可以知道你的程序sct文件在哪里:

需修改.sct文件
如下,修改改flash启动地址和中断向量地址:
注意的是,设置的时候直接在原来的值上加上你的app程序地址就可以了。
如此,就可以生成bin文件,把bin文件和bootloader文件合并后烧录就OK了!

使用特权

评论回复
沙发
sesefadou| | 2024-9-3 16:05 | 只看该作者
Bootloader可能试图跳转到一个错误的地址。

使用特权

评论回复
板凳
caigang13| | 2024-9-3 16:07 | 只看该作者
跳转失败大概率是因为中断向量地址出错

使用特权

评论回复
地板
minzisc| | 2024-9-3 16:34 | 只看该作者
Bootloader或操作系统固件可能因存储介质损坏、传输错误或不当操作而损坏。

使用特权

评论回复
5
lengrudie|  楼主 | 2024-9-3 17:09 | 只看该作者
sesefadou 发表于 2024-9-3 16:05
Bootloader可能试图跳转到一个错误的地址。

是的,实际就是跳转后APP程序的地址没有设对地方

使用特权

评论回复
6
lengrudie|  楼主 | 2024-9-3 17:10 | 只看该作者
caigang13 发表于 2024-9-3 16:07
跳转失败大概率是因为中断向量地址出错

是的,刚好这个芯片设置APP地址偏移的方法跟其它MCU有点区别

使用特权

评论回复
7
lengrudie|  楼主 | 2024-9-3 17:13 | 只看该作者
minzisc 发表于 2024-9-3 16:34
Bootloader或操作系统固件可能因存储介质损坏、传输错误或不当操作而损坏。

厉害,大佬看问题比较深,能想到这么多可能的地方

使用特权

评论回复
8
mattlincoln| | 2024-9-3 17:16 | 只看该作者
检查是否有栈溢出或栈损坏的情况。

使用特权

评论回复
9
biechedan| | 2024-9-3 18:14 | 只看该作者
在跳转前,确保所有中断都被正确禁止,否则中断可能会干扰跳转过程。

使用特权

评论回复
10
mollylawrence| | 2024-9-3 19:33 | 只看该作者
电源供应稳定,电压波动可能导致跳转失败。

使用特权

评论回复
11
claretttt| | 2024-9-3 21:06 | 只看该作者
如果地址线或数据线连接松动、短路或接错,会使 Bootloader 无法正确访问应用程序的存储位置。

使用特权

评论回复
12
maqianqu| | 2024-9-3 22:39 | 只看该作者
如果中断向量表没有正确配置,会导致跳转后的应用程序无法正常运行。

使用特权

评论回复
13
51xlf| | 2024-9-5 08:42 | 只看该作者
如果Bootloader和应用程序使用了相同的内存区域,可能会导致冲突。检查内存映射

使用特权

评论回复
14
cashrwood| | 2024-9-5 10:16 | 只看该作者
入口地址错误              

使用特权

评论回复
15
janewood| | 2024-9-5 11:51 | 只看该作者
APP程序的入口点设置正确,并且与bootloader跳转的地址相匹配。如果入口点地址设置错误,bootloader将无法正确跳转到APP程序。

使用特权

评论回复
16
modesty3jonah| | 2024-9-5 13:27 | 只看该作者
如果 Bootloader 在验证应用程序的完整性时发现校验和错误,可能会拒绝跳转。

使用特权

评论回复
17
loutin| | 2024-9-5 15:00 | 只看该作者
地址超出了SRAM的最大可用空间

使用特权

评论回复
18
houjiakai| | 2024-9-5 16:51 | 只看该作者
跳转的目标地址正确无误,目标地址应该是有效的代码入口地址。

使用特权

评论回复
19
abotomson| | 2024-9-6 15:01 | 只看该作者
Bootloader 和应用程序的版本不兼容,也可能导致跳转失败。

使用特权

评论回复
20
jonas222| | 2024-9-6 16:36 | 只看该作者
Bootloader在跳转到应用程序前未正确切换到内部时钟,也可能导致跳转失败

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

32

帖子

1

粉丝