"I2C" (デバイス接続プロトコル)

  • "I2C"は,Wolfram言語を実行しているプロセッサに直接接続されているデバイス用の低レベルのデバイス通信プロトコルである.
  • I2Cは,Serial Data Line (SDA)およびSerial Clock Line (SCL)という2つのワイヤだけで単一のデバイスに数多くのデバイスを接続することを可能にするデバイス用の半二重バスプロトコルである.SDAがデータの通信に使用されるのに対し,SCLはデータがデバイスからデバイスに送信される際にこのデータを同期化する.
  • マスタデバイスとスレーブデバイスという2つのクラスのデバイスがI2Cと互換性を持つ.マスタデバイスは,バス上のすべての通信を助けるが,スレーブデバイスはマスタによって明示的に許可されない限り,バス上で通信することができない.I2CのWolfram言語実装は,I2Cバス上でWolfram言語を実行しているデバイスをマスタに指定する.
  • I2Cのクロックスピードは,linuxカーネルから導き出されるもので,Raspberry Pi上ではデフォルトは100 kHzである..
  • システムの中には,I2Cカーネルを使用する前に設定が必要な場合もある.詳細は「I2Cの設定」をご覧いただきたい.
  • I2Cバスは,Wolfram言語をRaspberry Pi上で実行している場合にのみアクセス可能である.
  • 注:Jessieより前のバージョンのRaspbianでは,GPIOにアクセスするために,ルートとしてログインするか,Wolfram言語をルートとして実行するかしなければならない.より新しいバージョンではルートにアクセスする必要はない.

    デバイス発見

    • I2Cデバイスは,自動的に発見される.FindDevicesを使うと,現在I2Cバス上にあるデバイスをリストすることができる.

    デバイスを開く

      DeviceOpen["I2C",addr]

      I2Cデバイスへの接続をスレーブアドレス addr で開く.

      DeviceOpen["I2C",{addr,bus}]

      I2Cデバイスへの接続を指定の bus 上のスレーブアドレス addr で開く.

    • 有効なI2Cスレーブアドレスは,8から119までの整数である.10ビットのアドレスはサポートされない.特定のデバイスのアドレスについては,デバイスのメーカーによるマニュアルを参照されたい.
    • Raspberry Piでは,唯一の有効なバスは0である.

    データの読取り

      DeviceRead[dev]

      I2Cバス上のデバイスから単一バイトを読み取る.

      DeviceRead[dev,n]

      I2Cバス上のデバイスから n バイトを読み取る.

    • I2Cのスレーブデバイスは,通信が起る前に,Wolfram言語とは独立して設定される必要があることもある.
    • I2Cのスレーブデバイスの中には,読取り操作で要求されるバイトの数によって異なる反応を示すものもあるので,注意が必要である.詳細については,デバイスのメーカーによるマニュアルを参照されたい.

    データの書込み

      DeviceWrite[dev,data]

      data をデバイスに書き込む.

    • data は,0から255までの整数のリスト,もしくは0から255までの単一のIntegerでなければならない.
    • I2Cのスレーブデバイスは,通信が起る前に,Wolfram言語とは独立して設定される必要があるものもある.

    リソースの終了と解放

      DeviceClose[dev]

      I2Cバスへの接続を閉じ,別のプログラムが使用できるようにバスを解放する.

    例題

      (1)

    バス上のI2Cデバイスを見付ける:

    デバイスを開く:

    バイトのシーケンスをデバイスに書き込む:

    デバイスから単一のバイトを読み取る:

    デバイスから10バイトのシーケンスを読み取る: