STM32 USB OTG: как правильно промывать Tx FIFO?

Инструкция STM32 для чипов серии F4xx гласит, что приложение пишет TXFFLSH немного в OTG_FS_GRSTCTL Зарегистрируйтесь, чтобы очистить TxFIFO. В качестве примечания упоминается, что ... приложение должно записывать этот бит только после проверки того, что ядро ​​не записывает в TxFIFO и не читает из TxFIFO. В качестве средства для этого предлагается убедиться, что установлено эффективное прерывание NAK (я предполагаю, что это означает, что GINAKEFF немного в OTG_FS_GINTSTS зарегистрироваться), чтобы убедиться, что ядро ​​не читает FIFO и проверяет, что AHBIDL (AHB простоя) немного в OTG_FS_GRSTCTL устанавливается, чтобы гарантировать, что в FIFO ничего не пишется. (Ужасная) библиотека USB OTG, предоставляемая самой STM, игнорирует обе эти проверки, в то время как бесплатная libopencm3 библиотека проверяет только бит AHB. Мои вопросы следующие:

  1. В руководстве не предлагается отключать ядро ​​USB OTG перед выполнением вышеуказанных проверок и написанием TXFFLSH немного. Разве это не оставляет открытой возможность того, что ядро ​​может начать использовать FIFO между временем выполнения проверок и записью TXFFLSH?

  2. Бит NAK Effective только гарантирует, что данные не будут прочитаны из TxFIFO для непериодических конечных точек. Разве это не позволило бы ядру использовать FIFO для изохронных конечных точек, если ядро ​​не отключено?

Я знаю, что это вопросы типа "придирки", но проект, над которым я работаю, должен привести к очень надежному аппаратному обеспечению, где клиент не может позволить себе проверять устройство годами, так что эти тонкости имеют значение (да, у нас есть сторожевой таймер) и т.д., но нам нужно, чтобы ядро ​​работало без перезагрузок большую часть времени).

0 ответов

Другие вопросы по тегам