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.

关于以太网传输的思路。。。。



我现在想用以太网口将内存里的数据用UDP协议传输到主机电脑,用抓包软件抓包。。。

 我想问一下专家能不能给我一个思路,就究竟该怎么做?步骤应该怎么样?

谢谢

  • 你可以使用TI提供的NDK,里面有UDP的例子,你可以参考。或者直接给予NDK的架构把你们自己的代码移植上去,就可以利用NDK提供的工具来进行UDP packet传输。

  • NDK的例子好像没有牵涉到底层是如何配置的,比如说如何将内存中某个地址的数传给主机。。

  • NDK提供了完整的TCP/IP协议栈,在例子中是有做硬件初始化和队列资源分配的,你可以参考client的例子。如果需要发送数据,可以open一个socket,然后将利用协议栈提供的函数将包组好,随后直接push到发送Queue中即可。

  • Zhang Xiang

    你好,通过你的回复,我看了参考了client这个例子,其中有好几个问题想请您解答一下:

    1。 例子的DATA BUFFER是一个什么概念,指针指向的是一段什么样的地址?比如说,我要发一串数据的话,指针是不是就指向我要发的那串数组?

    2。 DaemonNew里的比如dtask_udp_echo这些函数的定义在哪里,SendRawEth和SendRawEth这两个函数在什么时候被处罚?

    3“可以open一个socket,然后将利用协议栈提供的函数将包组好,随后直接push到发送Queue中即可”你所说的这些我有点不太明白。

    不好意思,我是一个初学者。。多多指教。谢谢

  • 其实我最关键的问题是,不知道怎么样将BUFFER与我想要传输的数据关联起来,可能就是你所说的push。比如说我的数据放在L2中,或者是DDR中,我该怎么和BUFFER关联起来呢,直接用指针指么?

  • 1.你需要看看 NDK的文档,里面有所用函数的介绍

    2.在6678中,如果要通过网口发送数据,需要使用描述符,描述符中有待发送数据的地址,这里牵扯到很多外设,QMSS, PA, CPSW,其中CPSW用来控制PHY, PA对ethernet的包进行加速, QMSS是整个keystone外设的基础,将所有数据流变成包的形式来传输。

  • 哦,那意思是如果要实现功能就要结合client和QMSS的例子一起学习咯?

    光是client中的代码无法实现么?

    还有就是,我重写client代码的时候在连接的时候报错了,我觉得是我的配置问题,

    CSL_chipReadReg         C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>

    Cppi_channelClose       C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>

    Cppi_channelEnable      C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>

    Cppi_configureRxFlow    C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>

    Cppi_init               C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>

    Cppi_initDescriptor     C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>

    Cppi_open               C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>

    Cppi_rxChannelOpen      C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>

    Cppi_setCpdmaLoopback   C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>

    Cppi_txChannelOpen      C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>

    Pa_addMac               C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>

    Pa_create               C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>

    Pa_downloadImage        C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>

    Pa_forwardResult        C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>

    Pa_getBufferReq         C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>

    Pa_resetControl         C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>

    Qmss_ackInterrupt       C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>

    Qmss_disableAccumulator C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>

    Qmss_getQueueNumber     C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>

    Qmss_init               C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>

    Qmss_insertMemoryRegion C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>

    Qmss_programAccumulator C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>

    Qmss_queueClose         C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>

    Qmss_queueOpen          C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>

    Qmss_setEoiVector       C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>

    Qmss_start              C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>

    platform_get_phy_addr   C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>

    platform_write          ./event.obj                                                                                                                                

    qmssLObj                C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>

  • undefined               first referenced                                                                                                                            

     symbol                     in file            

  • 我在linker里设置了lib和路径以后,其他的错没了

    就剩下两个没有详细提示的错误

    error: errors encountered during linking; "UDP_send_test.out" not built

    >> Compilation failure

    gmake: *** [UDP_send_test.out] Error 1

    gmake: Target `all' not remade because of errors.

    除了这个其他什么也没有了

  • 您好,

    由于编译错误导致link失败,所以还是有错误的,可以将完整的错误信息发上来,谢谢

  • **** Build of configuration Debug for project send ****

    C:\Program Files\Texas Instruments\ccsv5\utils\gmake\gmake -k all

    'Building file: ../send.cfg'

    'Invoking: XDCtools'

    "C:/Program Files/Texas Instruments/xdctools_3_20_08_88/xs" --xdcpath="C:/Program Files/Texas Instruments/bios_6_31_04_27/packages;C:/Program Files/Texas Instruments/ndk_2_20_03_24/packages;C:/Program Files/Texas Instruments/pdk_C6678_1_0_0_9_beta2/packages;C:/Program Files/Texas Instruments/mcsdk_2_00_00_beta2/demos;" xdc.tools.configuro -o configPkg -t ti.targets.elf.C66 -p ti.platforms.evm6678 -r debug -b "C:/Users/lefeibaby/workspace/send/.config/xconfig_send/config.bld" -c "C:/Program Files/Texas Instruments/ccsv5/tools/compiler/c6000" "../send.cfg"

    making package.mak (because of package.bld) ...

    generating interfaces for package configPkg (because package/package.xdc.inc is older than package.xdc) ...

    configuring send.xe66 from package/cfg/send_xe66.cfg ...

       will link with ti.ndk.config: ../lib/C66/miniPrintf.lib

       will link with ti.ndk.config: ../lib/C66/netctrl.lib

       will link with ti.ndk.config: ../lib/C66/nettool.lib

       will link with ti.ndk.config: ../lib/C66/os.lib

       will link with ti.ndk.config: ../lib/C66/hal/hal_ser_stub.lib

       will link with ti.ndk.config: ../lib/C66/hal/hal_timer_bios.lib

       will link with ti.ndk.config: ../lib/C66/hal/hal_userled_stub.lib

       will link with ti.ndk.config: ../lib/C66/hal/hal_eth_stub.lib

       will link with ti.ndk.config: ../lib/C66/cgi.lib

       will link with ti.ndk.config: ../lib/C66/console.lib

       will link with ti.ndk.config: ../lib/C66/hdlc.lib

       will link with ti.ndk.config: ../lib/C66/servers.lib

       will link with ti.ndk.config: ../lib/C66/stack.lib

    remark: the selected profile (debug) does not generate optimized code.  'debug' and 'release' profiles should only be used for source-level debugging of BIOS code.  While these profiles build faster, the code runs slower and requires extra stack space.  'whole_program' profile is recommended for optimized code.

    cle66 package/cfg/send_xe66.c ...

    'Finished building: ../send.cfg'

    ' '

    makefile:105: *** unterminated variable reference.  Stop.

    这又是啥错误啊,上网都没搜到

  • Zhang Xiang,您好,请教你一个问题:我最近改写NDK中helloworld 例子,用来实现DSP向PC传送数据,而数据由FPGA自通过UPP传送到DSP,我建立了两个工程,一个用来实现UPP接收FPGA的数据,一个用来实 现DSP和PC之间的通信,现在两个工程单独仿真都能达到目标,我想把两个工程合并成一块,我在UPP接受函数里定义了volatile int16_t xmit_buffer[LEN];    用以接收来自FPGA传送过来的数据,volatile变量是全局变量吧,在接收完数据后,我调用了TCP发送函数,想利用send( s, &xmit_buffer[0], sizeof(xmit_buffer), 0 )对xmit_buffer直接访问,将里面的数据发送到PC上,但是在编译时出错了 ,send函数里面用得是void* 但是upp里开的buffer必须是volatile吧,这个问题该怎么解决啊?

    除了这种方法还有其他更好的方法可行么?现在接受的数据在xmit_buffer里面。我想问一下用什么样的函数将其打包啊?

  • linker的路径和lib是怎么设置的呢  我现在也碰到了这个问题

  • 你好,我最近在移植lwip协议,但是对底层操作认识不够清楚,不知道您对网口收发的底层操作研究的怎么样了,能不能给讲解一下呢?谢谢。

  • 你好,你的问题解决了吗?希望你可以帮助到我,我也在调这个,遇到一些问题,这是我的邮箱448916030@qq.com 希望分享你的代码和经验