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.
附件是基于Keystone1 CSL 开发的例程,其中包括了SRIO,PCIe,AIF2,UART等外设,及Navigator,memory test等常用例程,可供大家开发参考。请大家在使用例程时,注意以下几点:
1. 导入工程后需要根据你电脑上安装的pdk路径修改include options中PDK的路径;
2. 更新工程src中link的文件,从common中相应的公共文件拉到工程中src下面;
3. 如果是移植到非EVM板上运行,则需要修改main函数中输入时钟源的配置。
该例程支持C6678,6670,6614,后面跟帖中有支持EVM6657的例程开发包。
C667x:
C665x:
1. 导入工程后需要根据你电脑上安装的pdk路径修改include options中PDK的路径;具体的更改路径方法能举个例子不,比如我的PDK安装在C:\ti下面怎么改路径
增加TCP3D例程,该例程可同时支持LTE,WCDMA mode的测试,已经在EVM6670上对LTE及WCDMA mode进行了测试验证,如果需要在其他芯片上测试,则只需要修改keystone_TCP3D.c中对gtTcp3dInstInfo的赋值。
可以通过修改TCP3D_test_main.c中的如下宏来切换模式测试
#define TEST_MODE 3 /* 1-LTE mode, 3-WCDMA split mode */
例程还支持WCDMA及LTE mode throughput测试
#define THROUGHPUT_TEST
Andy Yin1 你好。
非常感谢提供这些例程,我是个新手,正在学习其中的SRIO例程,目前碰到一些问题:工程
build成功后,无论是使用模拟器还是运行在EVM6678L开发板上,我都无法在C代码下F5单步跟踪程序;
我copy例程中的SRIO和common两个文件夹到我的workspace文件夹中并导入SRIO工程到CCS5.4;
修改了include路径与我的安装路径匹配,其中pdk我使用的是pdk_6678_1_1_2_5版本;
build成功后用模拟器运行,会出现:
Can't find a source file at "/tmp/TI_MKLIBy3wfGo/SRC/boot.c"
Locate the file or edit the source lookup path to include its location.
无法进入main();
请教到底是哪里不对呢?
确认一下工程属性->built->c6000 complier->debug options->debugging model中选择full symbolic debug (.... -g) ,如果想进行单步调测,同时去掉-o3优化,选择-o0即可。
Hi,Andy Yin1:
我在DSPC-8681E(advantech 4块6678)板子上面跑SRIO例程。
我注意到8681E板子上每个DSP的DDR的DDR_CLKP/N输入时钟是166.67MHZ。
而原始SRIO程序里面DDR_CLKP/N输入时钟是66.67MHZ。代码里面倍频20倍得到1333DDR3。
代码如下:
//DDR init 66.66667*20/1= 1333
KeyStone_DDR_init (66.66667, 20, 1, NULL);
因此,我修改了代码(不修改程序会死在KeyStone_DDR_init)如下所示:
KeyStone_DDR_init (166.67, 8, 1, NULL); //我的想法是166.67 *8 = 1333.36MHZ
但是,跑起来之后,进行Memory_Fill_Test内存测试。发现都失败了,如下所示:
SRIO_DIGITAL_LOOPBACK test start............................................
Initialize DSP main clock = 100.00MHz/1x10 = 1000MHz
Initialize DDR speed = 166.67MHzx8/1 = 1333.360MTS
DDR3 leveling has failed, STATUS = 0x40000064
Memory pattern filling Test fails at 0x80000000, Write 0x 0, Readback 0x a0000f7000000
Memory pattern filling Test fails at 0x80000008, Write 0x 0, Readback 0x f50000ef000000
Memory pattern filling Test fails at 0x80000010, Write 0x 0, Readback 0x ff0000df000000
上面说明,DDR初始化不成功,内存检测失败。请问哪里设置有问题?谢谢!
DDR3初始化需要做Leveling, Leveling的参数和PCB布线长度有关,所以移植到不同硬件板上需要修改DDR3初始化函数里的一些配置参数。
6678支持从EMIF16直接启动,初始化是通过ROM BOOTLOADER完成的,你可以阅读以下Keystone Bootloader这篇文档
你好,Andy Yin1
我把Keystone1 软件开发包中的SRIO例程导入到工程里面了,能编译通过,并且按照软件开发包的说明文档,load到相应的DSP的核内,当时在跑SRIO test between two DSPs这种模式的测试例程时,在控制台只输出一些配置信息如
[C66xx_0] SRIO test between two DSPs start............................................
Initialize main PLL = x236/29
Initialize DDR PLL = x20/1
configure DDR at 666 MHz
SRIO path configuration 1xLaneA_1xLaneB_1xLaneC_1xLaneD
就没有其他的相关信息输入,我看例程里的代码好像是说在测试完成后有相应的提示字符在控制台输出。我的硬件连接是两块EVM6670开发板通过TI 连接测试板BOC连接(没更改BOC任何配置),每块EVM通过JTAG连接到电脑。请问这是不是说明两块EVM6670在SRIO test between two DSPs 模式下没有成功测试通过。另外我在SRIO_Loopback_Mode loopback_mode= SRIO_NO_LOOPBACK是这样选择的,因为开发包的文档说明这样写道SRIO_NO_LOOPBACK actually selects the test between two DSPs.
你好,Andy Yin1
我在跑于Keystone1 CSL 开发的例程里的SRIO程序时,运行SRIO_no_loopback模式时,在一端的控制台只显示
[TMS320C66x_1] SRIO test between two DSPs start............................................
SRIO path configuration 1xLaneA_1xLaneB_1xLaneC_1xLaneD
没有出现
Initialize main PLL = x236/29
Initialize DDR PLL = x20/1
configure DDR at 666 MHz
这样的配置信息,以前我记得有这样的信息,请问一下这是什么原因,是不是CCS环境配置错误,或者是不小心改了源代码
EVM6670的原理图及PCB等相关材料下载链接:http://www.advantech.com/Support/TI-EVM/6670le_download3.aspx
Andy, 你好!请教您一个问题,我将这个TCP3d的例子工程修改成小端模式以后,不能正常译码,而是总是停在下面的循环里
do
{
udTmpIPR = (ptTcp3dHdl->atOutEdmaObj[0].regs->TPCC_IPR >> ucChanNum[0]) & 0x1;
} while(udTmpIPR != 1);
麻烦帮忙解答一下,谢谢!
PS:我修改了project的properties里的General中device endianness为little;
file search path里include library 该为小端的库文件;
target configuration配置为TI Simulator下的6670小端模式;
Andy Yin1 你好, 最近在用你发的这个适用于EVM6657的例程,但是我把整个这个例程copy到CCSV5.2下的MyProject下,然后导入里面的这个例程,比方GPIO这个例程,加上6657的软件仿真的配置文件,把PDK路径也加进来了,但是编译总是有错。如下图
我的CSL库中肯定是有cslr.h这个头文件的, CSL库的路径也是添加到include option里的,如下图
我是新手,找了一天也没找到原因。我看到这个网站有人问过这个问题,http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/99/t/6633.aspx,但是解释的不清不楚的。我实在无能为力了。希望能得到各位大神的解答。谢谢~~
Andy Yin1 你好!
两个问题
1.看回复中说附件中包括网口与PC之间的通信例程,我在附件中没有找到,只能找到2个DSP之间的网络程序,能不能再上传一下
2.在附件中没有PCIe/以太网的测试例程的PC端的运行成程序
一个请求请问:能否提供测试中文版的测试文档
我看到论坛中很多测试文档都是冯华亮/Brighton Feng 写的,请问能不能给直接提供中文版的测试说明文档,看起来更方便点,更利于理解
我们有DSP和PC之间通过以太网通讯的例程,没有通过PCIE和PC机通讯的例程。
当以太网例程被设置成GE_TEST_DSP0_TO_DSP1模式时,DSP可以和与PC机通讯,这时PC机发出的任何以太网包都会被DSP接收并显示。而在PC机上,我们可以运行一个抓包工具,这样DSP发出的任何包都会会捕获并显示。
目前仅有以下相关中文文档:
Brighton Feng ,您好:
请教您几个问题,希望能得到解答,谢谢
1、基于helloworld demo例,使用NDK实现PC与DSP间的UDP通信,但是通过压力测试,网络平均带宽为20M Bps,这个值是合理的吗?因为是千兆网卡,理论带宽是125M Bps,扣除UDP协议的消耗,应该也能达到60M Bps以上,我这样理解对吗?
2、helloworld demo例中,有使用PASS包加速器吗?PASS包加速器在网络中到底起到什么作用?
3、在您提供的cifae_KI_STK_Deyi文件夹中,有一个GE的工程,这个demo例有使用PASS吗?这个工程代码是没有移植TCP/IP协议栈的,假如我要基于GE这个工程代码实现UDP通信,是不是需要自己做UDP协议的解析,比如封包和解包?
Hi, Brighton!
请教您几个问题,期待您的答复,谢谢!
我使用本帖子提供的附件,进行PCIE的自环测试时,总是打印下面附的内容。
代码是在运行到Memory_Data_Bus_Test函数的ulpAddressPointer[uiBusWidth_64bit]= ~ulDataPattern[i]; //avoid floating bus处,就进入到NMI中断回调了。
从个人分析来看,是向0x60000000的PCIE地址空间写数据时导致的,看打印像是这块地址空间没有映射访问权限所致。
尝试将DDR3_registers_adress_map函数进行修改,将0x60000000的地址空间映射进去,但是仍然在那个地方跑飞。
麻烦帮忙分析下原因,谢谢!
btw:我使用的6678L,CCS5.4.0,pdk_C6678_1_1_2_6
附:
[C66xx_0] Initialize DSP main clock = 100.00MHz/1x10 = 1000MHz
Initialize DDR speed = 66.67MHzx20/1 = 1333.333MTS
Enable Exception handling...
PCIE PHY loopback mode at 5.0GHz.
PCIE start link training...
PCIE link training is finished.
External exception happened. MEXPFLAG[3]=0x4000.
Event 110: MDMAERREVT XMC VBUSM error event
MDMA write status error detected
XID (Transaction ID)= 11
Timeout error
NRP=0xc004e24, NTSR=0x1000d, IRP=0x0, ITSR=0x0, TSCH= 0x0, TSCL= 0x5a6403b
B3=0xc004ca2, A4=0x801130, B4= 0x2, B14= 0x8023c8, B15= 0x801100
External exception happened. MEXPFLAG[3]=0x4004000.
Event 110: MDMAERREVT XMC VBUSM error event
MDMA write status error detected
XID (Transaction ID)= 10
Timeout error
Event 122: DMC_CMPA CPU memory protection fault for L1D (and other memory read finally goes through the L1D controller)
memory protection exception caused by local access at 0x61800000
Supervisor Read violation
NRP=0xc004e40, NTSR=0x1000d, IRP=0x0, ITSR=0x0, TSCH= 0x0, TSCL= 0x5a71410
B3=0xc004ca2, A4=0x801130, B4= 0xaaaaaaaa, B14= 0x8023c8, B15= 0x801100
External exception happened. MEXPFLAG[3]=0x4004000.
Event 110: MDMAERREVT XMC VBUSM error event
MDMA write status error detected
XID (Transaction ID)= 15
Timeout error
Event 122: DMC_CMPA CPU memory protection fault for L1D (and other memory read finally goes through the L1D controller)
memory protection exception caused by local access at 0x61800000
Supervisor Read violation
NRP=0xc004ec4, NTSR=0x1000d, IRP=0x0, ITSR=0x0, TSCH= 0x0, TSCL= 0x5a82743
B3=0xc004ca2, A4=0xaaaaaaaa, B4= 0x55555555, B14= 0x8023c8, B15= 0x801100
Data pattern Test fails at 0x61800000, Write 0x5555555555555555, Readback 0xaaaaaaaaaaaaaaaa
External exception happened. MEXPFLAG[3]=0x4004000.
Event 110: MDMAERREVT XMC VBUSM error event
MDMA write status error detected
XID (Transaction ID)= 7
Timeout error
Event 122: DMC_CMPA CPU memory protection fault for L1D (and other memory read finally goes through the L1D controller)
memory protection exception caused by local access at 0x61800008
Supervisor Read violation
NRP=0xc004e40, NTSR=0x1000d, IRP=0x0, ITSR=0x0, TSCH= 0x0, TSCL= 0x5a9784f
B3=0xc004f24, A4=0x5e, B4= 0xaaaaaaaa, B14= 0x8023c8, B15= 0x801100
我们的板子自己开发的,但基本上都是参考EVM设计的。
用附件的其他工程跑过,比如memory_test,跑出来结果,和你们的测试结果打印基本都是一致的。
代码还原了,都没有改动。只是修改工程的include路径。
从错误信息看是PCIE无法访问DDR。
你把PCIE_integrity_Test()中的DDR测试注释掉,在试试看PCIE访问SL2和LL2有没有问题。
单板作为EP,2lane,速率都支持。输入时钟100MHz。PCIESSEN之前接地了,但是将其飞线拉高也还是同样的问题。
在单步过程中,可以看到gpBootCfgRegs->BOOT_REG0中PCIESSEN域已经是置位的了。
麻烦Brighton再给分析,还有哪些可能出问题的地方?
谢谢!
Brighton Feng:
你好,我用你写的那个C6657_Emac_Example例程在C6657的板子上跑,遇到了两个问题,麻烦帮忙解答一下。
测试条件:1.PC和dsp用网线直接相连
2.dsp跑C6657_Emac_Example例程
问题一 : 我加了IP头,以太网帧协议字段也改成了0x0800(IP协议),没加FCS字段。用wireshark可以抓到数据包,但是自己写的IP包嗅探程序就抓不到,问什么呀?
问题二:我从PC端发的数据包,dsp收不到,请问为什么?
这个我感觉是编译软件的bug,我的解决办法是1.找到对应文件夹src把这几个文件剪切到工程外边任意位置。2.在工程里把这几个文件删掉。3.clear之后重编译4.再把刚才那几个文件重新放回到原src.5.再重新编译。
这个例程只在EVM上验证过,没有试过在simulator下运行。
我建议只在simulator上做纯软件的验证开发。所有接口的验证开发都建议在硬件板上做.
编译这个sdk_6657的时候怎么发生以下错误?请问,怎么解决呢?
<Linking>
undefined first referenced
symbol in file
--------- ----------------
Exception_service_routine ./src/SRIO_vectors.obj
SRIO_Doorbell_ISR ./src/SRIO_vectors.obj
SRIO_Message_ISR ./src/SRIO_vectors.obj
exception_record ./src/SRIO_vectors.obj
Andy Yin1 ,您好!
我用KeyStoneI软件开发包测试DDR3,多核同时操作DDR(有读、有写的情况)时会出错,主要的代码:
void main()
{
TSC_init();
if(DNUM ==0)
{
Keystone_main_PLL_init(100,10,1);
Keystone_DDR_init(100,10,1,&DDR_ECC_cfg);
}
int i;
for( i = 0; i < 0x8000000/4; i ++)
*(int*)(0x80000000+DNUM*0x8000000+4*i) = 0x5a5a0000+i;
int cnt = 0;
for( i = 0; i < 0x8000000/4; i ++)
{
if(*(int*)(0x80000000+DNUM*0x8000000+4*i) != 0x5a5a0000+i) cnt ++;
}
}
本意是想八个核同时写一段DDR数据,然后读出来校验,可是一直有问题,如下:
IcePick_D:Power Failure on Target CPU
C66XX_0:Failed to remove the debug state from the target before disconnecting. there may still be breakpoint op-codes embedded in program memory.It is recommended that you reset the emulator before you.....
后来又单独测试,八个核只读或只写不会出错,DDR3中的数据也是正确的,又测试一个写,一个读,仍然会有这个问题,感觉是多核不能同时又读有写的情况,想请问下是什么原因?是哪些地方没有初始化好吗?谢谢!!