开发板:SEED-DEC6437
平台:CCS3.3
问题:在成功烧写flash之后(自启动),连接CCS一直失败
初次连接CCS报错如下:
单击YES之后显示如下:
问题详细描述:
我仿照SEED给led的boot程序,通过仿真器成功将vedio_vga程序烧写到开发板上,断开仿真器,重新上电后,得到从摄像机传输的图像带有很多条纹状重叠(vedio_vga程序若通过仿真器单独在板子上跑是没问题的),于是网上查了资料之后怀疑是二次boot程序有问题,然后修改了二次boot程序(请看附件,修改的地方都有注释),然后再重新烧写到开发板上,之后就出现了上边无法与CCS连接的问题。
个人怀疑是因为将二次boot程序修改成死循环了,导致二次boot之后就不能跳转到目标程序的起始地址,于是上电就自动循环运行该boot程序,导致CPU一直被占用,从而无法与CCS连接。。。。若是该原因,擦除flash应该就好了,但是不能与CCS连接的情况下如何擦除呢?如果不是这个原因,又是为什么呢?
请专家赐教啊,折腾好久了,万分感激!
Andy Yin:
Alan您好,
请根据bootloader document 进行代码check,一步步比对核实一下。我们也在核实一下。谢谢。
Alan Zhang:
回复 Thomas Yang1:
恩,我查看官方资料也说硬件复位再连接,可是仍然不管用,谢谢你。
Alan Zhang:
回复 Andy Yin:
我check过了,按照我修改的程序是会导致程序不能跳转到0x42000000的,我想知道之前有出现过类似问题吗?或者我将工程发送给您,您在开发板上边试试?
Thomas Yang1:
回复 Alan Zhang:
0x42000400 是落在:
40000000 4FFFFFFF 256M HyperLink data 空间
Alan Zhang:
回复 Thomas Yang1:
DM6437内存映射中0x42000000-0x42FFFFFF 16M是EMIFA data CS2的空间,因为合众达这个开发板的boot mode是EMIFA ROM FASTBOOTwithout AIS模式,所以上电后会从0x42000000处连接flash,这里是没有问题的,原来的程序就是这个入口地址,我并没有修改,谢谢你~
Thomas Yang1:
回复 Alan Zhang:
你意思是单步跟踪后,程序不能跳转到0x42000000?你能不能先把code section放到片内空间,调试成功后,再放到片外空间后?
建议供参考
Alan Zhang:
回复 Thomas Yang1:
Thomas Yang:
你好,不是单步跟踪看到程序跳转到0x42000400,而是SEED-DEC6437的启动模式就是这样的,整个过程其实是这样的,开发板上电之后就自动执行板子内嵌的一次bootloader程序,将0x42000000-0x42000400处(共1kb,就是我附件中给的boot.asm)的代码搬移到片内RAM中,然后再执行该1KB的程序(boot.asm),我把它命名为二次bootloader,作用就是将余下真正的目标程序代码搬移到片内RAM中,搬移完毕之后就跳转到目标程序的起始地址(对应于0x42000400)开始执行目标程序。
现在的问题就是我写的二次搬移程序boot.asm错误的写成了死循环,导致程序最终无法跳转到目标程序的起始地址,就是不能从boot.asm中跳转出来,致使CPU一直被占用,无法与CCS连接,不能连接CCS基本上什么操作都做不了了,我猜想能否通过什么办法(不用连接CCS,比如串口)擦除flash空间(就是擦除boot.asm这个程序),让CPU不被占用??
谢谢你一直以来的解答。
Thomas Yang1:
回复 Alan Zhang:
你好
现在明白你的意思了,如果SEED的开发板有拨码开关支持no boot的话, 建议配置成no boot 模式。或者自己跳线试试