Armadilloフォーラム

Armadillo-900のデバイスツリー設定

naito

2025年6月4日 14時55分

==========
製品型番:Armadillo-900
Debian/ABOSバージョン:ABOS 3.21.3-at.9
カーネルバージョン:5.10.236-at2
その他:ATDE9使用
==========

お世話になっております。
内藤と申します。

現在、Armadillo-900で拡張インターフェースを使用するためにデバイスツリーの変更を行っています。

Armadilloの他機種ではデバイスツリーのカスタマイズの際にat-dtwebが利用できるようになっていましたが
ATDE9のat-dtwebではArmadillo-900には対応していないかと思います。

拡張インターフェースを使用する場合、独自にdtsファイルを手書きするしかないのでしょうか。
また今後、at-dtwebでArmadillo-900に対応する予定などございますでしょうか。

勝手を言って申し訳ございません。
以上、よろしくお願いいたします。

コメント

at_kojiro.yamada

2025年6月4日 17時44分

ありがとうございます。

申し訳ないのですが
今のところは at-dtweb を Armadillo-900 に対応させる予定はなく、
手書きでデバイスツリーを作成していただく必要があります。

ざっくりとですが、以下のような考えで at-dtweb 非対応となっています。
・m33-firmware-at と協調させるのが難しい
 (m33-firmware-at について: https://manual.atmark-techno.com/armadillo-900-development-kit/armadill…)
・拡張ボード側の設計をお客様におまかせする都合上、完全に自由にできるよう at-dtweb に対応させると at-dtweb 自体が扱いにくくなる
・自由度が低くて良いなら、個別に作られた dtbo (armadillo_iotg_a9e-sim7672.dtbo など) の手軽さに勝てない

できる限りサポートしますので、わからないところが出てきたらフォーラムで問い合わせていただければ、と思います。

お世話になっております。
内藤です。

ご回答いただきありがとうございます。
Armadillo-900でat-dtweb非対応の理由、納得いたしました。

早速ではありますが、デバイスツリー設定ついて質問させてください。

マルチプレクス機能を使用する際、
armadillo_900-customize.dts に iomuxc の pinctrl を設定すると思うのですが、
「fsl,pins」の値が分かりませんでした。
フォーラム「Armadillo-640へのSPIおよびCANの追加方法」を確認しましたが、
リファレンスマニュアルから各ビットの意味を把握して値を導くしかないのでしょうか。

また、LPSPI1(2803E000)を使うためのDTS設定についても教えていただければ幸いです。

以上、よろしくお願いいたします。

at_kojiro.yamada

2025年6月6日 17時41分

> マルチプレクス機能を使用する際、
> armadillo_900-customize.dts に iomuxc の pinctrl を設定すると思うのですが、
> 「fsl,pins」の値が分かりませんでした。

fsl,pins の書き方は以下のようになっています。

fsl,pins = <
	MX8ULP_PAD_XXXXX__YYYYY ZZZZZ
>;
 
XXXXX: ピンの名前
YYYYY: 機能の名前 (例外: GPIO の場合は YYYYY にピンの名前を書きます)
ZZZZZ: pull up/downなどの設定

MX8ULP_PAD_XXXXX__YYYYY は linux-5.10-at/arch/arm64/boot/dts/freescale/imx8ulp-pinfunc.h で define されています。
include を辿っていけば imx8ulp-pinfunc.h が見つかるはずです。

ZZZZZ の16進数については Pad Control Register (i.MX8ULP Reference Manual の 25 IOMUX Controllerに記載) の各ビットに対応しています。
大分説明が省かれていますが、 linux-5.10-at/arch/arm64/boot/dts/freescale/armadillo_900.dts のコメント(以下に抜粋)も参考になると思います。

&iomuxc1 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_customize>;
 
        /* pinctrl memo
         * 0x7c00000 deglitch window
         * 0x200000 digital filter clock select (0=PCTL*, 1=RTC 1kHz)
         * 0x100000 digital filter
         * 0x20000 output buffer enable
         * 0x10000 input buffer enable
         * 0x40 high drive strength
         * 0x20 open drain
         * 0x4 slew rate
         * 0x2 pull-up enable
         * 0x1 pull-up selection (0=pull down)
         */

----------

デバイスツリーの書き方は、基本的には Documentation/devicetree/bindings の下にあるテキストファイルに書かれています。
今回の場合は、 linux-5.10-at/Documentation/devicetree/bindings/pinctrl/fsl,imx8ulp-pinctrl.yaml になります。(i.MX8ULP Reference Manualを参照するよう書かれています)
1次ソースを確認したい場合はそちらを参照していただければ、と思います。

----------

もう1点、 imx8ulp の m33 側のピンは iomuxc1 ではなく、
rpmsg_gpioa, rpmsg_gpiob, rpmsg_gpioc に設定します。

これらはアットマークテクノが追加実装したもので、 iomuxc1 とは書き方が異なります。
Documentation/devicetree/bindings に使い方を追加していないため、わからないことがあったらフォーラムで聞いていただければ、と思います。

&rpmsg_gpioa {
        AAAAA {
                imx-rpmsg,pins = <
                        IOMUXC_XXXXX_YYYYY	ZZZZZ
 
                >;
        };
};
 
AAAAA: 名前(何でも良いです)
XXXXX: ピンの名前
YYYYY: 機能の名前 (例外: GPIO の場合は YYYYY にピンの名前を書きます)
ZZZZZ: pull up/downなどの設定

マクロの定義は linux-5.10-at/arch/arm64/boot/dts/freescale/imx8ulp-pinfunc-m33.h にあります。

linux-5.10-at/arch/arm64/boot/dts/freescale/armadillo_900*.dts や
linux-5.10-at/arch/arm64/boot/dts/freescale/armadillo_iotg_a9e*.dts が参考になると思います。
(注: GPIO として使う場合は自動的にピンの設定が行われるため、 GPIO として使っているピンの設定は省略されていることがあります。)

> また、LPSPI1(2803E000)を使うためのDTS設定についても教えていただければ幸いです。

申し訳ありません。
LPSPI0, LPSPI1 は、m33-firmware-at の対応がまだのため、現在は使えません。
ちょうど、今月末 (2025/6月末) に LPSPI0,1,2,3 の対応をリリースできる見込みですので、もう少々お待ちください。

ただ、現状でもSPI通信がまったくできないわけではなく、GPIO で再現した SPI は使用できます。
linux-5.10-at/arch/arm64/boot/dts/freescale/armadillo_iotg_a9e-lbes5pl2el.dts で既に使われているので、そちらが参考になります。

以上、よろしくお願いします。

丁寧なご説明ありがとうございます。
いただいた情報を参考にデバイスツリーを作成してみます。

> > また、LPSPI1(2803E000)を使うためのDTS設定についても教えていただければ幸いです。
>
> 申し訳ありません。
> LPSPI0, LPSPI1 は、m33-firmware-at の対応がまだのため、現在は使えません。
> ちょうど、今月末 (2025/6月末) に LPSPI0,1,2,3 の対応をリリースできる見込みですので、もう少々お待ちください。
>
> ただ、現状でもSPI通信がまったくできないわけではなく、GPIO で再現した SPI は使用できます。
> linux-5.10-at/arch/arm64/boot/dts/freescale/armadillo_iotg_a9e-lbes5pl2el.dts で既に使われているので、そちらが参考になります。
情報が後出しになり申し訳ないのですが、Armadillo-900の開発キットを使用しています。
開発キットの拡張I/FでSPIを使用する場合、Arm Cortex-m33 の制御が必要ということで認識合いますでしょうか?
できれば A53 側の変更のみでSPIを使用したいのですが、開発キットでそういったことは不可能でしょうか?

再度勝手を申しまして申し訳ございません。

以上、よろしくお願いいたします。

at_kojiro.yamada

2025年6月10日 10時37分

> 情報が後出しになり申し訳ないのですが、Armadillo-900の開発キットを使用しています。
> 開発キットの拡張I/FでSPIを使用する場合、Arm Cortex-m33 の制御が必要ということで認識合いますでしょうか?

A35 側(Linux側) の変更だけで SPI 通信を行えます。

Arm Cortex-m33 の制御が必要、という認識は正しいのですが、
SPI通信に関してはアットマークテクノが実装しましたので
新たに制御を実装する必要は基本的にはありません。

> できれば A53 側の変更のみでSPIを使用したいのですが、開発キットでそういったことは不可能でしょうか?

可能です。

SPI通信のための Arm Cortex-m33 側の実装については、前回回答した通り
- GPIOで再現したSPI通信は既に実装済み
- LPSPI0,1,2,3 については 今月末 (2025年6月末)に実装される見込み
です。

m33 と a35 の間のコア間通信を行って SPI通信 をするためのデバイスドライバーも実装済みなので、
後は dts の作成(+ 必要であればカーネルコンフィギュレーションの変更)をしていただければ
spidev や各SPI機器のデバイスドライバーを利用できます。

以上、よろしくお願いいたします

at_dominique.m…

2025年6月26日 13時28分

内藤さん、

お世話になっています、マルティネです。

> SPI通信のための Arm Cortex-m33 側の実装については、前回回答した通り
> - GPIOで再現したSPI通信は既に実装済み
> - LPSPI0,1,2,3 については 今月末 (2025年6月末)に実装される見込み

昨日の ABOS 3.19-at.14 で対応しました。

SPIの設定を紹介する記事も書きましたので、よろしければ参考にしてください:
https://armadillo.atmark-techno.com/howto/a900-spi-adc-mcp3204

(マルチプレクス表に LPSPI3 の情報が記載されてないので必要でしたら imx-boot ソースの mcux-sdk/core/devices/MIMX8UD5/drivers/fsl_iomuxc.h をご確認いただければと思います。7月にアップデート予定です)

また、ニュースに書いてますが spi ドライバーの更新で適合性を特別に壊しましたので、Linux 5.10.238-r0 と m33-firmware-at を同時に更新してください。
(片方だけを更新すると今までの gpio モードでも動作しなくなります)

分かりづらいところあれば遠慮なく聞いてください。

よろしくお願いします。