I2C_PullUp
I2C
組み込み系でハードウェア、ソフトウェアをいじっているとI2C通信は避けて通れない。少ない信号線で複数のICへ複雑な命令を送れるからだ。
信号線は基本的に2本で、それプラス電源の2本といった感じがスタンダード。
おそらくI2Cに慣れておくと一通りのやりたいことは周辺ICの構成を考えれば実現できると思う。
んで、ちょっと気になったことがあったのでメモ・・・。
プルアップ抵抗値
まず、I2Cそのものは調べれば、いくらでもネット上に情報は転がっているからいいとして、気になっているのはプルアップ抵抗の値。
理論値はデータシートなどをみながら、C要素とか考えながら計算をすればでるけど、実際は計算通りとはいかない場合がある。
ノイズ
ノイジーな環境で使用する場合、外部ノイズの影響を受けないようにプルアップ抵抗値を低くして使用していたのだが、どうやら低すぎても問題があるようだ。
まず、プルアップ抵抗を大きくするということは信号線はハイインピーダンスに近づくかたちになって、ノイズに弱くなると考えた。よって、ノイジーな環境で使用する際は抵抗値を低くしていた(4.7kとか)のだが、どうやら通信が安定しないことがあるらしい。
基板上でのやりとりではなくリード線で基板と基板をつないでいたので、30cmくらいは引っ張ってたけど、うまくいくと思ってた。実際は稀に正常に通信が行えない場合があった。リトライなどを行えば問題ないのだが、原因が気になったので、調べてみると、どうやらプルアップ抵抗が小さすぎるとACKの信号レベルが正常にLOWに下がりきらない場合があるとのこと。
とりあえず、情報を鵜呑みにして抵抗値を上げると通信ミスはなくなった!!
結論
基本的には数キロのプルアップで良いが、ノイズを考慮してプルアップ抵抗値を下げても信号レベルに異常がでるので、下げすぎも良くない。
論より証拠ではないが、プルアップ抵抗値を理論値より一回り大きくすると安定したので、この考え方は正しいと思う。
知らないことが多すぎてたまりません。
スターボードォォォ!!