第一次基于英飞凌TC3XX系列芯片做控制器开发,之前用demo板加MCAL形式进行开发,没有出现问题,直到第一批板子打回来后,程序烧进去后,复位无法指向复位地址0xA0000000,而是随机指向不同地址,导致程序无法正常运行。通过阅读芯片手册,发现芯片有一段内部bootrom,启动后会到0XAF400000 UCB区域去寻找BMHD信息,找到成功后会跳转到BMHD信息中定义的程序运行首地址。
一、问题:
TC387复位后无法指向复位地址
二、原因:
新出厂芯片,UCB区域为空,不存在BMHD信息,芯片bootrom代码找不到BMHD内容无法跳转到启动代码首地址。
两方面原因导致复位无法跳转到启动地址:
1、MCAL工程默认不编译生成bmhd的Ifx_Cfg_SswBmhd.c,我们下载的程序不带bmhd内容。
2、调试器也没有设置下载UCB区域,不能将编译好的BMHD信息下载下去。
三、解决措施
1、编译Ifx_Cfg_SswBmhd.c:
找到TC38A_Config_Tasking.xml文件,设置 Ifx_Cfg_SswBmhd 编译进代码,
将
改为
2、设置调试器,选择下载UCB(包含BMHD):
执行以下步骤:
点击Hardware,然后点击Options
勾选下载UCB区域,然后点击确定
操作后,会显示下载UCB区域
再点击下载即可正常运行了。
四、注意事项
由于对UCB区域不是很理解,建议烧写一次后,没有修改就不再选择烧写
五、总结
嵌入式平台五花八门,问题千奇百怪,只要沉下心来,翻阅芯片手册,检查代码,耐心调试,必定能找到问题,解决问题。