1、协议切换流程

2、CMD11

(1)ACMD41确认是否支持1.8V切换

如果参数中S18R为1,且响应中S18A为1,此时为3.3V状态,主机便可以发送CMD11进行电压切换,其他情况下不能执行CMD11

3、软件切换流程

int mmc_set_uhs_voltage(struct mmc_host *host, u32 ocr)

(1)发送CMD11(SD_SWITCH_VOLTAGE)

(2)sd卡在接收到CMD11命令后,会把data[0:3]拉低,等待1ms确保拉低

mmc_delay(1);

if (host->ops->card_busy && !host->ops->card_busy(host)) {

err = -EAGAIN;

}

(2)mmc_host_set_uhs_voltage

1)关闭clk

host->ios.clock = 0;

mmc_set_ios(host);

host->ops->set_ios(host, ios);

.set_ios = sdhci_set_ios,(实现详见第4节)

2)切换到1.8V

mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_180)

host->ios.signal_voltage = signal_voltage;

host->ops->start_signal_voltage_switch(host, &host->ios)

sdhci_start_signal_voltage_switch

switch (ios->signal_voltage) {

case MMC_SIGNAL_VOLTAGE_330:

/* Set 1.8V Signal Enable in the Host Control2 register to 0 */

ctrl &= ~SDHCI_CTRL_VDD_180;

sdhci_writew(host, ctrl, SDHCI_HOST_CONTROL2);

mmc_regulator_set_vqmmc(mmc, ios);

mmc_regulator_set_voltage_if_supported(mmc->supply.vqmmc,min_uV, volt, max_uV);

/* Wait for 5ms */

usleep_range(5000, 5500);

case MMC_SIGNAL_VOLTAGE_180:

ret = mmc_regulator_set_vqmmc(mmc, ios);

mmc_regulator_set_voltage_if_supported(mmc->supply.vqmmc,1700000, 1800000, 1950000);

/*Enable 1.8V Signal Enable in the Host Control*/

ctrl |= SDHCI_CTRL_VDD_180;

sdhci_writew(host, ctrl, SDHCI_HOST_CONTROL2);

3)等待10ms,协议规定是5ms

mmc_delay(10);

4)恢复clk

host->ios.clock = clock;

mmc_set_ios(host);

(3)延时1ms

mmc_delay(1);

(4)判断看card是否busy

host->ops->card_busy(host)

sdhci_card_busy

resent_state = sdhci_readl(host, SDHCI_PRESENT_STATE);

return !(present_state & SDHCI_DATA_0_LVL_MASK);【#define   SDHCI_DATA_0_LVL_MASK>0x00100000】

总结:

(1)软件切换的流程基本和协议的流程一致

(2)

vmmc代表卡的电压,一般是3.3V,可以进行gpio开关控制

vqmmc代表的是信号线bus上的上拉电压,以及控制器的sd卡bank电压,可以切换为1.8和3.3V

4、硬件电路

控制器和总线的上拉电阻受1.8/3.3V的切换控制,sd卡为3.3V不变,可以开关

5、

mmc_set_ios(host);

host->ops->set_ios(host, ios);

.set_ios = sdhci_set_ios

(1)

void sdhci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)

{

....

....

}

1)set_power分支

一般的控制器并没有实现该接口

各个ip可以通过注册.set_power来实现电压切换

2)非set_power分支

从(1)和(2)的对比发现实际上2个分支走的内容是一样的

