最近批量生产了一批型号的板子(20片)。已通过示波器观察过复位及上电时序。在用XDS200调试的时候,原有调试程序无法运行。板子都是这个问题,故障信息如下:
批量的板子与我原有的板子,主要差别在内存容量及CPU的版本有差别。
原有内存1G,现在改为2G。
CPU的版本: TMS320 DM8168CCYG 39ZDMW9 786
请问,这样的故障是应该从哪个方向入手查呢?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
最近批量生产了一批型号的板子(20片)。已通过示波器观察过复位及上电时序。在用XDS200调试的时候,原有调试程序无法运行。板子都是这个问题,故障信息如下:
批量的板子与我原有的板子,主要差别在内存容量及CPU的版本有差别。
原有内存1G,现在改为2G。
CPU的版本: TMS320 DM8168CCYG 39ZDMW9 786
请问,这样的故障是应该从哪个方向入手查呢?
可以先按照提示信息降低TCLK后再试
此外,你的芯片版本是从什么换成了当前版本?
降低TCLK还是连接不上,从ccs来看,A8核的版本已经读出了,但是在操作片内ram的时候,出错了。原来调试的版本是TMS320 DM8168BCYG 34AK3CW
恐怕只能把不同的料一个个替换了。比如先把Netra换成原来的试试,把DDR换成原来的,或者两个都换。
因为你如果PCB没有变化,只是料换了的话,这个实验可能是最快的。
看了DEBUG的信息入下
CortexA8: Trouble Writing Memory Block at 0x4c000010 on Page 0 of Length 0x4: (Error -2130 @ 0x4C000010) Unable to access device memory. Verify that the memory address is in valid memory. If error persists, confirm configuration, power-cycle board, and/or try more reliable JTAG settings (e.g. lower TCLK). (Emulation package 5.1.232.0)
doall() cannot be evaluated.
Target failed to write 0x4C000010
at *((unsigned int *) (0x4C000000+0x10))=(unsigned int) (0x10000000|SDREF) [DM816x.gel:229]
at EMIF4P_Init(0x1779C9FE, 0x50608074, 0x009F857F, (0x10001841&0xfffffff), 0x62A73832, 0x00000310) [DM816x.gel:1648]
at NetraDDRPLL_796() [DM816x.gel:1171]
at DDR3_796MHZ_doall() [DM816x.gel:1240]
at doall()
应该是DDR初始化出了问题,我现在换成了2G的内存,是不是gel文件需要改变?
Hi ,
你一楼看到那个错误对话框,按道理来讲是不会再打出4楼贴的这些错误信息的。
这些错误信息应该是connect target成功之后自动运行了gel文件的结果。 4楼这个信息指向了DDR的。
BR,
Eason
我复位了几次电源,错误信息就变化了。
目前,错误跟踪到了gel里的这个函数
EMIF4P_Init(unsigned int TIM1, unsigned int TIM2, unsigned int TIM3, unsigned int SDREF, unsigned int SDCFG, unsigned int RL)
其中,代码段如下:
if(DDR3)
{
/* Setup a small refresh period */
WR_MEM_32(EMIF4_0_SDRAM_REF_CTRL, 0x0000613B); // Initially a large refresh period
WR_MEM_32(EMIF4_0_SDRAM_REF_CTRL, 0x1000613B); // Trigger initialization
//WR_MEM_32(EMIF4_0_SDRAM_REF_CTRL, (0x10000000|SDREF)); // Move to a smaller more correct one
if(TWO_EMIF)
{
GEL_TextOut("\tInitializing EMIF1 ..... \n","Output",1,1,1);
/* Setup a small refresh period */
WR_MEM_32(EMIF4_1_SDRAM_REF_CTRL, 0x0000613B); // Initially a large refresh period
WR_MEM_32(EMIF4_1_SDRAM_REF_CTRL, 0x1000613B); // Trigger initialization
//WR_MEM_32(EMIF4_1_SDRAM_REF_CTRL, (0x10000000|SDREF)); // Move to a smaller more correct one
}
}
我将红色字体注销以后,能把测试实例运行起来了。我看到SDREF是在如下定义的
/*
* DDR3 EMIF Paramters set for 796.5 MHz Clock Frequency
*/
#define EMIF_TIM1_DDR3_796 0x1779C9FE
#define EMIF_TIM2_DDR3_796 0x50608074
#define EMIF_TIM3_DDR3_796 0x009F857F
#define EMIF_SDREF_DDR3_796 0x10001841
#define EMIF_SDCFG_DDR3_796 0x62A73832 // 32 bit ddr3, CL=11, 8 banks, CWL=8 10 bit column, 2 CS
#define EMIF_PHYCFG_DDR3_796 0x00000310 // local odt = 3, read latency = 11 (max = 12, min=6)
我用的gel文件是http://support.spectrumdigital.com/boards/evm816x/revg/files/evm816x.gel 下载的。
这个值该换成什么比较合适呢?
OK.
你已经换过DDR的型号了,那么更换型号的时候有没有确认过时序参数是否是一样的? 如果不一样,是需要更改DDR TIMING相关的一系列寄存器值的
你好,问题解决了,是因为DDR的布线改了,时序需要重新测试下,新的时序修改到gel文件中就正常了。
但是,经过这个问题,我有几个疑问求教下:
1 ddr时序有变化,为什么会影响到cpu本身寄存器值得写入/读取。因为ddr毕竟是外围芯片,我只是想启动起来,测试下串口和I2C等接口。
2 我将一个错误ddr时序的uboot烧写入spi的flash后(板子是spi启动)。ccs再也无法连上板子了,感觉在jtag连接之前,dm8168已经根据uboot初始化了寄存器。所以怎么也进不了ccs的debug模式,我只能把flash芯片取下来,放到烧路器上擦一下,再焊回去,板子才能进调试模式。
3 由于2的原因,我原先调试的一些裸测代码存在很大的问题,因为我都是在烧写uboot的情况下测试的代码,可能有些寄存器遗漏设置了。
dm8168真是颗不好驾驭的芯片,都小批量了,还能发现新问题。
1. DDR芯片具体的型号是否存在变化,已经DDR的频率是否发生变化。这会需要修改DDR 控制器端的TIMING寄存器。 此外,布线的变化后,建议做DDR SW Leveling.
2. CCS 应该不依赖于你的flash的。但是确有可能是因为你的寄存器配置问题导致芯片跑在一个不对的状态。你可以考虑在CCS端去复位A8 试试。
兄弟你好:
我现在和你的情况一模一样,可以告诉我一下你的那个GEL文件是如何修改的吗?
你的问题可能是你的启动方式仍然是从NAND FLASH启动。如果你不擦除uboot的话,他就会用你的错误的uboot的代码进行启动,那么就会造成8168进入不确定的状态中,然后你再链接jtag,自然连接不成功,还会有异常。
你应当首先检查当前的启动采样管脚配置是否正确。