记录rv1126板卡无法识别sd卡问题排查记录
摘要:依据Rockchip硬件指南设计的底板出现SD卡无法识别问题。排查发现设备树配置正确,内核驱动正常加载,但SD卡初始化始终无响应。通过分析内核错误码-EIO,确认是物理连接问题。硬件人员检查线路连通性和电压异常,最终通过调整电阻和去除防静电元件使SD卡信号波形恢复正常,成功识别。问题根源在于硬件电路设计缺陷而非软件配置。
背景:依据《Rockchip RV1126/RV11029 硬件设计指南》为指导,在核心板上制作的底板,打板回来后,发现sd卡插上后无法识别
排查思路:
查看原理图,数据手册,没发现引脚有问题,芯片上的这几个pin脚确实是可以用作sdmmc功能。


然后查看设备树配置:
dtb文件反编译得到的结果:

对该节点的解释:

源dts文件里该节点的配置

从设备树节点来看,符合数据手册的要求,另外也检查了这几个引脚的复用功能,确认了这几个引脚没有用做其他功能,只当作fatasheet里的FUNCTION1功能(即sdmmc功能使用),所以设备树配置正常。
进入到系统后查看/sys/class/mmc_host/目录下已经有mmc2这个设备,说明这个设备节点已经被内核正确解析并加载到系统中了

看到生成了/sys/class/mmc_host/device/driver,说明驱动也被正确识到别了

然后再看dmesg中关于mmc的信息:

上面的数据显示sdmmc控制器一直在向外部sd卡发送初始化命令,但是一直未得到回应。驱动不断重试,但所有命令都收不到SD卡的任何回应,反复打印“超时。
而且我根据上面的错误码,专门去内核源码中的mmc控制器那一部分去追溯源码(位于 kernel/dvivers/mmc/core/core.c ),看一下那个错误码-5代表什么意思,经过查阅后得知,
当 SD 卡初始化流程中遇到严重错误时,驱动才会返回这个错误码。具体来说
SD卡初始化流程大致如下:
- 主控上电,复位SD卡
- 发送命令(如CMD0、CMD8、ACMD41等)探测卡的存在和能力
- 读取卡的CID、CSD等寄存器
- 协商电压、总线宽度、速度等参数
- 完成初始化,挂载块设备
只要在上述任何一步,主控发出的命令得不到SD卡的有效响应,或者收到的数据不对,驱动就会返回-EIO(-5),并打印这句日志。
对以上错误日志的追踪和分析。这说明sdmmc控制器驱动以及设备树配置是正确的,只是物理上根本与sd卡建立连接,由此可以断定是硬件问题
与硬件人员沟通,让他去排查,先是差了拿几根线与芯片引脚之间的连通性,又查了那几个引脚之间是否存在短路问题。这些都没有,当时他发现之前原理图中的CLK时钟线电压不正常,找到我,我说软件方面配置的就是3.3V给他供电,这个不用怀疑。然后他又看了下rv1126官方的硬件设计指南,加了个电阻,电压总算正常,但是依然还是识别不到sd卡,有用示波器抓波形观测,发现数据线上的电压值也不对。后来他又把那几个防静电的元起价不能都给去除掉,然后终于波形全部正常,也能识别到sd卡了。

更多推荐



所有评论(0)