LoginSignup
7
4

More than 3 years have passed since last update.

Raspberry Pi と I2C デバイスを長距離ケーブルで接続して通信する

Last updated at Posted at 2020-04-21

概要

30 m, 100 kHz で通信できました

注:条件が異なれば結果は変わり、また信頼性試験をしたわけではないので、保証値ではなくあくまで実績です。各自の責任において参考にしてください。

条件

  • Master
    • Raspberry Pi 3 model B+ / Raspbian / i2ctools
      • core_freq=250
      • VDDIO = 3.3 V
      • プルアップ抵抗 1.8 kΩ (Raspberry Pi 実装済み)
  • Slave
    • MCP23017
      • 配線を 5V にしたので、スレーブ側 VDD は 3.3V LDO を使っています
      • 4.5 V 以上なら 1.7 MHz 対応だが、 3.3 V の場合は 400 kHz
      • こちらはプルアップ抵抗なし
  • Cable
  • 環境
    • 常温常湿
      • 約 20 ℃ / 約 60 %RH
  • 方法
    • i2ctools の i2cdetect i2cget コマンドでスレーブの反応を確認
    • ケーブルの長さとマスターの i2c_baudrate を変更して、通信可能な最大速度を確認
      • i2c_baudrate は 100 kHz 刻みで変更

検証

様子

MCP23017 & LDO 以外にも、いろいろくっついていますが影響は小さいはず(むしろ負荷容量が増えて悪影響ある)

DSC_0891.JPG

結果

ケーブル長 通信可能速度 備考
0.3 m 700 kHz ツイストペアでない 26AWG
3 m 600 kHz
5 m 500 kHz
10 m 300 kHz
15 m 200 kHz
30 m 100 kHz

近似すると 通信可能速度(kHz) = 670 * exp(-0.0675 * 配線長(m)) となる。
それによると 60 m, 10 kHz 程度が実用的な限度か

背景と考察

長距離の通信を「低速で構わない」ので「低コスト」で行いたい。
いろいろ 調べ、 P82B96 という I2C エクステンダ(バスバッファ)を試そうとしました。(そのため検証基板に P82B96 と周辺部品が乗っています)

比較のために素の I2C の実力を測ってみたところ、想像以上に実力があったのでエクステンダの検証はやめました :laughing:
ただ、構成によって結果は変わりますし、環境変動・ノイズへの耐性も不明なので、何か判明したら記事を追加します。

PCA9600D ( 秋月Switch Science で購入可能)を購入する前に、まずは試してみる価値のある方法です。

私は、この方法を試す前に先走って ジャパンエレキットで P82B96 を注文 してしまいましたよ。。。

せっかく検証環境が整ったので、デバイスの検証リクエストあれば検討します :thumbsup:

未検証項目

  • Raspberry Pi 3B+ 以外の master
  • MCP23017 以外の slave
  • 30 m 超えケーブル
  • UTP 以外のケーブル
  • P82B96 等のバスバッファ利用
  • 環境試験
  • ノイズ試験
7
4
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4