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.

C6678千兆以太网调试,关于SOCKET的问题

各位工程师专家您好,我正在调试C6678的网口部分,使用的历程是mcsdk_2_01_02_05的helloworld例子,可以正常run成功,ping通,单步调试,现在的问题是1、我现在想加入自己的socket请问在程序的哪里加,怎么加呢?2、和PC通信程序还需要改哪些地方?NDK user guide和NDK API还有以太网调试手册都有看过,有些了解;3、历程中udphello.c程序是怎么调用的啊,单步调试,走不到,在udphello中函数sendto()的s参数是socket,它的值怎么修改啊,好像是个地址啊,烦请大家帮忙,谢谢大家

  • Hi, 您好

    在下面的链接中,有我们开发的以太网例程, 其中包含与PC的通信,您可以参考:

    http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/47664.aspx

    设置下列变量后可与PC通信:

    GE_Test_Data_Path test_data_path= GE_TEST_DSP0_TO_DSP1;

    Ethernet_Mode ethernet_mode = ETHERNET_AUTO_NEGOTIAT_SLAVE;
    GE_Port_Connection port_connect[2]=
    {
       GE_PORT_CABLE_CONNECT, //SGMII port 0
       GE_PORT_CABLE_CONNECT  //SGMII port 1
    };

    GE_2DSP_Test()函数等效sendto()函数

    如果要加上层功能(如TCP/UDP)可以在GE_2DSP_Test()之上添加功能

     

     

     

  • Kevin Cai 您好,

    真的是十分感谢您在百忙之中给我解答这个问题,这个问题困扰了我很久。等会我试试看,希望可以成功,我会再回来回复您,把我的结果告诉您。

    再次感谢您的帮助,如果还有问题,还真心希望您能够继续帮忙指教。

  • 您好!

           我们最近使用NDK2.0实现DSP与PC机的通信,但是不知道该如何设置才能实现。同时我们也运行了NDK里的client,总是无法运行正确,会出现如下问题:

           

    TCP/IP Stack Example Client Using MAC Address: f0-0f-f0-0f-f0-0f  

          EMAC should be up and running 

          EMAC has been started successfully

         Registeration of the EMAC Successful

         Service Status: DHCPC    : Enabled  :          : 000

         Service Status: Telnet   : Enabled  :          : 000

         Service Status: HTTP     : Enabled  :          : 000

         Service Status: DHCPC    : Enabled  : Running  : 000

         Link Status: 100Mb/s Full Duplex on PHY 0

        Service Status: DHCPC    : Enabled  : Fault    : 002

        Service Status: DHCPC    : Disabled :          : 000

        Service Status: DHCPC    : Enabled  :          : 000

        Service Status: DHCPC    : Enabled  : Running  : 000

       希望您在百忙之中能帮我们看一下,十分感谢您!

  • Hi, 您好!

    想请问一下您们PC和DSP通信需要用TCP/IP吗? 如果不需要的话可以考虑我在1月9日回复的链接里的参考程序

    这份参考程序包含MAC层功能,我们在6678上验证过PC与DSP间的通信

    谢谢

     

  • Kevin Cai,

                   您好!

                  十分感谢您的回答。 因为我们需要PC机实时传送大约10kb左右的数据给DSP,因此我们考虑使用TCP/IP的,不知道您的参考程序里是否能实现相应的功能啊。另外,不知道您那里是否有TCP/IP相应的参考程序啊。谢谢您!

     

  • Hi, 您好!

    在参考程序中, GE_2DSP_Test等效于 sendto()函数

    您可以在GE_2DSP_Test中通过控制发包的大小和发包间隔来模拟10kb左右的数据

    目前TCP/IP是在ndk里

    谢谢!

     

  • Kevin Cai,

                    您好!

                     十分感谢您!我们的开发板是omapl137的,不知道能否使用您说的GE_2DSP_Test,如何配置。

                      谢谢!

  • Hi, 您好!

    在GE_2DSP_Test()中,先把要发的数据准备好,放到TxDescriptorTempBuffer中

    下面的代码是发送函数, KeyStone_queuePush等效于发送,每发送一包后有一些间隔TSC_delay_ms

    你可以配置成,比如发包大小是125字节(1k bit), 发包间隔100ms

    如果需要连续发包,请保证uiTotalNumPackets足够大, 即TxDescriptorTempBuffer里一直有要发送的数据 (这可以通过循环来实现)

     for(i=0; i< uiTotalNumPackets; i++)
     {
      /*push the packet descriptor to Packet DMA TX queue*/
      KeyStone_queuePush(GE_DIRECT_TX_QUEUE,
       TxDescriptorTempBuffer[i]|FETCH_SIZE_64);

      //delay to avoid potentail overflow, for debug only
      TSC_delay_ms(DELAY_BETWEEN_PACKET_MS);
     }

  • kevin:

    您好,我想看一下这可参考程序,但是在您的回复历史中没有找到1月9日的回复,麻烦您能帮我发个链接么?

    多谢了!

  • 您好kevin:

    对于两个dsp通过GBE通信的例子:

    我还想问个问题,在这个历程中我只找到了发送的buffer(TxDescriptorTempBuffer)看论坛上说在这个位置写入需要发送的数据即可。但是在历程中我没有找到接收的buffer,在host_despcription中有一个buffer_ptr,但是通过查找这个指针指向的地址发现数据和发送的也不一样。

    数据是通过多核引导中的队列接收和发送的,我对这块不是特别熟悉,所以我想问是否有一个接收的buffer来存取接收到的数据。

  • Hi, 您好!

    接收是有buffer来存数据的,这个buffer是在初始化的时候放到FDQ (可以在代码中搜索freeHostQueueCfgTable)

    收到数据以后,会从FDQ取出buffer(及描述符),将数据写到buffer

    谢谢!

     

     

  • 您好kevin:

    对于这个问题可能我还是不是特别明白还希望您帮忙指点一下,麻烦您了。

    这是发送buffer:TxDescriptorTempBuffer

    这个是您和我说的结束端的结构体:freeHostQueueCfgTable以及hostDescriptor

    从上图可以看出在这两个结构体中BUFFER的指针都是指向了0X0C018000这个地址,我认为接收的buffer就是这个地址。

    于是我倒这个地址查询接收到的数据:

    数据和发送的不一样。

    我不知道我理解的对不对,是不是这样的。

    我还是希望您稍微帮我说的在细一点,因为之前没有接触过这块,所以还希望您能帮我再讲解一下,谢谢了

  • Hi, 您好!

    freeHostQueueCfgTable定义了一系列 buffer, 初始化以后,分别放到了L2, SL2, DDR等不同的内存位置

    接收时,根据message_src_dest中定义的目的位置, 从上述L2, SL2, DDR相应的队列中取出buffer

    接收函数是GE_Message_ISR, 跟踪这个函数内部的hostDescriptor变量就可以找到接收数据的buffer了

    谢谢!

     

     

  • 您好 ,为什么DSP之间通信的例程发送的数据包大小有一个46到9216byte的限制呢 ,这一个数据包大小的上限是由什么决定的?

  • 这应该跟帧格式有关,应该是46到1518byte吧。

  • L G2你好,

    DSP到PC机的以太网调试,请问您调试通了吗?

     

  • 目前DSP到PC时通了,我们使用的是GE例程,没有加协议。现在正在调PC给DSP发数。

  • 回复L G2

    您好,请问可以加一个联系方式讨论一下嘛?

  • 恩  可以,gougog3@163.com   我邮箱  把你微信号发我邮箱  我加你

  • 老哥  请问你解决了吗  这个helloworld的例子 udpprocess是个守护进程  只能在接受之后发 请问怎么才能  通过dsp主动发送呢

  • 我使用的是GE,没有使用helloworld

  • 兄弟,你那个helloworld dsp主动发送给pc的通了吗?