Armadilloフォーラム

I2Cドライバの設定について

salt_009

2023年7月21日 10時35分

現在、I2C2に二つの機器(外部RTCと音声制御用のIC)がぶら下がった状態で、
制御を試みています。

ioctlで読み込みを行おうとすると
"No such device or address"というログが表示されます。
ぶら下がっている機器が認識されていないように思います。

接続された機器のアドレスをdtb等に設定する必要があるのでしょうか。

コメント

溝渕です。

> 接続された機器のアドレスをdtb等に設定する必要があるのでしょうか。

userland driver(/dev/i2c*経由でアクセスする)場合は、dtbにi2c slaveの情報を指定する必要はありません。slaveにドライバをattachする場合はdtbに指定する必要があります。

また、i2c master(i.MX6ULLのI2C2)のnodeはdtbに入っている必要があります。

[armadillo]# i2cdetect -y 1

のようにコマンドを実行してみてもらえますか?

i2c masterが存在し、i2c slaveが正しく接続されている場合は、slaveのアドレスが表示されると思います。

ご返信ありがとうございます。

実行した結果下記のようになりました。
目的のアドレスが表示されておりませんでした。

 0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- 32 -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

> 溝渕です。
>
> > 接続された機器のアドレスをdtb等に設定する必要があるのでしょうか。
>
> userland driver(/dev/i2c*経由でアクセスする)場合は、dtbにi2c slaveの情報を指定する必要はありません。slaveにドライバをattachする場合はdtbに指定する必要があります。
>
> また、i2c master(i.MX6ULLのI2C2)のnodeはdtbに入っている必要があります。
>
>

> [armadillo]# i2cdetect -y 1
> 

>
> のようにコマンドを実行してみてもらえますか?
>
> i2c masterが存在し、i2c slaveが正しく接続されている場合は、slaveのアドレスが表示されると思います。
>

溝渕です。

> 実行した結果下記のようになりました。
> 目的のアドレスが表示されておりませんでした。

Armadillo-610 開発セットを利用していますか? 0x32は、Armadillo-610 拡張ボードに搭載のRTC(NR3225SA)でしょうかね?

もしそうなら、i2c master(i.MX6ULLのI2C2)は正しく動作している事になります。

新たに接続したi2c slaveの配線(SDA/SCLを逆に接続していないか、接続するピンを間違っていないか等)や、電源が入っているか等を確認してみてもらえますか?

返信が遅くなり申し訳ございません。

> 新たに接続したi2c slaveの配線(SDA/SCLを逆に接続していないか、接続するピンを間違っていないか等)や、電源が入っているか等を確認してみてもらえますか?
担当の方に確認していただいたところ、ハードウェア的に問題ございませんでした。

こちらで調査していたところ
接続したRTCのアドレスは0x32で問題ございませんでした。
(データシート上はread:0x65 write:0x64 であり、その値が表示されると思っておりました。)

また音量調整用のICが表示されていなかったのは、
ICがシャットダウン状態であったためでした。
シャットダウン状態を解除すれば、該当のアドレスが表示されました。

結果、どちらも制御することができました。
いずれも、こちらの確認不足でした。申し訳ございません。

不躾で申し訳ございませんが、もう一点質問させていただきます。
接続したRTCをハードウェアクロックとして認識させる方法はございますか?

溝渕です。

> 接続したRTCのアドレスは0x32で問題ございませんでした。

もし、Armadillo-610 開発セットを利用している場合は、すでにI2C2に接続されているRTC(NR3225SA)と、i2c slave addressが重複しているので正常に動作しないかと思います。

Armadillo-610 開発セットを利用していないのでしたら問題ありません。

> 結果、どちらも制御することができました。

ハード的には解決したとの事で良かったです。

> 接続したRTCをハードウェアクロックとして認識させる方法はございますか?

device treeで、RTCにdriverをattachする事で認識されるようになると思います。

以下がサンプルになるかと思います。

arch/arm/boot/dts/armadillo-610-extboard-eva-grove.dts:
&i2c2 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_i2c2>;
	clock-frequency = <100000>;
	status = "okay";
 
	rtc_nr3225sa: rtc-nr3225sa {
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_snvs_rtc_nr3225sa>;
 
		compatible = "ndk,nr3225sa";
		reg = <0x32>;
 
		interrupt-parent = <&gpio5>;
		interrupts = <0 IRQ_TYPE_EDGE_FALLING>;
	};
};

RTCの型番を教えてもらえると、linux-4.14-atにdriverが含まれているかや、device treeの資料をお伝えする事ができます。

> もし、Armadillo-610 開発セットを利用している場合は、すでにI2C2に接続されているRTC(NR3225SA)と、i2c slave addressが重複しているので正常に動作しないかと思います。
開発ボード使用していますがNR3225SAは外した状態で使用しているので、問題無いかと思います。

> RTCの型番を教えてもらえると、linux-4.14-atにdriverが含まれているかや、device treeの資料をお伝えする事ができます。
使用しているRTCは「RX-8025NB」になります。
データシートURL:http://www.ys-labo.com/Shop/Referrence/PIC32MZ/2009/ETM10J_04_R8025SANB…

ご教授の程、宜しくお願い致します。

溝渕です。

> 開発ボード使用していますがNR3225SAは外した状態で使用しているので、問題無いかと思います。

ご回答ありがとうございます。安心しました。

> 使用しているRTCは「RX-8025NB」になります。
> データシートURL:http://www.ys-labo.com/Shop/Referrence/PIC32MZ/2009/ETM10J_04_R8025SANB…

まず、デフォルトコンフィギュレーションではRX-8025NBのdriverが無効になっているので、有効化する必要があります。次のように有効化してください。

Device Drivers
  [*] Real Time Clock  --->
    [*]   Dallas/Maxim DS1307/37/38/39/40/41, ST M41T00, EPSON RX-8025, ISL12057

device treeでは、compatibleに以下を指定してください。

epson,rx8025

ハードウェアクロックとして認識できるようになりました。
対応していただきありがとうございました。
今後とも宜しくお願い致します。