您好!
我在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))();
请问这个问题有办法解决吗?或者这可能是什么原因导致的呢?