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.

[参考译文] RTOS/TMS320C6678:关于 NDK + UDP 客户端

Guru**** 2539500 points
Other Parts Discussed in Thread: TMS320C6678, SYSBIOS

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/721971/rtos-tms320c6678-regarding-ndk-udp-client

器件型号:TMS320C6678
Thread 中讨论的其他器件: SYSBIOS

工具/软件:TI-RTOS

您好!

我正在尝试在已在原始套接字中运行的现有项目中为端口2创建 UDP 客户端套接字。 项目正在使用 TIRTOS。  我 在项目中包含了 NDK、并在网络层启用了 IP 块。 我已使用"ip.ifIdx = 2;"在.cfg 文件中为端口2配置它。 下面是我的工具配置。

xcdtool 版本:3.25.5.94

IPC:3.21.0.07

NDK:2.24.3.35

SYS/BIOS:6.37.2.27

我提供了用于网络开放式挂钩的挂钩函数、该挂钩函数正在被调用。 在挂钩函数内、我创建了一个任务、并从该任务 中尝试发送一些数据。  我没有在另一侧接收数据(另一侧的 PC 用于使用 Wireshark 捕获数据)。 代码片段如下所示。 请告诉我其他需要考虑的事项。

套房内提供自助早餐;
void nw_open_hook ()

 Task_Start (&oUDPTsk);


void nw_close_hook ()

//UDP 客户端

void Ethernet_udp_Task (void)


  struct sockaddr_in    servaddr;
  char * hello ="Hello from client";
  UART_WRITE ("UDP 任务已创建\n");

  if ((udpsockfkd = socket (AF_iNet、SOCK_DGRAM、0))= 0){
   UART_WRITE ("UDP 套接字失败\n");
   返回;
  }
  memset (&servaddr、0、sizeof (servaddr));
  //填充服务器信息
     servaddr.sin 系列= AF_iNet;
     servaddr.sin_port = htons (port);
     伺服地址.sin addr.s_addr = INADDR_ANY;
     while (1){
     Sendto (udpsockfkd、(char *) hello、strlen (hello)、
             0/*MSG_CONFIRM*/、(struct socaddr *)&servaddr、
                 sizeof (servaddr));
     Task_sleep (1000);
     }

以及如何读回有关配置的 IP 和 MAC 地址的信息。  

谢谢

第三节

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我已通知 RTOS 团队。 他们将直接在此处发布反馈。

    这是哪个 NDK 和处理器 SDK RTOS 版本?

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我不使用 SDK。 我使用的是 SYS/BIOS:6.37.2.27和 NDK:2.24.3.35。

    谢谢
    第三节
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    请澄清:
    1.如果您使用的是 TI 6678 EVM 或此测试或您的定制板?
    2. EVM 有两个 EMAC 端口,第一个连接到 AMC 连接器,第二个连接到 RJ-45。 您使用哪个端口进行测试?
    3.我没有看到您提到过任何处理器 SDK RTOS 和 Nimu 驱动程序。 您用于初始化 CPSW 的代码是什么? 请注意、NDK 必须在 NIMU 驱动程序之上运行。
    请访问 software-dl.ti.com/.../Foundational_Components.html。 有几个测试 NDK/NIMU 的基本示例、您可以将其用作起点。

    此致、Eric
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    此外、如果您发出的问题是如何编写 NDK 客户端示例、您可以参阅一些 E2E 讨论 e2e.ti.com/.../683667。 2018年5月3日下午2:56时、客户端和服务器测试应用程序都有一个附件。 它适用于 K2H 器件、但您可以参考 NDK 级别的源代码、对于 C6678、这应该是相同的。

    此致、Eric
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我正在使用定制板。  我使用的是 SYS/BIOS、对于 Nimu 驱动程序、我使用"pdk_C6678_1_1_2_6"。

    谢谢

    第三节

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很抱歉、我想我缺少一些东西。 我无法在为服务器和客户端示例提供的链接中找到附件。 请共享 TMS320C6678的 UDP 客户端示例项目。

    谢谢
    第三节
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    [报价用户="lding"]如果您使用的是 TI 6678 EVM 或此测试或您的定制板?我使用的是定制板。

    [引用 user="lding"]我没有看到您提到过任何 Processor SDK RTOS 和 Nimu 驱动程序。 您用于初始化 CPSW 的代码是什么? 请注意、NDK 必须在 NIMU 驱动程序的顶部运行。[/QUINES]为 NIMU 使用 PDK "pdk_C6678_1_1_2_6"。

    已参考 client.c 示例工程并初始化 QMSS、CPPI 和 Pass。 与 Nimu 相关的呼叫将从"NIMU_eth.c -> NIMUDeviceTable"中触发。  nc_systemopen、cfgnew 等其他内容都在自动生成的文件"xxxx_SYSBIOS_P66.c"中完成、并且也会被触发。 最后、堆栈启动、调用 network_open 函数。 如前一个主题中所述、一旦触发 network_open 函数、就会创建一个新任务。 新任务将以 SOCK_DGRAM 的形式打开套接字、执行 sendto 操作。  

    在 NDK 模块中添加了全局、IP 和 ICMP。 这些是 .cfg 文件中的设置

    BIOS.clockEnabled = true;
    Global.autoOpenCloseFD = true;
    Global.networkOpenHook ="_nw_open_hook";
    Global.networkCloseHook ="_nw_close_hook";
    Ip.autoIp = false;
    ip.address ="192.168.1.2";
    ip.mask ="255.255.255.0;

    日志我从自定义板获得它:

    QMSS 已成功初始化

    CPPI 已成功初始化

    PA 已成功初始化

    已成功初始化传递

    以太网子系统已成功初始化

    以太网 EventID:48和 vectId (中断):7.

    verify_Init:队列编号= 901时预期为0条目计数、找到7条目

    EMAC 注册成功,正在等待链接。

    UDP 任务已创建

    UDP 发送:-1

    上述线程中列出了源代码片段。 我仍然没有从 DSP 获取 UDP 封包(使用 Wireshark 捕获数据包)。  请推荐我遗漏的内容。  

    要执行 ping 操作、只需在 NDK 模块中启用 ICMP 就足够了、或者我需要添加其他代码了吗?

    谢谢

    第三节

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您能否提供一个指针来继续。

    谢谢

    第三节

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    能够生成从 DSP 到 PC 的 ARP 数据包、PC 也正在响应、但不确定 DSP 是否正在接收该数据包。 ARP 未解决、错误提示"Host not found (未找到主机)"。

    由于正在发生来自 DSP 的 ARP 并且 DSP 不接受来自主机 PC 的响应、因此接收端会出现什么问题。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    很高兴知道您在测试应用中有 NIMU 驱动器。 c6678的 MCSDK 2.1.2.6 (PDK 1.1.2.6)已停产。 请使用适用于 C6678的最新处理器 SDK RTOS 版本5.0

    然后查看 NDK 部件的用户指南:  有几个基本的 NDK 测试示例、确保它们正常工作。 然后将代码的网络堆栈部分更改为客户端。 我所提到的客户测试代码。

    e2e.ti.com/.../8473.server_5F00_client_5F00_test.zip

    此致、Eric

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Eric:

    我正在按照您的建议将使用 SYS/BIOS (MCSDK 2.1.2.6+PDK1.1.2.6)的项目移植到 SDK。  

    在中间、我尝试使用第一版所需的 c6678的 MCSDK 2.1.2.6 (PDK 1.1.2.6)。

    我正在尝试将 UDP 封包从 DSP 发送到 PC。 第一件事是 ARP 解析、DSP 向 PC 发送 ARP 请求、PC 也会回复、但在 DSP 中无法解析 ARP。  我可以看到 DSP 中的 STATA 和 STATB 计数器正在更新、但 ISR 未被触发。  事件 ID 48和中断7按原样在 NIMU 驱动程序中使用。  

    我尝试将中断更改为10、并卡在 asm 循环中  

    TI_SYSBIOS_family_c64p_Hwi_INT10:

    00817140:  003C54F6           STW/D2T2     B0、* B15-[2]

    00817144:  0028A35A           MVK.L2       10、B0

    00817148:  003C22F6           STW/D2T2     B0、*+B15[1]

    0081714c:  0038A02A           MVK.S2       0x7140、B0

    00817150:  000040EA           MVKH.S2      0x810000、B0

    00817154:  00000362           B.S2         B0

    00817158:  003C52E6           LDW.d2T2     *+ B15[2]、B0

    0081715c:  00006000           NOP          4.

    任何指针都很有用

    谢谢

    十三

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我认为您的工作流程应该是:首先尝试 MCSDK 或 Processor SDK RTOS 下的几个 NDK 示例、例如、大家好、确保其正常工作(例如、您可以发送和接收数据包)。 然后更改 UDP 客户端的 NDK 示例。 为什么需要更改中断编号?

    您之前提到过、测试在定制板上进行。 您是否解释了使用的 EMAC 端口、我找不到。 如果您还使用 EMAC1、如果 PHY 正在工作(正如您看到的 STATA 和 STATB)、则 hello world 应该正常工作。

    此致、Eric