This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

MSP430FR2673: 自写boot进行430升级,在升级到上次固件大小的位置时突现IIC读取超时,无法恢复

Part Number: MSP430FR2673

您好!

我在2673芯片内放置了两个APP,一个作为升级boot,另一个作为app运行程序,升级boot是仿照BSL进行编写的。当新升级的固件小于芯片本身的app固件大小时,本次升级不会有异常,且升级后可以正常运行;但当新固件大于芯片中已存在的app固件大小时,就会在升级到已存在固件大小的末尾地址时出现总线错误(报错为IIC通信超时或地址无应答)。从示波器上看是在写入这一包后,IIC尝试读取这一包回复时,boot没有做出任何回应,且SCLK与SDI均被拉低无法恢复。当我对设备进行断电重启后,新固件又能正常升级了,或者boot在调试模式下升级新的大固件也没有问题。

芯片中已存在的固件大小为5502,app程序从0xc800开始,所以末尾地址是0xdd7e;自写的boot是200字节一包,出问题时正好是尝试写入0xdd18到0xdde0区域的新固件,包含旧固件的末尾。

我尝试更换了芯片中的程序,但只要希望更新的固件比原有固件大,就会出现相同的问题,且每次都是在旧固件末尾这一包出现问题;升级时直接立刻向旧固件末尾写新固件,则会立即出现问题。

以下是我在自写boot中的配置:

在跳转boot前执行了关闭所有中断__disable_interrupt();,跳转使用了((void (*)())*(uint16_t *)(0xFFFE))();

请问这个问题有办法解决吗?或者这可能是什么原因导致的呢?