完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
佬们,救救孩子吧!
原因: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没有办法同时擦写的关系,头回用好一点的芯片,还在学习。 |
|
相关推荐
1个回答
|
|
|
根据您的描述,问题可能出现在以下几个方面:
1. 程序大小:当程序大小达到40K左右时,可能超过了单次扇区擦除和烧录的限制。您可以尝试将程序拆分成较小的部分,然后分别进行扇区擦除和烧录。 2. 扇区擦除选项:您提到选择了“Erase Sectors”选项时出现问题。请确保您选择的扇区擦除范围正确,且不会影响到其他重要的系统区域。 3. 仿真器设置:请检查ST-link V2或J-Link仿真器的设置,确保它们正确配置以支持您的STM32G474CBTx芯片。 4. 协议栈和Bootloader:您提到屏蔽协议栈后,扇区擦除没有问题。这可能意味着协议栈或Bootloader与扇区擦除存在冲突。请检查协议栈和Bootloader的配置,确保它们不会影响到扇区擦除和烧录过程。 5. Keil MDK版本:您使用的是Keil MDK V5.35版本。虽然这个版本相对较新,但仍然有可能存在一些兼容性问题。您可以尝试升级到最新版本的Keil MDK,看看是否能解决问题。 6. 芯片固件:请确保您的STM32G474CBTx芯片固件是最新的,以避免可能的兼容性问题。 综上所述,您可以尝试以下步骤来解决问题: 1. 将程序拆分成较小的部分,分别进行扇区擦除和烧录。 2. 检查扇区擦除范围,确保正确无误。 3. 检查仿真器设置,确保正确配置。 4. 检查协议栈和Bootloader配置,确保不会影响到扇区擦除和烧录过程。 5. 升级Keil MDK到最新版本。 6. 更新STM32G474CBTx芯片固件。 希望这些建议能帮助您解决问题。如果问题仍然存在,请提供更多详细信息,以便我们能够更好地帮助您。 |
|
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
4200 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
3261 浏览 1 评论
2791 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
2224 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
15129 浏览 2 评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
3164浏览 4评论
stm32f4下spi+dma读取数据不对是什么原因导致的?
1939浏览 3评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
2106浏览 3评论
2019浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
2216浏览 3评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-12 21:30 , Processed in 1.186967 second(s), Total 77, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
546