問題現象:
mmc0: unrecognised EXT_CSD revision 8 mmc0: error -22 whilst initialising MMC card
解決方法:
在我们的参考设计板中,eMMC IC是Sandisk SDIN5C2-8(4.41),在i.MX6参考手册和数据表中,我们可以知道它与MMC系统规范版本4.2/4.3/4.4兼容,并且数据表中的详细信息声明uSDHC模块“完全符合多媒体卡系统规范v4.2/4.3/4.4/4.41中定义的MMC命令/响应集和物理层,包括高容量(> 2 GB) HC MMC卡”。EMMC4.4/4.41的原因可以在我们发布的BSP中工作。
但是eMMC 4.4已经停止,eMMC 4.41也有可能停止。我们的许多客户会选择eMMC 4.5或高版本的eMMC 5.0和eMMC 5.1。如何使eMMC 4.5、eMMC 5.0和eMMC 5.1在i.MX6上工作?
EMMC 4.5或EMMC 5.0 /5.1向后兼容eMMC4.4,我们可以在eMMC4.4模式下使用它在i.MX6平台上启用eMMC4.4功能和性能。不支持从eMMC4.5或更高版本的设备引导,当检测到支持eMMC4.5或更高版本的设备时,引导ROM将退回到eMMC4.4标准。在BSP中可以绕过eMMC版本检查,因此eMMC v4.5或更高版本可以作为eMMC v4.4卡使用,不支持特定的v4.5特性。仅支持基本的读写操作。
在源代码中,我们可以更改card->ext_csd.rev的检查值。
以eMMC4.5为例,当前的i.MX6 Linux BSP (L3.0.35_4.1.0) 增加了与eMMC4.5卡接口的代码,以作为eMMC4.4卡进行操作。修改 card->ext_csd 的值。rev 5到6,现在eMMC 5.0可以作为eMMC 4.4工作。代码 drivers/mmc/core/mmc.c:
而对于EMMC 5.0和EMMC5.1,修改内核以支持EMMC 5.0和5.1扩展CSD修订,如下所示:
/drivers/mmc/core/mmc.c : if (card->ext_csd.rev > 6) { // The '6' has to be replaced with '7' For EMMC5.0 ; The '6' has to be replaced with '8' For EMMC5.1 pr_err("%s: unrecognised EXT_CSD revision %d\n", mmc_hostname(card->host), card->ext_csd.rev); err = -EINVAL; goto out; }
修改代码后,我们需要重建用于MfgTool的固件uImage。更新Mfgtool中的uImage,可以成功闪光。
eMMC 5.0和5.1版本可用于基于IMX6的单板。
參考:https://community.nxp.com/t5/i-MX-Processors-Knowledge-Base/EMMC-5-0-and-EMMC-5-1-work-on-i-MX6/ta-p/1118941 ,僅供參考學習。
标签:5.0,mmc0,EMMC,eMMC,MX6,CSD,mmc,card From: https://www.cnblogs.com/xingboy/p/17051324.html