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/EK-TM4C1294XL:用于 TivaC 2.16.1.14的 TI-RTOS 中的 NDK 可能会进入无法传输数据包的状态

Guru**** 2433360 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/674812/rtos-ek-tm4c1294xl-ndk-in-ti-rtos-for-tivac-2-16-1-14-can-get-into-a-state-where-unable-to-transmit-packets

器件型号:EK-TM4C1294XL

工具/软件:TI-RTOS

由于 RTOS/TM4C129XNCZAD:是否有办法复位以太网 PHY 和 NDK? 其中描述了以太网通信的间歇性故障、 通过使用修改的 tcpEcho_EK_TM4C1294XL_TI_TivaTM4C1294NCPDT 示例创建了针对 TivaC 2.16.1.14的 TI-RTOS 以太网应力测试、并进行了更改以允许增加数据速率。 当使用 四个数据大小 为4380且零延迟的关闭 tcpSendReceive 程序时、Tiva 以太网正在发送和接收大约23 Mbit/s 的数据、但在几秒到几十分钟后、由于 Tiva 无法发送以太网数据包、测试停止。 在 CCS Expressions 视图中查看'EMACSnow.c'::EMACSnow_Private EMAC 驱动程序统计信息显示仍可以接收以太网数据包(rxCount 和 isrCount 增量)、但无法传输以太网数据包(txSent 不变、txDroipped 增量)。

TI-RTOS 中的 EMACSnow.c 驱动程序通过以下方式处理中断:

a) EMACSnow_hwiIntFxn()调用 EMACIntStatus()来读取中断状态,然后 调用 EMACIntClear ()来清除中断状态。

b) EMACSnow_hwiIntFxn()禁用中断。

c) EMACSnow_hwiIntFxn()将中断状态存储在全局变量 g_ulStatus 中。

d) EMACSnow_hwiIntFxn()调用 Swi_post ()以使 Swi 处理传入的数据包。

e) EMACSnow_handlePackets ()是 Swi 处理程序读取 g_ulStatus 以确定是否处理发送和/或接收中断。

f) EMACSnow_handlePackets ()重新启用中断。

通过调查测试失败的原因,发现在  运行 EMACSnow_hwiIntFxn()之前,可以调用两次 EMACSnow_handlePackets (),这可能导致失败。 例如、顺序:

1) 1)所有四个发送描述符都在使用中。

2) 2) EMACSnow_hwiIntFxn ()被调用并将 g_ulStatus 设置为0x10041、这意味着发送和接收中断正暂挂。

3) 3) EMACSnow_hwiIntFxn ()被再次调用、并且没有挂起的中断导致 g_ulStatus 被设置为零。

4) EMACSnow_handlePackets ()运行,但由于 g_ulStatus 为零,因此 EMACSnow_handlePackets ()认为不需要处理发送或接收中断。

5) 5)发送描述符已经完成了传输、并且 EMAC 外设不会再产生任何发送中断。

6) 6)由于2)中的挂起发送中断已丢失 、因此未调用 EMACSnow_processTransente()。

7) 7) Tiva NDK 被卡住、认为所有发送描述符都在等待传输完成、从而导致所有进一步的尝试将 pbuf 排队以使传输失败、 而 EMACSnow_Private.txDropted 递增。

g_ulStatus 上的数据变量跟踪中的以下捕捉 显示了发生传输中断丢失的问题:

在正常使用中、对于每个被处理的中断、  应该有一个来自 EMACSnow_hwiIntFxn ()的对 g_ulStatus 的写入和两个来自  EMACSnow_handlePackets 的对 g_ulStatus 的读取(第一个针对发送中断的读取测试和第二个针对接收中断的读取测试)。 在 EMACSnow_hwiIntFxn()之前,在 EMACSnow_handlePackets ()处理中断之前,上面的线迹中突出显示的行是 EMACSnow_hwiIntFxn()改写之前的值,表示发送和接收中断正等待零。

随附了修改后的 TCP 回显示例,该示例显示了故障,自述文件介绍了所做的更改并对故障 mode.e2e.ti.com/.../7080.tcpEcho_5F00_EK_5F00_TM4C1294XL_5F00_TI_5F00_TivaTM4C1294NCPDT.zip 进行了调查

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

    [引用 USER="Chester Gillon">通过调查测试失败的原因,发现在一个条件下 ,可以在 运行 EMACSnow_handlePackets ()之前调用两次 EMACSnow_hwiIntFxn (),这可能导致失败。[/quot]相反,使用全局变量来通信从 Hwi 到 Swi 的挂起中断可以"触发" 为了传递挂起中断、其中 Swi_or()可被使用而不是 Swi_post ()、以确保 Hwi 在 Swi 运行前被多次调用、那么没有挂起中断丢失。

    TI-RTOS EMACSnow.c 的更改如下:

    a)删除 g_ulStatus 全局变量。

    b)使 EMACSnow_handlePackets ()调用 Swi_getTrigger ()来获得挂起的中断、而不是读取全局变量。

    c)使 EMACSnow_hwiIntFxn ()调用 Swi_or ()来设置传递给 Swi 的挂起中断。

    d)也可以删除 EMACSnow_hwiIntFxn()中的中断禁用和 EMACSnow_handlePackets ()中的中断重新启用。 这是因为使用 Swi 触发可防止挂起的中断丢失。

    通过这些更改、之前在大约10分钟内失败的测试现在已运行5.5小时、而没有失败、通过 TCP 回传了52 GB 的数据。

    随附了更新后的示例、其中包括修改后的 EMACSnow.c e2e.ti.com/.../1033.tcpEcho_5F00_EK_5F00_TM4C1294XL_5F00_TI_5F00_TivaTM4C1294NCPDT.zip

    与 TI-RTOS 2.16.1.14中的 EMACSnow.c 相比、更改如下:

    a)上述情况。

    b) TivaC NDK TCP 的修复:无法接收大型数据包(>=1460字节)

    c)向 EMACSnow_Private 添加一些诊断功能、以记录发生了哪些类型的异常中断(而不仅仅是异常中断的计数)。 这表明、在5.5小时的应力测试中、 由于 EMAC_INT_RX_NO_buffer (假设有四个接收描述符并且尝试通过四个 TCP 套接字尽可能快地回显数据、这不是问题、 只是 TCP 旨在处理的偶尔接收数据包丢失)。

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

    感谢您的分析。 我们将在星期一对此进行研究。

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

    感谢您将此事提请我们注意。 已在内部归档一个错误以解决此问题。

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

    \n 内部已提交一个错误以解决此问题。

    感谢您提出此错误。

    虽然我建议对 Tiva EMACSnow.c 进行的修改更改了 Hwi 和 Swi 的通信方式、但比较 了 tirtos_tivac_2_16_01_14\products\tidrivers_tivac_2_16_01_13\packages/ti\drivers\emac\和 simplelink_msp432e4_sdk_2_10_em32e4\msp4e4\em32e4\mc\em4e4\em32e4\em32e4\msp4\em32e4\msp4\em32e4\msp_10_em

    a)处理 Hwi 中的 EMAC 中断。

    b)不会创建 Swi。

    因此 、MSP432E4 EMAC 驱动程序不应遭受此线程中标识的 Tiva TI-RTOS 错误的影响。

    就我所知、MSP432E 器件是 TM4C129器件的子集、共享相同的外设。 因此 、MSP432E4 SDK 可能包含但可移植到 Tiva TI-RTOS 的修复和改进。