Armadilloフォーラム

Armadillo-X1のCON7の使用

seltec032

2023年2月7日 16時03分

お世話になります、大隅と申します。

Armadillo-X1のCON7を使用して、GPIOのOUTPUTとして17本を制御する仕様で
製作を進めております。
17本中の15本は、出力制御可能(high/low)ですが、2本のみが
highのまま変化がありません。
下記のGPIO4_12とGPIO4_13ピンです。
この2本のピンは、電源ON後に特別な設定が必要なのでしょうか?
CON7-PIN ピン名 GPIO-OUTPUT
1 20   GPIO4_IO12 ×
2 21   GPIO4_IO13 ×
3 24   GPIO4_IO0 〇
4 25   GPIO4_IO1 〇
5 32   GPIO6_IO18 〇
6 33   GPIO4_IO2 〇
7 34   GPIO4_IO3 〇
8 35   GPIO4_IO6 〇
9 36   GPIO4_IO4 〇
10 37   GPIO4_IO5 〇
11 42   GPIO6_IO16 〇
12 43   GPIO6_IO17 〇
13 46   GPIO6_IO19 〇
14 47   GPIO6_IO20 〇
15 48   GPIO6_IO21 〇
16 49   GPIO6_IO22 〇
17 50   GPIO4_IO7 〇

コメント

at_mizo

2023年2月7日 16時13分

溝渕です。

> 17本中の15本は、出力制御可能(high/low)ですが、2本のみが
> highのまま変化がありません。
> 下記のGPIO4_12とGPIO4_13ピンです。
> この2本のピンは、電源ON後に特別な設定が必要なのでしょうか?

いえ。ソフト的にアドオンボード検出の為利用されています。

CON7(アドオンインターフェース)は、標準ソフトウェアでは、アドオンボードを利用する為の実装がなされています。

CON7_20/21は、I2C3_SCL/SDAとして利用されています。

以下を削除すると利用できるようになるかと思います。
# その他、不要となる"pinctrl_i2c3"も削除して構いません。

arch/arm/boot/dts/armadillo_x1_addon.dtsi:
&i2c3 {
	clock-frequency = <100000>;
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_i2c3>;
	status = "okay";
};

もし上記で利用できなければ、GPIOとしてマルチプレクスしてみてください。

seltec032

2023年2月7日 16時48分

大隅です、ご回答ありがとうございます。

> CON7_20/21は、I2C3_SCL/SDAとして利用されています。
CON7_20/21のみ、GPIOとしてではなく、I2C3として機能する
という理解でよろしいでしょうか?
他のGPIOのピンの設定は必要ないでしょうか?

> もし上記で利用できなければ、GPIOとしてマルチプレクスしてみてください。
これもデバイスツリーを変更するという意味ですか?
恐縮ですが、どのように変更すればよろしいでしょうか?

別の質問ですが、同じくCON7の38/39/40/41ピンをGPIOではなく、ECSPI2として機能させたい時にも、
デバイスツリーに追加修正が必要でしょうか?
変更が必要であれば、変更内容を具体的にご教授いただければ有難いです。

デバイスツリーのスペックを理解するのが難しく、変更内容及びビルド手順を
詳しく教えていただければ幸いです。

お手数をお掛けして恐縮ですが、宜しくお願い致します。

at_mizo

2023年2月7日 17時07分

溝渕です。

> > CON7_20/21は、I2C3_SCL/SDAとして利用されています。
> CON7_20/21のみ、GPIOとしてではなく、I2C3として機能する
> という理解でよろしいでしょうか?

上記の通りのご理解で概ね問題無いかと思います。

> 他のGPIOのピンの設定は必要ないでしょうか?

汎用性や移植性を考慮するのであれば、全ピン設定しておいた方が無難です。現実的には、i.MX 7Dualのリセット解除後はGPIOにマルチプレクスされる為、Pull-UP/downなどのパッド設定が不必要の場合は必ずしも設定しなくて構いません。

> > もし上記で利用できなければ、GPIOとしてマルチプレクスしてみてください。
> これもデバイスツリーを変更するという意味ですか?

上記の通りです。

> 恐縮ですが、どのように変更すればよろしいでしょうか?

まず、以下のブログを参照してください。

[Armadillo-X1, Armadillo-IoT G3/G3L: Device Treeの概要]
https://armadillo.atmark-techno.com/blog/53/2584

[Armadillo-X1, Armadillo-IoT G3: ピンのマルチプレクスの設定例]
https://armadillo.atmark-techno.com/blog/53/2629

CON7はアドオンI/Fなので、"Add-On Module Auto Detect"ドライバを外します。以下のドキュメントを参照してください。
https://manual.atmark-techno.com/armadillo-x1/armadillo-x1_product_manu…

あとは、
[Armadillo-X1, Armadillo-IoT G3: ピンのマルチプレクスの設定例]
に記載の通り、"arch/arm/boot/dts/armadillo_x1.dts"の"pinctrl_hog"を編集します。

> 別の質問ですが、同じくCON7の38/39/40/41ピンをGPIOではなく、ECSPI2として機能させたい時にも、
> デバイスツリーに追加修正が必要でしょうか?

上記ご認識の通りです。

> 変更が必要であれば、変更内容を具体的にご教授いただければ有難いです。

近い例だと、以下が参考になると思います。
"arch/arm/boot/dts/armadillo_x1-ecspi4_mcp3202.dts"

> デバイスツリーのスペックを理解するのが難しく、変更内容及びビルド手順を
> 詳しく教えていただければ幸いです。

ビルド手順については、以下が参考になるかと思います。

https://manual.atmark-techno.com/armadillo-x1/armadillo-x1_product_manu…

seltec032

2023年2月8日 12時54分

> 溝渕です。
>
> > > CON7_20/21は、I2C3_SCL/SDAとして利用されています。
> > CON7_20/21のみ、GPIOとしてではなく、I2C3として機能する
> > という理解でよろしいでしょうか?

>
> 上記の通りのご理解で概ね問題無いかと思います。
>
> > 他のGPIOのピンの設定は必要ないでしょうか?
>
> 汎用性や移植性を考慮するのであれば、全ピン設定しておいた方が無難です。現実的には、i.MX 7Dualのリセット解除後はGPIOにマルチプレクスされる為、Pull-UP/downなどのパッド設定が不必要の場合は必ずしも設定しなくて構いません。
>
> > > もし上記で利用できなければ、GPIOとしてマルチプレクスしてみてください。
> > これもデバイスツリーを変更するという意味ですか?
>
> 上記の通りです。
>
> > 恐縮ですが、どのように変更すればよろしいでしょうか?
>
> まず、以下のブログを参照してください。
>
> [Armadillo-X1, Armadillo-IoT G3/G3L: Device Treeの概要]
> https://armadillo.atmark-techno.com/blog/53/2584
>
> [Armadillo-X1, Armadillo-IoT G3: ピンのマルチプレクスの設定例]
> https://armadillo.atmark-techno.com/blog/53/2629
>
> CON7はアドオンI/Fなので、"Add-On Module Auto Detect"ドライバを外します。以下のドキュメントを参照してください。
> https://manual.atmark-techno.com/armadillo-x1/armadillo-x1_product_manu…
>
> あとは、
> [Armadillo-X1, Armadillo-IoT G3: ピンのマルチプレクスの設定例]
> に記載の通り、"arch/arm/boot/dts/armadillo_x1.dts"の"pinctrl_hog"を編集します。
>
> > 別の質問ですが、同じくCON7の38/39/40/41ピンをGPIOではなく、ECSPI2として機能させたい時にも、
> > デバイスツリーに追加修正が必要でしょうか?
>
> 上記ご認識の通りです。
>
>
> > 変更が必要であれば、変更内容を具体的にご教授いただければ有難いです。
>
> 近い例だと、以下が参考になると思います。
> "arch/arm/boot/dts/armadillo_x1-ecspi4_mcp3202.dts"
>
>
> > デバイスツリーのスペックを理解するのが難しく、変更内容及びビルド手順を
> > 詳しく教えていただければ幸いです。
>
> ビルド手順については、以下が参考になるかと思います。
>
> https://manual.atmark-techno.com/armadillo-x1/armadillo-x1_product_manu…
>
1.GPIOとしてマルチプレクスするとは?
汎用性や移植性を考慮するのであれば、全ピン設定しておいた方が無難です。現実的には、i.MX 7Dualのリセット解除後はGPIOにマルチプレクスされる為、Pull-UP/downなどのパッド設定が不必要の場合は必ずしも設定しなくて構いません。

> > もし上記で利用できなければ、GPIOとしてマルチプレクスしてみてください。

"armadillo_x1_addon.dtsi"ファイル
<&gpio4 18 0>, /* CON7_18: ECSPI1_MISO */
<0>, /* CON7_19: N.C. */
<0>, /* CON7_20: I2C3_SCL */
CON7_20をGPIO4_12(output)として使用するには、3行目を1行目に倣って
以下のように変更すれば良いでしょうか?
<&gpio4 12 0>, /* CON7_20: I2C3_SCL */

"&gpio4 18 0"の最後の'0'は何を意味しているのでしょうか?
入出力方向を指定している? 0:入力、1:出力

> CON7はアドオンI/Fなので、"Add-On Module Auto Detect"ドライバを外します。以下のドキュメントを参照してください。

"arch/arm/configs/x1_defconfig"ファイルの以下の箇所を削除するという事でしょうか?
CONFIG_AIOTG_ADDON_AUTO_DETECT=y

2.ECSPI2を使用可にするには?

[Armadillo-X1, Armadillo-IoT G3: ピンのマルチプレクスの設定例]
https://armadillo.atmark-techno.com/blog/53/2629
上記を参考に"armadillo_x1_addon.dtsi"に以下を追加すればECSPI2が
使用可能となるという事でしょうか?

&iomuxc {
imx7d-sdb {
pinctrl_i2c3: i2c3grp {
fsl,pins = <
MX7D_PAD_ECSPI2_SCLK__ECSPI2_SCLK 0x00000070
MX7D_PAD_ECSPI2_MOSI__ECSPI2_MOSI 0x00000070
MX7D_PAD_ECSPI2_SS0__ECSPI2_SS0 0x00000070
>;
};
};
};

MX7D_PADで始まる定数の後に指定される「0x4000007f」は、PAD_CTLの設定とsionの設定になります
PAD_CTLは、「i.MX 7Dual Applications Processor Reference Manual」の「SW_PAD_CTL Register」に関する記載を参照してください
31bit目(0~31bitで計算)のビットの機能は、「0:パッド設定を行う, 1:パッド設定を行わない」となります
30bit目(0~31bitで計算)のビットの機能はSION(Software Input On)の有効/無効の指定になります。SIONの詳細は「i.MX 7Dual Applications Processor Reference Manual」を参照してください

上位31/30bit目は、上の説明で理解出来ますが、下位の7fは何を意味しているのでしょうか?
iMX7Dのマニュアルの「SW_PAD_CTL Register」を見てみましたが7fとは関連しないようです。

お手数をお掛けして恐縮ですが、ご指導宜しくお願い致します。

at_mizo

2023年2月8日 13時17分

溝渕です。

> 1.GPIOとしてマルチプレクスするとは?

https://armadillo.atmark-techno.com/files/downloads/armadillo-x1/docume…
> CON7 は機能拡張用のインターフェースです。複数の機能(マルチプレクス)をもった i.MX 7Dual の信
> 号が接続されており、USB、SD、UART、SPI、I2C、CAN、AUDIO、GPIO の機能を拡張することが
> できます。

上記の通り、i.MX 7Dualの信号にGPIOの機能を割り当てる事を指しています。

