团队、
在一个基于 DM8148的客户设计中、DDR 测试会停止一些时间。 (在运行 Linux 时、我们偶尔会看到随机崩溃)。 发生这种情况时,我们甚至无法连接到 JTAG 并调试... 以下是在 CCS 控制台上看到的错误:
CortexA8:GEL 输出:数据写入地址:0xC063153C
CortexA8:GEL 输出:数据写入地址:0xC0631540
CortexA8:写入长度0x4第0页上的0xc0631544处的内存块时出现问题:错误0x80002002/-1204在内存、控制、 DAP 访问地址0x00000080期间出现致命错误。 DAP 传输中止。
无法评估 DDR_DataTransferCheck()。
写入0xC0631544时发生内部错误
at *(((unsigned int *) 0xC0600200+I)=temp_reg_wr [Mercury Ti814x_ddr3.gel:700]
在 DDR_DataTransferCheck()
CortexA8:警告:错误0x60020020/-1267错误:执行、内部、 由于应用程序启用的 OS_LOCK、无法获得目标状态。
CortexA8:20次尝试后无法确定目标状态
CortexA8:在断开连接之前未能从目标中删除调试状态。 程序存储器中仍可能嵌入了断点运算代码。 建议您在连接之前重置仿真器、并在继续调试之前重新加载程序
下面是所执行的测试:
热菜单 DDR_DataTransferCheck()
{
unsigned int temp_reg_rd = 0;
unsigned int temp_reg_wr = 0xA5A5A5A5;
unsigned int i=0;
unsigned int error=0;
GEL_TextOut ("尝试访问 DDR 存储器...写入数据\n");
对于(i=0 <NO_LOOP_CNT; i++)
{
*(((UWORD32 *) DDR_START_ADDR +(I))= temp_reg_wr;
//GEL_TextOut ("写入的数据为:%x \n"、、、、 (unsigned int *) i);
GEL_TextOut ("数据写入地址:%x \n"、、、、 (unsigned int *) DDR_START_ADDR +(i));
}
对于(i=0 <NO_LOOP_CNT; i++)
{
temp_reg_rd = *(((UWORD32 *) DDR_START_ADDR +(I));
// GEL_TextOut ("数据读取为:%x \n"、、、、 (unsigned int *) temp_reg_rd);
if (temp_reg_rd!= 0xA5A5A5A5)
{
//GEL_TextOut ("数据检查在:%x \n"、、、、 (unsigned int *) DDR_START_ADDR +(i));
错误++;
}
其他
{
//GEL_TextOut ("数据检查在 :%x \n"、、、、 (unsigned int *) DDR_START_ADDR +(i));
}
GEL_TextOut ("故障位置数 为:%x \n"、、、、、 (unsigned int *)错误);
}
if (错误!= 0)
{
GEL_TextOut ("数据完整性检查失败");
}
否则{
GEL_TextOut ("通过数据完整性检查\n");
}
}
这种行为的原因可能是什么? 请提供一些指导吗?
此致、
四