Android设备sdcard/tf卡不识别在电脑上可以

安卓tf卡无法使用现象

系统:安卓4.4
硬件:arm设备
t卡: 64GB 10 A1 microSD
出货后有用户反馈一批sdcard/tf卡用不了.

tf卡

Trans-flash Card(TF卡),2004年正式更名为Micro SD Card
当前产品用的是闪迪与金士顿的卡.
在这里插入图片描述

分析过程

拆了7台问题机,除一张t卡坏了外,其余卡插到电脑上后再放到设备上恢复正常。
出厂才几个月,卡未见破损等不良现象。

  1. 一张电脑上识别为容量30多M,无法格式化,卡坏了。
  2. 一张已经使用了144M, 说明这张卡是使用后出问题的。
    2.1 拆机后,把卡从设备上拿走后再放到设备上,重新开机,无效;
    2.2 放电脑上插拔了下(不打开t卡,不格式化)再放回设备后正常。
  3. 一张卡,放电脑上插拔(不格式化,新建了文本,说明放电脑上时卡就是能正常读写的)再放回设备后正常。
  4. 其余未来得及实验就直接在电脑上进行格式化了,再放回设备后也正常。
  5. 也与原厂沟通,也只是给了个兼容性的列表出来,也无法提供有效帮助.

解决

开启kernel中的SD_INIT的宏
CONFIG_MMC_PARANOID_SD_INIT=y
这样内核在检测sd卡失败后会自动重新初始化检测.

代码

kernel/drivers/mmc/core/sd.c
搜索CONFIG_MMC_PARANOID_SD_INIT可以看到一些关联代码,这里截取detect函数部分

/*
 * Card detection callback from host.
 */
static void mmc_sd_detect(struct mmc_host *host)
{
        int err = 0;
#ifdef CONFIG_MMC_PARANOID_SD_INIT
        int retries = 5; // 检测失败后的重试次数
#endif

        BUG_ON(!host);
        BUG_ON(!host->card);

        mmc_get_card(host->card);

        /*
         * Just check if our card has been removed.
         */
#ifdef CONFIG_MMC_PARANOID_SD_INIT
        while(retries) {
                err = mmc_send_status(host->card, NULL);
                if (err) {
                        retries--;
                        udelay(5);
                        continue;
                }
                break;
        }
        if (!retries) {
                printk(KERN_ERR "%s(%s): Unable to re-detect card (%d)\n",
                       __func__, mmc_hostname(host), err);
        }
#else
        err = _mmc_detect_card_removed(host);
#endif

        mmc_put_card(host->card);

        if (err) {
                mmc_sd_remove(host);

                mmc_claim_host(host);
                mmc_detach_bus(host);
                mmc_power_off(host);
                mmc_release_host(host);
        }
}

图片引用自 SD卡在嵌入式系统设计中的简单总结

存储卡市场

随着智能手机、平板电脑等移动设备的普及,以及高清视频、高分辨率照片和大型应用程序的广泛使用,手机存储卡市场规模持续扩大。据市场报告预测,到2025年,全球存储卡市场规模将达到120亿美元,显示出该市场在过去几年中保持稳定增长态势。其中,手机存储卡市场份额最高,超过45%,成为推动整个存储卡市场增长的主要动力。在中国市场,镁光(Kingston)、芝奇(Samsung)和闪迪(SanDisk)等企业占据了大部分份额,市场份额超过60%。

作者: 帅得不敢出门 原创文章谢绝转载收录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

帅得不敢出门

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值