此问题已经耗掉我若干天时间,进行了大量测试和分析仍无结果,无奈
之下,向大家求助。若能解决该问题,不尽感激。
硬件配置:
==============
TMS320VC5402,128KSRAM,DSP的PS信号接到SRAM的A16,这样SRAM的低
64K为程序空间,高64K为数据空间。主频100MHz
测试目的:
==============
校验RAM读写的正确性和可靠性。
测试方法:
==============
使用简单的C循环语句,对RAM的所有单元进行循环读写测试
测试代码:
==============
void TestPage()
{
unsigned int i;
unsigned int *p=(unsigned int *)0x4000;
for(i=0;i<0xc000;i++) p[i]=i;
for(i=0;i<0xc000;i++)
{
if(p[i]!=i) printf("Error!");
}
}
症状描述:
=============
如果上述代码放在片内运行,则完全正确,而当代码在片外SRAM中运行
时,每次测试总有几个(也仅有几个)单元数据不对,即出现写入错误。
经统计观察发现这些错误全部发生在数据的第13位(16位总线),其它
bit均正确。
初步分析:
=============
首先可以确定不是硬件问题,因为测试代码在片内运行时完
全正确,由此同样可以排除是数据空间等待周期的问题。由于其它大部
分代码均能在片外正常运行,所以也不会是程序空间等待周期的问题。
此外,经测试,Memory Bank切换中的PS-DS设置为1仍然不能解决问题。
将上述代码使用汇编编写,症状没有发生变化,因此不会是流水线冲突。
更奇怪的是,如果测试代码是下面这样,则测试完全正确:
void TestPage()
{
unsigned int i,j;
unsigned int *p=(unsigned int *)0x4000;
for(j=0;j<65536;j++)
{
for(i=0;i<0xc000;i++) p[i]=j;
for(i=0;i<0xc000;i++)
{
if(p[i]!=j) printf("Error!");
}
}
}
结论:
===========
对RAM的C000H个单元进行循环测试,当测试代码在片外时,每次均有
不超过10个单元发生写入错误,且错误均出现在写入数据的第13bit位。
现向大家请教,出现此问题的可能原因及应该如何进行更深入的测试。
1楼
0
0
回复