[Armadillo:03070] Re: Armadillo-500 I2C通信サンプルソフト
nakai
email@hidden
2008年 6月 27日 (金) 17:09:42 JST
nakaiです。
インラインでコメントします。
g-kihara さんは書きました:
> 木原です。
> いつもお世話になっています。
>
> 私は、armadillo-500ボードのI/Oポートと、
> 弊社のセンサとをI2Cバス接続し、
> レジスタへのread,writeをテストしようと
> 思っています。
> そこで、デバイスドライバi2c-armadillo5x0.cを利用して
> "スペシャルデバイスファイルを介して"I2C通信を行う
> ソフトを作成しようと思ったのです。
キャラクタデバイスとしてドライバを作成すればよいでしょう。
opsのreadやwriteに対応する関数を作成し、登録してあげればよいですね。
> そこで、
> http://lists.atmark-techno.com/pipermail/armadillo/2008-January/002579.html
> http://lists.atmark-techno.com/pipermail/armadillo/2007-September/002043.html
> を読んだのですが、
>
> armadillo500ボードでI2C通信を行う場合には、現在、
> /home/atmark/linux-2.6.18-at2/.configにて、
>
> # I2C Hardware Bus support
> CONFIG_I2C_ARMADILLO5X0=y
>
> となっているので、
> デバイスドライバi2c-armadillo5x0.cを使わなければならない
>
> 「現状のi2c-armadillo5x0ドライバですとI2C2のみ対応となっています」
> ということなので、armadillo-500ボードのI2C2に、弊社のセンサを接続する。
>
> という理解でよろしいでしょうか?
以前はI2C2のみに対応していましたが、今は、
CON16のI2C1を使用可能になっているので、
こちらに接続すればよいでしょう。
参考:Armadillo-500-dev_hardware_manual
>> drivers/i2c/chips/tlv320aic.c
>> にソースコードがありますよ。
>
> 私は、単純に、findコマンドをつかって、
> i2c-armadillo5x0.cにあるmxc_i2c_send()や
> mxc_i2c_start( )を検索すれば、制御ソフトらしきものが
> ヒットするものだと思っていましたが、まったくヒットしま
> せんでした。
>
> しかし、そうやって検索するのではなく、これは、
>
> step1)/home/atmark/linux-2.6.18-at2/.configを開く
> step2)コメント行に「I2C」が含まれる行を探し、その下の
> CONFIG_I2C_XXXXX = y になっている行をみる。
>
> # I2C support
> CONFIG_I2C=y
> CONFIG_I2C_CHARDEV=y
>
> # I2C Hardware Bus support
> CONFIG_I2C_ARMADILLO5X0=y
>
> # Miscellaneous I2C Chip support
> CONFIG_SENSORS_TLV320AIC=y
>
> 以上より、
> ハードウェアバスサポートを行っているデバイスドライバ : i2c-armadillo5x0.c
> そのデバイスドライバを制御しているソフト: tlv320aic.c
> ということがわかるわけですね?
I2Cコアのがどのような構造になっているか理解すると、
スレーブデバイスのドライバ構造は一様になっていることが理解できると思います。
> tlv320aic.cを読んでみたのですが、
>
> 送信(書き込み)を行いたい場合は、tlv320aic_setreg(u8 reg, u16 val)
> 受信(読み込み)を行いたい場合は、tlv320aic_getreg(u8 reg)
>
> を呼び出せばよいというのはわかりますが、
>
> スタートコンディションを発行するための関数
> が見当たりません。
> デバイスドライバ : i2c-armadillo5x0.cのmxc_i2c_start()が
> スタートコンディションを発行する関数だと思うのですが、
> この関数をtlv320aic.cは呼び出しているのでしょうか?
> tlv320aic.cは、i2c-armadillo5x0.cの関数をsysfs経由で
> 呼び出しているのでしょうか?
こちらもI2Cコアの構造を理解するとどのようにプローブされて、
どのようにアクセスされるかがわかります。
実際には、スレーブアドレスを正しく設定して、
i2c_add_driverを行うことで、
バスマスタに登録され、
i2c_probeやi2c_transferなどの関数が正常に使用可能になります。
armadillo メーリングリストの案内