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.

[参考译文] PRU-ICSS-INDUSTRIAL-SW:PRU 内核中数据包最后字节的传输延迟

Guru**** 2466550 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1465286/pru-icss-industrial-sw-delay-in-transmitting-last-bytes-of-the-packet-in-pru-core

器件型号:PRU-ICSS-INDUSTRIAL-SW

工具与软件:

大家好!

我们目前使用的是 AM437x IDK 上的 PRU 内核、遇到了特定的函数调用(M_XMT_FILL_LEVEL_CALC_ICSS_REV1)、此函数在从 PRU 固件发出的每个数据包的最后字节传输期间调用。 文件(EMAC_MII_XMT.asm)中的注释指出、在高流量情况下移除电缆时、如果 TX FIFO 中存在下溢或溢出、则调用该函数来修复问题。  但调用此函数 会导致数据包的最后一个字节的传输延迟。 这会导致在 Wireshark 中捕获损坏的数据包。 这种情况只能在 Windows 系统中观察到。 您能解释一下 在传输导致延迟的数据包的最后一个块时、该函数(M_XMT_FULL_LEVEL_CALC_ICSS_REV1)到底做了什么。

文件名: git.ti.com/.../emac_MII_Xmt.asm

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

    Jayakumar,

     假设您使用的是这里的 EMAC 示例。 我们最近在代码中发现了一个错误、该错误可能会导致您发现问题。

    在调用函数  M_XMT_FILL_LEVEL_CALC_ICSS_REV1 (用于计算 TX FIFO 填充级别)之前、您需要确保读取 TX SOF 值。 您能否在调用函数并尝试之前添加以下代码

       .if $defined("ICSS_DUAL_EMAC_BUILD")
        .if !$defined("TTS")	
    ;Only need to read in non-TTS EMAC.
    ;For TTS EMAC, it is read in M_TTS_FIFO_FILL_MOD-->M_TTS_TX_SOF_COMPARE_ICSS_REV1.
        .if $defined("ICSS_REV1")	
        M_XMT_GET_TXSOF_ICSS_REV1
        .endif	;ICSS_REV1
        .endif	;TTS
        .endif  ;ICSS_DUAL_EMAC_BUILD
    
        ; port tx sof capture for port 1 (PRU1) and port 2 (PRU0) - 2 port config.
        .if $defined("TWO_PORT_CFG")	
        .if $defined("PRU0")	
        LBCO	&TEMP_REG_3, IEP_CONST, CAP_RISE_TX_SOF_PORT2_OFFSET, 4	
        .else
        LBCO	&TEMP_REG_3, IEP_CONST, CAP_RISE_TX_SOF_PORT1_OFFSET, 4	
        .endif
        .endif ;TWO_PORT_CFG

    此致、
    Prajith

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

    您好、Prajith:

    我已经通过在您提到的 XMT_LB 函数调用中包含上述代码来测试固件、但仍然看到 Wireshark 中捕获了格式错误的数据包。 为了进行测试、我删除了 XMT_LB 函数内的 M_XMT_FULL_LEVEL_CALC_ICSS_REV1函数调用、奇怪的是、我没有观察到在 Wireshark 中捕获的任何格式错误的数据包。  删除此功能是正确的方法、还是请建议任何替代方法?

    此致、
    Jayakumar N.

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

    尊敬的 Jayakumar:

    您能否在此处分享更新后的代码?

    LB 单位的代码用于检测错误状态和复位 FIFO。 如果您注释代码、此部分将不执行、通信将正常运行。 但是,在这种情况下,你缺少错误处理,不会出现在基本测试。 我建议更正错误处理。 请分享更新后的代码、我会确认并告知您

    此致、
    Prajith