SD卡概率性不识别

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

当遇到一些质量不是很好的sdcard,可能多次suspend & resume的操作后,某一次resume可能会失败,看到的现象就是当手机唤醒后会看到sdcard移除或者重新插入sdcard的提示,一般处理方式都是先加强下SD的pin脚驱动能力,如下

	msdc1_pins_default: msdc1@default {
		pins_cmd {
			drive-strength = /bits/ 8 <3>;
		};
		pins_dat {
			drive-strength = /bits/ 8 <3>;
		};
		pins_clk {
			drive-strength = /bits/ 8 <4>;
		};
	};

现在主要介绍的是另外一个解决思路,在resume失败后,重新再给卡power off -> power on-> reinit

/kernel-3.10/drivers/mmc/core/core.c 添加函数mmc_power_cycle_special()

void mmc_power_cycle(struct mmc_host *host)
{
        mmc_power_off(host);

        /* Wait at least 1 ms according to SD spec */

        mmc_delay(1);

        mmc_power_up(host);
}

void mmc_power_cycle_special(struct mmc_host *host)
{

        mmc_power_off(host);

        /* Wait at least 1 ms according to SD spec */

        mmc_delay(20);

        mmc_power_up(host);

        mmc_delay(20);
}

/kernel-3.10/drivers/mmc/core/sd.c mmc_sd_resume 函数err时调用mmc_power_cycle_special重新初始化

extern void mmc_power_cycle_special(struct mmc_host *host);
static int mmc_sd_resume(struct mmc_host *host)
{

    int err;

#ifdef CONFIG_MMC_PARANOID_SD_INIT

    int retries;

#endif

    BUG_ON(!host);

    BUG_ON(!host->card);

    mmc_claim_host(host);

#ifdef 1

 retries = 3;//modify by blogger

 while (retries) {
         err = mmc_sd_init_card(host, host->ocr, host->card);

      if (err) {
                  printk(KERN_ERR "%s: Re-init card rc = %d (retries = %d)\n",

                      mmc_hostname(host), err, retries);

                 mdelay(5);

                  retries--;

                       mmc_power_cycle_special(host);//add  by blogger

                continue;
          }
       break;
   }

#else
   err = mmc_sd_init_card(host, host->ocr, host->card);
#endif

 mmc_release_host(host);

return err;
}

现在kernel-4.4 MTK平台有个专门针对此类的问题的宏控处理,CONFIG_MMC_PARANOID_SD_INIT, 请搜索该关键字宏控,参考代码如下,

static int _mmc_sd_resume(struct mmc_host *host)
{
	int err = 0;
#ifdef CONFIG_MMC_PARANOID_SD_INIT
	int retries;
#endif

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

	mmc_claim_host(host);

	if (!mmc_card_suspended(host->card))
		goto out;

	mmc_power_up(host, host->card->ocr);
#ifdef CONFIG_MMC_PARANOID_SD_INIT
	retries = 5;
	while (retries) {
		err = mmc_sd_init_card(host, host->card->ocr, host->card);

		if (err) {
			printk(KERN_ERR "%s: Re-init card rc = %d (retries = %d)\n",
			       mmc_hostname(host), err, retries);
			mdelay(5);
			retries--;
			continue;
		}
		break;
	}
#else
	err = mmc_sd_init_card(host, host->card->ocr, host->card);
#endif
	mmc_card_clr_suspended(host->card);

out:
	mmc_release_host(host);
	return err;
}
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);
	}
}
MTK配置SD与sim 在vendor_ap_s0/vendor/mediatek/proprietary/modem/文件夹下导入编译好的modem文件夹,里面modem文件夹名字与主make里面保持一致。MTK_SIM_HOT_SWAP_COMMON_SLOT = yes //打开关于sim热插拔的宏开关。dws里面sd与sim的eint与resset,无热插拔可以配置,需要该功能就需要配置了。//根据原理图配置sd的中断脚。//更改sd中断的电平定义。1.配置SD,dts里面配置sd的上电。 阅读详情

相关推荐

高通sdcard 启动流程

当 mmc_sd_init_card 成功后, 调用mmc_add_card (bus.c), 这里主要是识别SDSDXC 还是SDHC的,通过mmc_card_blockaddr 和 mmc_card_ext_capacity状态来分辨。然后mmc_select_voltage,此时会通过host->ocr_avail 对ocr 处理,拿到的数值rocr,作为参数给到mmc_sd_init_card (CONFIG_MMC_PARANOID_SD_INIT)

