我们一直使用TMS320DM8168BCYG2,
原先我们使用DDR1600(DDR_CLK=796.5MHz)一直都很好。
每个emif挂着1GB内存,128Byte interleave模式。
最近生产了些新版子,发现内存有问题,
我们芯片运行频率如下:
TI8168-GP rev 2.0
HDVICP clk : 600MHz
L3 Fast clk : 549MHz
HDVPSS clk : 274MHz
Ducati M3 clk : 274MHz
DSP clk : 1000MHz
ARM clk : 1200MHz
DDR clk : 796MHz
分两种情况:
第一,内存控制器可以正常初始化:
如果内存时钟跑在796.5MHz,有很多板(大概60%)无法完整启动整套系统,
表现为VIDEO-M3,VPSS-M3,DSP,A8随机异常,我尝试把ARM降到987MHz,DSP降到800MHz,M3降到250MHz,
现象一样。
也和硬件人员一起测了内存相关信号,都很好,系统电源也很稳定,供电也很好。
内存参数也都对过,完全正确,我在之前另外一家公司也是使用一模一样到内存,
那边到参数也是我配置,他们一直没有出现过问题,而且他们产品都大规模应用了。
我找他们dump内存参数给我,我这边的参数也和我原先的配置一样,
唯一不同到就是leveling值不一样(因为布线有所不同)。
我定位到有的板子emif0有问题,有的板子是emif1有问题。
定位过程如下:
1.使用config_1G_256MLinux.bld,让系统只是用0x80000000~0xbfffffff 1GB内存空间,
保持内存时钟为796.5MHz,两个emif工作在non-interleave模式,
通过LISA_MAP将emif0映射到0x80000000~0xbfffffff,emif1映射到0xc0000000~0xffffffff,或者相反。
然后启动系统,有的板子是使用emif0时有异常,有的板子是使用emif1时有异常。
但是奇怪的是我分别在uboot里用mtest和在linux下使用memtester 4.3(压力测试)对有问题的emif对应的
内存空间进行测试,测试都是通过的。
如果将内存时钟降为756MHz,大部分有问题的单板都可以稳定工作在interleave模式。
只有一块板子依然不行,我又继续降内存时钟到675MHz,这个板子也可以稳定工作在interleave模式。
当然每次调整DDR时钟我都重做software leveling的。
第二种情况内存控制器无法正常初始化的情况:
这批新板中有三块无法使用JTAG烧录uboot,现象为JTAG可以正常attach到A8,但是执行GEL初始化
内存会失败,报错是无法设置内存控制器的配置寄存器。有一块是无法配置emif0的配置寄存器(单板A),
还有一块是无法配置emif1的配置寄存器(单板B),第三块好像是在ROM CODE地址空间里就出错。
1.我做了一个只初始化emif0 uboot,然后找了一块没有问题的单板(单板C),将uboot烧到单板C的flash里,
然后将该flash替换到单板B里,单板B可以正常启动,
如果改回emif0和emif1都初始化的uboot,那么单板B到uboot无法启动。
2.同样到我也做里一个只初始化emif1到uboot,对应flash贴到单板A上,单板A可以正常启动,
如果改回emif0和emif1都初始化到uboot,那么单板A的uboot无法初始化。
降了内存频率现象依旧。
所以我怀疑我们本批次的DM8168存在瑕疵,但又觉得不应该,然后又觉得这些现象很不可思议。
期待TI工程师能帮忙确定这个问题,非常感谢!!!
Eason Wang:
http://support.spectrumdigital.com/boards/evm816x/revg/files/evm816x_BSL.zip
这里可以下到CCS下运行的ddr测试程序,看看能不能打出一些其他的信息。
你可以说一下,A8 m3的随机异常,指的是什么,打印说了些什么?你可以在挂掉的时候,连接仿真器去看相关的CPU核,看是不是停在存取DDR的时候,来确定一下是不是就是DDR这边造成的问题?
因为我看你下面的描述,都是基于DDR有问题的假设,去测试DDR和降频。降频的结果是能过DDR测试
那么降频之后,对问题本身有没有改善的效果呢?
Yufeng Xu:
回复 Eason Wang:
Eason,感谢你的回复,
在第一种情况下我执行DDR3测试时内存都是运行在796.5MHz的,
有问题的emif所在的内存做测试都通过了,但是系统无法正常启动。
A8/M3/DSP异常是指启动时第一次发生异常有可能是A8异常(内核oops,访问异常地址),
或video M3异常(unhandled exception ),或vpss M3异常(unhandled exception),
或DSP(unhandled exception)。出错时PC寄存器的地址非确定值,而且地址很奇怪。
比如对于M3,地址不是4字节后2字节对齐的(但是确实是对应M3所在的代码段空间),
反汇编对应firmware,找不到对应的地址。
第一种情况里的板子,保持DDR3时钟为796.5MHz,对A8,DSP,M3进行降频,依然无法正常启动。
只有对DDR3降频才有改善,DDR3降频到756M,大部分原先有问题的板子可以稳定运行,只有一块依然不行。
这一块756MHz不行的板子在降到675MHz时则能正常稳定运行。
第二种情况里DDR3降频都没有改善。
而且从使用JTAG运行GEL里的DDR初始化,出错是在配置有问题的emif控制器寄存器时发生错误。
感觉这个属于芯片内存出错了。
Kevin Chen2:
回复 Yufeng Xu:
Hi,你好,有些问题需要咨询,如果方便的话,能否回复下,我公司刚做了一块基于8168的板子,请问,你们如何进行大规模的烧写生产,通过jtag,烧些uboot到nand吗?还是有其他更好的方法吗? 我的联系方式是kevin@boeckeler.com, 期待你的解答,谢了~