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.

[FAQ] 【开发例程共享】Keystone1 软件开发包

附件是基于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: 

7242.K1_STK_v1.1.zip

C665x:

5444.STK_C6657.7z

K1_STK_v1.1.zip
  • 1. 导入工程后需要根据你电脑上安装的pdk路径修改include options中PDK的路径;具体的更改路径方法能举个例子不,比如我的PDK安装在C:\ti下面怎么改路径

  • 在导入工程后查看工程属性中的include options可以看到目前已经添加了相关的pdk安装路径,按其格式修改为你的pdk安装路径即可。

  • 增加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

    K1_TCP3D_STK.7z

  • 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需要从外部nor flash通过emif16启动,这部分初始化该怎么做,有没有例子或者相关的文档,非常感谢。

  • 6678支持从EMIF16直接启动,初始化是通过ROM BOOTLOADER完成的,你可以阅读以下Keystone Bootloader这篇文档

  • 从emif启动,但是启动代码放到外接的flash中,这时候需要对emif和flash都初始化?具体怎么做
  • 你好,Andy Yin1,我也碰到和楼主一样的问题,按照你提供的方案改了,但是还出现一样的问题

  • 你好,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.

  • 你好,这些实例是不是不适用于C6657?是否有适用于C6657的实例?

  • 你好,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环境配置错误,或者是不小心改了源代码

  • 非常感谢分享!感觉很实用!

  • Andy Yin1 :您好  请问您有没有6670开发板的原理图?最好是cadence的。谢谢。

     

  • 是不是只支持6678,不支持6657?

  • 更新STK支持EVM6657,在编译属性中加了预定义宏DEVICE_C6657。

    STK_C6657.7z
  • EVM6670的原理图及PCB等相关材料下载链接:http://www.advantech.com/Support/TI-EVM/6670le_download3.aspx

  • Andy你好!

    我是3月中旬您在西安电子科技大学做培训的时候参加您培训的一名同学。重庆大学的,您还记得吗?你说你特别喜欢重庆来着。

    现在我们小组已经通过了信息安全专题赛的重庆大学校内赛,准备参加八月份的全国赛了。我们迫切地希望能和您建立联系,得到一些技术支持,上次我加了你的QQ,但是您好像没有回复。请问可以保持联系吗?十分感谢您!!!

  • Andy你好!
    请问在6657上可以运行MPEG2吗?有相关的资料么?如果不能运行的话,6657是否有可以直接使用的视频图像编解码器?谢谢!

  • 感谢Andy,安全大赛的新手,表示这个很难,学过2812,那个还好。能不能多传些例程呢?关于6657的,因为TI给的板子就是这个型号

  • 同学你好,我是重大的, 也是做这个比赛的,能不能加下QQ,以后可以相互帮助一下。我QQ是378298603

  • 求 C6657 的例子程序啊,官网的大学计划

  • 你好!为什么没有找到关于C6678网口的例程呢?急需,谢谢!

  • 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协议的解析,比如封包和解包?


  • STK里面的GE例程只收发MAC包,没有用到PASS.

    关于PASS和NDK的问题我不清楚,请发一个新贴问。

    谢谢!

  • 好的,谢谢您的解答

  • 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

  • 样例工程是基于TI EVM开发的,请问你用的什么板子?代码有没有任何修改?

  • 我们的板子自己开发的,但基本上都是参考EVM设计的。

    用附件的其他工程跑过,比如memory_test,跑出来结果,和你们的测试结果打印基本都是一致的。

    代码还原了,都没有改动。只是修改工程的include路径。

  • 从错误信息看是PCIE无法访问DDR。

    你把PCIE_integrity_Test()中的DDR测试注释掉,在试试看PCIE访问SL2和LL2有没有问题。

  • 试过了,都不行,这两个用例分别跑,都是一样的问题现象。

  • 那就不是DDR的问题。

    你的PCIE接口怎么设计的?

    和什么连接,做RC还是EP?用几条lane?速率多少?输入时钟多少?PCIESSEN上拉了吗?

  • 单板作为EP,2lane,速率都支持。输入时钟100MHz。PCIESSEN之前接地了,但是将其飞线拉高也还是同样的问题。

    在单步过程中,可以看到gpBootCfgRegs->BOOT_REG0中PCIESSEN域已经是置位的了。

    麻烦Brighton再给分析,还有哪些可能出问题的地方?

    谢谢!

  • hi Andy,

           我加载例程时编译总是有些文件找不到,具体错误是:

         

    我的软件环境是ccs5.5,这是什么原因,我加载其他的工程也是同样有些文件找不到,对于你提到的导入工程要添加#include opitons,我的ccs是安装在c:\ti下,我添加了这个目录。

  • 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.再重新编译。

  • 这个同学的问题太有价值了 强烈要求解决

  • 你好

            没有硬件DSP,在simulator下,可以运行SRIO的中断例子工程吗?谢谢

  • 这个例程只在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中的数据也是正确的,又测试一个写,一个读,仍然会有这个问题,感觉是多核不能同时又读有写的情况,想请问下是什么原因?是哪些地方没有初始化好吗?谢谢!!