问题描述:SDRAM :MT48LC4M32B2TG-7
DSP :TMS320C6713EMIF时钟:75MHz
EMIF 配置 (与SDRAM相关的)
0x57116000, //SDCTL
EMIF_FMKS(SDTIM,XRFR,OF(1)) |
EMIF_FMKS(SDTIM, CNTR, OF(1)) |
EMIF_FMKS(SDTIM, PERIOD, OF(0x61a)),
EMIF_FMKS(SDEXT, WR2RD, OF(0)) |
EMIF_FMKS(SDEXT, WR2DEAC, OF(2)) |
EMIF_FMKS(SDEXT, WR2WR, OF(0)) |
EMIF_FMKS(SDEXT, R2WDQM, OF(1)) |
EMIF_FMKS(SDEXT, RD2WR, OF(0)) |
EMIF_FMKS(SDEXT, RD2DEAC, OF(1)) |
EMIF_FMKS(SDEXT, RD2RD, OF(0)) |
EMIF_FMKS(SDEXT, THZP, OF(2)) |
EMIF_FMKS(SDEXT, TWR, OF(1)) |
EMIF_FMKS(SDEXT, TRRD, OF(0)) |
EMIF_FMKS(SDEXT, TRAS, OF(3)) |
EMIF_FMKS(SDEXT, TCL, OF(1))
程序验证:
for( gDebugVar0 =0;gDebugVar0 <ScreenTableNum;gDebugVar0++)
* (UINT32 * )(0x80000000+gDebugVar0*4)=0x00000000;
for( gDebugVar0 =0;gDebugVar0 <ScreenTableNum;gDebugVar0++)
* (UINT32 * )(0x80200000+gDebugVar0*4)=0xFFFFFFFF;
f or( gDebugVar0 =0;gDebugVar0 <ScreenTableNum;gDebugVar0++)
* (UINT32 * )(0x80400000+gDebugVar0*4)=gDebugVar0;
for( gDebugVar0 =0;gDebugVar0 <ScreenTableNum;gDebugVar0++)
* (UINT32 * )(0x80600000+gDebugVar0*4)=0x5a5a5a5a;
向0x80200000中全写1均没有问题
向0x80000000中全写0有出错情况,但比较少
在0x80004250:出现0x0000A800
向0x80400000中递增写数据,出错情况较多
向0x80600000中写数据,出错情况较多
0x80600004: 0x5A5ADA5A 0x5A5AFA5A 0x5A5ADA5A 0x80600010: 0x5A5ADA5A 0x5A5A5A5A 0x5A5AFA5A 0x5A5AFA5A 产生错误数据的地址不固定,产生错误数据的位固定,一般是 [F,D,B]位上的数据发生变化0x88xx,0xA8xx,0x80xx
解决方案:
1.刷新频率变快,
EMIF_FMKS(SDTIM,XRFR,OF(1)) |
EMIF_FMKS(SDTIM, CNTR, OF(1)) |
EMIF_FMKS(SDTIM, PERIOD, OF(100)),//SDTIM
错误不变。
刷新频率再变快,
EMIF_FMKS(SDTIM,XRFR,OF(1)) |
EMIF_FMKS(SDTIM, CNTR, OF(1)) |
EMIF_FMKS(SDTIM, PERIOD, OF(1)),//SDTIM
经过检查,
0x80408EB0: 0x000023AC 0x000023AD 0x0000A3AE 0x000023AF 错误依然存在,但是已经很少了。
2.把EMIF时钟变成100MHz,
问题解决。
请专业人士分析下,原因是什么? |