工具/软件:
我正在实现 USB 外设操作、
在启用双缓冲的情况下刷新接收端点 FIFO 时、规范文档 (spruh73q.pdf) 指出可能需要在 peri_RXCSR 寄存器中写入两次 FLUSHFIFO 位。
但是、观察实际行为、两个缓冲区的数据都被使用单个写入操作擦除。
(从 PC 接收到两个数据包、然后对 FLUSHFIFO 执行单次写入后,所有数据都将消失。)
这是预期行为吗? 此外、之后执行第二次写入是否会导致出现额外的刷新?
此致、
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.
工具/软件:
我正在实现 USB 外设操作、
在启用双缓冲的情况下刷新接收端点 FIFO 时、规范文档 (spruh73q.pdf) 指出可能需要在 peri_RXCSR 寄存器中写入两次 FLUSHFIFO 位。
但是、观察实际行为、两个缓冲区的数据都被使用单个写入操作擦除。
(从 PC 接收到两个数据包、然后对 FLUSHFIFO 执行单次写入后,所有数据都将消失。)
这是预期行为吗? 此外、之后执行第二次写入是否会导致出现额外的刷新?
此致、
尊敬的 Kibata-San:
这是预期行为吗? 此外、之后执行第二次写入是否会导致出现额外的刷新?
是的、我认为当一切都按计划进行时、这是预期的行为。 在双缓冲中、控制器以乒乓模式访问缓冲器的两个部分。 在某些情况下、当控制器正在刷新其中一个缓冲区时、另一个缓冲区可能仍被 DMA 等访问、从而阻止其被刷新。 在某些情况下可能需要第二个 FLUSHFIFO 请求。

此致、
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