打印
[STM32G4]

keil无法对G474CBTx扇区擦除烧录较大程序是什么原因?

[复制链接]
1202|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
powerantone|  楼主 | 2024-4-25 14:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
佬们,救救孩子吧!
原因:bootloader升级仿真需要使用到扇区擦除调试App,当程序到大概40K左右以后,无法扇区擦除下载,程序较小时没有问题。
MDK:V5.35
芯片:STM32G474CBTx
仿真器:ST-link V2,J-Link
选中第一项(Erase Full Chip) 能直接调试App程序,第二项(Erase Sectors)就报 Error: Flash Download failed - "Cortex-M4"。如果把程序占内存的协议栈暂时屏蔽,程序变小了,扇区擦除也没有问题了,但是协议栈不能丢,而且还需要加bootloader(网上有贴子说是从地址0开始写有问题,但是App偏移了15K还是同样的问题),没有扇区擦除就不能仿真了。
尝试过一下几种方式:
1、修改Programming Algorithm,不知道是不是做的不对,但是没有用;
2、使用其他烧录器,原本使用的ST-link V2,换了J-link也没有解决;
3、降低过下载速度,并没有用;
4、尝试换个编译环境,使用CubeIDE,但是软件还不熟悉,报了一堆错,网上还很难找到解决方法,不过还是成功构建整个工程了,但问题又来了,CubeIDE生成的Debug文件太大了,(elf文件大概3M,hex文件95K,芯片128K)没有办法下载,可能是CubeIDE编译了很多没有使用的内容,改改应该能下载。(还在尝试)
佬们,真的只能全擦除嘛?555,有没有什么高招啊?
更换编译环境后(使用CubeIDE),出现了新问题,还是由于程序过大,造成了 “Error: Operation exceeds memory limits”,网上找了很久没有找到原因,拖了很久没处理这个问题。
尝试是不是写入地址的问题,创建了一个示例工程,工程很简单
在main()外添加全局常量,并且指定地址在0x8010000,函数主体不添加任何东西。
attribute((section(".app"))) const uint8_t program_code_end_flag[] = {0x11,0x22,0x33,0x44,0x55,0x66,0x77};
在.ld文件添加.app段
编译下载后,还是报“Error: Operation exceeds memory limits”
修改段地址为0x800FFF0,编译下载成功,使用STM32CbueProgrammer读取,在0x800FFF0读到了数组
program_code_end_flag的值,说明程序成功烧录了。
根据这个结果大胆猜测,可能是双bank影响到了地址,网上查找有关资料,bank2地址为0x8040000.
修改段地址为0x804000,编译下载成功,使用STM32CbueProgrammer读取,在0x8040000读到了数组
program_code_end_flag的值,说明程序成功烧录了。
抓住真凶了,肯定是双bank引起的。
翻阅芯片手册后发现
双bank模式缺省值为 1,默认开启。
使用STM32CbueProgrammer关闭该位后,再使用CubeIDE下载段地址为0x8010000的程序,发现可以了
没有报错,而且读取0x8010000上确实存在program_code_end_flag数组的值。
回头测试keil,发现无法扇区擦除下载程序的问题也同样解决了,开心,嘿嘿!
猜测可能是两个bank没有办法同时擦写的关系,头回用好一点的芯片,还在学习。

使用特权

评论回复
沙发
laocuo1142| | 2024-4-26 10:48 | 只看该作者
当程序大小达到大约40K时,扇区擦除和下载操作可能出现问题,这可能是由于bootloader升级仿真过程中的特定限制。在尝试扇区擦除(Erase Sectors)时,可能会遇到错误,如“Flash Download failed - Cortex-M4”,这表明在尝试写入Flash存储器时遇到了问题。

使用特权

评论回复
板凳
flycamelaaa| | 2024-4-26 13:00 | 只看该作者
写入地址的问题。

使用特权

