TI中文支持网
TI专业的中文技术问题搜集分享网站

F28377D的bootloader运行跑飞

你好,
我写了一个bootloader,使用spi-flash实现在线升级,bootloader放在sectorB-C,APP放在sectorE-J,内部flash读写使用ti提供的库,升级是通过ccs的hex2000工具转换而来。
目前实现的流程:

主函数接收到升级文件后存入spi-flash,然后暖启动重新进入bootloader;

进入bootloader的实现流程如下:首先是时钟 spi以及内部flash等的初始化,然后初始化FLASH API,擦除内部flash

①相关外设初始化,包括禁看门狗,禁中断等→②初始化Flash api→③擦除内部flash→④从spi-flash读取本次升级文件的长度→⑤读取存入spi-flash的文件,并依次写入内部flash

问题:

第一次升级没有问题;

当进行第二次升级时,bootloader虽然会被调用,但会跑飞(),而且发现同样一个函数,如果单步运行,没有问题,而一旦全速运行,这个函数还没执行完就已经跑飞了;

下一次重新用仿真器烧录程序后,同样的也是第一次没问题,第二次跑飞。

当然如果bootloder中取消第三步和第五步,不管怎么运行都没有问题。

起初怀疑是不是bootloader这段代码被修改导致,但对比内存中的这段代码,并无任何差异。

请问一下:
①用仿真器烧录程序和单板重新上下电或者暖启动 对dsp而言有什么去区别?
②造成bootloader跑飞的可能原因有哪些?

Green Deng:

你好,你的情况我想到一点,flash API函数必须运行在ram中,不知道你是否有将bootloader程序搬运到ram中运行的步骤?

,

user6441275:

你好,

这一步操作是有的

代码中:

 BootMemCopy(&bootRamfuncsLoadStart, &bootRamfuncsLoadEnd, &bootRamfuncsRunStart);//ok

cmd中:

 LOAD = BOOT_FLASH,     RUN = RAMLS0123,     LOAD_START(_bootRamfuncsLoadStart),     LOAD_END(_bootRamfuncsLoadEnd),     RUN_START(_bootRamfuncsRunStart),     PAGE = 0

每次升级第一次执行bootloader没有问题,升级第二次执行bootloader时,程序就跑飞了,这时候如果重新用仿真器烧录,再次升级又可以成功,当然第二次也跑飞了

,

Green Deng:

这个就比较奇怪了,我暂时没有什么想法。建议你可以去英文E2E上咨询一下这个问题,英文E2E上应该会有这方面的专家来帮助你解决这个问题:e2e.ti.com/…/171

,

user6441275:

好的,多谢!

赞(0)
未经允许不得转载:TI中文支持网 » F28377D的bootloader运行跑飞
分享到: 更多 (0)