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

g-kihara email@hidden
2011年 10月 28日 (金) 18:30:01 JST


ioctl(fd, I2C_SLAVE,addr )のaddrですが、
I2Cスレーブデバイスのアドレスを1ビット右シフトしたもの
(=R/Wビットを捨てたアドレス)を指定していますか?

以上



(2011/10/28 18:05), Takenoshita Koyo wrote:
> 竹之下です。
> 
>> I2C3でDAC制御を行う場合、他に何か必要な手順が
>> ありますでしょうか。
> I2C3だから、DACだからといって、特に必要となる手順はありません。
> 
> オシロスコープやロジックアナライザ等があれば、信号線を確認してみて
> ください。実際、どんな信号が出ているか見てみるのが、一番確実な方法です。
> 
> I2Cでよくハマるポイントは、アドレスの指定です。
> 今回、[DAC(AD5337)のアドレス] には何を指定しているでしょうか?
> 
> ※切り貼りでも良いので、実際のコードを見せていただく方が適切な回答が得られ
>  やすいと思います。
> 
> (2011年10月28日 14:53), email@hidden wrote:
>>
>> 小林と申します。
>>
>> 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 mailing list
>> email@hidden
>> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
>>
> 
> 



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