如题所述,使用C6748编写工程时,若使用仿真器进行在线仿真,则程序能够正常运行;但将程序通过SPI1烧写到NOR Flash后无法正常脱机运行。
经过测试排查,发现程序问题出在MMC存储上。我使用的是两块eMMC芯片,分别连接在DSP的MMCSD0和MMCSD1接口上,利用EDMA3将数据写入或读出两eMMC芯片;同时使用了StarterWare,通过函数“MMCSDReadCmdSend”/“MMCSDWriteCmdSend”进行读取/写入eMMC的操作(见mmcsd_proto.c)。主要问题出现在MMCSD1上,具体现象为:
1. 当程序中没有对eMMC的读写操作时,程序在烧写后能够正常脱机运行;
2. 当程序中仅对MMCSD0进行读写操作,而无对MMCSD1的操作时,程序在烧写后也能够正常脱机运行;
即只要程序中有对MMCSD1的操作,在烧写后就会卡死在函数“MMCSDReadCmdSend”/“MMCSDWriteCmdSend”里,对于“MMCSDReadCmdSend”,常常会卡在该函数中的“status = MMCSDCmdSend(ctrl, &cmd);”语句处(即status = 0);对于“MMCSDWriteCmdSend”,则常常会卡在该函数中的“status = ctrl->xferStatusGet(ctrl);”语句处(即status = 0)。
我最开始以为是在线仿真时使用的gel文件中的一些配置与烧写时AISgen工具中的配置不相符的原因,但是经过排查之后似乎并不是这里的问题;此外,Boot引脚配置也没有问题,因为我用其他简单程序(例如一个小的UART中断程序)测试时,发现在线仿真和烧写后,程序都可以正常运行;同时我也检查了EDMA3的配置,发现除了相关编号不同以外,MMCSD0和MMCSD1有关EDMA3的代码是完全一样的,因此似乎也不像是DMA配置有问题……
综上,我的主要疑惑是:
1. 为什么在线仿真能够正常运行,但烧写后无法正常运行?
2. 为什么与MMCSD0连接的芯片读写正常,而与MMCSD1连接的芯片读写会出问题?
想请教大家,上述现象出现的原因可能有哪些?有何解决建议?感谢大家拨冗解答!