> "armadillo_x1_addon.dtsi"ファイル
> <&gpio4 18 0>, /* CON7_18: ECSPI1_MISO */
> <0>, /* CON7_19: N.C. */
> <0>, /* CON7_20: I2C3_SCL */
> CON7_20をGPIO4_12(output)として使用するには、3行目を1行目に倣って
> 以下のように変更すれば良いでしょうか?
> <&gpio4 12 0>, /* CON7_20: I2C3_SCL */

編集するファイルが違います。先に書いた通り、次の通りです。

> に記載の通り、"arch/arm/boot/dts/armadillo_x1.dts"の"pinctrl_hog"を編集します。

> "&gpio4 18 0"の最後の'0'は何を意味しているのでしょうか?
> 入出力方向を指定している? 0:入力、1:出力

違います。
0:active-high、1:active-low
です。

> > CON7はアドオンI/Fなので、"Add-On Module Auto Detect"ドライバを外します。以下のドキュメントを参照してください。
>
> "arch/arm/configs/x1_defconfig"ファイルの以下の箇所を削除するという事でしょうか?
> CONFIG_AIOTG_ADDON_AUTO_DETECT=y

手動で"arch/arm/configs/x1_defconfig"を編集する事はおすすめしません。カーネルコンフィギュレーションのシンボル(CONFIG_AIOTG_ADDON_AUTO_DETECT)は合っています。

以下のドキュメントを参考にしてみてください。
https://manual.atmark-techno.com/armadillo-x1/armadillo-x1_product_manu…

> 2.ECSPI2を使用可にするには?
>
> [Armadillo-X1, Armadillo-IoT G3: ピンのマルチプレクスの設定例]
> https://armadillo.atmark-techno.com/blog/53/2629
> 上記を参考に"armadillo_x1_addon.dtsi"に以下を追加すればECSPI2が
> 使用可能となるという事でしょうか?

"arch/arm/boot/dts/armadillo_x1.dts"ですね。

> &iomuxc {
> imx7d-sdb {
> pinctrl_i2c3: i2c3grp {
> fsl,pins = <
> MX7D_PAD_ECSPI2_SCLK__ECSPI2_SCLK 0x00000070
> MX7D_PAD_ECSPI2_MOSI__ECSPI2_MOSI 0x00000070
> MX7D_PAD_ECSPI2_SS0__ECSPI2_SS0 0x00000070
> >;
> };
> };
> };

上記だとピンマルチプレクスとPAD設定しか行なわれません。あと、ここはI2C3のグループですね。

先に書いた以下のファイルは参照しましたか?
"arch/arm/boot/dts/armadillo_x1-ecspi4_mcp3202.dts"

"ecspi2"ノードを追加する必要があります。

> MX7D_PADで始まる定数の後に指定される「0x4000007f」は、PAD_CTLの設定とsionの設定になります
> PAD_CTLは、「i.MX 7Dual Applications Processor Reference Manual」の「SW_PAD_CTL Register」に関する記載を参照してください
> 31bit目(0~31bitで計算)のビットの機能は、「0:パッド設定を行う, 1:パッド設定を行わない」となります
> 30bit目(0~31bitで計算)のビットの機能はSION(Software Input On)の有効/無効の指定になります。SIONの詳細は「i.MX 7Dual Applications Processor Reference Manual」を参照してください
>
> 上位31/30bit目は、上の説明で理解出来ますが、下位の7fは何を意味しているのでしょうか?
> iMX7Dのマニュアルの「SW_PAD_CTL Register」を見てみましたが7fとは関連しないようです。

例えば、"arch/arm/boot/dts/armadillo_x1.dts"に記載の以下を例とします。
MX7D_PAD_GPIO1_IO11__I2C4_SDA 0x4000007f

まず左のマクロは、i.MX 7 Dualの"GPIO1_IO11"ピンに、"I2C4_SDA"の機能を割り当てることを意味しています。

右の数字のbit31はSIONを示しています。

0x7fは、そのままPAD Control Registerに格納されます。

「i.MX 7Dual Applications Processor Reference Manual」の以下の章を参照してください
8.2.7.154 SW_PAD_CTL_PAD_GPIO1_IO11 SW PAD Control Register
(IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO11)

seltec032

2023年2月9日 9時53分

> お世話になります、大隅と申します。
>
> Armadillo-X1のCON7を使用して、GPIOのOUTPUTとして17本を制御する仕様で
> 製作を進めております。
> 17本中の15本は、出力制御可能(high/low)ですが、2本のみが
> highのまま変化がありません。
> 下記のGPIO4_12とGPIO4_13ピンです。
> この2本のピンは、電源ON後に特別な設定が必要なのでしょうか?
> CON7-PIN ピン名 GPIO-OUTPUT
> 1 20   GPIO4_IO12 ×
> 2 21   GPIO4_IO13 ×
> 3 24   GPIO4_IO0 〇
> 4 25   GPIO4_IO1 〇
> 5 32   GPIO6_IO18 〇
> 6 33   GPIO4_IO2 〇
> 7 34   GPIO4_IO3 〇
> 8 35   GPIO4_IO6 〇
> 9 36   GPIO4_IO4 〇
> 10 37   GPIO4_IO5 〇
> 11 42   GPIO6_IO16 〇
> 12 43   GPIO6_IO17 〇
> 13 46   GPIO6_IO19 〇
> 14 47   GPIO6_IO20 〇
> 15 48   GPIO6_IO21 〇
> 16 49   GPIO6_IO22 〇
> 17 50   GPIO4_IO7 〇
>
>
溝渕様
何度も問い合わせて失礼します、大隅です。

> 編集するファイルが違います。先に書いた通り、次の通りです。

>
> に記載の通り、"arch/arm/boot/dts/armadillo_x1.dts"の"pinctrl_hog"を編集します。

失礼しました、"arch/arm/boot/dts/armadillo_x1.dts"の"pinctrl_hog"を編集するのですね。
下の方に記述しているように、使用するGPIOを登録すれば良いでしょうか?
"arch/arm/boot/dts/armadillo_x1.dts"

