STM32H7 HALのI2C関数に不具合

By | 2019年12月11日

STM32H7 HALのHAL_I2C_Transmit_IT() 関数に不具合が有ります。

I2Cバス仕様では、I2Cバスの指定アドレスにデバイスがない場合とデバイスがNAK応答を返した場合を区別できません。言い換えると、デバイスがない場合、マスターはNAK応答として処理することになります。

STM32H7のI2CペリフェラルはNAKが帰ってきた場合、エラー割り込みでNAKを通知します。ですので、HAL_I2C_Transmit_IT()関数を使用した際にターゲットとなるI2Cデバイスがない場合には「即座に」エラー割り込みがかからなければなりません。

ところが、現在の実装では割り込みが数秒後にかかります。これはSTM32F7, G4, G0, F0などには存在しなかった挙動です。

I2CではNAKを異常状態通知だけではなく、バッファがいっぱいであると言ったステータス報告にも使うため、このような挙動は深刻な問題を引き起こします。

この問題はコミュニティに報告済みです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

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