一、emmc

emmc支持多种速率模式,这些模式均可以在dts中进行配置


1、legacy 模式

image.png

通过上面的代码可以看出,由于大部分的卡都是支持HS_52的,所以除非强制修改代码,修改card_type值为不支持HS_52,否则默认都是不进入legacy模式,而是进入high speed模式


2、high speed 模式

sdhci-caps-mask = <0x7 0x0>; // DDR50-SDR104-SDR50

cap-mmc-highspeed;

注意:添加sdhci-caps-mask 的原因是因为:


image.png


在代码中会判断host->cap1是否支持SDR104,而如果probe中手动传入cpas1的值的话,host->cap1的值是通过读取寄存器来获取的,同时会通过sdhci-caps-mask 来进行屏蔽。

所以需要在dts中添加sdhci-caps-mask ,屏蔽掉SDR104,这样就不会进入HS200了,否则代码会强制进入HS200


如果正常开机会有打印:


mmc0: new high speed MMC card at address 0001

3、DDR52模式

(1)dts中添加


sdhci-caps-mask = <0x6 0x0>; // DDR50-SDR104-SDR50

mmc-ddr-1_8v;

如果正常开机会有如下打印:


new DDR MMC card at address 0001

4、HS200模式


mmc-hs200-1_8v

如果正常开机会有如下打印:


mmc0: new HS200 MMC card at address 0001

5、HS400模式


mmc-ddr-1_8v;

mmc-hs200-1_8v;

mmc-hs400-1_8v;

如果正常开机会有如下打印:


mmc0: new HS400 MMC card at address 0001

6、HS400es模式


mmc-hs400-1_8v;

mmc-hs400-enhanced-strobe

如果正常开机会有如下打印:


mmc0: new HS400 Enhanced strobe MMC card at address 0001

二、SD卡

1、default模式

2、high speed模式


sdhci-caps-mask = <0x7 0x0>; // DDR50-SDR104-SDR50

cap-sd-highspeed;

mmc1: new high speed SDHC card at address aaaa

3、SDR12

4、SDR25

5、SDR50


sdhci-caps-mask = <0x6 0x0>; // DDR50-SDR104-SDR50

sd-uhs-sdr50;

6、SDR104


sd-uhs-sdr104;

7、DDR50


sdhci-caps-mask = <0x3 0x0>; // DDR50-SDR104-SDR50

sd-uhs-ddr50;

————————————————

版权声明:本文为CSDN博主「drm2017」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/drm2017/article/details/129086854