[Armadillo:07656] i2cdev ドライバの使用方法

email@hidden
2011年 10月 28日 (金) 14:53:12 JST


小林と申します。

I2Cの使用方法について教えてください。

【現象】
I2C3をi2cdevドライバーを用いて使用するとwriteでリモートI/Oエラー
となり、SCL,SDA共に信号が出力されない。

【構成】
品名  :Armadillo-440
型番  :A4400-U00Z
OS    :Linux armadillo440-0 2.6.26-at15
その他:RTC未搭載
        I2C3の接続先は、DAC(AD5337)

【設定】
・I2C コンフィギュレーション
      I2C                           y (デフォルト)
      I2C_CHARDEV                   y (デフォルト)
      I2C_MXC                       y (デフォルト)
      ARMADILLO400_I2C3_CON11       y (デフォルト)

・リアルタイムクロック選択コンフィギュレーション
      ARMADILLO400_I2C3_CON11_S35390A     n (デフォルトから変更)

【詳細】
Armadillo 実践開発ガイド
〜組み込みLinux の導入から製品化まで〜
第3 部
上記ドキュメントの「2.2.4. i2cdev ドライバー」を参考に
ソフト(アプリケーション)を実装しています。
Armadillo440のI2C3(CON11_48,49)にDAC(AD5337)を接続しています。
アプリケーション上の手順は以下のとおりです。

(1) デバイスファイルのオープン

      fd = open("/dev/i2c-2", O_RDWR);

(2) スレーブデバイスのアドレス設定

      ioctl(fd, I2C_SLAVE, [DAC(AD5337)のアドレス]);

(3) I2C スレーブデバイスへのデータ書込

      write(fd, [3byteデータ], 3);

上記手順でソフトを動作させると、(3)のwriteでerrnoが121(リモートI/O
エラー)となります。
コンソール上から直接"/dev/i2c-2"を参照しようとcatコマンドを実行しても

cat: Read error: Remote I/O error

と出力されます。上記現象からデバイスファイルのアクセスができない
状態になっているようです。

上記ドキュメントには、

> i2cdev ドライバーを使用すると、デバイスファイルインターフェースを
> 経由して、ユーザーランドで動作するアプリケーションプログラムから
> デバイスの制御をおこなうことができます。Armadillo-400 シリーズでは、
> 標準のカーネルでi2cdev ドライバーが有効になっているため、特に何も
> 設定しなくとも使用可能です。

とあり、

> I2C スレーブデバイスとのデータ転送をおこなうには、単純にread/write
> システムコールを実行するだけです。スタート/ストップコンディションの
> 発行、アドレスバイトの生成と送信、アクノリッジの処理などは、全て
> ドライバーがおこなってくれるので、アプリケーションプログラム側では
> それらを意識する必要はありません。

と記載されていますが、I2C3でDAC制御を行う場合、他に何か必要な手順が
ありますでしょうか。

以上、よろしくお願いいたします。




armadillo メーリングリストの案内