09-sd卡的电压切换相关推荐

  1. S5PV210体系结构与接口09:SD卡启动详解

    目录 1. MMC技术演进 1.1 NandFlash & NorFlash芯片 1.2 MMC卡 & SD卡 & MicroSD卡(TF卡) 1.2.1 代际关系 1.2.2 ...

  2. STM32CubeMX系列09——SDIO(SD卡读写、SD卡移植FATFS文件系统)

    文章目录 1. 准备工作 1.1. 简单扫盲 1.1.1. SD卡 1.1.2. TF卡 1.1.3. SDIO接口 1.2. 所用硬件及原理图 2. 创建工程 2.1. 选择主控 2.2. 系统配置 ...

  3. sd卡 写卡阻塞_Sony a7r4写卡速度测试

    测试方法 从按下快门开始计时,直到相机屏幕上缓存清空为止,得到整体写卡时间.然后取卡在电脑上查看文件数和总体大小. 写卡速度=总文件大小/写卡时间 1.存储卡Sony Tough(299M/s) 拷照 ...

  4. 修改mdev配置支持SD卡自动挂载

    我们启动开发板之后,将SD卡插上会打印如下信息: # s3c2440-sdi s3c2440-sdi: running at 0kHz (requested: 0kHz). s3c2440-sdi s ...

  5. 基于SD卡的FatFs文件系统(FatFs移植到STM32)

    平台:STM32ZET6(核心板)+ST-LINK/V2+SD卡+USB串口线 工程介绍:主要文件在USER组中,bsp_sdio_sdcard.c,bsp_sdio_sdcard.h和main.c, ...

  6. linux6.6挂载u盘失败,mini2440 Linux系统自动挂载U盘与SD卡失败 解决方法

    对于有些U盘和SD卡,mini2440开发板自带的Linux系统不能有效的自动挂载在文件系统里面,这是因为mini2440的/etc/mdev.conf 和 /bin/hotplug.sh这两个文件写 ...

  7. linux sd卡 自动挂载 mdev,mdev实现U盘和SD卡的自动挂载

    0)请先移植好SD卡和配置好内核对各类USB设备的支持 请先阅读:busybox下mdev的使用以及mdev.conf的规则配置1)确保内核支持热插拔 # cd linux-2.6.30.4# vi ...

  8. 嵌入式linux 实现mdev SD卡和U盘自动挂载和卸载的方法 mdev.conf

    首先先参考这些博客做一些了解:http://linux.chinaunix.net/techdoc/install/2009/11/18/1144936.shtml http://www.cnblog ...

  9. linux u盘分区 mdev 卸载问题,嵌入式linux 实现mdev SD卡和U盘自动挂载和卸载的方法 mdev.conf...

    首先先参考这些博客做一些了解:http://linux.chinaunix.net/techdoc/install/2009/11/18/1144936.shtml http://www.cnblog ...

  10. linux sd卡 u盘区别,linux下实现U盘和sd卡的自动挂载

    目的:使U盘和sd卡在linux系统中进行插入和拔除时能自动挂载和卸载,不需要手动mount和umount.步奏:1.在/etc/init.d/rcS中加入以下语句 echo /sbin/mdev & ...

最新文章

  1. DAS工具: 利用去重、聚合和评分的策略从宏基因组中恢复基因组
  2. C++ 文本查询2.0(逻辑查询)
  3. systemd 对你的进程数限制横插一脚啦
  4. 聊聊storm的LoggingClusterMetricsConsumer
  5. python 调用c++回调char*
  6. error while loading shared libraries: libmysql....
  7. spirng 如何把404转到特定的页面展示
  8. VB.NET实现DirectPlay(3)Find HOSTs
  9. 因特尔显卡自定义分辨率_电脑显示器分辨率超频教程:1080P超2K分辨率的方法...
  10. openwrt是嵌入式linux,非常方便的OpenWrt的嵌入式Linux开发环境
  11. 从0开始配置Win环境下VScode (VScode For C/C++)
  12. [Vue warn]: Duplicate keys detected: '0'. This may cause an update error. found in解决办法
  13. lgg8各个版本_LG正式推出G8SThinQ 搭载骁龙855
  14. matlab中怎样绘制离散点,matlab中怎么绘制大量的离散点
  15. 4大MQ消息队列的比较
  16. Word写论文及PPT画论文图的经验总结
  17. 重置计算机网络设置路由器,重新设置路由器的步骤
  18. 计算机网络共享服务器,办公室如何搭建共享服务器或文件共享服务器
  19. sshd远程主机间的访问
  20. cs224u GloVe词向量方法

热门文章

  1. 从外网远程控制家里的电视盒子,无需设置路由
  2. 设计模式七大原则-里氏代换原则
  3. dreamweaver php 插件,Dreamweaver中的插件如何应用
  4. getchar的使用方法
  5. 清华同衡国土空间规划平台建设整体解决方案
  6. 递归算法—第39级台阶
  7. 学校招生幽默软文范文-第一互联传媒分享
  8. Ps|神奇的液化海报
  9. 基于VoiceOver的移动web站无障碍访问实战
  10. 第 1-8 课:基础组件详解(Text、Image、Button)