Armadilloフォーラム

Armadillo-X1 : CON8のGPIO5にてSDカードを使用可能にする方法について

sho_oikawa

2021年4月14日 13時47分

お世話になっております。
及川と申します。

Armadillo-X1のGPIO5の部分にてマルチプレクスの設定を行い、
SDカードをマウントできるようにしたいと考えております。
用途としては普通の外部メモリとして用いる予定です。

マルチプレクスの方法について
https://armadillo.atmark-techno.com/blog/53/2584
https://armadillo.atmark-techno.com/blog/53/2629
を参考に設定を試みましたが、
記載にあった「1行目:設定するためのドライバ指定」の時点で躓いております。

浅学のため申し訳ございませんが、
SDカードのマルチプレクス設定を行う方法について、ご教授いただけませんでしょうか。

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

コメント

at_akihito.irie

2021年4月14日 17時55分

入江です。

> https://armadillo.atmark-techno.com/blog/53/2584
> https://armadillo.atmark-techno.com/blog/53/2629
> を参考に設定を試みましたが、
> 記載にあった「1行目:設定するためのドライバ指定」の時点で躓いております。

申し訳ございません。上記記事内、&iomuxでなく、&iomuxcの間違いでした。
修正いたしました。

> SDカードのマルチプレクス設定を行う方法について、ご教授いただけませんでしょうか。

Armadillo-X1 開発セット同梱の拡張ボードではCON8のSDインターフェースを
使用しています。
その設定を行っている以下のファイルが参考になると思います。
https://github.com/atmark-techno/linux-4.9-at/blob/master/arch/arm/boot…

及川です。

入江様、回答ありがとうございます。

> Armadillo-X1 開発セット同梱の拡張ボードではCON8のSDインターフェースを
> 使用しています。
> その設定を行っている以下のファイルが参考になると思います。
> https://github.com/atmark-techno/linux-4.9-at/blob/master/arch/arm/boot…

今回は[armadillo_x1.dtb]をmakeして用いているため、[armadillo_x1.dts]に参照先の内容を記載して
makeを行いました。その場合、[armadillo_x1.dtb]作成時にはエラーとならなかったのですが、
[armadillo_x1-extboard-eva01-usbhost.dtb]make時にエラーとなりました。

対応として添付ファイルの[armadillo_x1_changed.dts]のように
参考とした内容と少し内部の変数を変更したらコンパイルは正常終了したため、
そちらで動作確認を行いました。

しかしアップデート後、SDカードの参照先が変になっているような挙動となってしまいます。
変更ファイルは上記の[armadillo_x1_changed.dts]にて[armadillo_x1.dts]を上書きしたのみとなります。
(ファイル名は[armdillo_x1.dts]です)

修正点、改善点などをお教えいただけませんでしょうか。

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

ファイル ファイルの説明
dts.zip armadillo_x1_base.dtsは初期時、armadillo_x1_changed.dtsは変更後のファイルとなります。

at_akihito.irie

2021年4月19日 11時47分

入江です。

> しかしアップデート後、SDカードの参照先が変になっているような挙動となってしまいます。

具体的に何が起こっているか説明頂くことは可能でしょうか。
(エラーメッセージが出力されている等)

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

及川です。

> 具体的に何が起こっているか説明頂くことは可能でしょうか。
> (エラーメッセージが出力されている等)

添付ファイルのような形になります。

[従来]の方は比較用です。
[起動時エラー出力]は二つのログが入っています。
①最初~590行目は追加したSDカード部分に何も挿入しない状態のログです。
②591~最後はマイクロSDカードを挿入した状態のログです。
 [mmcblk1]に対して転送データエラーなどの内容で表示されます。

因みに、SDカード部分はアップデート用と拡張用の二つ分用意したく考えております。
アップデート用はX1のCON7?の部分であり、拡張用はGPIO5を使う予定です。

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

ファイル ファイルの説明
teraterm_起動時エラー出力.log
teraterm_従来.log

at_akihito.irie

2021年4月20日 16時23分

入江です。

問題の切り分けのため、400kHz程度まで動作周波数を落として動作するか確
認していただけますでしょうか。

具体的な手順としましては、&usdhc2ノードにmax-frequencyを追記して動作周
波数を指定します。

&usdhc2 {
	pinctrl-names = "default", "state_power_off";
	pinctrl-0 = <&pinctrl_usdhc2_ex>;
	pinctrl-1 = <&pinctrl_usdhc2_ex_power_off>;
	pinctrl-assert-gpios = <&gpio5 13 GPIO_ACTIVE_LOW>,	/* SD2_CMD */
			       <&gpio5 14 GPIO_ACTIVE_LOW>,	/* SD2_DATA0 */
			       <&gpio5 15 GPIO_ACTIVE_LOW>,	/* SD2_DATA1 */
			       <&gpio5 16 GPIO_ACTIVE_LOW>,	/* SD2_DATA2 */
			       <&gpio5 17 GPIO_ACTIVE_LOW>;	/* SD2_DATA3 */
	tuning-step = <2>;
	vmmc-supply = <&reg_sd2_ex_vmmc>;
	vqmmc-supply = <&vgen6_reg>;
	enable-sdio-wakeup;
	keep-power-in-suspend;
	no-1-8-v;
	max-frequency = <400000>; /* この行を追加 */
	status = "okay";
};

上記修正適用後、再度dtbを生成し、Armadilloに書き込んで動作確認を行って
ください。

及川です。

ご確認いただきありがとうございます。
起動ログについて添付いたします。

1~593行目がSDカード未挿入状態での起動ログで、
594~最後がSDカード挿入状態での起動ログとなります。

先ほどとは異なり、エラーが表示されていないように見えます。

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

ファイル ファイルの説明
teraterm_速度変更版.log

at_akihito.irie

2021年4月21日 15時24分

入江です。

クロックを落とすと正常に動作するようですので、SDの波形に問題があるよう
です。

つきましては、dtsからmax-frequencyの記述を削除し再ビルド、Armadilloに
書き込んでください。
その後、SDの各信号の波形を確認してください。

- 信号がなまってしまっていて、SDの信号のSetup/Hold時間を満たせていない
- 信号線の長さがそれぞれ違っていて、信号の伝達にずれが生じている

など、SDの信号規格に合っていないことが考えられますので、ご確認ください。

お世話になっております。及川です。

> - 信号がなまってしまっていて、SDの信号のSetup/Hold時間を満たせていない
> - 信号線の長さがそれぞれ違っていて、信号の伝達にずれが生じている
>
> など、SDの信号規格に合っていないことが考えられますので、ご確認ください。

クロック部分の抵抗を変更したところ、エラーが出ることもなくなりました。
マウントも[/dev/mmcblk1p1]を対象に行い、SDカードの読み書きもできました。

入江様、回答いただきありがとうございました。