工具/软件:TI-RTOS
尊敬的专家:
我们尝试使用 DSP 端的快速以太网交换机、运行 TI RTOS、而 Linux 运行在 ARM A15端。
遗憾的是、NDK 应用仅在 DSP 上运行得非常完美、但当我们在 DSP 上使用 Remoteproc 加载应用程序时、NDK 永远不会工作。
下面是我们的设置:
- 在 ARM 端、Linux 在禁用 eth1和 eth0的情况下运行。 ETH 已从器件树中移除。
- 在 DSP 端、TI RTOS + NDK 应用程序在启动时使用 Remoteproc 加载
为了调试这个问题、我们在项目中集成了一个 EMAC 环回测试程序、以确定在没有 NDK 堆栈的情况下 EMAC_DRIVER 是否正常工作。 代码测试不带 TCP/IP 堆栈的以太网交换机驱动程序的功能。 我认为问题更容易解决、因为问题是在驱动程序方面、而不是在 TCP/IP 堆栈上!
如果没有 Linux、测试将成功发送和接收100个以太网数据包。
但是、当 Linux 正在运行时、测试程序会发送数据包、但会卡在接收循环中、并且永远不会返回有效的数据包。
我还使用以下函数检查正在轮询端口状态的驱动程序的功能:
文件 EMAC_drv_v4.c 中的静态 EMAC_DRV_ERR_E EMAC_POLL_pkt_v4 (uint32_t port_num)
对于 DSP、驱动程序能够通过检查 CpdmaRxCp 的状态来检测是否已接收到数据包。 如果接收到数据包、驱动程序将通过重新编码正确的描述符来取消 RX 内容的队列:EMAC_dequeueRx (rxChan、(EMAC_Desc *) Desc);