现象描述:
1、问题直接现象是设备在环境温度较低时第一次上电可能出现读取DDR数据异常导致DSP跑飞,预热一段时间后再运行就没问题了;
2、在低温箱(10℃左右)中使用仿真器调试发现DDR读取异常时,“System Reset”之后DDR读取可恢复正常;
3、在低温环境下只运行DDR读写检查程序,问题不复现;
4、将DDR工作频率从667MHz降到500MHz,问题不复现;
5、降频后出现另一个问题,使用仿真器下载代码运行正常,DSP自动Boot也能运行起来,但从DDR中的AIF缓存Buffer读取数据异常,为2048Byte循环的乱数据。
使用的高速数据接口只有EMIF和AIF,相关信息如下:
DDR参数:
芯片型号:MT47H64M16HR-3
时钟频率:66MHz
配置位宽:16bit
测试DDR相关时序和信号质量,没发现明显问题,相关寄存器配置如下:
DDR_SDCFG = 0x00D3CA32;
DDR_SDRFC = 0x00000a29;
DDR_SDTIM1 = 0x4D246C9A;
DDR_SDRIM2 = 0x00993c42;
DDR_DDRPHYC = 0x50001906;
DDR_SDCFG = 0x0053CA32;
附件是DDR相关部分电路原理图,供参考。
AIF配置:
只配置了一个上行链路,传输两路30.72M的数据,有效数据速率2Gbit/s。
请大家帮忙支招,谢谢!
Mo Sang:
是不是BGA焊接有问题,温度会导致电路板及焊点有热胀冷缩的变形,因而不同温度导致系统不稳定?
Zhu shifeng:
回复 Mo Sang:
Mo Sang
谢谢您的建议。好像不是热胀冷缩的问题。
Allen35065:
回复 Zhu shifeng:
1, 降频之后没有错误,极有可能是因为信号质量的问题引起的,需要观察具体错误是什么模式,是在某些地址线错误,还是某些数据线错误,对内存进行读写地址和bit walking的操作来确定。
2, DDR3降频后速率降低,可能会影响AIF2读写数据的时序。
Zhu shifeng:
回复 Allen35065:
1、DDR时钟改为500M,仿真器下载运行正常,自动boot时很大概率出现AIF同步状态一直不对,寄存器0x02bca080数值为0x00000108,查手册说是处于ST0状态(没有从FPGA收到正确的数据包);
2、自动boot启动AIF同步不上时,不带GEL文件连一下仿真器,AIF状态就恢复正常了,此时仿真器不下载代码直接运行,一切正常;
3、在代码中检测AIF同步状态,发现同步失败时自动重配AIF无效。