dear,
附件是我上传的bootloader工程,开发环境是MDK,
直接烧录app程序能够正常运行,通过boot烧录app程序能够正常烧录,且烧录完成之后在调试中重新读取app的程序进行比对,是正确的,
问题:通过boot升级app 程序不能实现跳转,已经连续调试了几天找不出问题,在此请freescale的工程师帮忙看一下,问题出在哪里,附件是我的bootloader工程,谢谢~
1、在APP的.S文件注释掉了如下:
;IF :LNOT::DEF:RAM_TARGET
;AREA |.ARM.__at_0x400|, CODE, READONLY
;DCB BackDoorK0, BackDoorK1, BackDoorK2, BackDoorK3
;DCB BackDoorK4, BackDoorK5, BackDoorK6, BackDoorK7
;DCB 0xFF, 0xFF, 0xFF, 0xFF
;DCB 0xFF, FPROT, FSEC, FOPT
;ENDIF
楼主你好!
关于KEA128的CAN bootloader,建议你先看下我们这个帖子:
里面有相关的代码以及跳转程序,你参考下那边的代码再修改下自己的代码。
如果还有问题,欢迎继续交流。
Have a great day,
Kerry
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------
你好!
现在我用你们的flash驱动做测试,如果周期读写会造成单片机死机,初始化只读取一次就没有问题,请问一下这是什么原因?
你好,不好意思,上周一直比较忙,没有回复你。
你说的周期读写,你在第二次写之前是否已经做了对应区域的擦除?
另外,在做flash编程和擦除的时候,你需要关闭中断,这个做了没有?还有发起flash命令的代码最好拷贝到RAM里面,你那边有没有做?
Have a great day,
Kerry
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------
你好!flash二次写之前都做了擦除,读写之前都关闭了中断。
“还有发起flash命令的代码最好拷贝到RAM里面”,这句话怎么理解?是KEAZ128读写flash必要的操作还是?
除了上面飞思卡尔单片机以外,像DZ60、XEQ512这一类,需要把代码拷贝到RAM里面的操作只是在CAN升级之后,重新把app拷贝到RAM运行,对于flash的操作也没有提到需要把代码拷贝到RAM
在flash这一块它们之间有很大不同吗?
其实就是launch commander那个命令函数,拷贝到RAM运行。
#if (defined(IAR))
__ramfunc void FLASH_LaunchCMD(uint8_t bWaitComplete)
#else
void FLASH_LaunchCMD(uint8_t bWaitComplete)
#endif
{
#if defined(FLASH_ENABLE_STALLING_FLASH_CONTROLLER)
MCM->PLACR |= MCM_PLACR_ESFC_MASK; /* enable stalling flash controller when flash is busy */
#endif
FTMRH->FSTAT = 0x80;
if(bWaitComplete)
{
// Wait till command is completed
while (!(FTMRH->FSTAT & FTMRH_FSTAT_CCIF_MASK));
}
}
你看,IAR的,可以直接用__ramfunc 去定义这个函数到RAM。
这个是kinetis芯片的特性,和flash模块有关。
其他的芯片我不了解。
Have a great day,
Kerry
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------
@Kerry Zhou