SDIO - DWC MSHC 电压切换和频率切换
背景
我们的sdio访问sd card过去一直跑在低频上,HS50M。前段时间给eMMc添加了HS200模式,eMMc的总线模式定义是这样的:

可以看到1.8V的IO 电压可以支持所有模式,我们过去的芯片,由硬件部门放到evb上,其IO 电压要不就是定死的,要不就是用跳帽来选择电压是3V3或者1V8,不支持电压切换,这对eMMc来说还尚可接受,因为我们可以将它定到1V8上,反正eMMc在这个电压上可以切换到各个速度,emmc的hs200也就在这个条件下跑起来了。但是SD Card就没那么幸运了,SD Card的标准是:

我们过去的板子都IO电压都是定死了3.3v,最高跑到HS50这个模式,所以如果要切换到SDR12以及后面的模式,还是需要一个能够动态切换电压的方法,一般来说SDIO刚初始化完毕会用1线模式去读取卡id,使用400k,300K,100K这种兼容模式去做协商,这些模式需要工作的3.3V,随后才能调到高速。
控制器支持
DWC mobile storage 控制器支持SD3.0 UHS-1,能够在SD模式下做电压切换,可以应用到SDHC,SDXC卡上。
注意,UHS-1仅支持4bit模式
详细切换方法:
以下部分摘自databook手册:

翻译:
只有在SD mode下才可以执行电压切换,无论在SD mode还是SPI mode,首先要发送CMD0来选择bus mode,card必须在SD mode下才能应用1.8v信号模式,在此期间card不能在不带电源周期时被切换到SPI模式或者3.3V信号
如果嵌入式系统的System BIOS已经知道它连接了SD 3.0卡,那么驱动程序会编程DWC_mobile_storage来启动ACMD41。
软件从ACMD41的响应得知卡是否支持电压切换到1.8V。
- 如果ACMD41响应的32位为1’b1,则卡支持电压切换,下一个命令cmd11调用电压切换顺序。CMD11启动后,软件必须在CSR空间中用适当的卡号对VOLT REG寄存器进行编程。
- 如果ACMD41的32位响应为1’ 0 -卡不支持电压切换,CMD11不应该启动。
如果卡和主机控制器接受电压切换,则它们支持UHS-1数据传输模式。电压切换到1.8V后,SDR12为默认速度。由于UHS-1只能在4位模式下使用,因此软件必须启动ACMD6并将卡数据宽度更改为4位模式;ACMD6是在任何UHS-1速度驱动。如果主机想要选择DDR模式的数据传输,那么软件必须在CSR空间中用相应的卡号对DDR_REG寄存器进行编程。要从SDR或DDR模式中进行选择,应在CLKDIV寄存器中编程适当的值。
下图位ACMD41的命令参数和命令响应


