ST意法半导体
直播中

贾永世

8年用户 1901经验值
私信 关注
[问答]

STM32H743采用flash swap 进行IAP升级,reset后启动不了怎么解决?

试了一下将主程序放在第一个flash中,采用U盘将程序(bin文件添加了crc,用U盘读出来的时候,进行了校验)读取进外部SRAM(0x60000000)中,再将程序写入FLASH2中,再进行FLASH SWAP,然后看门狗重启,结果升级后,程序无法启动,同时也无法进行仿真了,flash下载不了,到擦除的时候就出错了(timeout),跪求大佬能给分析一下[img]https://bbs.elecfans.com/%5Bimg%5D%5B/img%5D[/img]!flash的过程如下:


回帖(2)

李浩

2025-3-12 11:02:30
你给的代码太乱了,Flash交换后,在SYSCFG里面有个地址映射啥的你看下需不需要修改
举报

成尔秩

2025-3-13 17:11:59

在使用STM32H743进行IAP(In Application Programming)升级时,如果遇到FLASH SWAP后无法启动的问题,可能涉及多个方面的原因。以下是一些可能的原因和解决方法:


1. FLASH SWAP 配置问题


STM32H743支持双Bank FLASH,可以通过FLASH SWAP功能切换Bank1和Bank2。如果FLASH SWAP配置不正确,可能会导致程序无法启动。




  • 检查FLASH SWAP配置:确保在FLASH SWAP之前正确配置了FLASH的Bank1和Bank2。FLASH SWAP操作需要在FLASH控制寄存器(FLASH_CR)中设置SWAP_BANK位,并且需要等待FLASH操作完成。




  • 检查FLASH SWAP状态:在FLASH SWAP操作后,检查FLASH状态寄存器(FLASH_SR)中的SWAP_BANK位,确保FLASH SWAP操作成功。




2. FLASH 编程和擦除问题


在将程序从外部SRAM写入FLASH2时,如果FLASH编程或擦除操作失败,可能会导致程序无法启动。




  • 检查FLASH编程和擦除操作:确保在写入FLASH2之前,正确擦除了目标FLASH区域。使用HAL库或LL库提供的FLASH擦除和编程函数,并检查返回值以确保操作成功。




  • 检查FLASH编程地址:确保将程序写入正确的FLASH地址。STM32H743的FLASH2地址范围是0x08100000到0x081FFFFF。




3. 程序启动地址配置问题


在FLASH SWAP后,程序启动地址可能会发生变化,如果启动地址配置不正确,可能会导致程序无法启动。




  • 检查向量表偏移寄存器(VTOR):在FLASH SWAP后,确保向量表偏移寄存器(VTOR)指向正确的FLASH Bank。如果FLASH SWAP后启动的是Bank2,VTOR应该指向Bank2的起始地址(0x08100000)。




  • 检查启动模式:确保STM32H743的启动模式配置正确。在FLASH SWAP后,可能需要重新配置启动模式,以确保从正确的FLASH Bank启动。




4. 看门狗复位问题


在看门狗复位后,如果程序无法启动,可能是看门狗配置或复位处理有问题。




  • 检查看门狗配置:确保看门狗定时器配置正确,并且在复位后能够正常启动程序。




  • 检查复位处理:在复位后,确保程序能够正确初始化并跳转到主程序入口。




5. FLASH 锁定和解锁问题


在FLASH编程和擦除操作中,如果FLASH未正确解锁,可能会导致操作失败。



  • 检查FLASH解锁操作:在进行FLASH编程和擦除操作之前,确保FLASH已正确解锁。使用HAL库或LL库提供的FLASH解锁函数,并检查返回值以确保解锁成功。


6. 仿真和下载问题


如果无法进行仿真和FLASH下载,可能是FLASH被锁定或FLASH操作失败。




  • 检查FLASH锁定状态:使用ST-Link Utility或其他工具检查FLASH锁定状态,并尝试解锁FLASH。




  • 检查FLASH操作错误:在FLASH操作失败时,检查FLASH状态寄存器(FLASH_SR)中的错误标志,以确定具体错误原因。




7. CRC校验问题


虽然你在U盘读取时进行了CRC校验,但如果CRC校验不通过,可能会导致程序写入FLASH2时出错。



  • 检查CRC校验结果:在将程序写入FLASH2之前,再次检查CRC校验结果,确保程序数据完整。


总结


建议按照以下步骤进行排查和解决:



  1. 检查FLASH SWAP配置和状态,确保FLASH SWAP操作成功。

  2. 检查FLASH编程和擦除操作,确保程序正确写入FLASH2。

  3. 检查向量表偏移寄存器(VTOR)和启动模式,确保程序从正确的FLASH Bank启动。

  4. 检查看门狗配置和复位处理,确保复位后程序能够正常启动。

  5. 检查FLASH锁定和解锁操作,确保FLASH操作能够正常进行。

  6. 检查CRC校验结果,确保程序数据完整。


如果问题仍然存在,建议使用ST-Link Utility或其他工具检查FLASH状态,并尝试手动解锁FLASH和重新下载程序。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分