F4xx 系列芯片的 STM32 手册说应用程序TXFFLSH
在寄存器中写入位OTG_FS_GRSTCTL
以刷新 TxFIFO。作为注释,它提到...应用程序必须仅在检查内核既不写入 TxFIFO 也不从 TxFIFO 读取之后写入该位。作为一种方法,它建议确保设置 NAK 有效中断(我认为这意味着寄存器GINAKEFF
中的位OTG_FS_GINTSTS
)以确保内核没有读取 FIFO,并检查AHBIDL
(AHB 空闲)位OTG_FS_GRSTCTL
设置为保证没有任何东西被写入 FIFO。STM 本身提供的(糟糕的)USB OTG 库忽略了这两项检查,而免费libopencm3
库仅检查 AHB 空闲位。我的问题如下:
手册不建议在执行上述检查和写入
TXFFLSH
位之前禁用 USB OTG 内核。这是否不会让内核在执行检查和写入 FIFO 之间开始使用 FIFO 的可能性TXFFLSH
?“NAK 有效”位仅保证不会从 TxFIFO 读取非周期性端点的数据。除非内核被禁用,否则这是否仍使内核能够将 FIFO 用于同步端点?
我知道这些是“挑剔”类型的问题,但我正在进行的项目应该会产生一个非常可靠的硬件,客户多年来无法负担检查设备,所以这些细微之处很重要(是的,我们启用了看门狗等,但我们需要核心在大多数情况下无需重置即可工作)。