查看: 1629|回复: 0

[技术交流] RK平台SDIO基础知识及排查文档

[复制链接]

185

主题

204

帖子

596

积分

利尔达员工

Rank: 9Rank: 9Rank: 9

积分
596
发表于 2020-4-14 11:47:22 | 显示全部楼层 |阅读模式
RK平台SDIO基础知识及排查文档
一、硬件:

首先看下硬件:主要的部分都在绿色方框内
WIFI_D0~3数据线,平时为高,电压取决于VCCIO_WL的电压;
WIFI_CMD命令线,平时为高,电压取决于VCCIO_WL的电压;
WIFI_CLK时钟,平时为低,电压取决于VCCIO_WL的电压;
VBAT_WLWIFI模组供电电源,一直都为高,供电需打印3.3v
VCCIO_WLDATA/CMD/CLKIO供电电源,可以为3.3或者1.8v,但SDIO3.0
必须为1.8v
WIFI_REG_ON: 正常工作时为3.3vWiFi关闭时为0v
两个晶振:32K26M/37.4M,正常工作时都会有波形输出;
遇到WIFI SDIO问题时:
1首先以上的电压以及晶振问题;
2、VBAT_WLVCCIO_WL的电源是长供电,但有时候会因为这两路电源和其他模块公用一个电源,可能会出现电压塌陷问题,导致WIFI模组异常;比如下图,有非常多外设都会挂在VCC_IO上面;
二、软件:
首先介绍下SDIO波形基本组成:
下图是WIFI SDIO识别模式时的典型的波形时序图:
简单说一下识别SDIO的方式:主控发出48clk并携带48bit的数据发给SDIO,而SDIO要回应给主控48clk48bit的数据;如下图:
下图是SDIO数据传输阶段的时序图:
实例:
绿色:SDMMC_CLK
黄色:SDMMC_CMD SDMMC_CMD空闲时一直处于高电平
主控发出的波形: 最开始的两个电平有一高一低时,是主控发出去的命令
SD卡响应的波形: 最开始的两个电平有连续的两个低电平是表示卡端有响应
其次主控和响应一般包含48bit的数据,所以48clk为一个完整的包。要确认的就是:主控发出去命令包后,SD卡端是否有响应。
(注意:dts中的相关节点sdio一定要okay,其次是io管脚不要被复用
三、错误典型实例:
1)、电压问题,排查WIFI_DATA线的电压以及VCCIO_WL电压
[  100.086615] slot->flags = 3
[  100.086628] CPU: 0 PID: 113 Comm: kworker/u8:3 Tainted: P        W  O 3.10.0 #250
[  100.086644] Workqueue: kmmcd mmc_rescan
[  100.086663] [<c0013e04>] (unwind_backtrace+0x0/0xe0) from [<c0011720>] (show_stack+0x10/0x14)
[  100.086677] [<c0011720>] (show_stack+0x10/0x14) from [<c050d3b4>] (dw_mci_set_ios+0x9c/0x21c)
[  100.086689] [<c050d3b4>] (dw_mci_set_ios+0x9c/0x21c) from [<c04fabd4>] (mmc_power_up+0x60/0xa0)
[  100.086700] [<c04fabd4>] (mmc_power_up+0x60/0xa0) from [<c04faeac>] (mmc_rescan_try_freq+0x14/0xd0)
[  100.086710] [<c04faeac>] (mmc_rescan_try_freq+0x14/0xd0) from [<c04fb7b4>] (mmc_rescan+0x204/0x298)
[  100.086722] [<c04fb7b4>] (mmc_rescan+0x204/0x298) from [<c00471f0>] (process_one_work+0x29c/0x458)
[  100.086734] [<c00471f0>] (process_one_work+0x29c/0x458) from [<c0047540>] (worker_thread+0x194/0x2d4)
[  100.086745] [<c0047540>] (worker_thread+0x194/0x2d4) from [<c004ca28>] (kthread+0xa0/0xac)
[  100.086759] [<c004ca28>] (kthread+0xa0/0xac) from [<c000da98>] (ret_from_fork+0x14/0x3c)
[  100.086767] 1400..dw_mci_set_ios:  wait for unbusy timeout....... STATUS = 0x206 [mmc2]
[  102.546615] 1009..mci_send_cmd:  wait for unbusy timeout.......[mmc2]
[  102.595819] mmc_host mmc1: Timeout sending command (cmd 0x202000 arg 0x0 status 0x80202000)
(2)、有两种可能:
a) WiFi异常,排查VBAT_WLWIFI_REG_ON以及晶振是否正常
b) 走线太长导致波形质量很差,降频或者修改硬件
dwmmc_rockchip 10218000.rksdmmc: req failed (CMD52): error = 110, timeout = 8000ms
[mmc2] - Timeout recovery procedure start --
rk_sdmmc: BOOT dw_mci_setup_bus: argue clk_mmc workaround out 800000Hz for init[mmc2]
mmc_host mmc2: Bus speed (slot 0) = 37500000Hz (slot req 400000Hz, actual 398936HZ div = 47)
rk_sdmmc: BOOT dw_mci_setup_bus: argue clk_mmc workaround out 800000Hz for init[mmc2]
[mmc2] -- Timeout recovery procedure finished --
3)、走线太长导致波形质量很差,降频或者修改硬件
[  200.731403] [mmc2] Data transmission error !!!!  MINTSTS: [0x00000080]
[  200.731426] [mmc2] host was already tuning, Don't need to retry tune again ignore 0.
4)、WIFI_REG_ON异常
rk_sdmmc: BOOT dw_mci_setup_bus: argue clk_mmc workaround out 800000Hz for init[mmc2]
rk_sdmmc: BOOT dw_mci_setup_bus: argue clk_mmc workaround out 400000Hz for init[mmc2]
rk_sdmmc: BOOT dw_mci_setup_bus: argue clk_mmc workaround out 600000Hz for init[mmc2]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表