salt_009
2023年7月21日 10時35分
現在、I2C2に二つの機器(外部RTCと音声制御用のIC)がぶら下がった状態で、
制御を試みています。
ioctlで読み込みを行おうとすると
"No such device or address"というログが表示されます。
ぶら下がっている機器が認識されていないように思います。
接続された機器のアドレスをdtb等に設定する必要があるのでしょうか。
コメント
salt_009
ご返信ありがとうございます。
実行した結果下記のようになりました。
目的のアドレスが表示されておりませんでした。
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のアドレスが表示されると思います。
>
at_mizo
salt_009
返信が遅くなり申し訳ございません。
> 新たに接続したi2c slaveの配線(SDA/SCLを逆に接続していないか、接続するピンを間違っていないか等)や、電源が入っているか等を確認してみてもらえますか?
担当の方に確認していただいたところ、ハードウェア的に問題ございませんでした。
こちらで調査していたところ
接続したRTCのアドレスは0x32で問題ございませんでした。
(データシート上はread:0x65 write:0x64 であり、その値が表示されると思っておりました。)
また音量調整用のICが表示されていなかったのは、
ICがシャットダウン状態であったためでした。
シャットダウン状態を解除すれば、該当のアドレスが表示されました。
結果、どちらも制御することができました。
いずれも、こちらの確認不足でした。申し訳ございません。
不躾で申し訳ございませんが、もう一点質問させていただきます。
接続したRTCをハードウェアクロックとして認識させる方法はございますか?
at_mizo
溝渕です。
> 接続した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の資料をお伝えする事ができます。
salt_009
> もし、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…
ご教授の程、宜しくお願い致します。
at_mizo
溝渕です。
> 開発ボード使用していますが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
salt_009
at_mizo
2023年7月21日 10時46分
溝渕です。
> 接続された機器のアドレスをdtb等に設定する必要があるのでしょうか。
userland driver(/dev/i2c*経由でアクセスする)場合は、dtbにi2c slaveの情報を指定する必要はありません。slaveにドライバをattachする場合はdtbに指定する必要があります。
また、i2c master(i.MX6ULLのI2C2)のnodeはdtbに入っている必要があります。
のようにコマンドを実行してみてもらえますか?
i2c masterが存在し、i2c slaveが正しく接続されている場合は、slaveのアドレスが表示されると思います。