各位大神好~~
根据必读贴的要求,我先说明一下我的调试环境:
A、用的是C6678芯片。
B、硬件环境:
用的是我们自己的硬件板,仿真器采用合众达的SEED-XDS560V2PLUS。
C、软件环境:
CCS5.3.0
D、其他:下面详细说明下我们板子的设计,DSP上电的控制及现在遇到的问题。
首先,我们设计的板子,主要参考的是EVM6678的官方开发板,也是通过一块FPGA来控制6678的上电时序、时钟以及复位控制。
我按照6678官方开发板的上电时序,通过FPGA来实现,现在电压,时钟都正常。连接上JTAG,然后在CCS的“Target Configuration”中,测试了“test connection”是通的。最后,我用Hello world程序测试了DSP能否正常工作(加上EVM的GEL、TI原始的CMD),按下CCS的“Debug”按钮,第一次能显示出"hello world"。到现在都很顺利,但是我把程序停止,重新“Debug”的时候,有时会发生错误,而且只要一发生错误后面就一直会出错,必须断电重新加载FPGA的程序才能工作。
我这样反复试了几次,错误有好几种情况,我下面贴出来:
1.C66xx_5: Error connecting to the target: (Error -1144 @ 0x0) Device core is hung. The debugger attempted to recover debug control, but was unsuccessful. Power-cycle the board. If error persists, confirm configuration and/or try more reliable JTAG settings (e.g. lower TCLK). (Emulation package 5.0.872.0)
2.C66xx_0: GEL Output: Error while waiting for GOSTAT bit returning to 0 …
C66xx_0: GEL Output: Error in Setting up main PLL, please power cycle the board and re-run Global DefaultSetup…
C66xx_0: GEL: Error while executing OnTargetConnect(): Evaluation canceled.
3.C66xx_0: Error connecting to the target: (Error -1202 @ 0x1812000) Device core is hung. The debugger will attempt to force the device to a ready state to recover debug control. Your application's state will be corrupt. You should have limited access to memory and registers, but you may need to reset the device to debug further. (Emulation package 5.0.872.0)
#############################################################################
因为在上电的第一次“Debug”都可以正常调试通过,所以我觉得应该不是硬件的问题,是否是DSP的复位控制,Bootmode,LRESET、LRESETNMIEN、NMI、CORESEL0~3等这些的控制引脚的设置有问题,我把我现在所做的步骤给帖出来:
1. C6678的CVDD、CVDD_Fixed、1.8V、1.5V、0.75V都正常供应。
2. C6678的Core(100MHz)、DDR(66.67MHz)、PASS(100MHz)都正常供应
3. FPGA端按照advantech的EVM写了上电时序,
4. 在上电时序的最后阶段:拉高RESET(同时给BOOTMODE[12:0]为0b0110000000000,LRESET=1,LRESETNMIEN=0,NMI=1,CORESEL0~3=1000),接着拉高POR,最后拉高RESETFULL
我比较困惑的一点是,在拉高RESET时,同时给BOOTMODE[12:0]为0b0110000000000,LRESET=1,LRESETNMIEN=0,NMI=1,CORESEL0~3=1000;是否正确?
参考http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/31289.aspx?pi239031348=1
Andy Yin1:
注意需要根据硬件设计修改gel中PLL及DDR的配置,对PLL需要根据输入时钟的差异修改PLL,DDR的配置则需要根据输入时钟、所选DDR及layout修改,建议修改运行一下STK中的例程。
STK:http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/47664.aspx
Brighton Feng:
你说的“LRESETNMIEN=0”代表LRESETNMIEN管脚拉高还是拉低?在不使用LRESET或NMI是LRESETNMIEN管脚应该被拉高。
另外,最常见的问题是CVDD不满足VCNTL[3:0]指示的电压值,建议仔细检查。
yimin dong:
回复 Andy Yin1:
Andy Yin:
你好,我们的硬件板卡,时钟,DDR都是参考的EVM开发板,除了删除一块EMIF的FLASH;这样是否也需要改GEL文件?
yimin dong:
回复 Brighton Feng:
Brighton Feng :
你好
LRESETNMIEN=0是指拉低,LRESET或NMI可以不使用吗?我之前看到网上有人说NMI必须要拉高才行。我尝试一下把LRESETNMIEN=1拉高试试。
我再检查下CVDD
Brighton Feng:
回复 yimin dong:
LRESET或NMI可以不使用。如果你们不用的话,把LRESETNMIEN拉高就可以了,LRESET,NMI,CORESEL管脚可以悬空。
yimin dong:
回复 Brighton Feng:
恩,我试了下把LRESETNMIEN拉高,对现在的结果没有影响。
之后测了CVDD电压,一直在0.95~0.96之间,CVDD是否必须通过DSP的VCNTL[0~3]的VID控制?
这个电压0.95~0.96能否保证DSP一直工作在正常状态?
然后现在一直出现的问题是:
C66xx_0: GEL Output: Error while waiting for GOSTAT bit returning to 0 … C66xx_0: GEL Output: Error in Setting up main PLL, please power cycle the board and re-run Global Default Setup…C66xx_0: GEL: Error while executing OnTargetConnect(): Evaluation canceled.
是否是GEL文件有问题?我用的是EVM的GEL
Brighton Feng:
回复 yimin dong:
CVDD必须通过DSP的VCNTL[0~3]的VID控制,请再测一下VCNTL的值,用VCNTL3采样VCNTL[2:0]的值(参照数据手册上的图SmartReflex 4-Pin VID Interface Timing)。
然后参照硬件设计指南中的表SmartReflex VID Value Mapping找到对应电压值,再与你测得的电压值比较。
另外,还要注意要在DSP电源输入管脚上测电压值,不能在电源的输出端测量,因为电源输出端到DSP输入管脚有压降。
如果你的时钟设计和DDR设计与EVM一样,你可以用EVM的GEL文件。
yimin dong:
回复 Brighton Feng:
用VCNTL3采样VCNTL[2:0]的值,硬件上很难操作,有没有其他办法可以读取该值?
我用UCD9222的Fusion Design Online软件,对UCD9222的CVDD电压进行检测。这个软件还有个VID的界面,我看上面能查看VID code,不知道是不是就是VCNTL[5:0]的准确值?
在没有Debug的情况下,实际用万用表测量DSP电源输入管脚的电压值为0.9477V;跟下面VID Code=38d,还算一致。
然后我Debug,下载一个hello_world之后电压会升高,变为了0.9555;用Fusion Design Online软件观测VID Code还是为38d,是否这里出了问题?
我再次Debug之后就会报错了。
VID Code Init:默认是38,我根据在论坛上收到的信息提示,改成63,默认初始电压为1.1V。
###########################################################################################
还有两个个问题:
1. CVDD是不是在运行不同程序的时候电压值会有所不同?这个电压值应该是DSP通过VID控制的,那意思就是VCNTL[5:0]这个值是变化的。
2. 是不是如果实际中的CVDD电压值跟VID[5:0]所对应的电压值不一致就会发生错误?如果是这样那该如何解决呢?
我们smart_reflex那块原理图也是参考的开发板,VCNTL[3:0]直接通过一个1.8V-3.3V电平转换芯片连到UCD9222。
突然想到,如果我不让这个电平转换芯片工作,也就是不用VID控制会怎样?
yimin dong:
回复 yimin dong:
我试了下,不让电平转换芯片工作,也就是DSP的VID控制是无效的。
为什么我debug了程序之后,CVDD的电压还是上升了?没DSP的控制,CVDD不应该是稳定的?
Brighton Feng:
回复 yimin dong:
我对UCD9222不熟悉,请研究相应文档或到电源相关的版去提问。
不过我觉得用一个信号去采样另外一个信号的值是最基本的硬件测试…
关于您的两个问题:
1,VCNTL只会在DSP解复位是输出一次,而且对同一个芯片每次上电输出的值也都一样。
2,电压允许的波动范围是5%,你所测到的0.9477V到0.9555V的波动没有超过这个值。不过你用万用表测试看到的是平均值,你需要用示波器长时间监测最大值和最小值,尤其要关注从DSP解复位到电压从1.1V调整到期望值的过程。