I2C通信の落とし穴

この投稿では、私が経験したI2C通信で陥ったバグについて紹介します。

下図のようにI2C通信でメモリABC1とメモリABC2を接続し、Write Read (Write実行後、直ぐにRead実行)コマンドを実行しました。その結果、ABC1では正常に通信したのですが、ABC2では通信がうまくできませんでした。原因は、tBUF(新しい伝送を開始する前にバスが空いていなければならない時間)のMin時間に差があったからです。この違いに気付くまで大変時間がかかりました。

ABC1 tBUF = 1.2μs
ABC2 tBUF = 4.7μs

このケースの対策として、Write実行後に5μs待ってからRead実行するようにしました。

I2Cバス規格 UM10204の tBUF 時間

Standard-mode
Fast-mode
Fast-mode Plus

4.7μs
1.3μs
0.5μs

根本原因は、規格およびDatasheetを調べずにStandard-mode ABC1が1.2μsだからABC2も1.2μsと思い込んだことです。
皆さんは、私のようにI2C通信で同じと思わずにDatasheetの仕様をよく確認することをお勧めします。

OSS-ECAL Japanese
error: コンテンツは保護されている