【Hi3519DV500】SD卡64G正常识别,16G和32G识别失败,报告警 mmc1: error -110 whilst initialising SD card
目录环境问题定位和解决设备树文件层次关系与覆盖原则解决方案方案一修改环境变量推荐方案二修改设备树方案三修改硬件支持环境Hi3519DV500开发板参考文档鸿鸥派 HongOU PI V2.0\04_SDK资料\01_官方文档\ReleaseDoc\zh\01.software\board\BSP\外围设备驱动 操作指南.pdf问题SD卡64G正常识别16G和32G识别失败非同一品牌发 dmesg | grep -i mmc 指令查看内核日志报mmc1: error -110 whilst initialising SD card告警。(dmesg | tail -n 20 查看最近20条)Kernel command line: mem1024M total_mem2G consolettyAMA0,115200 clk_ignore_unused root/dev/mmcblk0p6 rootfstypeext4 rw rootwait blkdevpartsmmcblk0:512K(boot),512K(env),1M(logo),512K(bl31),15M(kernel),-(rootfs) mmc_core.ignore_crc1 mmc0: SDHCI controller on 10020000.eMMC [10020000.eMMC] using ADMA 64-bit mmc1: SDHCI controller on 10030000.SDIO [10030000.SDIO] using ADMA 64-bit mmc0: tuning done! valid phase shift [10, 8] Final Phase:25 mmc0: new HS200 MMC card at address 0001 mmcblk0: mmc0:0001 H8G4a2 7.28 GiB mmcblk0boot0: mmc0:0001 H8G4a2 partition 1 4.00 MiB mmcblk0boot1: mmc0:0001 H8G4a2 partition 2 4.00 MiB mmcblk0rpmb: mmc0:0001 H8G4a2 partition 3 4.00 MiB, chardev (250:0) mmcblk0: p1(boot) p2(env) p3(logo) p4(bl31) p5(kernel) p6(rootfs) mmc1: tuning failed! can not found edge! mmc1: tuning execution failed: -1 mmc1: error -1 whilst initialising SD card EXT4-fs (mmcblk0p6): recovery complete EXT4-fs (mmcblk0p6): mounted filesystem with ordered data mode. Opts: (null) mmc1: error -110 whilst initialising SD card mmc1: error -110 whilst initialising SD card mmc1: error -110 whilst initialising SD card定位和解决通过以上告警发现是mmc1告警查找设备树发现mmc1中有设置SDMMC为sdr104模式。hi3519dv500\open_source\linux\linux-5.10.y\arch\arm64\boot\dts\vendor\hi3519dv500.dtsihi3519dv500\open_source\linux\linux-5.10.y\arch\arm64\boot\dts\vendor\hi3519dv500-demb.dtshi3519dv500\open_source\linux\linux-5.10.y\arch\arm64\boot\dts\vendor\hi3519dv500-demb-emmc.dts设备树文件层次关系与覆盖原则hi3519dv500.dtsiSoC 级定义描述芯片支持的硬件能力如sd-uhs-sdr104等。是所有使用该芯片的板子的共同基础。hi3519dv500-demb.dts板级基础文件包含 demb 系列板子的通用配置。它引用了hi3519dv500.dtsi并覆盖了mmc1的状态为okay使能 SD 卡插槽。hi3519dv500-demb-emmc.dts具体板型emmc 版本的最终配置文件。它包含了hi3519dv500-demb.dts并额外覆盖了mmc0的状态eMMC 使能。解决方案从上面的几个文件中可以发现mmc1已经使能并且SDMMC配置成sd-uhs-sdr104模式。而sd-uhs-sdr104模式需要SDMMC通信引脚电源域供电电压为1.8~3.3V可调范围。而发现开发板电源固定为3.3V无法支持1.8V导致不支持sd-uhs-sdr104模式所以MMC控制器切换后无法通信。方案一修改环境变量推荐因硬件已经固定不好再去修改硬件因此可以通过配置环境变量或者修改设备树的方式。hi3519dv500\open_source\linux\linux-5.10.y\drivers\mmc\host\sdhci.h 文件中定义了禁用1.8V的宏SDHCI_QUIRK2_NO_1_8_V其数值为4。sdhci.c是SD卡相关的实现。快速验证1.在单板中发送cat /proc/cmdline查看信息2.重启单板再串口倒计时前按enter回车进入boot模式修改bootargs变量增加sdhci.debug_quirks24setenv bootargs mem1024M total_mem2G consolettyAMA0,115200 clk_ignore_unused root/dev/mmcblk0p6 rootfstypeext4 rw rootwait blkdevpartsmmcblk0:512K(boot),512K(env),1M(logo),512K(bl31),15M(kernel),-(rootfs) sdhci.debug_quirks24 saveenv3.然后输入boot重启在启动完成后在单板中发送cat /proc/cmdline查看信息mem1024M total_mem2G consolettyAMA0,115200 clk_ignore_unused root/dev/mmcblk0p6 rootfstypeext4 rw rootwait blkdevpartsmmcblk0:512K(boot),512K(env),1M(logo),512K(bl31),15M(kernel),-(rootfs) sdhci.debug_quirks24可以看到sdhci.debug_quirks24已经被追加成功此时插入之前不能识别的16G和32G sd卡均能正常识别出。至此如果只需修改一个设备就已经完成如果需要批量生产则需要修改内核的环境变量配置hi3519dv500\smp\a55_linux\source\bsp\tools\pc\uboot_env\env_text\hi3519dv500\emmc_env.txt即在bootargs后面追加sdhci.debug_quirks24即可。bootargsmem1024M total_mem2G consolettyAMA0,115200 clk_ignore_unused root/dev/mmcblk0p6 rootfstypeext4 rw rootwait blkdevpartsmmcblk0:512K(boot),512K(env),1M(logo),512K(bl31),15M(kernel),-(rootfs) sdhci.debug_quirks24只需要单独编译环境变量即可在上图的makefile和README中有详细编译说明再将编译后的emmc_env.bin替换烧录进单板即可。如果想全部重新编译在hi3519dv500\smp\a55_linux\source\bsp\下执行make BOOT_MEDIAemmc LIB_TYPEglibc CHIPhi3519dv500 all下即可该目录下的makefile和README有详细编译说明编译完成后hi3519dv500\smp\a55_linux\source\bsp\pub\下的hi3519dv500_emmc_image_glibc即是最新编程生成的镜像包重新烧录记录。方案二修改设备树修改设备树有两种方式直接注释掉hi3519dv500.dtsi文件中的sd-uhs-sdr104模式或添加no-1-8-v或者在hi3519dv500-demb-emmc.dts文件中mmc1添加no-1-8-v。而在注释掉hi3519dv500.dtsi文件中的sd-uhs-sdr104模式或添加no-1-8-v会导致所有使用Hi3519DV500的板子都不支持sd-uhs-sdr104模式或者强制禁用1.8V但是其他板子1.8V电源可能是正常的。而又因hi3519dv500-demb.dts 是所有 demb 系列板子的公共配置。如果在其中添加no-1-8-v会影响所有基于 demb 的板型如hi3519dv500-demb-flash.dts等hi3519dv500-demb-emmc.dts 是当前正在使用的板子的具体配置仅影响这一种板型因此修改hi3519dv500-demb-emmc.dts文件是最好的方式如下。如果需要限速再在mmc1增加max-frequency限速即可一般不需要。no-1-8-v是标准设备树属性被 MMC 核心驱动识别会阻止任何 1.8V 信号切换尝试。max-frequency将总线时钟限制在 25MHz确保即使卡支持高速模式也不会进入。该属性可选因为no-1-8-v已经会让卡运行在 3.3V 默认速度下。mmc1 { no-1-8-v; max-frequency 25000000; };方案三修改硬件支持如果硬件可改直接修改硬件支持1.8V-3.3V即可。参考链接https://blog.csdn.net/qq_42925353/article/details/147504233https://blog.csdn.net/wangdapao12138/article/details/82933305
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2459139.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!