Donlon 发表于 2022-3-5 00:07:16

90% 开发者都无法解决的 eMMC 错误,你遇到过吗

本帖最后由 Donlon 于 2022-3-10 20:34 编辑

之前自己给开发板编译了一个最新版本的uboot,并把uboot在Linux下通过dd命令刷到eMMC里了,但重启后不能正常开机。在串口上可以看到输出了以下的内容,是卡在了uboot SPL的界面,提示mmc初始化错误。(按找最下面一行提示说的的复位开发板也还是会出现同样的错误)

U-Boot TPL 2021.10-gd80bb749fa (Nov 10 2021 - 00:35:53)
Channel 0: DDR3, 800MHz
BW=32 Col=10 Bk=8 CS0 Row=15 CS=1 Die BW=16 Size=1024MB
Channel 1: DDR3, 800MHz
BW=32 Col=10 Bk=8 CS0 Row=15 CS=1 Die BW=16 Size=1024MB
256B stride
Trying to boot from BOOTROM
Returning to boot ROM...

U-Boot SPL 2021.10-gd80bb749fa (Nov 10 2021 - 00:35:53 +0800)
Trying to boot from MMC1
Card did not respond to voltage select! : -110
spl: mmc init failed with error: -95
SPL: failed to boot from all boot devices
### ERROR ### Please RESET the board ###

在出现这个错误时,初步怀疑是新版uboot的问题,因为之前用Firefly提供的uboot都可以正常启动,而更新了之后却不行。因此,打算先进入Maskrom模式,刷回原来的uboot再继续解决问题。
接着短接eMMC的时钟并启动,将开发板连接电脑,可以在Android Tool里识别到一个Maskrom设备。随后在升级固件里选择从 https://www.t-firefly.com/doc/download/3.html 下载的 FIREFLY-RK3399-DEBIAN9-DESKTOP-GPT-20200110-1051.img,并点击升级,此时串口显示了以下信息

DDR Version 1.22 20190506
In
Channel 0: DDR3, 800MHz
Bus Width=32 Col=10 Bank=8 Row=15 CS=1 Die Bus-Width=16 Size=1024MB
Channel 1: DDR3, 800MHz
Bus Width=32 Col=10 Bank=8 Row=15 CS=1 Die Bus-Width=16 Size=1024MB
256B stride
ch 0 ddrconfig = 0x101, ddrsize = 0x20
ch 1 ddrconfig = 0x101, ddrsize = 0x20
pmugrf_os_reg = 0x32817281, stride = 0x9
OUT
Boot1: 2019-03-14, version: 1.19
CPUId = 0x0
mmc: ERROR: SDHCI:Transfer data timeout
mmc: ERROR: SDHCI ERR:cmd:0x153a,stat:0x0
mmc: ERROR: Tuning procedure failed, falling back to fixed sampling clock
mmc: ERROR: tuning execution failed
emmc reinit
mmc: ERROR: SDHCI:Transfer data timeout
mmc: ERROR: SDHCI ERR:cmd:0x153a,stat:0x0
mmc: ERROR: Tuning procedure failed, falling back to fixed sampling clock
mmc: ERROR: tuning execution failed
emmc reinit
mmc: ERROR: SDHCI:Transfer data timeout
mmc: ERROR: SDHCI ERR:cmd:0x153a,stat:0x0
mmc: ERROR: Tuning procedure failed, falling back to fixed sampling clock
mmc: ERROR: tuning execution failed
可以看到也有emmc的错误,同时在Android Tool里,则提示了以下错误:

下载Boot开始
下载Boot成功
等待Maskrom开始
等待Maskrom成功
测试设备开始
此时也无法在Maskrom模式下刷固件。

另外,如果在SD卡槽插入一个刷了Linux固件的SD卡的话,在短接了eMMC的时钟的情况下,SD卡里的系统是可以正常启动的,但是启动后无法识别eMMC(/dev目录下只有一个mmcblk0,是SD卡对应的设备),在dmesg里可以找到一个mmc1: error -110 whilst initialising MMC card的错误

虽然以上的错误都指向eMMC,但是eMMC应该是好的,因为最前面的log是uboot打印的,而这个uboot是刷到eMMC里的,所以eMMC应该可以正常读取,但是就是不能正常启动,而且Maskrom模式下也不能正常刷固件,所以想请问一下是上面的操作有问题还是有其他的原因?

liaoya 发表于 2023-10-17 08:40:34

请问你后来找到解决方法了吗?
页: [1]
查看完整版本: 90% 开发者都无法解决的 eMMC 错误,你遇到过吗