2G 的卡可以识别,8G的无法识别,logo如下:
<4>[ 131.916185] rk_sdmmc: BOOT dw_mci_setup_bus: argue clk_mmc workaround out 800000Hz for init[mmc1]
<4>[ 132.604952] slot->flags = 1 1410..dw_mci_set_ios: wait for unbusy timeout....... STATUS = 0x5a06 [mmc1]<3>[ 132.605404] vcc_sd: operation not allowed
<4>[ 132.605414] rockchip_set_mux:warning ignore bank num 15
<4>[ 133.096991] slot->flags = 1 1410..dw_mci_set_ios: wait for unbusy timeout....... STATUS = 0x5a06 [mmc1]
<4>[ 133.588945] slot->flags = 1 1410..dw_mci_set_ios: wait for unbusy timeout....... STATUS = 0x5a06 [mmc1]
<4>[ 134.100642] slot->flags = 3 1410..dw_mci_set_ios: wait for unbusy timeout....... STATUS = 0x5a06 [mmc1]
<6>[ 134.100668] mmc_host mmc1: Bus speed (slot 0) = 50000000Hz (slot req 400000Hz, actual 396825HZ div = 63)
<4>[ 136.560627] 1018..mci_send_cmd: wait for unbusy timeout.......[mmc1]
<3>[ 136.609848] mmc_host mmc1: Timeout sending command (cmd 0x202000 arg 0x0 status 0x80202000)
<4>[ 136.609862] rk_sdmmc: BOOT dw_mci_setup_bus: argue clk_mmc workaround out 800000Hz for init[mmc1]
此次解决的办法是把下面的开关关掉
思考:sd 卡前面握手通信不对,先排除电压问题
主host控制器的同一读写函数为
static const struct mmc_host_ops dw_mci_ops = {
.request = dw_mci_request,
.pre_req = dw_mci_pre_req,
.post_req = dw_mci_post_req,
.set_ios = dw_mci_set_ios, //SD电压设置等
.get_ro = dw_mci_get_ro,
.get_cd = dw_mci_get_cd,
.set_sdio_status = dw_mci_set_sdio_status,
.hw_reset = dw_mci_hw_reset,
.enable_sdio_irq = dw_mci_enable_sdio_irq,
.execute_tuning = dw_mci_execute_tuning,
#ifdef CONFIG_MMC_DW_ROCKCHIP_SWITCH_VOLTAGE
.start_signal_voltage_switch = dw_mci_start_signal_voltage_switch,
.card_busy = dw_mci_card_busy,
#endif
};
通过上面的log 显示. 错误信息在 static void dw_mci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) ;此函数为上面结构体的接口函数;