Armadilloフォーラム

SD カード

tasuzuki

2025年5月20日 11時30分

Armadillo-900のSD インターフェースにおいて、
信号電圧のセレクターを必要としない3.3V固定の回路を検討しております。
ソフト設定変更で信号レベル3.3V固定で使用することできるでしょうか?
また、消費電流を抑えたい為、Bus speed modeをDefault Speed(12.5MB/s)に
制限することは可能でしょうか?

コメント

at_dominique.m…

2025年5月20日 15時03分

tasuzukiさん

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

> Armadillo-900のSD インターフェースにおいて、
> 信号電圧のセレクターを必要としない3.3V固定の回路を検討しております。
> ソフト設定変更で信号レベル3.3V固定で使用することできるでしょうか?

ハード的には、SD信号の信号レベルは1.8V固定で変更はできません。

> また、消費電流を抑えたい為、Bus speed modeをDefault Speed(12.5MB/s)に
> 制限することは可能でしょうか?

Linux 起動後でしたら dtb の max-frequency 設定で制限可能です。
(armadillo_900-evaboard.dts 相当の dtbo や armadillo_900-customize.dts に)

&usdhc2 {
	// limit max frequency
	max-frequency = <12500000>;
};

linux-at-x2-debug カーネルをインストールすると debugfs を利用できますので /sys/kernel/debug/mmc2/clock で確認できます。

よろしくおねがいします

マルティネさん
ご回答ありがとうございます。

> ハード的には、SD信号の信号レベルは1.8V固定で変更はできません。

Armadlioo-900の信号電圧が1.8V固定は理解しております。
SDインターフェースの1.8V⇔3.3V/1.8VレベルシフタのSD側を
3.3Vに固定できないでしょうか?
信号のレベルシフタは、1.8V⇔3.3Vに電圧を固定し、
1.8V/3.3Vセレクターが削除できないか検討しております。

> Linux 起動後でしたら dtb の max-frequency 設定で制限可能です。

SD Bootで起動中のBus Speedはどうなっているのでしょうか?
Linux起動中にSDRやDDRのSpeed Mode(1.8V signaling)に
遷移するのであれば、規格の電流容量(400mA)は確保する
必要があるかと思います。。
また、上記セレクター削除もできないことになるでしょうか?

よろしくお願いいたします。

at_dominique.m…

2025年5月20日 17時37分

マルティネです。

> > ハード的には、SD信号の信号レベルは1.8V固定で変更はできません。
>
> Armadlioo-900の信号電圧が1.8V固定は理解しております。
> SDインターフェースの1.8V⇔3.3V/1.8VレベルシフタのSD側を
> 3.3Vに固定できないでしょうか?
> 信号のレベルシフタは、1.8V⇔3.3Vに電圧を固定し、
> 1.8V/3.3Vセレクターが削除できないか検討しております。

なるほど、これでしたら可能だと考えています。

1.8V対応はUHS-I対応SDカードの場合に必要なだけなので、UHS-I対応が不要(High Speedまで対応)なのであれば、レベルシフタのSDカード側は3.3V固定でもハード的には動きます。

ただ、UHS-I対応のカードを搭載した場合にソフト的にその機能を無効化しないとそれで動こうとしますので、maxspeed の対応だけでは足りない可能性がありますので少し時間をください。

> > Linux 起動後でしたら dtb の max-frequency 設定で制限可能です。
>
> SD Bootで起動中のBus Speedはどうなっているのでしょうか?

u-boot に関しては UHS の対応は無効化されていますが、HS400 は有効になってますのでこれも電圧を操作しようとする恐れがありますね。
そちらに関しては uboot-imx/configs/armadillo-900_defconfig ファイルから以下の2行を削除すれば問題ないかと思います:

CONFIG_MMC_HS400_ES_SUPPORT=y
CONFIG_MMC_HS400_SUPPORT=y

Bus speed の制限はこれ以上できなさそうなので、細かい制限が必要な場合は drivers/mmc/fsl_esdhc_imx.c の修正が必要かもしれません。

Linux の確認はできましたらまた連絡します。

よろしくおねがいします

マルティネさん
ご回答ありがとうございます。
また、引き続き検討および確認いただけるとの事、感謝申し上げます。
よろしくお願いいたします。

案の1つとして、
SD 2GB(SDHCやSDXCではない)であれば、信号電圧を3.3Vに固定
できると思いますので、SDカードを制限する運用で対処することも
考えております。

SD bootは初回書き込みだけの利用を想定しているため、
現状は2GBあれば事足りると思っています。

溝渕です。

Device Treeのプロパティに、
"no-1-8-v"
を追加すると、ホストの機能から1.8V対応を除外できる(カードが対応していても、ホストとの整合が取れなのいので1.8Vにならない)と思います。

試した事はありませんが、コードを見る限りちゃんと動作しそうです。

すでに追加した以下のプロパティは削除しないでください。
"max-frequency"

以上です。

溝渕さん
ご教授ありがとうございます。

いただいた情報をもとに
引き続き実現性について検討したいと思います。

初期化インストールディスクでSD Bootした場合のSD Bus Speed modeは
どうなっているのでしょうか?
また、この時のI/O電圧を3.3Vに固定する、または周波数を低く設定して
Bootする方法はあるでしょうか?

溝渕です。

> 初期化インストールディスクでSD Bootした場合のSD Bus Speed modeは
> どうなっているのでしょうか?
> また、この時のI/O電圧を3.3Vに固定する、または周波数を低く設定して
> Bootする方法はあるでしょうか?

U-Bootは、CONFIG_MMC_UHS_SUPPORTが無効になっているので1.8Vになりません。

DTBは、
build-rootfs/a900/resources/boot/
以下に1.8Vを無効にしたものを置いてください。そうすると、インストールディスク自体のDTBも、インストールディスクによってeMMCに配置されるDTBも1.8Vが無効になります。