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