STM32 USB OTG:如何正确刷新Tx FIFO?

时间:2014-05-13 20:18:35

标签: arm usb stm32 usb-otg libopencm3

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空闲位。我的问题如下:

  1. 在执行上述检查并写入TXFFLSH位之前,本手册未建议禁用USB OTG内核。这是否可以让核心可能在执行检查和写TXFFLSH之间开始使用FIFO?

  2. “NAK有效”位仅保证不会从非周期性端点的TxFIFO读取数据。除非核心被禁用,否则核心是否仍然可以将FIFO用于等时端点?

  3. 我知道这些是“挑剔”类型的问题,但我正在研究的项目应该是一个非常可靠的硬件,客户多年来无法检查设备,所以这些微妙之处很重要(是的,我们有启用看门狗等,但我们需要核心工作而不会在大多数情况下重置。)

0 个答案:

没有答案