yudelian的博客 2416

MTK平台SD热插拔相关设置以及问题解决

MTK6735/53平台项目添加SD的热插拔功能 测试报出的bug是SD无法进行热插拔,只能在通过重启之后才能读取到SD的信息。 根据读取相应的平台手册,找到了一些相应的设置方法,在根据文档设定完dws文件的设置之后,发现仍然能进行热插拔的动作,之后开始分析情况。 首先,考虑到SD能够在重启之后进行读取,则排除了SD无法读取方面的相关问题。分析得出是没有生成

qq_24614807的博客 3683

SDIO】SD2.0协议分析总结(一)-- SD基本概率介绍

Bit 7 6 5 4 3 2 1 0 byte 7 User Name Flag Password Flag Will Retain Will QoS Will Flag Clean Session Reserved * * * * ...

ZHONGCAI0901的博客 2万+

MTK(Android N)设置SDCard为默认存储

思路:当系统将所有存储挂载完毕,然后调用StorageManagerEx.setDefaultPath(path)设置默认存储,当用户手动改变以后就跟随用户设置。

Kelly_ge的博客 1744

mtk android sd调试

配置管脚和电源 sd.c static u32 msdc_sd1_power(u32 on, MT65XX_POWER_VOLTAGE powerVolt) { //libin modify for M1-21 on 20120907 #ifdef MTK_EMMC_SUPPORT  // sd1 change to VGP           //msdc_ldo_pow

gaoguoxin2的专栏 3537

安卓设备TF概率无法识别问题

使用t的设备出货前检测是正常的,放在仓库中或出货后再开机,有概率的机器无法识别,重新插拔或重启无效,拔下来放pc电脑上识别后再插回设备则恢复正常能识别

zmlovelx(帅得不敢出门 程序员群31843264) 1367

记录一次TF识别问题分析

问题现象描述设备在插入TF时,TF识别,使用dmesg查看内核信息如下:问题排查过程从内核日志中可以看到,系统已经检测到TF插入,在数据通信过程中出错。针对该问题,进行了如下测试:1.降低主机通信频率SD正常通信频率为50MHz,降低通信频率20MHz、15MHz时TF依旧识别。最后,将TF通信频率降低为6MHz,此时问题现象变为TF概率能够识别;但通信频率为6MHz时完全...

Linux知识积累 2158

SD突然损坏怎么办?

最后,平时最好定期检查一下SD的健康状况,可以用设备自带的工具,或者专业的存储管理软件,来看看SD的读写能怎么样,健康状态是否良好。过呢,存储设备也并非坚可摧,就拿常见的SD来说,它虽然体积小巧,便于携带和使用,但在实际使用过程中,还是很可能会碰到各种各样的问题,甚至导致数据丢失或者设备损坏。注意,在恢复SD数据之前,要对SD进行格式化、chkdsk磁盘修复等操作,因为这些操作会进一步破坏原始的目录结构,并且是可逆的破坏。如果SD已经无法访问数据了,无法直接备份数据,也要慌。

qq_39571617的博客 2150

工业网关开发:SD识别为只读问题调试

记录一个实际工业网关开发过程中遇到的问题以及调试解决流程,涉及Linux嵌入式系统Openwrt的相关技术

十六宿舍的博客 2608

SDIO】SDIO、SD、FatFs文件系统相关文章索引

1.SDIO协议分析 1.《【SDIO】SD2.0协议分析总结(一)-- SD基本概率介绍》 2.《【SDIO】SD2.0协议分析总结(二)-- SD识别&数据传输过程》 3.《【SDIO】SD2.0协议分析总结(三)-- SD相关命令介绍》 2.STM32平台SD实验 1.《【STM32】STM32 SDIO SD读写测试(一)-- SD硬件设计和软件移植》 2.《【STM32】STM32 SDIO SD读写测试(二)-- SD_Init之Power On阶段》 3.《【STM32】

ZHONGCAI0901的博客 3038

Linux SD/SDIO驱动开发0-基本知识

文章目录 ##Linux驱动子系统-sdio子系统 ###sdio系统概述 MMC SD SDIO三种,从发展历程来看,是先有MMC,后来有SD,这两种都是纯粹的存储,而SDIO是什么呢,从字面意思理解,应该是SD+IO,也就是既有存储功能,又有IO控制功能,过也有纯IO功能的SDIO设备(本人用到的WIFI模块就是这种)。并且,这三种可以使用同一个插槽,系统还能正确的识别!!,...

h_8410435的博客 8685

变成RAW格式的SD怎么恢复?别直接格式化

但很多用户可能遇到过这样一个尴尬的场景:原本正常使用的SD,突然在电脑上无法打开,提示“使用驱动器中的光盘之前需要将其格式化”,在磁盘管理中也被识别为RAW格式。其实,面对RAW格式的SD,数据往往还在,只是文件系统出现了问题。在操作过程中,用户需要选择RAW状态的SD,执行“恢复文件”功能,软件会对磁盘进行全面扫描,尝试重建文件系统之外的原始数据结构。此时,数据仍然存储在SD上,只是系统无法正确读取,如果继续尝试格式化或写入新数据,就可能导致原有的数据被覆盖,恢复难度大大增加。

qq_39571617的博客 2355

三星sd无法删除数据_相机SD无法识别怎么办?万兴恢复专家最新教程,快速恢复SD照片...

这两年,抖音、快手等短视频快速发展,少摄影爱好者为了拍出高清视频,都逐渐采用专业摄影机或单反拍摄短视频。此时,对于摄影爱好者来说,SD可能比相机镜头还珍贵,一旦损坏无法读取,那真的是追悔莫及。今天我将分享一下自己总结的SD损坏修复经验,希望对大家有用。一、SD无法读取识别的原因?日常生活中,许多人使用SD规范,保管和储存都科学,很容易导致SD损坏。一般SD无法识别...

weixin_35789559的博客 354

SD无法识别怎么办

但如果换电脑、换读器都完全没反应,那可能是物理损坏,得找专业的。,很可能是读器、线材的问题,或者的主控芯片烧了。如果换了所有能换的东西还是行,就别自己折腾了,找专业公司帮忙吧。要是物理损坏,自己就别折腾了,直接找专业的数据恢复吧。之类的弹窗,先别理。这时候任何写入操作都可能把原来的数据覆盖掉,覆盖了可就真找回来了。下面这套方法,是我自己用过很多次的,希望能帮你把东西安全地弄出来。格式化确实能解决问题,但代价是你所有的照片和视频都没了。:如果相机里读出,就把安全弹出,别反复插拔。

2601_95118468的博客 334

SD受损修复方法

移动存储设备受损修复

sky_2015的博客 1万+

SD提示格式化怎么办?重要数据如何恢复?

SD一读取就显示要格式化才能用,里面有重要的数据怎么办?如何恢复SD里面的照片和视频等资料呢?阅读下面的内容,一起学习下如何从未格式化的SD恢复数据。

qq_39571617的博客 4746

K210开发板学习笔记(三)——STM32+K210+SD实现人脸识别(完整K210代码)

更新日记:2022年4月26日 更新了串口通信部分的内容,本文写的略为粗糙,恐有当之处,希望大家吝赐教。 人脸识别 一、MaixPy IDE开发 参考博主晨少hc的博文(https://blog.csdn.net/HuangChen666/article/details/113995079)来实现人脸识别功能,我用的硬件是亚博智能的K210开发板,在配置工程中有几步和这个博主的一样,需要注意。 所需要的文件有:模型文件),脚本文件,ide需要的bin文件...

Embedded learner的博客 4万+

新手教程:树莓派系统烧录与SD启动详解

手把手教你完成树莓派系统烧录,从镜像下载到SD启动的每一步都清晰呈现,适合新手快速上手。掌握树莓派系统烧录技巧,让开发更高效。

weixin_42593701的博客 1393

emwin读取sd图片_相机SD误删怎么恢复?摄影师都在用的SD修复工具

这两年,抖音、快手等短视频快速发展,少摄影爱好者为了拍出高清视频,都逐渐采用专业摄影机或单反拍摄短视频。此时,对于摄影爱好者来说,SD可能比相机镜头还珍贵,因为SD里保存了很多自己付出心血拍的图片、视频,一旦损坏无法读取,那真的是追悔莫及,而相机镜头就算是彻底报废,也还能再买新的镜头。今天我将分享一下自己总结的SD损坏修复经验,希望对大家有用,帮你快速修复或找回珍贵的图片、视频数据。SD...

weixin_39959482的博客 222
上一篇: module_init subsys_initcall与late_initcall的区别
下一篇: LINUX系统以及ANDROID 平台log信息输出级别设置 [MTK]
起舞的迈特凯
博客等级 码龄14年 19粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值