评论回复
地板
stormwind123| | 2024-4-26 14:00 | 只看该作者
首先,确保使用的MDK(Microcontroller Development Kit)和仿真器(如ST-link V2或J-Link)都是最新版本,并且与STM32G474CBTx芯片兼容。其次,检查并调整bootloader的写入策略,以确保它可以正确处理较大程序的扇区擦除和写入操作。此外,也可以尝试优化程序的大小和内存布局,以减少对Flash存储器的需求。

使用特权

评论回复
5
光辉梦境| | 2024-6-19 15:56 | 只看该作者
Keil是一款广泛使用的嵌入式开发工具,用于开发基于ARM处理器的应用程序。如果你在使用Keil MDK对STM32G474CBTx微控制器的扇区进行擦除和烧录较大程序时遇到问题,是不是你型号选择错了?

使用特权

评论回复
6
远山寻你| | 2024-6-19 18:00 | 只看该作者
确保你的程序大小没有超过STM32G474CBTx微控制器Flash存储器的实际大小。如果程序太大,超出了可用的Flash空间,那么烧录将会失败。

使用特权

评论回复
7
淡漠安然| | 2024-6-19 20:00 | 只看该作者
在进行烧录之前,必须确保目标扇区已经被正确擦除。如果扇区没有被完全擦除,新的程序可能无法正确烧录。

使用特权

评论回复
8
夜阑风雨| | 2024-6-19 22:00 | 只看该作者
确保你使用的烧录算法与STM32G474CBTx微控制器兼容。Keil MDK通常会提供针对不同STM32系列的标准烧录算法,但如果你使用的是非标准的或自定义的算法,可能会遇到兼容性问题。

使用特权

评论回复
9
一秒落纱| | 2024-6-20 02:00 | 只看该作者
检查你的硬件连接是否正确。确保JTAG或SWD调试接口的连接是稳定的,并且没有损坏。

使用特权

评论回复
10
三生万物| | 2024-6-20 04:00 | 只看该作者
确保微控制器有稳定的电源供应。电源不稳定可能会导致烧录失败。

使用特权

评论回复
11
暖了夏天蓝了海| | 2024-6-20 06:00 | 只看该作者
确保目标设备没有处于一个阻止烧录的状态,例如,如果设备正在运行一个自锁程序,可能会阻止外部烧录。

使用特权

评论回复
12
别乱了阵脚| | 2024-6-20 08:00 | 只看该作者
确保你使用的Keil MDK版本是最新的,或者至少是支持STM32G4系列的。旧版本的Keil MDK可能不支持新系列的微控制器。

使用特权

评论回复
13
冰春彩落下| | 2024-6-20 12:00 | 只看该作者
在Keil MDK中,确保你的项目配置设置正确,包括Flash的起始地址和大小,以及烧录算法的选择。

使用特权

评论回复
14
江河千里| | 2024-6-20 16:00 | 只看该作者
尝试使用ST-Link Utility或其他烧录工具来擦除和烧录Flash,以确定问题是否与Keil MDK有关。

使用特权

评论回复
15
小小蚂蚁举千斤| | 2024-6-23 16:53 | 只看该作者
应该是设置或者硬件连接问题

使用特权

评论回复
16
cr315| | 2024-6-24 10:24 | 只看该作者
程序大小超过芯片容量

使用特权

评论回复
17
jcky001| | 2024-6-24 10:25 | 只看该作者
检查在Keil软件中的烧录设置是否正确。例如,需要确认通信接口(如UART、USB等)、波特率、芯片型号等设置是否与硬件匹配。

使用特权

评论回复
18
两只袜子| | 2024-6-24 14:00 | 只看该作者
Keil软件或烧录器与G474CBTx芯片之间可能存在兼容性问题。

使用特权

评论回复
19
AdaMaYun| | 2024-6-24 22:29 | 只看该作者
双bank引起的,是什么原因呢?

使用特权

评论回复
20
duo点| | 2024-6-25 10:00 | 只看该作者
可能是驱动版本和认证问题

使用特权

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

本版积分规则

567

主题

2517

帖子

4

粉丝