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 コアを無効にすることは推奨されていません。これにより、チェックが実行されてからTXFFLSH
.「NAK 有効」ビットは、非周期エンドポイントの TxFIFO からデータが読み取られないことのみを保証します。これにより、コアが無効にされない限り、コアがアイソクロナス エンドポイントに FIFO を使用できるようになるのではないでしょうか?
これらが「つまらない」タイプの質問であることは承知していますが、私が取り組んでいるプロジェクトは非常に信頼性の高いハードウェアになるはずであり、顧客はデバイスを何年もチェックする余裕がないため、これらの微妙な点が重要です (はい、ウォッチドッグを有効にしています)などですが、ほとんどの場合、リセットせずにコアが動作する必要があります)。