最近遇到sdio设备无法识别问题,一直解决不掉很痛苦,好在最终解决,分享下

模块:

用的是有WIFI和BT功能的芯片,WIFI采用sdio接口,由WL_EN控制上电;BT是UART接口,由BT_EN控制上电;

基础知识:

首先sdio属于mmc子系统中设备,mmc子系统包括:sdio,sd,mmc

sdio设备在加载driver之前,首先得被mmc子系统识别到,才能进行后续操作

  • drivers/mmc/core/core.c,在4个频率下扫描设备(400kHZ,300kHZ,200kHZ,100kHZ)
static const unsigned freqs[] = { 400000, 300000, 200000, 100000 };void mmc_rescan(struct work_struct *work)
{   ......for (i = 0; i < ARRAY_SIZE(freqs); i++) {if (!mmc_rescan_try_freq(host, max(freqs[i], host->f_min))) {extend_wakelock = true;break;}if (freqs[i] <= host->f_min)break;}......
}
  • 在扫描前先发个sdio_reset(CMD52)命令,只有sdio设备会有响应

之后按照sdio(CMD5),sd,mmc的顺序扫描,一旦扫到立即返回

static int mmc_rescan_try_freq(struct mmc_host *host, unsigned freq)
{....../** sdio_reset sends CMD52 to reset card.  Since we do not know* if the card is being re-initialized, just send it.  CMD52* should be ignored by SD/eMMC cards.*/sdio_reset(host);mmc_go_idle(host);mmc_send_if_cond(host, host->ocr_avail);/* Order's important: probe SDIO, then SD, then MMC */if (!mmc_attach_sdio(host))return 0;if (!mmc_attach_sd(host))return 0;if (!mmc_attach_mmc(host))return 0;mmc_power_off(host);return -EIO;
}

如果成功检测到设备,便会进行后续的mmc_sdio_init_card和mmc_add_card,进行建立设备节点等操作

检测到设备的check方式:

  1. 查看节点             
  2. 看开机kernel log        <6>[    8.382000] mmc0: new SDIO card at address 0001

实验经历

以上都check过后,sdio设备依然对CMD52和CMD没有response,于是做了下面的实验

  • 测量波形

用示波器量开机时候的波形,确认是否有信号出来;结果是发现开机过程中是有信号的,正常开完机就没有了

(黄色SDIO_CLK,蓝色SDIO_CMD),所以猜测这个信号可能是host端发给sdio设备的检测信号,但sdio是否有回复呢?

可以用逻辑分析仪看一下结果,逻辑分析仪用法可以参考上篇博文https://blog.csdn.net/miss_lazygoat/article/details/84105304

截取一段逻辑分析仪的结果来看,全是从host端发出的cmd,没有slave的回应,CMD52也是符合预期的

Time [s] Value
1.96874275 START
1.9687453 DIR:from Host
1.9687478 CMD:52
1.968763 ARG:0x00
1.9688441 CRC:0x1C
1.96886185 STOP
1.9696981 START
1.96970065 DIR:from Host
1.96970315 CMD:52
1.96971835 ARG:0x08
1.96979945 CRC:0x4F
1.9698172 STOP
1.9719129 START
1.9719154 DIR:from Host

既然能确认host端已发送检测命令,没有response就是slave端的问题了,给芯片供应商去排查就好了。

最后发现问题所在:WL_EN和BT_EN需同时拉高模组才能正常工作(由于模块bug),之后sdio便能正常被识别了

关键log

  • 没有response,request返回的都是-110
<7>[    8.261000] mmc0: req failed (CMD5): -110, retrying...
<7>[    8.261000] dwmmc_balong 900ae000.dwmmc1: start command: ARGR=0x00000000 CMDR=0x20000045 CMD(5)
<6>[    8.261000] ftyreset module initialized.
<6>[    8.261000] [HWLOCK] drv verify simlock init ok!
<7>[    8.262000] mmc0: req done (CMD5): -110: 00000000 00000000 00000000 00000000
<7>[    8.262000] mmc0: starting CMD55 arg 00000000 flags 000000f5
<7>[    8.262000] dwmmc_balong 900ae000.dwmmc1: start command: ARGR=0x00000000 CMDR=0x20000177 CMD(55)
<6>[    8.263000] SIO data mode[0], clk mode[1], clk rate[2048000]
<7>[    8.263000] mmc0: req done (CMD55): -110: 00000000 00000000 00000000 00000000
  • 有response,request返回0,最后能找到SDIO card
<7>[    8.410000] mmc0: starting CMD52 arg 00227800 flags 00000195
<7>[    8.410000] dwmmc_balong 900ae000.dwmmc1: start command: ARGR=0x00227800 CMDR=0x20000174 CMD(52)
<7>[    8.410000] mmc0: req done (CMD52): 0: 00001082 00000000 00000000 00000000
<7>[    8.410000] mmc0: starting CMD52 arg 00227a00 flags 00000195
<7>[    8.410000] dwmmc_balong 900ae000.dwmmc1: start command: ARGR=0x00227a00 CMDR=0x20000174 CMD(52)
<7>[    8.410000] mmc0: req done (CMD52): 0: 00001001 00000000 00000000 00000000
<7>[    8.410000] mmc0: starting CMD52 arg 00227c00 flags 00000195
<7>[    8.410000] dwmmc_balong 900ae000.dwmmc1: start command: ARGR=0x00227c00 CMDR=0x20000174 CMD(52)
<7>[    8.410000] mmc0: req done (CMD52): 0: 000010df 00000000 00000000 00000000
<4>[    8.410000] mmc0: queuing unknown CIS tuple 0x82 (1 bytes)
<7>[    8.410000] mmc0: starting CMD52 arg 00227e00 flags 00000195
<7>[    8.410000] dwmmc_balong 900ae000.dwmmc1: start command: ARGR=0x00227e00 CMDR=0x20000174 CMD(52)
<7>[    8.410000] mmc0: req done (CMD52): 0: 000010ff 00000000 00000000 00000000
<6>[    8.410000] mmc0: new SDIO card at address 0001

