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/TM4C1294NCPDT:以太网帧丢失。

Guru**** 2460850 points
Other Parts Discussed in Thread: TM4C1294NCPDT

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/652081/rtos-tm4c1294ncpdt-ethernet-frames-missing

器件型号:TM4C1294NCPDT

工具/软件:TI-RTOS

你(们)好

我在以太网应用中使用 TM4C1294NCPDT 芯片。 当我从 主机计算机向控制器发送多个(15)短(47字节)帧的高帧频率(帧之间为10-14微秒)时、控制器会丢失一些帧。  

当我降低帧频率(在数据包之间稍微延迟)时、控制器不会错过帧。

我发现、当以太网的 DMA 将帧从以太网控制器的 RX FIFO 移动到 RAM 时、帧丢失了。 (当我发送这些数据包时、EMACMFBOC 寄存器的"错过的帧计数器"位会增加)。

来自芯片数据表:

丢失帧计数器-该域表示由于主机接收缓冲器不可用而导致控制器丢失的帧数。 每次 DMA 丢弃一个传入帧时、该计数器都会递增。 当 DMA 接受帧时、该计数器清零。

 

原因可能是什么?

对于 Tiva、是否存在"数据包间隙"限制?

 我在我的应用 TI-RTOS 和 NDK 网络堆栈中使用。 以太网的工作速度为100 Mbps。

 

提前感谢。

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

    目标上还有其他什么运行?

    Todd
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    此外、您的 NDK 存储器设置是什么? 是否可以尝试增加网络缓冲区的数量? 有关详细说明、请参阅以下网站 :processors.wiki.ti.com/.../TI-RTOS_Networking_Stack_Memory_Usage

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

    你(们)好。

    感谢您的回答。

     我的控制器控制面板、面板上有开关、LED 等 它通常从以太网接收数据、并通过 I2C 总线将数据发送到键盘/LED 控制器、反之亦然。

    因此、FW 由一个以太网插座、多个任务和 Hwi (来自 I2C、ADC、GPIO)组成。 EMAC 中断具有最高优先级。

    我尝试增加缓冲器的数量、但没有帮助。

    它看起来没有足够的缓冲区或溢出、因为它仅接收15个短 UDP 数据包。

     

    我是否应该更改 EMAC 寄存器中的某些默认设置?

    "每次 DMA 丢弃一个传入帧时、该计数器都会递增"有哪些原因?

    此致。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    系统中中断的优先级是多少? 您可以通过工具->ROV->Hwi->在 CCS 中进行详细介绍来看到它。

    您能否将测试隔离为仅接收 UDP 数据包?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    请允许我注意、这条线程为那些"没有那么关键的参与"的人提供了一个很好的"学习工具"。

    供应商 Todd 最近关注的是"(预期)多个中断的优先级"- RTOS 是否会阻止将"EMAC 中断"配置为"抢先式"?   在"正常情况"(RTOS 之外)中、这种"占先"可确保中断的最高性能、因此"有天赋"。

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

    你(们)好。

    我从应用程序中删除了我可以执行的所有操作。 结果是相同的、丢失的帧。 这是剩余的 Hwi。

    I2C 中断–向 LED 和发送器发送数据、GPIO–从开关接收数据。

    您能解释一下"丢失帧"的机制吗?   

    此致

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

    您能看一下 EMACSnow_Private 吗? 具体而言、是在 Rx/TX 计数和下降值处。 由于它是一个静态变量、您可能需要在 CCS 中对其进行限定。 例如:‘C:/ti/tirtos_tivac_2_16_01_14/products/tidrivers_tivac_2_16_01_13/packages/ti/drivers/emac/EMACSnow.c’::EMACSnow_Private

    此外、您能否将 EMACSnow.c 文件添加到项目中、并将 NUM_RX_descriptors 和 NUM_TX_descriptors 增加到更大的数字(即8或16)。 重新构建您的应用并试用。 注意:由于驱动程序源文件位于项目中、因此库中的驱动程序源文件将被忽略。

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

    你(们)好。
    非常感谢。
    我在项目中添加了 EMACSnow.c 文件、将 NUM_RX_descriptors 的数量增加到16、这对我有所帮助。
    实际上、我不知道可以使用 EMACSnow.c 文件配置 EMAC。

    此致。

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

    Todd、

    已添加海报(两者:)

    • EMACSnow.c 文件

    • 增加了"NUM_RX_descriptors"的数量

    "只是增加此类 RX_Descriptors 的数量"是否是不可能的-是不是这样的?

    就像这张海报一样-我不记得(太多/任何)提到 "EMACSnow.c"-对这里的许多人来说、这是否会有好处-如果你能描述"如果和何时"应该添加该文件-以及-它是什么"通用和意图目标?"    

    感谢您的时间/关注-这款"EMACSnow.c"是否值得更好的"促销"(和描述)?

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

    将 EMACSnow.c 添加到您的项目中是一个解决方法。 驱动程序的目标是在库中"按原样"使用它。 我们应该使数据包数量更大、或者允许驱动程序配置为使用 N 个数据包。 我将打开一个增强请求、以使驱动程序中的 Rx/Tx 缓冲器数量可配置。 这似乎是最佳解决方案、因为吞吐量较慢的应用可能不想使用额外的存储器。

    Todd