I2C
TLに、I2C使うときには、バスリピーターを使わないと
時々バスが止まる、との記述がある。
経験則からも、バスが止まるのはそうだな...
規格として、バスストレッチがあるのに、
そのタイムアウトが規格に設定されてない、
とか、構造的な問題な気がしている。
マイコンはWDTあるから(まだ)いいけど、
デバイス側にも個別にWDT欲しいなあ、
という気になる。
でもバスリピーターつけると回避できる
ってのは、どういう仕組みなんだろう?
回路見ると、イネーブルは固定だし
電気的にバスがノイズに強くなる、
って程度の意味なのか。
確率的に回避しやすくなる、ってことなのかな。
------
I2Cには、ずいぶんいてこまされた。
NXPには、I2Cの規格書があって、
https://www.nxp.com/docs/en/user-guide/UM10204.pdf
日本語もあるし
https://www.nxp.com/docs/ja/user-guide/UM10204.pdf
大した量じゃないので一度読んでみると
いいのだけれど、これの3.1.16節。
可能性は低いが、クロックラインがLで止まった場合は
ハードウエアリセットかパワーオンリセットを
すべき、と明記されちゃってる。
まあ、公式にこう書いてあるので、
逆にやりやすくはあるんだけど。
絶対止まってほしくない!ってものに
使わない、公式な理由にできるし。
それでも使うときは、ソフトウエアから
パワーオンリセットできる構造が必須、
という話にできる。
| 固定リンク | 0

コメント