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.

[参考译文] AMIC110:RX 双缓冲器的 USB FLUSHFIFO

Guru**** 2535150 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1564164/amic110-usb-flushfifo-of-rx-double-buffer

器件型号:AMIC110


工具/软件:

我正在实现 USB 外设操作、
在启用双缓冲的情况下刷新接收端点 FIFO 时、规范文档 (spruh73q.pdf) 指出可能需要在 peri_RXCSR 寄存器中写入两次 FLUSHFIFO 位。

但是、观察实际行为、两个缓冲区的数据都被使用单个写入操作擦除。
(从 PC 接收到两个数据包、然后对 FLUSHFIFO 执行单次写入后,所有数据都将消失。)

这是预期行为吗? 此外、之后执行第二次写入是否会导致出现额外的刷新?

此致、

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

    尊敬的 Kibata-San:

    这是预期行为吗? 此外、之后执行第二次写入是否会导致出现额外的刷新?

    是的、我认为当一切都按计划进行时、这是预期的行为。 在双缓冲中、控制器以乒乓模式访问缓冲器的两个部分。 在某些情况下、当控制器正在刷新其中一个缓冲区时、另一个缓冲区可能仍被 DMA 等访问、从而阻止其被刷新。 在某些情况下可能需要第二个 FLUSHFIFO 请求。

    此致、

    Stan

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

    尊敬的 Stan-san:

    我明白。

    非常感谢。

    此致、

    Kibata

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

    尊敬的 Stan-san:

    请原谅我提出另一个问题。

    如果在单次 FLUSHFIFO 写入期间成功刷新了两个缓冲区闪存、如果在第二次 FLUSHFIFO 写入期间接收到下一个数据包、是否也可以刷新其数据?

    我担心一系列 FLUSHFIFO 操作可能清空比 FIFO 大小更多的数据。

    此致、

    Kibata

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

    尊敬的 Kibata-San:

    如 TRM 中所述、在某些情况下(在端点设置期间)、软件需要请求 FIFOFLUSH 两次

    在这里、SW 必须通过读取 RXPKTRDY 位来检查 FIFO 中的数据包。 因此、如果 FIFO 中没有数据包、软件将跳过清空。 如果第一次刷新成功、它也将跳过第二次刷新。

     

    此致、

    Stan

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

    尊敬的 Stan-san:

    感谢您的答复。

    假设写入 FLUSHFIFO 位一次成功刷新缓冲区。
    如果在读取 RXPKTRDY 之前从 PC 接收到下一个数据包、并且读取结果为 1、从而导致执行第二次 FLUSHFIFO 写入、那么该数据包是否也会被刷新?

    此致、

    Kibata

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

    尊敬的 Kibata-San:

    我的理解是、此时外设仍然未配置、并且在主机还重新配置其端点之前不会进行批量传输。

    关于控制器的功能、清空 FIFO 不会删除 FIFO 内容、而只会复位 FIFO 指针并清除数据包就绪标志。 因此、这是一个相对较快的过程。

    如果 FIFO 中只有部分数据包、还有一种机制可以防止 FIFO 清空。 请参阅以下说明:

    此致、

    Stan

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

    尊敬的 Stan-san:

    我道歉;由于对局势的解释不够、我们的理解似乎分歧了。
    当器件处于配置的状态时、我尝试在 EP1 (PERI_RXCSR) 上执行 FLUSHFIFO。
    在这些情况下、我之前描述的行为是否不会发生?

    假设写入 FLUSHFIFO 位成功地一次刷新缓冲区。
    如果在读取 RXPKTRDY 之前从 PC 接收到下一个数据包、并且读取结果为 1、从而导致执行第二次 FLUSHFIFO 写入、那么该数据包是否也会被刷新?

    此致、

    Kibata

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

    尊敬的 Kibata-San:

    感谢您的详细介绍。

    我不是 Mentor USB 控制器的专家,但我的理解是:

    如果在传输过程中为配置的端点发出 FLUSHFIFO、 则是的、在第一次 FIFO 刷新期间、可能会有新的数据包到达第二个 FIFO。 但是、这种可能性很小、因为在硬件中进行刷新的整个过程非常快、控制器只会复位 FIFO 指针并清除数据包就绪标志。  

     我从 TRM 中可以看到、只在批量输入或批量输出设置过程中需要 FIFOFLUSH 请求两次。 此时(设置)、设置尚未完成、不需要数据包、任何数据包都必须被忽略。

    总体而言、从 USB 协议的角度来看、如果控制器由于某种原因无法接收数据包、则必须以 STALL 响应主机、从而指示这种情况。 主机还必须跟踪外设条件、并避免 在外设 EP 未就绪((EP 未设置等)时发送数据包。

    此致、

    Stan

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

    尊敬的 Stan-san:

    我明白。

    非常感谢您的各种帮助。

    此致、

    Kibata