sdio设备无法识别相关推荐

  1. W806 SDIO 设备 扩展 荔枝派 V3s IO 使用

    全志V3s 不论焊接还是使用很方便,唯一缺点就是IO不够,偶然发现联德盛 W806 竟然自带SDIO 设备接口,当然肯定还有ESP32模块 也是带的(,这里并不适用),选择SDIO 优点是速度快,方便 ...

  2. Android5.1设备无法识别exFAT文件系统的64G TF卡问题

    64G TF卡刚买回来的时候默认exFAT文件系统,在电脑端(XP和WIN7)可以识别,但在我们Android5.1S设备无法识别,采用guiformat工具格式化为FAT32文件系统后才可以正常识别 ...

  3. 移动金融业务风控框架及设备风险识别的意义(下)

    随着移动金融业务的广泛开展,金融行业面临的业务风险也发生了巨大的变化,传统个人信贷业务发生在线下渠道,加上业务流程的设计,主要是解决信用风险的问题. 但随着信贷业务渠道由实转虚,客群逐步下沉,由此带来 ...

  4. 37、SDIO设备驱动

    SD(Secure Digital Memory Card)IO卡是在SD内存卡接口基础之上发展起来的接口.SDIO协议类似于USB总线协议.<?xml:namespace prefix = o ...

  5. win10设备管理没有android,win10无法识别安卓手机usb设备怎么办_win10连接安卓设备无法识别的修复方法-爱纯净...

    当我们外出游玩时,用手机拍摄的图片等都会拷贝到电脑里.或者手机连接电脑下载电影音乐是都是再普通不过的了.不过最近有的win10纯净版电脑连接上安卓手机后,发现无法识别,错误提示"第三方inf ...

  6. linux运维基础[系统磁盘管理]——————存储设备的识别、df、du、fsck

    文章目录 1. 本地存储设备的识别 1.1 fdisk -l 1.2 cat /proc/partition 1.3 blkid 1.4 df 2.文件系统常用命令 2.1 df 2.1.1 -h 2 ...

  7. 计算机无法识别华为usb设备,华为路由A1插上USB储存设备无法识别怎么办

    华为路由A1可以在插上USB储存设备(U盘.移动硬盘等)之后开启路由器的文件共享功能,将设备中的文件分享给连接到路由器wifi的用户.但如果插上USB储存设备后路由器无法识别怎么办,可能是什么原因,怎 ...

  8. 计算机老是跳出usb设备无法识别,如何解决电脑一直弹出USB设备无法识别的问题?...

    如何解决电脑一直弹出USB设备无法识别的问题? 我们在电脑上传输文件的时候都会使用到USB,但是有的时候会出现USB无法识别的情况,如果我们碰到这种问题应该如何操作呢?今天,小编就教大家解决电脑一直弹 ...

  9. USB设备无法识别也无法读取怎么办?

    文章来源:https://www.reneelab.com.cn/usb-device-not-recognized.html 目录 一.导致USB无法识别/读取的原因 二.USB设备无法识别也无法读 ...

最新文章

  1. activeRecord 绑定属性的属性
  2. Qt 不再使用 LGPLv2.1 授权
  3. Sqoop 同步数据到mysql, Can't parse input data: '\N'
  4. 微信防撤回python代码_Python实现微信防撤回
  5. Python教程: 闭包及陷阱
  6. test - delete category 060 in X3C - R3MATCLASS and perform customizing download
  7. JavaBean 持久化
  8. c# nat udp转发
  9. jQuery如何在线导入js包
  10. docker集群理解
  11. C# 数据库连接字符串拼接
  12. 初学Python01
  13. jmeter之badboy
  14. STM32开发工具-keil5安装
  15. 怎么样学习Java?
  16. [音乐天堂]辛德勒名单原声大碟
  17. android 简单快速 倒计时动画
  18. 水处理离子交换设备详解
  19. 优化OpenSearch的搜索结果
  20. python100到200的素数_python 100~200的素数和

热门文章

  1. MySQL-DML、DQL、DCL
  2. 为了生存人类必须去探索宇宙
  3. 快递单号查询接口对接指南
  4. 客户同情和客户同理心的区别
  5. 获取进程全路径方法(支持xp、win7、win10系统)
  6. 11个网站后台模版 | Admin Dashboards | Bootstrap
  7. 理解WebKit和Chromium: WebKit渲染基础
  8. 【华为机试真题 Python实现】数组拼接
  9. Python四位一并法2进制小数转16进制数
  10. 个税系统提示服务器不合法,最新金税三期个人所得税系统中申报了个税,但扣缴税时提示没有签订三方协议。...