[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 メーリングリストの案内