&iomuxc {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_hog>;

armadillo-iotg-g3 {
pinctrl_hog: hoggrp {
fsl,pins = <
/* USB3503 */
MX7D_PAD_EPDC_DATA13__GPIO2_IO13 0x00 /* GPIO_USB_HUB_RESET_N */
MX7D_PAD_EPDC_DATA14__GPIO2_IO14 0x04 /* GPIO_USB_HUB_INT_N */
MX7D_PAD_EPDC_DATA15__GPIO2_IO15 0x00 /* GPIO_USB_HUB_CON */

/* MCU */
MX7D_PAD_GPIO1_IO13__GPIO1_IO13 0x40000000 /* MCU_INTB */

/* GPIO */
MX7D_PAD_ECSPI1_SCLK__GPIO4_IO16 0x04 /* GPIO4_IO16 */
MX7D_PAD_I2C3_SCL__GPIO4_IO12 0x04 /* GPIO4_IO16 */
>;
};

===============================================================================
> "&gpio4 18
0"の最後の'0'は何を意味しているのでしょうか?
> 入出力方向を指定している? 0:入力、1:出力

> 違います。
> 0:active-high、1:active-low
> です。

了解しました。

"arch/arm/boot/dts/armadillo_x1_addon.dtsi"intf1-gpio = <0>以下に
記述されている箇所の変更は必要がないのでしょうか?

/ {
addon {
compatible = "armadillo_x1_addon";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_addon>;

addon-i2c-bus = <&i2c3>;
power-gpio = <&gpio2 4 GPIO_ACTIVE_HIGH>;
power-ramp-delay = <3>; /* milliseconds */

intf1-gpios = <0>, /* CON7_1: D.G. */
<0>, /* CON7_2: D.G. */
<0>, /* CON7_3: VCC_3.3V */
<0>, /* CON7_4: VCC_3.3V */
<0>, /* CON7_5: BOOT_MODE0 */
<0>, /* CON7_6: NVCC_SD1 */
<&gpio5 0 0>, /* CON7_7: SD1_CD_B */
<&gpio5 1 0>, /* CON7_8: SD1_WP */
<&gpio5 2 0>, /* CON7_9: SD1_RESET_B */
<&gpio5 3 0>, /* CON7_10: SD1_CLK */
<&gpio5 4 0>, /* CON7_11: SD1_CMD */

===============================================================================
> 手動で"arch/arm/configs/x1_defconfig"を編集する事はおすすめしません。カーネルコンフィギュレーションのシンボル(CONFIG_AIOTG_ADDON_AUTO_DETECT)は合っています。

> 以下のドキュメントを参考にしてみてください。
> https://manual.atmark-techno.com/armadillo-x1/armadillo-x1_product_manu…

上記の説明箇所により、変更方法理解出来ました。ありがとうございます。

===============================================================================
> 上記だとピンマルチプレクスとPAD設定しか行なわれません。あと、ここはI2C3のグループですね。

> 先に書いた以下のファイルは参照しましたか?

> "ecspi2"ノードを追加する必要があります。

下記の記述で良いでしょうか?
/ {
addon {
compatible = "armadillo_x1_addon";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_addon>;

addon-i2c-bus = <&ecspi2>;
power-gpio = <&gpio2 4 GPIO_ACTIVE_HIGH>;
power-ramp-delay = <3>; /* milliseconds */

中略

};
};

&ecspi2 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_ecspi2>;
status = "okay";
};

&iomuxc {
imx7d-sdb {
pinctrl_ecspi2: ecspi2grp {
fsl,pins = <
MX7D_PAD_ECSPI2_SCLK__ECSPI2_SCLK 0x00000070
MX7D_PAD_ECSPI2_MOSI__ECSPI2_MOSI 0x00000070
MX7D_PAD_ECSPI2_SS0__ECSPI2_SS0 0x00000070
>;
};

pinctrl_addon: addongrp {
fsl,pins = <
MX7D_PAD_EPDC_DATA04__GPIO2_IO4 0x00 /* GPIO_AOM_PWREN */
>;
};
};
};

===============================================================================
> 「i.MX 7Dual Applications Processor Reference Manual」の以下の章を参照してください
> 8.2.7.154 SW_PAD_CTL_PAD_GPIO1_IO11 SW PAD Control Register
> (IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO11)

参照する箇所を間違っていました。
I2C3_CSLの場合、
"8.2.7.238 SW_PAD_CTL_PAD_I2C3_SCL SW PAD Control Register"を参照しなければいけない所、
間違って "8.2.7.82 SW_MUX_CTL_PAD_I2C3_SCL SW MUX Control Register"を見ていました。
大変失礼しました。

at_mizo

2023年2月9日 10時13分

溝渕です。

> 下の方に記述しているように、使用するGPIOを登録すれば良いでしょうか?
> "arch/arm/boot/dts/armadillo_x1.dts"
>
> &iomuxc {
> pinctrl-names = "default";
> pinctrl-0 = <&pinctrl_hog>;
>
> armadillo-iotg-g3 {
> pinctrl_hog: hoggrp {
> fsl,pins = <
> /* USB3503 */
> MX7D_PAD_EPDC_DATA13__GPIO2_IO13 0x00 /* GPIO_USB_HUB_RESET_N */
> MX7D_PAD_EPDC_DATA14__GPIO2_IO14 0x04 /* GPIO_USB_HUB_INT_N */
> MX7D_PAD_EPDC_DATA15__GPIO2_IO15 0x00 /* GPIO_USB_HUB_CON */
>
> /* MCU */
> MX7D_PAD_GPIO1_IO13__GPIO1_IO13 0x40000000 /* MCU_INTB */
>
> /* GPIO */
> MX7D_PAD_ECSPI1_SCLK__GPIO4_IO16 0x04 /* GPIO4_IO16 */
> MX7D_PAD_I2C3_SCL__GPIO4_IO12 0x04 /* GPIO4_IO16 */
> >;
> };

そうです。これで、Linuxの起動時にGPIOにマルチプレクスされるようになります。

> "arch/arm/boot/dts/armadillo_x1_addon.dtsi"intf1-gpio = <0>以下に
> 記述されている箇所の変更は必要がないのでしょうか?

"Add-On Module Auto Detect"ドライバ(アドオンモジュールの自動検出ドライバ)を利用しない場合、上記ファイルを利用する必要はありません。次のように無効化してください。

--- a/arch/arm/boot/dts/armadillo_x1.dts
+++ b/arch/arm/boot/dts/armadillo_x1.dts
@@ -43,7 +43,7 @@
 /dts-v1/;
 
 #include "imx7d.dtsi"
-#include "armadillo_x1_addon.dtsi"
+//#include "armadillo_x1_addon.dtsi"
 
 / {
        model = "Atmark-Techno Armadillo-X1 Board";

> > "ecspi2"ノードを追加する必要があります。
>
> 下記の記述で良いでしょうか?
> / {
> addon {
> compatible = "armadillo_x1_addon";
> pinctrl-names = "default";
> pinctrl-0 = <&pinctrl_addon>;
>
> addon-i2c-bus = <&ecspi2>;
> power-gpio = <&gpio2 4 GPIO_ACTIVE_HIGH>;
> power-ramp-delay = <3>; /* milliseconds */
>
> 中略
>
> };
> };

"Add-On Module Auto Detect"ドライバを利用しない場合、上記は不要です。

> &ecspi2 {
> pinctrl-names = "default";
> pinctrl-0 = <&pinctrl_ecspi2>;
> status = "okay";
> };
>
> &iomuxc {
> imx7d-sdb {
> pinctrl_ecspi2: ecspi2grp {
> fsl,pins = <
> MX7D_PAD_ECSPI2_SCLK__ECSPI2_SCLK 0x00000070
> MX7D_PAD_ECSPI2_MOSI__ECSPI2_MOSI 0x00000070
> MX7D_PAD_ECSPI2_SS0__ECSPI2_SS0 0x00000070
> >;
> };

MISOを利用しない場合はこれで良いと思います。

> pinctrl_addon: addongrp {
> fsl,pins = <
> MX7D_PAD_EPDC_DATA04__GPIO2_IO4 0x00 /* GPIO_AOM_PWREN */
> >;
> };

"Add-On Module Auto Detect"ドライバを利用しない場合、上記は不要です。

> ===============================================================================
> > 「i.MX 7Dual Applications Processor Reference Manual」の以下の章を参照してください
> > 8.2.7.154 SW_PAD_CTL_PAD_GPIO1_IO11 SW PAD Control Register
> > (IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO11)
>
> 参照する箇所を間違っていました。
> I2C3_CSLの場合、
> "8.2.7.238 SW_PAD_CTL_PAD_I2C3_SCL SW PAD Control Register"を参照しなければいけない所、
> 間違って "8.2.7.82 SW_MUX_CTL_PAD_I2C3_SCL SW MUX Control Register"を見ていました。
> 大変失礼しました。

"SW MUX Control Register"は、主にピンマルチプレクスを指定するためのレジスタです。"SW PAD Control Register"は、主に(pull-up/down等の)パッド設定を行うレジスタです。

seltec032

2023年2月9日 10時49分

> 溝渕です。
>
> > 下の方に記述しているように、使用するGPIOを登録すれば良いでしょうか?
> > "arch/arm/boot/dts/armadillo_x1.dts"
> >
> > &iomuxc {
> > pinctrl-names = "default";
> > pinctrl-0 = <&pinctrl_hog>;
> >
> > armadillo-iotg-g3 {
> > pinctrl_hog: hoggrp {
> > fsl,pins = <
> > /* USB3503 */
> > MX7D_PAD_EPDC_DATA13__GPIO2_IO13 0x00 /* GPIO_USB_HUB_RESET_N */
> > MX7D_PAD_EPDC_DATA14__GPIO2_IO14 0x04 /* GPIO_USB_HUB_INT_N */
> > MX7D_PAD_EPDC_DATA15__GPIO2_IO15 0x00 /* GPIO_USB_HUB_CON */
> >
> > /* MCU */
> > MX7D_PAD_GPIO1_IO13__GPIO1_IO13 0x40000000 /* MCU_INTB */
> >
> > /* GPIO */
> > MX7D_PAD_ECSPI1_SCLK__GPIO4_IO16 0x04 /* GPIO4_IO16 */
> > MX7D_PAD_I2C3_SCL__GPIO4_IO12 0x04 /* GPIO4_IO16 */
> > >;
> > };
>
> そうです。これで、Linuxの起動時にGPIOにマルチプレクスされるようになります。
>
> > "arch/arm/boot/dts/armadillo_x1_addon.dtsi"intf1-gpio = <0>以下に
> > 記述されている箇所の変更は必要がないのでしょうか?
>
> "Add-On Module Auto Detect"ドライバ(アドオンモジュールの自動検出ドライバ)を利用しない場合、上記ファイルを利用する必要はありません。次のように無効化してください。
>
>

> --- a/arch/arm/boot/dts/armadillo_x1.dts
> +++ b/arch/arm/boot/dts/armadillo_x1.dts
> @@ -43,7 +43,7 @@
>  /dts-v1/;
>  
>  #include "imx7d.dtsi"
> -#include "armadillo_x1_addon.dtsi"
> +//#include "armadillo_x1_addon.dtsi"
>  
>  / {
>         model = "Atmark-Techno Armadillo-X1 Board";
> 

>
>
> > > "ecspi2"ノードを追加する必要があります。
> >
> > 下記の記述で良いでしょうか?
> > / {
> > addon {
> > compatible = "armadillo_x1_addon";
> > pinctrl-names = "default";
> > pinctrl-0 = <&pinctrl_addon>;
> >
> > addon-i2c-bus = <&ecspi2>;
> > power-gpio = <&gpio2 4 GPIO_ACTIVE_HIGH>;
> > power-ramp-delay = <3>; /* milliseconds */
> >
> > 中略
> >
> > };
> > };
>
> "Add-On Module Auto Detect"ドライバを利用しない場合、上記は不要です。
>
> > &ecspi2 {
> > pinctrl-names = "default";
> > pinctrl-0 = <&pinctrl_ecspi2>;
> > status = "okay";
> > };
> >
> > &iomuxc {
> > imx7d-sdb {
> > pinctrl_ecspi2: ecspi2grp {
> > fsl,pins = <
> > MX7D_PAD_ECSPI2_SCLK__ECSPI2_SCLK 0x00000070
> > MX7D_PAD_ECSPI2_MOSI__ECSPI2_MOSI 0x00000070
> > MX7D_PAD_ECSPI2_SS0__ECSPI2_SS0 0x00000070
> > >;
> > };
>
> MISOを利用しない場合はこれで良いと思います。
>
> > pinctrl_addon: addongrp {
> > fsl,pins = <
> > MX7D_PAD_EPDC_DATA04__GPIO2_IO4 0x00 /* GPIO_AOM_PWREN */
> > >;
> > };
>
> "Add-On Module Auto Detect"ドライバを利用しない場合、上記は不要です。
>
> > ===============================================================================
> > > 「i.MX 7Dual Applications Processor Reference Manual」の以下の章を参照してください
> > > 8.2.7.154 SW_PAD_CTL_PAD_GPIO1_IO11 SW PAD Control Register
> > > (IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO11)
> >
> > 参照する箇所を間違っていました。
> > I2C3_CSLの場合、
> > "8.2.7.238 SW_PAD_CTL_PAD_I2C3_SCL SW PAD Control Register"を参照しなければいけない所、
> > 間違って "8.2.7.82 SW_MUX_CTL_PAD_I2C3_SCL SW MUX Control Register"を見ていました。
> > 大変失礼しました。
>
> "SW MUX Control Register"は、主にピンマルチプレクスを指定するためのレジスタです。"SW PAD Control Register"は、主に(pull-up/down等の)パッド設定を行うレジスタです。
>
溝渕様

お世話になります、大隅です。

> "Add-On Module Auto Detect"ドライバ(アドオンモジュールの自動検出ドライバ)を利用しない場合、上記ファイルを利用する必要はありません。次のように無効化してください。

/dts-v1/;

#include "imx7d.dtsi"
#include "armadillo_x1_addon.dtsi"

/ {
model = "Atmark-Techno Armadillo-X1 Board";

"armadillo_x1.dts"ファイル内の上記の箇所を下の通り変更するという事でよろしいでしょうか?

/dts-v1/;

#include "imx7d.dtsi"
#include "armadillo_x1_addon.dtsi"

/ {
model = "Atmark-Techno Armadillo-X1 Board";

上記の箇所を以下に変更するということでしょうか?
--- a/arch/arm/boot/dts/armadillo_x1.dts
+++ b/arch/arm/boot/dts/armadillo_x1.dts
@@ -43,7 +43,7 @@
/dts-v1/;

#include "imx7d.dtsi"
-#include "armadillo_x1_addon.dtsi"
+//#include "armadillo_x1_addon.dtsi"

/ {
model = "Atmark-Techno Armadillo-X1 Board";

===============================================================================
> "Add-On Module Auto Detect"ドライバを利用しない場合、上記は不要です。

承知致しました。

===============================================================================
> pinctrl_addon: addongrp {
> fsl,pins = <
> MX7D_PAD_EPDC_DATA04__GPIO2_IO4 0x00 /* GPIO_AOM_PWREN */
> >;
> };

> "Add-On Module Auto Detect"ドライバを利用しない場合、上記は不要です。

承知致しました。

===============================================================================
> "SW MUX Control Register"は、主にピンマルチプレクスを指定するためのレジスタです。"SW PAD Control Register"は、主に(pull-up/down等の)パッド設定を行うレジスタです。

ご説明、ありがとうございました。

at_mizo

2023年2月9日 10時57分

溝渕です。

> 上記の箇所を以下に変更するということでしょうか?
> --- a/arch/arm/boot/dts/armadillo_x1.dts
> +++ b/arch/arm/boot/dts/armadillo_x1.dts
> @@ -43,7 +43,7 @@
> /dts-v1/;
>
> #include "imx7d.dtsi"
> -#include "armadillo_x1_addon.dtsi"
> +//#include "armadillo_x1_addon.dtsi"

そうです。

以下の、

#include "armadillo_x1_addon.dtsi"

という行をコメントアウトしても消してもどちらでも良いです。

seltec032

2023年2月9日 11時09分

> 溝渕です。
>
> > 上記の箇所を以下に変更するということでしょうか?
> > --- a/arch/arm/boot/dts/armadillo_x1.dts
> > +++ b/arch/arm/boot/dts/armadillo_x1.dts
> > @@ -43,7 +43,7 @@
> > /dts-v1/;
> >
> > #include "imx7d.dtsi"
> > -#include "armadillo_x1_addon.dtsi"
> > +//#include "armadillo_x1_addon.dtsi"
>
> そうです。
>
> 以下の、
>
>

> #include "armadillo_x1_addon.dtsi"
> 

>
> という行をコメントアウトしても消してもどちらでも良いです。
>
溝渕様

お世話になります、大隅です。

これで、DeviceTreeの変更・ビルドが出来そうです。
実機で確認してみます。
ありがとうございました。
又、問題が発生しましたら、宜しくお願い致します。

seltec032

2023年2月10日 8時24分

> > 溝渕です。
> >
> > > 上記の箇所を以下に変更するということでしょうか?
> > > --- a/arch/arm/boot/dts/armadillo_x1.dts
> > > +++ b/arch/arm/boot/dts/armadillo_x1.dts
> > > @@ -43,7 +43,7 @@
> > > /dts-v1/;
> > >
> > > #include "imx7d.dtsi"
> > > -#include "armadillo_x1_addon.dtsi"
> > > +//#include "armadillo_x1_addon.dtsi"
> >
> > そうです。
> >
> > 以下の、
> >
> >

> > #include "armadillo_x1_addon.dtsi"
> > 

> >
> > という行をコメントアウトしても消してもどちらでも良いです。
> >
> 溝渕様
>
> お世話になります、大隅です。
>
> これで、DeviceTreeの変更・ビルドが出来そうです。
> 実機で確認してみます。
> ありがとうございました。
> 又、問題が発生しましたら、宜しくお願い致します。
>
溝渕様

お世話になります、大隅です。

ご指導いただいた通り
DeviceTree の変更と、カーネルコンフィギュレーションの変更(Add-On Auto Module Detectを外す)
を行い、カーネルビルドとカーネルイメージの書換を実行し、GPIOの動作確認を実施しました。
【結果】
GPIO4-12/13の2本はlowのままで、high設定しても変化はありませんでした。
他のIOピンはlow/high制御可能です。
DeviceTree変更前のGPIO4-12/13はhighレベルでしたので、状況は変化しております。

ビルドとカーネルイメージの書き換え手順で、
気になった箇所がありました。
Armadillo製品マニュアル(V.3.3.0)には、
10.2 4.ビルドにて生成されたファイルは"uImage"です。

11.2.2.Linuxカーネルの書き換えでは、以下の記述となっています。
[armadillo ~]# cp uImage-x1-[version] /mnt/uImage

この"uImage-x1-[version]"というファイルは存在しない為、"uImage"
として実行させました。(エラーは出ていません)

問題なかったでしょうか?

その他確認する事があれば、ご教授願います。

at_mizo

2023年2月10日 8時48分

溝渕です。

> DeviceTree の変更と、カーネルコンフィギュレーションの変更(Add-On Auto Module Detectを外す)
> を行い、カーネルビルドとカーネルイメージの書換を実行し、GPIOの動作確認を実施しました。

ちなみにですが、今回行った修正は、

- Linuxカーネルコンフィギュレーションの変更
- Device Treeの変更

の2点と認識しています。その場合の書き換え対象は、

- Linuxカーネルイメージ
- DTB

の2つとなります。

https://manual.atmark-techno.com/armadillo-x1/armadillo-x1_product_manu…

DTBも書き換えましたか?

> この"uImage-x1-[version]"というファイルは存在しない為、"uImage"
> として実行させました。(エラーは出ていません)
>
> 問題なかったでしょうか?

問題ありません。ダウンロードページ[1]から取得可能なLinuxカーネルイメージは、"uImage"を、"uImage-x1-[version]"のようにリネームしています。

[1]: https://armadillo.atmark-techno.com/resources/software/armadillo-x1/lin…

これは、バージョンアップ時に名前を変更しない場合、名前の重複により上書きされてしまう為です。

seltec032

2023年2月10日 10時04分

> > 溝渕です。
> >
> > > 上記の箇所を以下に変更するということでしょうか?
> > > --- a/arch/arm/boot/dts/armadillo_x1.dts
> > > +++ b/arch/arm/boot/dts/armadillo_x1.dts
> > > @@ -43,7 +43,7 @@
> > > /dts-v1/;
> > >
> > > #include "imx7d.dtsi"
> > > -#include "armadillo_x1_addon.dtsi"
> > > +//#include "armadillo_x1_addon.dtsi"
> >
> > そうです。
> >
> > 以下の、
> >
> >

> > #include "armadillo_x1_addon.dtsi"
> > 

> >
> > という行をコメントアウトしても消してもどちらでも良いです。
> >
> 溝渕様
>
> お世話になります、大隅です。
>
> これで、DeviceTreeの変更・ビルドが出来そうです。
> 実機で確認してみます。
> ありがとうございました。
> 又、問題が発生しましたら、宜しくお願い致します。
>
溝渕様

お世話になります、大隅です。
ご指導いただいた通り
DeviceTree の変更と、カーネルコンフィギュレーションの変更(Add-On Auto Module Detectを外す)
を行い、カーネルビルドとカーネルイメージの書換を実行し、GPIOの動作確認を実施しました。
結果、GPIO4-12/13も制御可能となりました。

ありがとうございました。
なお、これからECSPI2 の確認を行います。
今後供宜しくお願い致します。

seltec032

2023年2月13日 8時54分

> > > 溝渕です。
> > >
> > > > 上記の箇所を以下に変更するということでしょうか?
> > > > --- a/arch/arm/boot/dts/armadillo_x1.dts
> > > > +++ b/arch/arm/boot/dts/armadillo_x1.dts
> > > > @@ -43,7 +43,7 @@
> > > > /dts-v1/;
> > > >
> > > > #include "imx7d.dtsi"
> > > > -#include "armadillo_x1_addon.dtsi"
> > > > +//#include "armadillo_x1_addon.dtsi"
> > >
> > > そうです。
> > >
> > > 以下の、
> > >
> > >

> > > #include "armadillo_x1_addon.dtsi"
> > > 

> > >
> > > という行をコメントアウトしても消してもどちらでも良いです。
> > >
> > 溝渕様
> >
> > お世話になります、大隅です。
> >
> > これで、DeviceTreeの変更・ビルドが出来そうです。
> > 実機で確認してみます。
> > ありがとうございました。
> > 又、問題が発生しましたら、宜しくお願い致します。
> >
> 溝渕様
>
> お世話になります、大隅です。
> ご指導いただいた通り
> DeviceTree の変更と、カーネルコンフィギュレーションの変更(Add-On Auto Module Detectを外す)
> を行い、カーネルビルドとカーネルイメージの書換を実行し、GPIOの動作確認を実施しました。
> 結果、GPIO4-12/13も制御可能となりました。
>
> ありがとうございました。
> なお、これからECSPI2 の確認を行います。
> 今後供宜しくお願い致します。
>
>
お世話になります、大隅です。

CON7のECSPI2をSlave Modeで使用する為に、
以前ご紹介頂いたslave Mode機能を追加した
ドライバーをご紹介いただきました。

> inux-4.9-atには含まれていませんが、以下の修正を行うとSlaveモードとして動作可能のようです。
> # こちらで試した実績は無いことをご了承ください

> https://source.codeaurora.org/external/imx/linux-imx/commit/?h=lf-5.15

この機能を"linux-4.9-x1-at28"へ追加修正を行いたいのですが、
ビルド・組み込み手順の説明資料等がありましたらご教授願います。

お手数をおかけしますが、宜しくお願いします。

at_mizo

2023年2月13日 9時16分

溝渕です。

> この機能を"linux-4.9-x1-at28"へ追加修正を行いたいのですが、
> ビルド・組み込み手順の説明資料等がありましたらご教授願います。

バックポートは、その方針を含め汎用的な手順等は無いかと思います。

現在ではリポジトリの場所が変わっており、以下になります。
https://github.com/nxp-imx/linux-imx/commit/71abd29057cb17b6b9532421821…

gitを使う場合だと、次のようになります。

[atde]$ git clone https://github.com/atmark-techno/linux-4.9-at.git
[atde]$ cd linux-4.9-at
[atde]$ git remote add linux-imx https://github.com/nxp-imx/linux-imx.git
[atde]$ git remote update
[atde]$ git cherry-pick 71abd29057cb17b6b9532421821dc443427399ed

私の手元でやってみましたが、いくつかのconflictがありました。conflictの原因となっている箇所に対するパッチをさらにcherry-pickしてくる等の対処が必要になります。

seltec032

2023年2月13日 10時33分

> 溝渕です。
>
> > この機能を"linux-4.9-x1-at28"へ追加修正を行いたいのですが、
> > ビルド・組み込み手順の説明資料等がありましたらご教授願います。
>
> バックポートは、その方針を含め汎用的な手順等は無いかと思います。
>
> 現在ではリポジトリの場所が変わっており、以下になります。
> https://github.com/nxp-imx/linux-imx/commit/71abd29057cb17b6b9532421821…
>
> gitを使う場合だと、次のようになります。
>
>

> [atde]$ git clone https://github.com/atmark-techno/linux-4.9-at.git
> [atde]$ cd linux-4.9-at
> [atde]$ git remote add linux-imx https://github.com/nxp-imx/linux-imx.git
> [atde]$ git remote update
> [atde]$ git cherry-pick 71abd29057cb17b6b9532421821dc443427399ed
> 

>
> 私の手元でやってみましたが、いくつかのconflictがありました。conflictの原因となっている箇所に対するパッチをさらにcherry-pickしてくる等の対処が必要になります。
>
溝渕様

ありがとうございます、大隅です。
資料を参考に改修作業を進めて参ります。

seltec032

2023年2月16日 9時29分

> > 溝渕です。
> >
> > > この機能を"linux-4.9-x1-at28"へ追加修正を行いたいのですが、
> > > ビルド・組み込み手順の説明資料等がありましたらご教授願います。
> >
> > バックポートは、その方針を含め汎用的な手順等は無いかと思います。
> >
> > 現在ではリポジトリの場所が変わっており、以下になります。
> > https://github.com/nxp-imx/linux-imx/commit/71abd29057cb17b6b9532421821…
> >
> > gitを使う場合だと、次のようになります。
> >
> >

> > [atde]$ git clone https://github.com/atmark-techno/linux-4.9-at.git
> > [atde]$ cd linux-4.9-at
> > [atde]$ git remote add linux-imx https://github.com/nxp-imx/linux-imx.git
> > [atde]$ git remote update
> > [atde]$ git cherry-pick 71abd29057cb17b6b9532421821dc443427399ed
> > 

> >
> > 私の手元でやってみましたが、いくつかのconflictがありました。conflictの原因となっている箇所に対するパッチをさらにcherry-pickしてくる等の対処が必要になります。
> >
> 溝渕様
>
> ありがとうございます、大隅です。
> 資料を参考に改修作業を進めて参ります。
>
お世話になります、大隅です。

ECSPI2の動作確認について

1.DeviceTree(armadillo_x1.dts)の変更を実施しました。
@@@ Line 46 コメント化
/* #include "armadillo_x1_addon.dtsi" */

@@@ Line 289-294追加
&ecspi2 {
clock-frequency = <1000000>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_ecspi2>;
status = "okay";
};

@@@ Line 427-433追加
pinctrl_ecspi2: ecspi2grp {
fsl,pins = <
MX7D_PAD_ECSPI2_SCLK__ECSPI2_SCLK 0x70
MX7D_PAD_ECSPI2_MOSI__ECSPI2_MOSI 0x70
MX7D_PAD_ECSPI2_SS0__ECSPI2_SS0 0x70
>;

2.コンフィギュレーションの変更
(1)"Add-On Module Auto Detect"ドライバを外しますした。
System Type -' enter
Freescale I,MX family -' enter
i.MX7 Dual support
[ ] Add-on Module Auto Detect チェック(*)を外しました。
(2)SPIのコンフィギュレーショん
Device Drivers -' enter
[*] SPI support -'
<*> Freescale i.MX SPI controllers
*** SPI Protocol Masters ***
<> User moode SPI device driver support  ・・・ ①

①の項にチェックを入れると、ユーザードライバーが使用可ということですか?
製品マニュアル(7.3.17.SPI)には、
"標準状態では無効になっている CONFIG_SPI_SPIDEV を有効化すると 、
ユーザードライバで SPI デバイスを制御することができます。"
と記載があります。

以上の変更をしましたが、ECSPI2が動作していないようです。
動作していないと判断した理由は、

https://armadillo.atmark-techno.com/howto/accessing-any-address
上記を使用して、直接ECSPI2の制御レジスタにRead/Writeをした所、
Write後のreadbackデータが常に0となる事です。

STATREGのみreadback値が、0x03hとReset valueと同値が戻ってきます。
CONREG/CONFIGREGは、何をWriteしても、readback値は0が戻ってきます。
Address Register Name Reset value
0x30830008 Control Register (ECSPI2_CONREG) 32bits R/W 0x00000000
0x3083000C Config Register (ECSPI2_CONFIGREG) 32bits R/W 0x00000000
0x30830018 Status Register (ECSPI2_STATREG) 32bits R/W 0x00000003

ECSPIを動作させる条件が整っていないのでしょうか?
他に確認する箇所や方法等ご教授頂ければ有難いです。

宜しくお願い致します。

ファイル ファイルの説明
armadillo_x1.dts

at_mizo

2023年2月16日 9時52分

溝渕です。

> (2)SPIのコンフィギュレーショん
> Device Drivers -' enter
> [*] SPI support -'
> <*> Freescale i.MX SPI controllers
> *** SPI Protocol Masters ***
> <> User moode SPI device driver support  ・・・ ①
>
> ①の項にチェックを入れると、ユーザードライバーが使用可ということですか?

そうです。
https://armadillo.atmark-techno.com/blog/615/2577
上記資料にある通り、ユーザーランドから見えるデバイスファイル経由でSPIを利用することが可能です。

> 以上の変更をしましたが、ECSPI2が動作していないようです。
> 動作していないと判断した理由は、
>
> https://armadillo.atmark-techno.com/howto/accessing-any-address
> 上記を使用して、直接ECSPI2の制御レジスタにRead/Writeをした所、
> Write後のreadbackデータが常に0となる事です。

レジスタ仕様を把握した上でRead/Writeしていますか? 例えば、Control Registerのbit0はECSPIの enableですが、"1"を書いていますか?

もし、/dev/mem経由でユーザーランドからECSPIを制御しようとしているのであれば、ドライバ("drivers/spi/spi-imx.c")を全て書き直すことと同じです。学習目的で無ければ全くおすすめしません。

> STATREGのみreadback値が、0x03hとReset valueと同値が戻ってきます。
> CONREG/CONFIGREGは、何をWriteしても、readback値は0が戻ってきます。
> Address Register Name Reset value
> 0x30830008 Control Register (ECSPI2_CONREG) 32bits R/W 0x00000000
> 0x3083000C Config Register (ECSPI2_CONFIGREG) 32bits R/W 0x00000000
> 0x30830018 Status Register (ECSPI2_STATREG) 32bits R/W 0x00000003
>
> ECSPIを動作させる条件が整っていないのでしょうか?

正しいシーケンスでレジスタアクセスをしたかどうかが不明なのでお答えできません。

> 他に確認する箇所や方法等ご教授頂ければ有難いです。

先に示した資料、
https://armadillo.atmark-techno.com/blog/615/2577
にある通り、"/dev/spidev[バス番号]"を使って確認してみてはいかがでしょうか?

seltec032

2023年2月16日 11時25分

> 溝渕です。
>
> > (2)SPIのコンフィギュレーショん
> > Device Drivers -' enter
> > [*] SPI support -'
> > <*> Freescale i.MX SPI controllers
> > *** SPI Protocol Masters ***
> > <> User moode SPI device driver support  ・・・ ①
> >
> > ①の項にチェックを入れると、ユーザードライバーが使用可ということですか?
>
> そうです。
> https://armadillo.atmark-techno.com/blog/615/2577
> 上記資料にある通り、ユーザーランドから見えるデバイスファイル経由でSPIを利用することが可能です。
>
> > 以上の変更をしましたが、ECSPI2が動作していないようです。
> > 動作していないと判断した理由は、
> >
> > https://armadillo.atmark-techno.com/howto/accessing-any-address
> > 上記を使用して、直接ECSPI2の制御レジスタにRead/Writeをした所、
> > Write後のreadbackデータが常に0となる事です。
>
> レジスタ仕様を把握した上でRead/Writeしていますか? 例えば、Control Registerのbit0はECSPIの enableですが、"1"を書いていますか?
>
> もし、/dev/mem経由でユーザーランドからECSPIを制御しようとしているのであれば、ドライバ("drivers/spi/spi-imx.c")を全て書き直すことと同じです。学習目的で無ければ全くおすすめしません。
>
> > STATREGのみreadback値が、0x03hとReset valueと同値が戻ってきます。
> > CONREG/CONFIGREGは、何をWriteしても、readback値は0が戻ってきます。
> > Address Register Name Reset value
> > 0x30830008 Control Register (ECSPI2_CONREG) 32bits R/W 0x00000000
> > 0x3083000C Config Register (ECSPI2_CONFIGREG) 32bits R/W 0x00000000
> > 0x30830018 Status Register (ECSPI2_STATREG) 32bits R/W 0x00000003
> >
> > ECSPIを動作させる条件が整っていないのでしょうか?
>
> 正しいシーケンスでレジスタアクセスをしたかどうかが不明なのでお答えできません。
>
> > 他に確認する箇所や方法等ご教授頂ければ有難いです。
>
> 先に示した資料、
> https://armadillo.atmark-techno.com/blog/615/2577
> にある通り、"/dev/spidev[バス番号]"を使って確認してみてはいかがでしょうか?

お世話になります、大隅です。

> レジスタ仕様を把握した上でRead/Writeしていますか? 例えば、Control Registerのbit0はECSPIの enableですが、"1"を書いていますか?

まず、bit0 enable:1にセット後、他のbitを制御しましたが、readbackは、0x00でした。

> もし、/dev/mem経由でユーザーランドからECSPIを制御しようとしているのであれば、ドライバ("drivers/spi/spi-imx.c")を全て書き直すことと同じです。学習目的で無ければ全くおすすめしません。

まずは、試しにRegisterへのアクセクが出来ているかを見る為に、devmem2で確認してみました。

https://armadillo.atmark-techno.com/blog/615/2577
7.SPIの使い方
上記の手順によって、SPI(ECSPI4)は"/dev/spidev3.0"というデバイスファイルとして見えます。
用法については、 Armadillo実践開発ガイド第3部 2.3. SPI接続A/Dコンバーター が参考になります。

DeviceTreeの変更・コンフィギュレーションの変更後、Armadilloを再起動した後に、
/dev/spidev3.0が見えていません。
/dev/spi* が出来ていないという事は、それまでの手順に何か問題があるということでしょうか?

at_mizo

2023年2月16日 11時40分

溝渕です。

> https://armadillo.atmark-techno.com/blog/615/2577
> 7.SPIの使い方
> 上記の手順によって、SPI(ECSPI4)は"/dev/spidev3.0"というデバイスファイルとして見えます。
> 用法については、 Armadillo実践開発ガイド第3部 2.3. SPI接続A/Dコンバーター が参考になります。
>
> DeviceTreeの変更・コンフィギュレーションの変更後、Armadilloを再起動した後に、
> /dev/spidev3.0が見えていません。
> /dev/spi* が出来ていないという事は、それまでの手順に何か問題があるということでしょうか?

そうですね。

Armadillo上で、

[armadillo]# zcat /proc/config.gz | grep SPI_SPIDEV

を実行してみてもらえますか?

何も表示されない場合は、Linuxカーネルコンフィギュレーションか、Device Treeの変更が反映されていません。表示された場合は、ECSPIドライバの登録に失敗していると思います。

ECSPIドライバの登録に失敗している場合は、起動ログを見せてくれると何かアドバイスできるかもしれません。

seltec032

2023年2月16日 13時16分

> 溝渕です。
>
> > https://armadillo.atmark-techno.com/blog/615/2577
> > 7.SPIの使い方
> > 上記の手順によって、SPI(ECSPI4)は"/dev/spidev3.0"というデバイスファイルとして見えます。
> > 用法については、 Armadillo実践開発ガイド第3部 2.3. SPI接続A/Dコンバーター が参考になります。
> >
> > DeviceTreeの変更・コンフィギュレーションの変更後、Armadilloを再起動した後に、
> > /dev/spidev3.0が見えていません。
> > /dev/spi* が出来ていないという事は、それまでの手順に何か問題があるということでしょうか?
>
> そうですね。
>
> Armadillo上で、
>
>

> [armadillo]# zcat /proc/config.gz | grep SPI_SPIDEV
> 

>
> を実行してみてもらえますか?
>
> 何も表示されない場合は、Linuxカーネルコンフィギュレーションか、Device Treeの変更が反映されていません。表示された場合は、ECSPIドライバの登録に失敗していると思います。
>
> ECSPIドライバの登録に失敗している場合は、起動ログを見せてくれると何かアドバイスできるかもしれません。
>
お世話になります、大隅です。

> [armadillo]# zcat /proc/config.gz | grep SPI_SPIDEV

以下の結果となりました。
atmark@armadillo:~$ zcat /proc/config.gz | grep SPI_SPIDEV
# CONFIG_SPI_SPIDEV is not set
atmark@armadillo:~$

> 何も表示されない場合は、Linuxカーネルコンフィギュレーションか、Device Treeの変更が反映されていません。表示された場合は、ECSPIドライバの登録に失敗していると思います。

ESCPIドライバーの登録に失敗しているという事になりますか?

Armadillo起動時のログを添付致します。

宜しくお願い致します。

ファイル ファイルの説明
start.log Armadillo起動ログ

at_mizo

2023年2月16日 13時25分

溝渕です。

> お世話になります、大隅です。
>
> > [armadillo]# zcat /proc/config.gz | grep SPI_SPIDEV
>
> 以下の結果となりました。
> atmark@armadillo:~$ zcat /proc/config.gz | grep SPI_SPIDEV
> # CONFIG_SPI_SPIDEV is not set
> atmark@armadillo:~$
>
> > 何も表示されない場合は、Linuxカーネルコンフィギュレーションか、Device Treeの変更が反映されていません。表示された場合は、ECSPIドライバの登録に失敗していると思います。

すみません。私の発言に嘘がありました。

CONFIG_SPI_SPIDEV=y

のようになっている場合は、SPI_SPIDEVが組み込まれています。

なので、今回の場合は、Linuxカーネルコンフィギュレーションの変更が反映されておらず、SPI_SPIDEVが入っていません。

恐らく以下いずれか(または複数)を解決すると動作するようになると思います。

- Linuxカーネルコンフィギュレーションを変更したか?
- コンフィギュレーションを変更したLinuxカーネルをビルドしたか?
- コンフィギュレーションを変更したLinuxカーネルを書き込んだか?

seltec032

2023年2月16日 13時40分

> 溝渕です。
>
> > お世話になります、大隅です。
> >
> > > [armadillo]# zcat /proc/config.gz | grep SPI_SPIDEV
> >
> > 以下の結果となりました。
> > atmark@armadillo:~$ zcat /proc/config.gz | grep SPI_SPIDEV
> > # CONFIG_SPI_SPIDEV is not set
> > atmark@armadillo:~$
> >
> > > 何も表示されない場合は、Linuxカーネルコンフィギュレーションか、Device Treeの変更が反映されていません。表示された場合は、ECSPIドライバの登録に失敗していると思います。
>
> すみません。私の発言に嘘がありました。
>
>

> CONFIG_SPI_SPIDEV=y
> 

>
> のようになっている場合は、SPI_SPIDEVが組み込まれています。
>
> なので、今回の場合は、Linuxカーネルコンフィギュレーションの変更が反映されておらず、SPI_SPIDEVが入っていません。
>
> 恐らく以下いずれか(または複数)を解決すると動作するようになると思います。
>
お世話になります、大隅です。

> - Linuxカーネルコンフィギュレーションを変更したか?
> - コンフィギュレーションを変更したLinuxカーネルをビルドしたか?
> - コンフィギュレーションを変更したLinuxカーネルを書き込んだか?
>
実行した筈ですが、再度実行して確認してみます。

SPI のコンフィギュレーションは、以下の設定で間違いないでしょうか?
再度の確認をお願い致します。
Device Drivers --->
[*] SPI support --->
*** SPI Master Controller Drivers ***
-*- Utilities for Bitbanging SPI masters
<*> Freescale i.MX SPI controllers
*** SPI Protocol Masters ***
< > User mode SPI device driver support

at_mizo

2023年2月16日 13時50分

溝渕です。

> SPI のコンフィギュレーションは、以下の設定で間違いないでしょうか?
> 再度の確認をお願い致します。
> Device Drivers --->
> [*] SPI support --->
> *** SPI Master Controller Drivers ***
> -*- Utilities for Bitbanging SPI masters
> <*> Freescale i.MX SPI controllers
> *** SPI Protocol Masters ***
> < > User mode SPI device driver support

上記設定では、/dev/spidevXXXができません。

https://armadillo.atmark-techno.com/blog/615/2577

に記載の通り、以下のようにしてください。

<*> User mode SPI device driver support

seltec032

2023年2月16日 15時07分

> 溝渕です。
>
> > SPI のコンフィギュレーションは、以下の設定で間違いないでしょうか?
> > 再度の確認をお願い致します。
> > Device Drivers --->
> > [*] SPI support --->
> > *** SPI Master Controller Drivers ***
> > -*- Utilities for Bitbanging SPI masters
> > <*> Freescale i.MX SPI controllers
> > *** SPI Protocol Masters ***
> > < > User mode SPI device driver support
>
> 上記設定では、/dev/spidevXXXができません。
>
> https://armadillo.atmark-techno.com/blog/615/2577
>
> に記載の通り、以下のようにしてください。
>
>
> <*> User mode SPI device driver support
>
>
お世話になります、大隅です。

> <*> User mode SPI device driver support

コンフィギュレーションを変更し、ビルド・実装致しました。
以下の通り、"CONFIG_SPI_SPIDEV=y"となりました。
atmark@armadillo:~$ zcat /proc/config.gz | grep SPI_SPIDEV
CONFIG_SPI_SPIDEV=y
atmark@armadillo:~$ atmark@armadillo:~$

しかし、/dev/spidev3.0が見えていません。
という事は、ECSPIドライバの登録に失敗という事になりますか?

起動時ログを添付致します。

恐縮ですが、アドバイス宜しくお願い致します。

ファイル ファイルの説明
start.log

at_mizo

2023年2月16日 15時15分

溝渕です。

> 起動時ログを添付致します。
>
> 恐縮ですが、アドバイス宜しくお願い致します。

恐らくこの部分が問題です。

spi_imx 30830000.ecspi: No CS GPIOs available
spi_imx: probe of 30830000.ecspi failed with error -22

CS(chip select)を指定していないのが問題だと思います。

arch/arm/boot/dts/armadillo_x1-ecspi4_mcp3202.dts

を参考にして、CSを指定してください。

seltec032

2023年2月16日 16時34分

> 溝渕です。
>
> > 起動時ログを添付致します。
> >
> > 恐縮ですが、アドバイス宜しくお願い致します。
>
> 恐らくこの部分が問題です。
>
>

> spi_imx 30830000.ecspi: No CS GPIOs available
> spi_imx: probe of 30830000.ecspi failed with error -22
> 

>
> CS(chip select)を指定していないのが問題だと思います。
>
> arch/arm/boot/dts/armadillo_x1-ecspi4_mcp3202.dts
>
> を参考にして、CSを指定してください。

お世話になります、大隅です。
”armadillo_x1-ecspi4_mcp3202.dts”に倣い、CSを追加しました。
変更前後の起動ログを見ると
<cs 追加前>
spi_imx 30830000.ecspi: dma setup error -19, use pio
spi_imx 30830000.ecspi: No CS GPIOs available
spi_imx: probe of 30830000.ecspi failed with error -22

seltec032

2023年2月16日 17時12分

> > 溝渕です。
> >
> > > 起動時ログを添付致します。
> > >
> > > 恐縮ですが、アドバイス宜しくお願い致します。
> >
> > 恐らくこの部分が問題です。
> >
> >

> > spi_imx 30830000.ecspi: No CS GPIOs available
> > spi_imx: probe of 30830000.ecspi failed with error -22
> > 

> >
> > CS(chip select)を指定していないのが問題だと思います。
> >
> > arch/arm/boot/dts/armadillo_x1-ecspi4_mcp3202.dts
> >
> > を参考にして、CSを指定してください。
>
> お世話になります、大隅です。
> ”armadillo_x1-ecspi4_mcp3202.dts”に倣い、CSを追加しました。
> 変更前後の起動ログを見ると
> <cs 追加前>
> spi_imx 30830000.ecspi: dma setup error -19, use pio
> spi_imx 30830000.ecspi: No CS GPIOs available
> spi_imx: probe of 30830000.ecspi failed with error -22
> spi_imx 30830000.ecspi: dma setup error -19, use pio
> spi_imx 30830000.ecspi: probed
>
> 結果、"/dev/spidev3.0"は、まだ生成されません。
>
> spi_imx 30830000.ecspi: dma setup error -19, use pio
> これは、変更前も変更後もありますが、DMAを使用しないのであれば
> 問題ないでしょうか?
>
>
溝渕様

お世話になります、大隅です。

伝文の後半が切れてしまっているようなので
再送致します。宜しくお願い致します。

> ”armadillo_x1-ecspi4_mcp3202.dts”に倣い、CSを追加しました。
> 変更前後の起動ログを見ると
> <cs 追加前ecspiに関する箇所抜粋>
> spi_imx 30830000.ecspi: dma setup error -19, use pio
> spi_imx 30830000.ecspi: No CS GPIOs available
> spi_imx: probe of 30830000.ecspi failed with error -22
> spi_imx 30830000.ecspi: dma setup error -19, use pio
> spi_imx 30830000.ecspi: probed
>
> 結果、"/dev/spidev3.0"は、まだ生成されません。
>
> spi_imx 30830000.ecspi: dma setup error -19, use pio
> これは、変更前も変更後もありますが、DMAを使用しないのであれば
> 問題ないでしょうか?
>

at_mizo

2023年2月16日 17時17分

溝渕です。
> > > spi_imx 30830000.ecspi: dma setup error -19, use pio
> > spi_imx 30830000.ecspi: probed
> >
> > 結果、"/dev/spidev3.0"は、まだ生成されません。

以下のログをもらえますか?

[armadillo]# zcat /proc/config.gz | grep SPI_SPIDEV
[armadillo]# ls /dev

> > spi_imx 30830000.ecspi: dma setup error -19, use pio
> > これは、変更前も変更後もありますが、DMAを使用しないのであれば
> > 問題ないでしょうか?

そうですね。問題ありません。

seltec032

2023年2月16日 17時39分

> 溝渕です。
> > > > > spi_imx 30830000.ecspi: dma setup error -19, use pio
> > > spi_imx 30830000.ecspi: probed
> > >
> > > 結果、"/dev/spidev3.0"は、まだ生成されません。
>
> 以下のログをもらえますか?
>
>

> [armadillo]# zcat /proc/config.gz | grep SPI_SPIDEV
> [armadillo]# ls /dev
> 

>
> > > spi_imx 30830000.ecspi: dma setup error -19, use pio
> > > これは、変更前も変更後もありますが、DMAを使用しないのであれば
> > > 問題ないでしょうか?
>
> そうですね。問題ありません。
>
溝渕様

お世話になります、大隅です。
以下がログになります。
atmark@armadillo:~$ zcat /proc/config.gz | grep SPI_SPIDEV
CONFIG_SPI_SPIDEV=y
atmark@armadillo:~$ ls /dev
30084000.etf loop0 port stdout tty35 tty63
30086000.etr loop1 ppp tty tty36 tty7
autofs loop2 pps0 tty0 tty37 tty8
block loop3 ptmx tty1 tty38 tty9
bus loop4 ptp0 tty10 tty39 ttymxc4
char loop5 pts tty11 tty4 ubi_ctrl
console loop6 ram0 tty12 tty40 uinput
cpu_dma_latency loop7 ram1 tty13 tty41 urandom
disk mem ram10 tty14 tty42 vcs
dri memory_bandwidth ram11 tty15 tty43 vcs1
fd mmcblk2 ram12 tty16 tty44 vcs2
full mmcblk2boot0 ram13 tty17 tty45 vcs3
fuse mmcblk2boot1 ram14 tty18 tty46 vcs4
gpiochip0 mmcblk2p1 ram15 tty19 tty47 vcs5
gpiochip1 mmcblk2p2 ram2 tty2 tty48 vcs6
gpiochip2 mmcblk2p3 ram3 tty20 tty49 vcsa
gpiochip3 mmcblk2rpmb ram4 tty21 tty5 vcsa1
gpiochip4 mqueue ram5 tty22 tty50 vcsa2
gpiochip5 mtd0 ram6 tty23 tty51 vcsa3
gpiochip6 mtd0ro ram7 tty24 tty52 vcsa4
gpiochip7 mtd1 ram8 tty25 tty53 vcsa5
hci_tty mtd1ro ram9 tty26 tty54 vcsa6
hwrng mtd2 random tty27 tty55 vga_arbiter
i2c-3 mtd2ro rfkill tty28 tty56 watchdog
iio:device0 mtdblock0 rtc tty29 tty57 watchdog0
initctl mtdblock1 rtc0 tty3 tty58 zero
input mtdblock2 rtc1 tty30 tty59
kmsg net shm tty31 tty6
license network_latency snd tty32 tty60
log network_throughput stderr tty33 tty61
loop-control null stdin tty34 tty62
atmark@armadillo:~$

seltec032

2023年2月17日 16時12分

> 溝渕です。
>
> https://armadillo.atmark-techno.com/forum/armadillo/3952
>
> 上記に添付のdts(armadillo_x1-ecspi4_user1.dts)を参考に、ecspi2ノードの中にspiノードを追加してみてもらえますか?

お世話になります、大隅です。

> 上記に添付のdts(armadillo_x1-ecspi4_user1.dts)を参考に、ecspi2ノードの中にspiノードを追加してみてもらえますか?

spi@0 {
compatible = "spidev";
spi-max-frequency = <1000000>;
reg = <0>;
};

上の追加した所、
atmark@armadillo:~$ ls /dev/spi*
/dev/spidev1.0
表示されるようになりました。

ありがとうございました。

ただし、前にご連絡したdevmem2を使用したECSPI2レジスタのアクセスでは、期待した
readback値は、やはり戻ってきませんでした。
このdevmem2を使用して、SPIの初期設定が出来るか(ECSPIが動作しているか)
の確認をすることが無理なのでしょうか?

at_mizo

2023年2月17日 16時24分

溝渕です。

> ただし、前にご連絡したdevmem2を使用したECSPI2レジスタのアクセスでは、期待した
> readback値は、やはり戻ってきませんでした。
> このdevmem2を使用して、SPIの初期設定が出来るか(ECSPIが動作しているか)
> の確認をすることが無理なのでしょうか?

先にも述べました通り、レジスタの仕様やアクセスタイミングを把握していない場合はおすすめしません。また、devmem2で初期設定を行う前に、spi driverがすでに初期設定を行っています。

ちなみにですが、devmem2を使用することが目的でしょうか? SPIの動作確認が目的でしょうか?

後者であれば、spidev経由で期待するSPIの波形が出力される事を確認した方が良いように思います。

seltec032

2023年2月17日 16時57分

> 溝渕です。
>
> > ただし、前にご連絡したdevmem2を使用したECSPI2レジスタのアクセスでは、期待した
> > readback値は、やはり戻ってきませんでした。
> > このdevmem2を使用して、SPIの初期設定が出来るか(ECSPIが動作しているか)
> > の確認をすることが無理なのでしょうか?
>
> 先にも述べました通り、レジスタの仕様やアクセスタイミングを把握していない場合はおすすめしません。また、devmem2で初期設定を行う前に、spi driverがすでに初期設定を行っています。
>
> ちなみにですが、devmem2を使用することが目的でしょうか? SPIの動作確認が目的でしょうか?
>
> 後者であれば、spidev経由で期待するSPIの波形が出力される事を確認した方が良いように思います。
>
お世話になります、大隅です。

> ちなみにですが、devmem2を使用することが目的でしょうか? SPIの動作確認が目的でしょうか?

SPIの動作確認が目的です。
今回は、SLAVEモードで動作させ、データを外部から受信するのが目的です。
前にご紹介いただいたSLAVEモード対応ドライバーに改修して実装する前に、
基本動作確認をしておこうと思ったためです。

at_mizo

2023年2月17日 17時04分

溝渕です。

> SPIの動作確認が目的です。
> 今回は、SLAVEモードで動作させ、データを外部から受信するのが目的です。
> 前にご紹介いただいたSLAVEモード対応ドライバーに改修して実装する前に、
> 基本動作確認をしておこうと思ったためです。

そうであれば、spidev経由で期待するSPIの波形が出力される事を確認した方が簡単に動作確認できるかと思います。

seltec032

2023年2月17日 17時27分

> 溝渕です。
>
> > SPIの動作確認が目的です。
> > 今回は、SLAVEモードで動作させ、データを外部から受信するのが目的です。
> > 前にご紹介いただいたSLAVEモード対応ドライバーに改修して実装する前に、
> > 基本動作確認をしておこうと思ったためです。
>
> そうであれば、spidev経由で期待するSPIの波形が出力される事を確認した方が簡単に動作確認できるかと思います。
>
お世話になります、大隅です。

> そうであれば、spidev経由で期待するSPIの波形が出力される事を確認した方が簡単に動作確認できるかと思います。

承知致しました。

紹介いただいた資料より、SLAVEモード対応を追加する為、spi-imx.cドライバーを改修して組み込んで
使用する時は、逆にCONFIG_SPI_SPIDEV を無効化する必要がありますか?
*** SPI Protocol Masters ***
<*> User moode SPI device driver support  ・・・チェックを外す?

at_mizo

2023年2月20日 8時41分

溝渕です。

> 紹介いただいた資料より、SLAVEモード対応を追加する為、spi-imx.cドライバーを改修して組み込んで
> 使用する時は、逆にCONFIG_SPI_SPIDEV を無効化する必要がありますか?
> *** SPI Protocol Masters ***
> <*> User moode SPI device driver support  ・・・チェックを外す?

利用方法によります。

ユーザーランドドライバを実装する場合は外してはいけません。そうでない場合はどちらでも構いません。

seltec032

2023年2月20日 11時03分

> 溝渕です。
>
> > 紹介いただいた資料より、SLAVEモード対応を追加する為、spi-imx.cドライバーを改修して組み込んで
> > 使用する時は、逆にCONFIG_SPI_SPIDEV を無効化する必要がありますか?
> > *** SPI Protocol Masters ***
> > <*> User moode SPI device driver support  ・・・チェックを外す?
>
> 利用方法によります。
>
> ユーザーランドドライバを実装する場合は外してはいけません。そうでない場合はどちらでも構いません。
>
お世話になります、大隅です。

> ユーザーランドドライバを実装する場合は外してはいけません。そうでない場合はどちらでも構いません。
承知しました。
初歩的な質問で失礼しますが、spi-imx.cドライバーを改修後
製品マニュアル 10.2. Linux カーネルをビルドするの手順に従い
ビルドすればよろしいでしょうか?
linux-4.9-x1-at28$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
linux-4.9-x1-at28$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- ⏎
LOADADDR=0x80008000 uImage

at_mizo

2023年2月20日 11時11分

溝渕です。

> spi-imx.cドライバーを改修後
> 製品マニュアル 10.2. Linux カーネルをビルドするの手順に従い
> ビルドすればよろしいでしょうか?
> linux-4.9-x1-at28$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
> linux-4.9-x1-at28$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- ⏎
> LOADADDR=0x80008000 uImage

上記ご認識で問題無いと思います。

seltec032

2023年2月22日 14時22分

> 溝渕です。
>
> > spi-imx.cドライバーを改修後
> > 製品マニュアル 10.2. Linux カーネルをビルドするの手順に従い
> > ビルドすればよろしいでしょうか?
> > linux-4.9-x1-at28$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
> > linux-4.9-x1-at28$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- ⏎
> > LOADADDR=0x80008000 uImage
>
> 上記ご認識で問題無いと思います。
>
お世話になります、大隅です。

Linuxカーネルのビルドエラーについてお尋ねします。

1.オリジナルのspi-imx.cのまま、Linux-4.9-x1-at28カーネルをビルドする。
エラーにはなりませんが、warningが186個出力されます。
ビルド終了後のメッセージ
Building modules, stage 2.
MODPOST 0 modules
atmark@atde8:~/ダウンロード/linux-4.9-x1-at28$

大部分が、ほとんどがstrncpyに関するwarningです。
このwarningは、無視しても差し支えないでしょうか?

2.spi-imx.cをSlave Mode対応に改修し、オリジナルのソースファイル
と差し替えて、ビルドしました。
ビルド結果は、1のオリジナルのビルドと同じ結果になりました。

3.改修したspi-imx.cを更に編集してビルドすると
ビルドエラーとなりました。(build_error.logを参照ください)
心当たりのないエラーです。
2回目に改修したファイルを何度か編集し、最終的には最初に改修した
ファイルと全く同じにしても、ビルドエラーは発生します。
(最初のファイルと2回目以降のファイルはテキストエディタで比較しても差は出ません。)
何度か繰り返しましたが同じ結果になりましたので、ミス操作は無いと思います。

エラー原因が掴めません。
ビルドエラーの原因は何でしょうか?

ファイル ファイルの説明
build_original_1.log オリジナルソースのままのビルド結果
spi-imx.c 改修したspi-imx.cファイル(ビルド成功)
build_error.log 2回目改修後のspi-imx.cでのビルド結果(エラー)

at_mizo

2023年2月22日 14時36分

溝渕です。

> 3.改修したspi-imx.cを更に編集してビルドすると
> ビルドエラーとなりました。(build_error.logを参照ください)
> 心当たりのないエラーです。
> 2回目に改修したファイルを何度か編集し、最終的には最初に改修した
> ファイルと全く同じにしても、ビルドエラーは発生します。
> (最初のファイルと2回目以降のファイルはテキストエディタで比較しても差は出ません。)
> 何度か繰り返しましたが同じ結果になりましたので、ミス操作は無いと思います。
>
> エラー原因が掴めません。
> ビルドエラーの原因は何でしょうか?

build_error.log:
drivers/spi/spi-imx.c: In function ‘mx51_ecspi_config’:
drivers/spi/spi-imx.c:452:29: error: implicit declaration of function ‘is_imx53_ecspi’; did you mean ‘is_imx51_ecspi’? [-Werror=implicit-function-declaration]
  if (spi_imx->slave_mode && is_imx53_ecspi(spi_imx))
                             ^~~~~~~~~~~~~~
                             is_imx51_ecspi

元々は存在していない、上記の関数(is_imx53_ecspi)を呼び出をしたのがビルドエラーの原因の1つです。

他にも、"error:"と記載のある行でエラーになった原因やドライバソースの該当行番号が記載されています。

seltec032

2023年2月22日 16時27分

> 溝渕です。
>
> > 3.改修したspi-imx.cを更に編集してビルドすると
> > ビルドエラーとなりました。(build_error.logを参照ください)
> > 心当たりのないエラーです。
> > 2回目に改修したファイルを何度か編集し、最終的には最初に改修した
> > ファイルと全く同じにしても、ビルドエラーは発生します。
> > (最初のファイルと2回目以降のファイルはテキストエディタで比較しても差は出ません。)
> > 何度か繰り返しましたが同じ結果になりましたので、ミス操作は無いと思います。
> >
> > エラー原因が掴めません。
> > ビルドエラーの原因は何でしょうか?
>
>

> build_error.log:
> drivers/spi/spi-imx.c: In function ‘mx51_ecspi_config’:
> drivers/spi/spi-imx.c:452:29: error: implicit declaration of function ‘is_imx53_ecspi’; did you mean ‘is_imx51_ecspi’? [-Werror=implicit-function-declaration]
>   if (spi_imx->slave_mode && is_imx53_ecspi(spi_imx))
>                              ^~~~~~~~~~~~~~
>                              is_imx51_ecspi
> 

>
> 元々は存在していない、上記の関数(is_imx53_ecspi)を呼び出をしたのがビルドエラーの原因の1つです。
>
> 他にも、"error:"と記載のある行でエラーになった原因やドライバソースの該当行番号が記載されています。
>
お世話になります、大隅です。

1の質問.warninngは問題なしでよろしかったでしょうか?

2.エラーの箇所を修正して、Error=0となりました。
ありがとうございました。
但し、最初に書いた通り1回目の修正では、エラーは出現しなかったのは
何故でしょうか? 操作ミス?

at_mizo

2023年2月22日 16時41分

溝渕です。

> 1の質問.warninngは問題なしでよろしかったでしょうか?

問題なしと捉えて良いかと思います。

> 2.エラーの箇所を修正して、Error=0となりました。
> ありがとうございました。
> 但し、最初に書いた通り1回目の修正では、エラーは出現しなかったのは
> 何故でしょうか? 操作ミス?

作業内容の詳細を把握してない為、原因については不明です。

全作業ログを見せていただけると何かアドバイスできるかもしれません。

seltec032

2023年2月22日 16時51分

> 溝渕です。
>
> > 1の質問.warninngは問題なしでよろしかったでしょうか?
>
> 問題なしと捉えて良いかと思います。
>
> > 2.エラーの箇所を修正して、Error=0となりました。
> > ありがとうございました。
> > 但し、最初に書いた通り1回目の修正では、エラーは出現しなかったのは
> > 何故でしょうか? 操作ミス?
>
> 作業内容の詳細を把握してない為、原因については不明です。
>
> 全作業ログを見せていただけると何かアドバイスできるかもしれません。
>
お世話になります、大隅です。

> > 1の質問.warninngは問題なしでよろしかったでしょうか?
>
> 問題なしと捉えて良いかと思います。

承知しました。

> 作業内容の詳細を把握してない為、原因については不明です。
>
> 全作業ログを見せていただけると何かアドバイスできるかもしれません。

私も、こんな事はあり得ない、不思議だなと思いながら、質問
してしまいました。何か私に勘違いがあったのでしょう。

お蔭さまでエラーは消えましたので、次のステップに
進めて参ります。

ありがとうございました。

seltec032

2023年2月25日 16時54分

> > 溝渕です。
> >
> > > 1の質問.warninngは問題なしでよろしかったでしょうか?
> >
> > 問題なしと捉えて良いかと思います。
> >
> > > 2.エラーの箇所を修正して、Error=0となりました。
> > > ありがとうございました。
> > > 但し、最初に書いた通り1回目の修正では、エラーは出現しなかったのは
> > > 何故でしょうか? 操作ミス?
> >
> > 作業内容の詳細を把握してない為、原因については不明です。
> >
> > 全作業ログを見せていただけると何かアドバイスできるかもしれません。
> >
> お世話になります、大隅です。
>
> > > 1の質問.warninngは問題なしでよろしかったでしょうか?
> >
> > 問題なしと捉えて良いかと思います。
>
> 承知しました。
>
> > 作業内容の詳細を把握してない為、原因については不明です。
> >
> > 全作業ログを見せていただけると何かアドバイスできるかもしれません。
>
> 私も、こんな事はあり得ない、不思議だなと思いながら、質問
> してしまいました。何か私に勘違いがあったのでしょう。
>
> お蔭さまでエラーは消えましたので、次のステップに
> 進めて参ります。
>
> ありがとうございました。
>
>
お世話になります、大隅です。

https://armadillo.atmark-techno.com/forum/armadillo/970

上記を参考にspidev_test.cをECSPI2を使用して実行させました。
"linux-4.9-x1-at28\tools\spi"

FORUMには以下の記述ですが、これは機種の差(Armadillo-840とArmadillo-x1)でしょうか。
spidevを利用したサンプルコードはlinuxソースツリーの以下の場所にあります。
Documentation/spi/spidev_test.c

ECSPI2のMOSI(CON7-40)とMISO(CON7-39)間ををオープン/ショートどちらにしても
以下の結果となりました。

atmark@armadillo:~/spi$ ls /dev/spi*
/dev/spidev1.0

atmark@armadillo:~/spi$ ls
Makefile spidev_fdx spidev_fdx.c spidev_test spidev_test.c

atmark@armadillo:~/spi$ sudo ./spidev_test -D /dev/spidev1.0
[sudo] password for atmark:
spi mode: 0x0
bits per word: 8
max speed: 500000 Hz (500 KHz)
RX | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................
atmark@armadillo:~/spi$

FORUMの結果(ループバック)
# ./spidev_test -D /dev/spidev1.0
spi mode: 0
bits per word: 8
max speed: 500000 Hz (500 KHz)

FF FF FF FF FF FF
40 00 00 00 00 95
FF FF FF FF FF FF
FF FF FF FF FF FF
FF FF FF FF FF FF
DE AD BE EF BA AD
F0 0D

MOSIとMISOが繋がっていれば、上記のようになる筈ですね。
データ数・表示形式も異なりますがこれはプログラム違いでしょうか。

確認する箇所などあれば、ご教授ください。

宜しくお願い致します。

seltec032

2023年2月27日 8時28分

> > > 溝渕です。
> > >
> > > > 1の質問.warninngは問題なしでよろしかったでしょうか?
> > >
> > > 問題なしと捉えて良いかと思います。
> > >
> > > > 2.エラーの箇所を修正して、Error=0となりました。
> > > > ありがとうございました。
> > > > 但し、最初に書いた通り1回目の修正では、エラーは出現しなかったのは
> > > > 何故でしょうか? 操作ミス?
> > >
> > > 作業内容の詳細を把握してない為、原因については不明です。
> > >
> > > 全作業ログを見せていただけると何かアドバイスできるかもしれません。
> > >
> > お世話になります、大隅です。
> >
> > > > 1の質問.warninngは問題なしでよろしかったでしょうか?
> > >
> > > 問題なしと捉えて良いかと思います。
> >
> > 承知しました。
> >
> > > 作業内容の詳細を把握してない為、原因については不明です。
> > >
> > > 全作業ログを見せていただけると何かアドバイスできるかもしれません。
> >
> > 私も、こんな事はあり得ない、不思議だなと思いながら、質問
> > してしまいました。何か私に勘違いがあったのでしょう。
> >
> > お蔭さまでエラーは消えましたので、次のステップに
> > 進めて参ります。
> >
> > ありがとうございました。
> >
> >
> お世話になります、大隅です。
>
> https://armadillo.atmark-techno.com/forum/armadillo/970
>
> 上記を参考にspidev_test.cをECSPI2を使用して実行させました。
> "linux-4.9-x1-at28\tools\spi"
>
> FORUMには以下の記述ですが、これは機種の差(Armadillo-840とArmadillo-x1)でしょうか。
> spidevを利用したサンプルコードはlinuxソースツリーの以下の場所にあります。
> Documentation/spi/spidev_test.c
>
> ECSPI2のMOSI(CON7-40)とMISO(CON7-39)間ををオープン/ショートどちらにしても
> 以下の結果となりました。
>
> atmark@armadillo:~/spi$ ls /dev/spi*
> /dev/spidev1.0
>
> atmark@armadillo:~/spi$ ls
> Makefile spidev_fdx spidev_fdx.c spidev_test spidev_test.c
>
> atmark@armadillo:~/spi$ sudo ./spidev_test -D /dev/spidev1.0
> [sudo] password for atmark:
> spi mode: 0x0
> bits per word: 8
> max speed: 500000 Hz (500 KHz)
> RX | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................
> atmark@armadillo:~/spi$
>
>
> FORUMの結果(ループバック)
> # ./spidev_test -D /dev/spidev1.0
> spi mode: 0
> bits per word: 8
> max speed: 500000 Hz (500 KHz)
>
> FF FF FF FF FF FF
> 40 00 00 00 00 95
> FF FF FF FF FF FF
> FF FF FF FF FF FF
> FF FF FF FF FF FF
> DE AD BE EF BA AD
> F0 0D
>
> MOSIとMISOが繋がっていれば、上記のようになる筈ですね。
> データ数・表示形式も異なりますがこれはプログラム違いでしょうか。
>
> 確認する箇所などあれば、ご教授ください。
>
> 宜しくお願い致します。
>
お世話になります、大隅です。

ループバックテストが成功しなかった件、
DeviceTree のecspi2定義に際し、
アプリでは送信は使用しない予定の為、
定義をしておりませんでした。
pinctrl_ecspi2: ecspi2grp {
fsl,pins = <
MX7D_PAD_ECSPI2_SCLK__ECSPI2_SCLK 0x00
MX7D_PAD_ECSPI2_MOSI__ECSPI2_MOSI 0x00
MX7D_PAD_ECSPI2_MISO__ECSPI2_MISO 0x00
MX7D_PAD_ECSPI2_SS0__ECSPI2_SS0 0x00
;
};

修正して再確認した所、ループバックテストには成功致しました。
【MOSI-MISO オープン】
atmark@armadillo:~/spi$ sudo ./spidev_test -D /dev/spidev1.0
[sudo] password for atmark:
spi mode: 0x0
bits per word: 8
max speed: 500000 Hz (500 KHz)
RX | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................
【MOSI-MISO ショート】
atmark@armadillo:~/spi$ sudo ./spidev_test -D /dev/spidev1.0
spi mode: 0x0
bits per word: 8
max speed: 500000 Hz (500 KHz)
RX | FF FF FF FF FF FF 40 00 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D | ......@......................隰

失礼しました。

at_mizo

2023年2月16日 11時41分

> > 溝渕です。
> >
> > > (2)SPIのコンフィギュレーショん
> > > Device Drivers -' enter
> > > [*] SPI support -'
> > > <*> Freescale i.MX SPI controllers
> > > *** SPI Protocol Masters ***
> > > <> User moode SPI device driver support  ・・・ ①
> > >
> > > ①の項にチェックを入れると、ユーザードライバーが使用可ということですか?
> >
> > そうです。
> > https://armadillo.atmark-techno.com/blog/615/2577
> > 上記資料にある通り、ユーザーランドから見えるデバイスファイル経由でSPIを利用することが可能です。
> >
> > > 以上の変更をしましたが、ECSPI2が動作していないようです。
> > > 動作していないと判断した理由は、
> > >
> > > https://armadillo.atmark-techno.com/howto/accessing-any-address
> > > 上記を使用して、直接ECSPI2の制御レジスタにRead/Writeをした所、
> > > Write後のreadbackデータが常に0となる事です。
> >
> > レジスタ仕様を把握した上でRead/Writeしていますか? 例えば、Control Registerのbit0はECSPIの enableですが、"1"を書いていますか?
> >
> > もし、/dev/mem経由でユーザーランドからECSPIを制御しようとしているのであれば、ドライバ("drivers/spi/spi-imx.c")を全て書き直すことと同じです。学習目的で無ければ全くおすすめしません。
> >
> > > STATREGのみreadback値が、0x03hとReset valueと同値が戻ってきます。
> > > CONREG/CONFIGREGは、何をWriteしても、readback値は0が戻ってきます。
> > > Address Register Name Reset value
> > > 0x30830008 Control Register (ECSPI2_CONREG) 32bits R/W 0x00000000
> > > 0x3083000C Config Register (ECSPI2_CONFIGREG) 32bits R/W 0x00000000
> > > 0x30830018 Status Register (ECSPI2_STATREG) 32bits R/W 0x00000003
> > >
> > > ECSPIを動作させる条件が整っていないのでしょうか?
> >
> > 正しいシーケンスでレジスタアクセスをしたかどうかが不明なのでお答えできません。
> >
> > > 他に確認する箇所や方法等ご教授頂ければ有難いです。
> >
> > 先に示した資料、
> > https://armadillo.atmark-techno.com/blog/615/2577
> > にある通り、"/dev/spidev[バス番号]"を使って確認してみてはいかがでしょうか?
>
> お世話になります、大隅です。
>
> > レジスタ仕様を把握した上でRead/Writeしていますか? 例えば、Control Registerのbit0はECSPIの enableですが、"1"を書いていますか?
>
> まず、bit0 enable:1にセット後、他のbitを制御しましたが、readbackは、0x00でした。
>
> > もし、/dev/mem経由でユーザーランドからECSPIを制御しようとしているのであれば、ドライバ("drivers/spi/spi-imx.c")を全て書き直すことと同じです。学習目的で無ければ全くおすすめしません。
>
> まずは、試しにRegisterへのアクセクが出来ているかを見る為に、devmem2で確認してみました。
>
> https://armadillo.atmark-techno.com/blog/615/2577
> 7.SPIの使い方
> 上記の手順によって、SPI(ECSPI4)は"/dev/spidev3.0"というデバイスファイルとして見えます。
> 用法については、 Armadillo実践開発ガイド第3部 2.3. SPI接続A/Dコンバーター が参考になります。
>
> DeviceTreeの変更・コンフィギュレーションの変更後、Armadilloを再起動した後に、
> /dev/spidev3.0が見えていません。
> /dev/spi* が出来ていないという事は、それまでの手順に何か問題があるということでしょうか?
>
>

seltec032

2023年4月13日 14時19分

お世話になります、大隅です。

溝渕さまにご指導いただき、ECSPI2をSPIDEVを使用してスレーブモードで動作させる事が
出来るようになりました。ありがとうございました。

ADのサンプリング速度が10kHz(100usec)程度までは、正しくADデータをサンプリング出来ているのですが、
20kHz以上のサンプリング速度になると、データを取りこぼす症状が現れます。(入力が追い付いていない模様)

サンプリング速度の高速化を図る為に改善する箇所があればご教授お願いします。
希望は40kHzサンプリングです。

at_mizo

2023年4月13日 14時40分

溝渕です。

> ADのサンプリング速度が10kHz(100usec)程度までは、正しくADデータをサンプリング出来ているのですが、
> 20kHz以上のサンプリング速度になると、データを取りこぼす症状が現れます。(入力が追い付いていない模様)
>
> サンプリング速度の高速化を図る為に改善する箇所があればご教授お願いします。
> 希望は40kHzサンプリングです。

まず、私が構成を把握していないので教えていただけますか?

Armadillo(SPI slave)にADコンバータ(SPI master)を接続していますか?

「入力が追い付いていない模様」は、ADコンバータの変換速度が遅いという認識で良いでしょうか?

また、AD変換値を受け取るソフトウェアは、アプリケーションで実装しましたか? それともデバイスドライバを作成しましたか?