furuta
2022年2月28日 17時30分
いつも大変お世話になっております。
ピンヘッダの設定についてご質問があります。
ただいまArmadillo-640+OP-A600-BTTHMOD-01で無線LAN通信を行うようにしています。
環境は次のようになっています。
①armadillo-640_con9_thread-v4.14-at38.dtbを書き込みました
②CON14とCON9の1~24がOP-A600-BTTHMOD-01でふさがってます
③以前uart2.dtsiをいただいてCON9の25と26ピンのUART2を使用できるようになりました。
https://armadillo.atmark-techno.com/forum/armadillo/10827
今回I2C接続が必要になりました。
OP-A600-BTTHMOD-01でふさがっているCON9の3と5は使われていないから
これを利用してI2C接続を行うことになりました。
そこで以前いただいたuart2.dtsiをサンプルにして理解しようとしています。
一応armadillo-640_product_manual_ja-2.3.0.pdfの85ページあたりかと思っていますが・・・
これを参考にi2c.dtsiなるものを作成するのか??まずどこから手を着けていこうか??と悩んでいます。
ちなみにいただいたuart2.dtsiは以下のようになっています。
&iomuxc {
pinctrl_uart2: uart2grp {
fsl,pins = <
MX6UL_PAD_NAND_DATA05__UART2_DCE_RX 0x1b0b1 // CON9_26
MX6UL_PAD_NAND_DATA04__UART2_DCE_TX 0x00008 // CON9_25
>;
};
};
&uart2 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_uart2>;
status = "okay";
};
OP-A600-BTTHMOD-01+CON9の3と5でI2C通信が可能になる設定の
修正情報をもらえないかと思い質問しました。
お手数をおかけしますがよろしくお願いいたします。
コメント
furuta
入江様、お返事ありがとうございます。
リンク先の情報をもとにi2c3.dtsiを作成しています。
ご質問が2点あります。
i2c3.dtsi
-------------------------------------------------------------------------------------------------------
&iomuxc {
pinctrl_i2c3: i2c3grp { // 他のiomuxcノードと重複しない名前
fsl,pins= <
// MX6UL_PAD_AAAAAAAAAAAAA__BBBBBBBB 0xCCCCCCCC // 説明のため
MX6UL_PAD_UART1_RX_DATA__I2C3_SDA 0x40010808 // SDAピンの設定 マルチプレクス表CON9 3ピン
MX6UL_PAD_UART1_TX_DATA__I2C3_SCL 0x40010808 // SCLピンの設定 マルチプレクス表CON9 5ピン
>;
};
};
&i2c3 {
status = "okay"; // okayで上書きする
clock-frequency = <100000>; // クロック周波数(100kHz)
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_i2c3>; // 先ほど作成したiomuxcノード
// ここにスレーブデバイスのノードを記述
pcf8591@48 { // スレーブのデバイス名@デバイスアドレス・・・①
#address-cells = <1>;
#size-cells = <0>;
compatible = "nxp,pcf8591"; // 文字列が一致するデバイスドライバが使用される・・・②
reg = <0x48>; // スレーブのデバイスアドレス
input_mode = <0>; // デバイス固有のプロパティー(あれば)
};
};
-------------------------------------------------------------------------------------------------------
今上のようにファイルを作成しました。
質問1
①で{デバイス名}@{アドレス}が記述されていますが、
ここのデバイス名はデバイスで決まっている固有のデバイス名ですか?
デバイス名を間違うと正常に動作しないのかなと思って質問しました。
※アドレスはデバイスで決まっている固有のアドレスと思っています。
質問2
②のcompatibleですが、これもデバイスできまっている固有の文字列ですか?
これも文字列の内容を間違うと正常に動作しないかもと思って質問しました。
わかりにくい文章ですみません。
お手数をおかけします。宜しくお願いいたします。
at_akihito.irie
入江です。
> ①で{デバイス名}@{アドレス}が記述されていますが、
> ここのデバイス名はデバイスで決まっている固有のデバイス名ですか?
こちらは、デバイスノード名を指定しているだけであり、他と重複していなけ
ればある程度自由に命名して問題ありません。
以下に情報があります。
https://elinux.org/Device_Tree_Usage#Node_Names
> ②のcompatibleですが、これもデバイスできまっている固有の文字列ですか?
> これも文字列の内容を間違うと正常に動作しないかもと思って質問しました。
こちらについては決められています。
各種デバイスドライバのドキュメントやソースコードに指定すべきcompatible
が記載されています。
つまり、Linuxカーネルソースコード内に使用したいデバイスのドライバがあ
れば、先の手順でDeviceTreeを作成していけば良いのですが、ドライバがない
場合、自分でドライバを作成するか、アプリケーションからデバイスを操作す
る必要があります。
そのため最初にお聞きするべきだったのですが、ご使用になるI2Cデバイスの
詳細を教えていただけますでしょうか。
furuta
入江様
お返事ありがとうございます。
> ~使用になるI2Cデバイスの詳細~
回路側から言われたのはLTC2301/LTC2305でした。
前回教えていただいたページでcompatibleはメーカー名とデバイス名を設定している
と思ったのですが、自分で勝手にそれっぽい文字を設定するのもおかしいなと思ってご質問しました。
自分でドライバを作成ですか・・。
LTC2301/LTC2305の資料を添付いたします。
デバイスのドライバの有無の調べ方などポイントを教えていただけないでしょうか。
ドライバがあればいいのですが。
お手数をおかけしますがよろしくお願いいたします。
ファイル | ファイルの説明 |
---|---|
ltc2301-ltc2305.pdf | 連携されたファイルです。 |
at_akihito.irie
入江です。
> 回路側から言われたのはLTC2301/LTC2305でした。
色々と探してみましたがLinux向けのドライバは見つかりませんでした。
> デバイスのドライバの有無の調べ方などポイントを教えていただけないでしょうか。
LinuxカーネルソースコードのdriversディレクトリやDocumentationディレクト
リ内をデバイス名でgrepしてみたり、Google検索などで調べることが出来ます。
LTC2301/LTC2305を使用するのであれば、ドライバを使用せずにアプリケーショ
ン内でI2C制御処理を行い、デバイスを直接操作することをお勧めします。
その場合、dtsにI2Cスレーブデバイスノードを記述しないことで、デバイスド
ライバをロードせずに、Armadilloの特定のピンにI2Cの機能をもたせることが
出来ます。
この状態で当該ピンにI2Cデバイスを接続することでI2C通信が出来るようにな
ります。
デバイスとのI2C通信の仕様については、データシートをご確認ください。
以上、よろしくお願いいたします。
furuta
入江様
お返事とお礼が遅くなりました。
&iomuxc {
pinctrl_i2c3: i2c3grp { // 他のiomuxcノードと重複しない名前
fsl,pins= <
// MX6UL_PAD_AAAAAAAAAAAAA__BBBBBBBB 0xCCCCCCCC // 説明のため
MX6UL_PAD_UART1_RX_DATA__I2C3_SDA 0x40010808 // SDAピンの設定 マルチプレクス表CON9 3ピン
MX6UL_PAD_UART1_TX_DATA__I2C3_SCL 0x40010808 // SCLピンの設定 マルチプレクス表CON9 5ピン
>;
};
};
&i2c3 {
status = "okay"; // okayで上書きする
clock-frequency = <100000>; // クロック周波数(100kHz)
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_i2c3>; // 先ほど作成したiomuxcノード
// ここにスレーブデバイスのノードを記述
};
でノードは未記載でCON9 3ピンと5ピンのI2Cの設定をおこないました。
i2c-toolsで情報を取得することができました。
有難うございました。
at_ohsawa
furuta
at_mizo
furuta
at_akihito.irie
2022年3月1日 12時57分
入江です。
以下が参考になると思います。
https://manual.atmark-techno.com/armadillo-guide-std/armadillo-guide-st…
上記を参考にi2cを有効にするdtsiファイルを作成し、uart2.dtsi同様
linux-4.14-at/arch/arm/boot/dts/armadillo-640_con9_thread.dtsにて
includeしてご使用ください。
手順を進めていく中で躓いた箇所等ございましたら、またこのフォーラムにて
ご質問ください。
以上、よろしくお願いいたします。