
各位好,目前正在用STM32H723ZET6做IAP升级,发现一个比较严重问题,FLASH擦除时只能使用BANK擦除和SECTOR擦除。BAN1擦除是把FALSH全部擦掉,所以不考虑;SECTOR擦除是把其中一个SECTOR擦除,由用户指定,所以我使用了SECTOR擦除。 STM32H723ZET6共有512K FLASH,由4个SECTOR组成(每个SECTOR由128K组成);整块FLASH由APP和BOOTLOADER组成,由于最小擦除单位是128K,因此app和bootloader不能放在同一个SECTOR(防止擦除APP时将BOOTLOADER也擦除)。因此,APP使用了256K,BOOTLOADER使用了128K。如果我想把BOOTLOADER放小,该怎么做? 程序从0800 0000开始运行,首先判断APP的首地址(0802 0000)和尾地址(0806 0000)固定地址的固定字符是否完整,如果完整的话,就跳到APP应用程序去执行;如果不完整,将在BOOTLOADER中等待升级。正常升级时,在APP应用程序中将APP的首地址(0802 0000)和尾地址(0806 0000)固定地址修改为其他字符,重启后BOOTLOADER就会认为APP不完整,等待升级了。但是由于只能擦除128K,导致在擦除固定字符时,也把全APP应用程序全部擦除了。导致无法实现IAP在线升级功能。 STM32F103系列对FLASH操作时有PAGE页擦除,一次只擦除1K,因此没有问题。 所以想请教下各位,STM32H723ZET6是否有擦除小于128K的FLASH的指令;如果没有,各位的IAP是如何实现的,不胜感激! |
这个方法是个不错的思路。唯一美中不足之处就是怕这时候掉电,看看应用中这种小概率事件能不能接受吧。
应该没问题啊,每次上电,都是自举程序先运行,不需要下载的时候,跳转到应用区运行