CubeIDEによるI2C設定にご注意

CubeIDEは複雑なペリフェラルの設定を簡略化できる便利なGUIツールです。一方で、落とし穴もあるので注意が必要です。

昨年発見してCommunityに報告するも、進展がなかったSTM32H7 I2CのNAK異常応答の件が手元で解決しました。問題の原因はI2Cピンの駆動能力不足でした。

下の図はSTM32H743のI2CをCubeIDEで設定した場合の設定内容です。デフォルトではMaximum Output SpeedがLowになっています。これをHighにしたところ、問題なく動作するようになりました。

もともとNAK受信時の異常として認識しており、解決するまで放置していました。最近になって再びいじってみたところ、I2Cの挙動が以前よりおかしくなっており、ACKが帰る場合も異常動作していることに気が付きました。CODEC基板を取り替えるなどして確かめた結果、さらに現象が混乱したため、アナログ部分を疑った次第です。

Maximum output speedのI2Cへの適正な設定値は、データシート最新版(DS12110 Rev 7)にも記述がなく、回路ごとにオシロスコープで波形を確認したほうがいいでしょう。

なお、この問題の再現手順などは、githubにまとめてあります。D004を参照してください。

最後に、GPIO Pull-up/Pull-downの設定ですが、5V回路への接続を考えれば、pull up 無しにすべきだという意見を読みました。確かに上記データシートにはAbsolute Maximum Ratingsの節の注釈4に

To sustain a voltage higher than 4V the internal pull-up/pull-down resistors must be disabled.

STM32H742xI/G STM32H743xI/G データシート DS12110 Rev 7

と書いてあります。CubeIDEの生成コードを見るとNucleo H743はPull-up無しがデフォルトですが、手元で確認した限りではNucleo F722はデフォルトでPull-upありでした。

注意が必要です。

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください