i.MX6 mmc0: unrecognised EXT_CSD revision 8 错误解决办法

問題現象:

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 ,僅供參考學習。

posted @ 2023-01-14 10:08  白菜没我白  阅读(487)  评论(0编辑  收藏  举报