如果参数中S18R为1,且响应中S18A为1,此时为3.3V状态,主机便可以发送CMD11进行电压切换,其他情况下不能执行CMD11
Linux内核对电压切换的支持
int mmc_set_uhs_voltage(struct mmc_host *host, u32 ocr)
{struct mmc_command cmd = {};int err = 0;u32 clock;/** If we cannot switch voltages, return failure so the caller* can continue without UHS mode*/if (!host->ops->start_signal_voltage_switch)return -EPERM;if (!host->ops->card_busy)pr_warn("%s: cannot verify signal voltage switch\n",mmc_hostname(host));cmd.opcode = SD_SWITCH_VOLTAGE;cmd.arg = 0;cmd.flags = MMC_RSP_R1 | MMC_CMD_AC;err = mmc_wait_for_cmd(host, &cmd, 0);if (err)goto power_cycle;if (!mmc_host_is_spi(host) && (cmd.resp[0] & R1_ERROR))return -EIO;/** The card should drive cmd and dat[0:3] low immediately* after the response of cmd11, but wait 1 ms to be sure*/mmc_delay(1);if (host->ops->card_busy && !host->ops->card_busy(host)) {err = -EAGAIN;goto power_cycle;}/** During a signal voltage level switch, the clock must be gated* for 5 ms according to the SD spec*/clock = host->ios.clock;host->ios.clock = 0;mmc_set_ios(host);if (mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_180)) {/** Voltages may not have been switched, but we've already* sent CMD11, so a power cycle is required anyway*/err = -EAGAIN;goto power_cycle;}/* Keep clock gated for at least 10 ms, though spec only says 5 ms */mmc_delay(10);host->ios.clock = clock;mmc_set_ios(host);/* Wait for at least 1 ms according to spec */mmc_delay(1);/** Failure to switch is indicated by the card holding* dat[0:3] low*/if (host->ops->card_busy && host->ops->card_busy(host))err = -EAGAIN;power_cycle:if (err) {pr_debug("%s: Signal voltage switch failed, ""power cycling card\n", mmc_hostname(host));mmc_power_cycle(host, ocr);}return err;
}相关文章:
SDIO - DWC MSHC 电压切换和频率切换
背景 我们的sdio访问sd card过去一直跑在低频上,HS50M。前段时间给eMMc添加了HS200模式,eMMc的总线模式定义是这样的: 可以看到1.8V的IO 电压可以支持所有模式,我们过去的芯片,由硬件部门放到evb上,其IO …...
EI-CLIP 深度理解 PPT
系列文章目录 文章目录 系列文章目录 在电子商务产品的跨模态检索中,电子商务图像和电子商务语言都有许多独特的特点。如图所示,一个电子商务产品图片通常只包含一个简单的场景,有一个或两个前景物体和一个普通的背景。同时,电子商…...
leetcode力扣刷题系列——【最小元素和最大元素的最小平均值】
题目 你有一个初始为空的浮点数数组 averages。另给你一个包含 n 个整数的数组 nums,其中 n 为偶数。 你需要重复以下步骤 n / 2 次: 从 nums 中移除 最小 的元素 minElement 和 最大 的元素 maxElement。 将 (minElement maxElement) / 2 加入到 aver…...
【线性回归分析】:基于实验数据的模型构建与可视化
目录 线性回归分析:基于实验数据的模型构建与可视化 1. 数据准备 2. 构建线性回归模型 3. 可视化 数据分析的核心 构建预测模型 应用场景 预测模型中的挑战 结论 线性回归分析:基于实验数据的模型构建与可视化 在数据分析领域,线性…...
CountUp.js 实现数字增长动画 Vue
效果: 官网介绍 1. 安装 npm install --save countup.js2. 基本使用 // template <span ref"number1Ref"></span>// script const number1Ref ref<HTMLElement>() onMounted(() > {new CountUp(number1Ref.value!, 9999999).sta…...
设计模式大全
1. 策略模式 什么是策略模式? 策略模式(Strategy Pattern)是一种行为设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以互换。策略模式使得算法可以独立于使用它的客户端而变化。通过使用策略…...
redis IO多路复用机制
目录 一、五种 I/O 模型 1.阻塞IO(Blocking IO) 2.非阻塞IO(Nonblocking IO) 3.IO多路复用(IO Multiplexing) 通知的方式 select模式 poll模式 epoll模式 4.信号驱动IO(Signal Driven …...
Oracle漏洞修复 19.3 补丁包 升级为19.22
1.场景描述 上周末2024-10-12日,服务器扫出漏洞,希望及时修复。其中,oracle的漏洞清单如下,总结了下,基本都是 Oracle Database Server 的 19.3 版本到 19.20 版本和 21.3 版本到 21.11 版本存在安全漏洞,即版本问题。如: Oracle Database Server 安全漏洞(CVE-2023-22…...
Q2=10 and Q2=1--PLB(Fig.4)
(个人学习笔记,仅供参考) import numpy as np from scipy.special import kv, erfc from scipy.integrate import dblquad import matplotlib.pyplot as plt import scipy.integrate as spi# Constants w 0.6198 g0_sq 21.5989 rho 0.782…...
sd卡挂载返回FR_NOT_READY等错误
前言 本文章主要是例举文件系统挂载sd卡时出现的一下问题总结。本人用的芯片是GDF103系列,最近项目要使用sd进行读取文件,因此查阅了资料进行开发。一开始是使用了SPI方式连接,例程是原子哥的stm32进行改的,但多次调试都是卡死在发…...
推荐一款超级实用的浏览器扩展程序!实时翻译网页,支持多种语言(带私活源码)
今天给大家分享的一款浏览器插件。 一、背景 在如今的信息时代,互联网已经成为了人们获取信息、交流和娱乐的重要平台,而随着全球化的不断深入和交流的加强,越来越多的人开始关注各国的文化、政治和经济,因此需要浏览不同语言的…...
manjaro kde 24 应该如何设置才能上网(2024-10-13亲测)
要在 Manjaro KDE 24 上设置网络连接,可以按照以下步骤进行设置,确保你能够连接到互联网: 是的,你可以尝试使用一个简单的自动修复脚本来解决 Manjaro KDE 中的网络连接问题。这个脚本将检查网络服务、重新启动 NetworkManager、…...
2024软件测试面试大全(答案+文档)
🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 一、软件测试基础面试题 1、阐述软件生命周期都有哪些阶段? 常见的软件生命周期模型有哪些? 软件生命周期是指一个计算机软件从功能确定设计,到…...
unity动态批处理
unity动态批处理 动态批处理要求和兼容性渲染管线兼容性 使用动态批处理网格的动态批处理限制动态生成几何体的动态批处理 动态批处理 动态批处理是一种绘制调用批处理方法,用于批处理移动的 GameObjects 以减少绘制调用。动态批处理在处理网格和 Unity 在运行时动…...
faust,一个神奇的 Python 库!
大家好,今天为大家分享一个神奇的 Python 库 - faust。 Github地址:https://github.com/robinhood/faust 在分布式系统和实时数据处理的世界里,消息流处理(Stream Processing)变得越来越重要。Faust 是一个 Python 库…...
electron本地OCR实现
使用tesseract.js - npm (npmjs.com) 官方demo:GitHub - Balearica/tesseract.js-electron: An example to use tesseract.js in electron 目录结构: // 引入 <script type"module" src"./ocr/tesseract.js"></script>…...
RK3588的demo板学习
表层的线宽是3.8mil: 换层之后线宽变成了4.2mil: (说明对于一根线,不同层线宽不同) 经典: 开窗加锡,增强散热,扩大电流: R14的作用:与LDO进行分压,降低LDOP的压差从而减小其散热:第…...
基于springboot驾校管理系统
作者:计算机学长阿伟 开发技术:SpringBoot、SSM、Vue、MySQL、ElementUI等,“文末源码”。 系统展示 【2024最新】基于JavaSpringBootVueMySQL的,前后端分离。 开发语言:Java数据库:MySQL技术:…...
关于Vue脚手架
一、简介与安装 1 简介 Vue Cli 全称Vue command line interface(Vue命令行接口),俗称Vue脚手架, 是Vue官方提供的一个标准化开发工具(开发平台)。 可以帮助我们快速创建一个开发Vue项目的标准化基础架子。【集成了webpack配置】 参考官网:…...
MySQL 指定字段排序
MySQL 中的 ORDER BY FIELD 用法详解 一、引言 在数据库查询中,排序是一个常见的需求。MySQL 提供了 ORDER BY 子句来对查询结果进行排序,其中 FIELD() 函数是一种非常巧妙且灵活的排序方式。通过 ORDER BY FIELD,可以按照指定的顺序对某个…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...
【向量库】Weaviate 搜索与索引技术:从基础概念到性能优化
文章目录 零、概述一、搜索技术分类1. 向量搜索:捕捉语义的智能检索2. 关键字搜索:精确匹配的传统方案3. 混合搜索:语义与精确的双重保障 二、向量检索技术分类1. HNSW索引:大规模数据的高效引擎2. Flat索引:小规模数据…...
rk3506上移植lvgl应用
本文档介绍如何在开发板上运行以及移植LVGL。 1. 移植准备 硬件环境:开发板及其配套屏幕 开发板镜像 主机环境:Ubuntu 22.04.5 2. LVGL启动 出厂系统默认配置了 LVGL,并且上电之后默认会启动 一个LVGL应用 。 LVGL 的启动脚本为/etc/init.d/pre_init/S00-lv_demo,…...
暴雨新专利解决服务器噪音与性能悖论
6月1日,我国首部数据中心绿色化评价方面国家标准《绿色数据中心评价》正式实施,为我国数据中心的绿色低碳建设提供了明确指引。《评价》首次将噪音控制纳入国家级绿色评价体系,要求从设计隔声结构到运维定期监测实现闭环管控,加速…...
【立体匹配】:双目立体匹配SGBM:(1)运行
注:这是一个专题,我会一步步介绍SGBM的实现,按照我的使用和优化过程逐步改善算法,附带实现方法 系列文章【立体匹配】:双目立体匹配SGBM:(1)运行 【立体匹配】:双目立体匹…...
DJango知识-模型类
一.项目创建 在想要将项目创键的目录下,输入cmd (进入命令提示符)在cmd中输入:Django-admin startproject 项目名称 (创建项目)cd 项目名称 (进入项目)Django-admin startapp 程序名称 (创建程序)python manage.py runserver 8080 (运行程序)将弹出的网址复制到浏览器中…...
