SD3.0协议解读三

2023-11-09

SD卡功能描述

所有主机和SD卡间的通信都是由主机控制的,这和USB是一致的,例如:U盘并没有主动通知USB控制器的能力,USB鼠标也没有主动通知USB控制器的能力,当然,SD卡也是没有主动通知SD控制器的能力的。

主机发送的命令有两种,一种是一对多,另一种自然是一对一了,他们分别是:

1.广播命令:广播命令发送给所有挂在SD总线上的SD卡,有一些广播命令需要SD卡作出响应。

2.寻址(点对点)命令:寻址命令只发送给具有相应地址的卡,并需要找到的那张卡返回一个响应。

SD卡有两种模式,一种是卡识别模式,另一种是数据传输模式。

1.卡识别模式:在重置(reset)后,当主机查找总线上的新卡时,处于卡识别模式。重置后SD卡将始终处于该模式下,直到收到SEND_RCA命令(CMD3)。

2.数据传输模式:当卡收到RCA(CMD3)后,卡就会进入数据传输模式。

总的来说,卡二种操作模式,有10种状态,这两种操作模式十种状态贯穿了整个协议的精华,所以我们有必要来认识一下。



下面我们将对SD3.0的卡初始化识别模式的流程进行翻译,这段翻译比较枯燥无味,但是没办法,确实比较复杂,不仔细啃啃英文就难以理解这流程是怎么搞的。

卡识别模式:

在卡识别模式,主机重置所有处于卡识别模式的SD卡,检验操作电压范围,识别卡,并请求卡发送相对卡地址(RCA)。这些操作都是在各自的CMD线上完成的。在卡识别的过程中,卡的操作频率应该在Fod下。

卡复位:

发送GO_IDLE_STATE(CMD0)到SD卡后,除处于非活动状态(Inactive state)之外的SD卡都会进入空闲状态(Idle state);在Idle状态,SD卡的CMD线处于输入模式,默认相对地址为0x0000,默认驱动寄存器设定为最低速度,最大驱动电流能力。

工作条件检测:

在控制器和SD卡进行任何通信之前,控制器不清楚SD卡支持的工作电压范围,故而控制器首先使用默认的电压发送一条reset指令(CMD0),紧跟着的CMD8指令,用于取得SD卡支持工作电压范围数据。SD卡通过检测CMD8的参数部分来检查控制器使用的工作电压,控制器通过分析回传的CMD8参数部分来校验SD卡是否可以在所给电压下工作。如果SD卡可以在指定电压下工作,则它回送CMD8的命令响应字,其中包含check voltage, check pattern。如果SD卡不支持所给电压,则SD卡不会给出任何响应信息,并继续处于Idle状态。在PLV2.0(physical layer version2.0)下,在首次执行ACMD41之前,必须执行CMD8指令,用以初始化SDHC卡,SDHC卡根据是否接收到CMD8指令来鉴别控制器是否支持PLV2.0协议。使用低电压的控制器也必须在ACMD41命令之前发送CMD8,避免可以工作在两种电压模式下的SD卡因为没有接收到CMD8, 而默认工作在高电压环境下,被误认为是只支持高电压工作模式。
SD_SEND_OP_COND(ACMD41)命令的目的是给予SD卡控制器一个识别SD卡是否可以在所给Vdd范围下工作的机制,如果SD卡无法在指定Vdd范围内工作,则它会进入非活动状态(Inactive state)。要注意的是,ACMD41是应用相关型命令,因而,每次发出的ACMD41命令都必须紧跟在一条APP_CMD(CMD55)命令之后。在空闲态(Idle State)下使用的CMD55命令使用默认的卡相对地址(RCA)0x0000。

卡初始化和识别过程:

SD卡的初始化开始于接收到ACMD41指令之后,ACMD指令的HCS(Host Capacity Support)位如果设定为1的话,表明控制器支持SDHC卡,否则表示不支持。
在CMD8命令发送之后的ACMD41指令其功能有所扩展,在参数里多了HCS部分,在响应里面多了CCS(Card Capacity Status)部分。HCS参数会被不响应CMD8命令的SD卡所抛弃。控制器向不响应CMD8的卡发送ACMD41指令时,HCS位应该设置为零0。如果向SDHC卡发送HCS位为0的ACMD41命令,SDHC卡返回的响应,其busy标识位永远为0,代表忙状态。HCS标识位用来表明SD卡是否已经完成初始化,如果未完成,HCS为零,否则为1,如果HCS为0,控制器会重复发送ACMD41指令,SD卡只检查首次接收到的ACMD41指令的HCS位。
响应CMD8的SD卡发送的对于ACMD41指令响应会包含CCS部分,控制器只检查HCS标志位为1的响应所包含的CCS位。CCS=1表明其为SDHC卡,否则为标准SD卡。
控制器随后发送ALL_SEND_CID(CMD2)命令,查询各个卡的CID(unique card identification)值,还没有被识别的SD卡(处于Ready状态)会发送CID值作为响应,发送完CID值之后,SD卡进入识别状态(Identification state),然后控制器发送CMD3(SEND_RELATIVE_ADDR)命令,要求各个SD卡发送一个新的相对地址(RCA),RCA在之后的数据传输模式中用于寻址。RCA发送完之后。SD卡进入Stand-by状态,在这个状态,如果控制器想要给SD卡分配一个新的RCA,它可以发送另一条CMD3命令给SD卡。最后发布的RCA为SD卡的真实RCA。

卡的初始化和识别流程具体如下(SD模式):


总结一下流程:

当host上电后,使所有的卡设备处于卡识别模式,完成设置有效操作电压范围,卡识别和请求卡相对地址等操作。
1、发送指令CMD0使卡设备处于idle状态;

2、发送指令CMD8,如果卡设备有response,说明此卡为SD2.0以上;

3、发送指令CMD55+ACMD41,该指令是用来探测卡设备的工作电压是否符合host端的要求;在发送ACMD41这类指令之前需要先       发送CMD55指令,在SDIO中ACMD41指令被CMD5替代。

4、发送指令CMD11转换工作电压到1.8V;

5、发送指令CMD2获取CID;

6、发送指令CMD3获取RCA(relative card address)

好了,这篇文章就聊到这里,是否对SD卡的初始化和识别过程有了更清晰的了解呢?这只是协议上的流程,具体的代码实现我们后面再慢慢分析,千万不能急呀~~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SD3.0协议解读三 的相关文章

  • 人工智能应用加速落地,推动券商业务+IT双升级|爱分析报告

    券商数字化转型已驶入快车道 多部政策文件相继发布 要求提升金融科技治理水平 加大科技资金投入 深化数字化转型 与此同时 受宏观经济环境下行影响 券商同质化竞争加剧 传统经纪业务增长承压 券商亟待寻求业务新增长点 在政策驱动和业绩承压的双重影
  • 第二十三课:Data setup

    PR Flow内容总览 在整个PR阶段 我们要做的主要可以分为三大部分 data setup部分 就类似于我们一般的Creat new project创建新项目的阶段 此阶段我们主要就是导入各种文件 Technology file TF文件
  • STM32F103常用的HAL库函数

    1 GPIO PA0输出高低电平 HAL GPIO WritePin GPIOA GPIO PIN 0 GPIO PIN RESET 低电平 HAL GPIO WritePin GPIOA GPIO PIN 0 GPIO PIN SET 高
  • valgrind简介与使用

    一 valgrind简介 Valgrind是一款用于内存调试 内存泄漏检测以及性能分析 检测线程错误的软件开发工具 Valgrind 是运行在Linux 上的多用途代码剖析和内存调试软件 主要包括Memcheck Callgrind Cac
  • Mysql API实践

    Mysql API实践 MySql 5 6的API官方见 http dev mysql com doc refman 5 6 en c api function overview html 下面给出一个简单的例子 include

随机推荐

  • Mybatis快速入门

    基本步骤 1 2 导入坐标 使用maven来构建项目只需将所需依赖注入
  • 【Java】基础知识练习题(编程题为主!)

    答案后续发布 欢迎来到小明的练习空间 一 异常 编程题 1 1 题目一 1 2 题目二 1 3 题目三 1 4题目四 二 集合 问答 编程题目 2 1 集合 编程题 Collection接口 2 2 集合 编程题 Collection接口
  • 调用用于获取服务器信息,一种获取测试用例的方法以及服务器

    1 一种获取测试用例的方法 其特征在于 包括 获取被测对象的函数调用关系信息 获取目标函数 所述目标函数为根据所述被测对象的被测版本源码和历史版本源码的差异信息确定的相关函数 所述被测版本源码是所述历史版本源码经过处理得到的 根据所述函数调
  • openEuler怎么查询端口是否被占用-ChatGPT回答

    openEuler怎么查询端口是否被占用 ChatGPT回答 在 openEuler 系统中 你可以使用以下命令来查询端口是否被占用 查看所有使用中的端口 lsof i 查看指定端口是否被占用 lsof i 端口号 例如 查看 80 端口是
  • 高次谐波电压、电流主要有哪些危害?

    高次谐波电压 电流主要有哪些危害 答 高次谐波电流超过一定限度会引起发电机 变压器 电动机损失增大 产生过热 高次谐波电压可能引起设备异常振动 继电保护误动 计量误差增大 晶闸管装置失控和影响通信质量等 高次谐波电流 电压更容易使电力电容器
  • JS获取随机或指定数据

    1 不能全是相同的数字或者字母 如 000000 111111 222222 333333等等 2 不能是连续数字 如 123456 12345678 87654321等等 顺序表 static String orderStr static
  • 模板类的继承问题

    首先大家来看这段代码 plain view plain copy class A public void Show cout lt lt A Show lt lt endl void Fun cout lt lt A Fun lt lt e
  • [CVPR2020] DoveNet: Deep Image Harmonization via Domain Verification 论文解读

    论文地址和代码 数据库和代码已公布 https github com bcmi Image Harmonization Datasets 论文地址 https arxiv org abs 1911 13239 一 简介 图像合成 image
  • python selenium定位元素报错:‘WebDriver‘ object has no attribute ‘find_element_by_id

    标题问题的解决办法参考了这篇文章 然后成功了 1条消息 关于新版本selenium定位元素报错 WebDriver object has no attribute find element by id 等问题 selenium新版本定位 热
  • ADC各参数含义

    文章目录 前言 一 ADC工作原理 二 详细参数 1 分辨率 2 转换率 采样率 转化时间 3 最低有效位 LSB 最高有效位 MSB 4 量化误差 5 SNR 6 失调误差 7 增益误差 8 微分非线性 DNL 9 积分非线性 INL 1
  • 《数据分析思维》:分析方法与业务知识

    小飞象 读书会 生活从来不会刻意亏欠谁 它给你一块阴影 必会在不远处撒下阳光 读书交流 3期 数据分析方法与业务知识 data analysis 分享人 木兮 欢迎大家参加这次读书会的直播分享 本次分享由学委木兮来带大家梳理一下 数据分析思
  • 【STM32篇】步进电机之S型曲线

    使用步进电机的S曲线算法的目的是为了使电机缓慢加速到目标转速或从高转速减速到0 防止电机在高转速时立即停止而对电机造成损伤 减少电机的使用寿命 本文主要讲述S型算法的使用 对于具体的原理 可通过其他博主的文章学习 图1 S算法加减速图 如图
  • libvirt笔记 PCI设备直通

    PCI设备直通功能允许将主机上的物理PCI设备直接分配给来宾机 客户操作系统驱动程序可以直接使用设备硬件 而无需依赖主机操作系统的任何驱动程序功能 在使用PCI设备直通时需要注意一些事项 当将PCI设备直接分配给客户机时 如果不首先从客户机
  • 静态代码和动态代码的区别_动态改变的代码设计思想

    前言 我看过很多书 知道那些作者在推广什么 相对书里的东西落地 还是一个不容易的过程 我看过很多行业的代码 持续多年的积累 聊过一些老板 对代码改造的看法 为什么 程序员这么难 我将用4个方向 来解释代码设计中的设计思路和方法 给大家展现一
  • Android登录 之 GooglePlay登录

    想法 写了好久代码了 但是都没有具体的总结下 总是用到的时候 再去翻看资料 一看就是一堆 到最后都不一定能管用 近期做了一些项目 涉及到了登录授权 细回想下 自己接过的登录授权还真心不少 不同的授权都会一一列举 以后方便自己 也希望能够方便
  • Fatal error: Cannot declare class ***, because the name is already in use in D:\www\test.php

    报错信息 Fatal error Cannot declare class because the name is already in use in D www test php on line 5 报错原因 该class 文件在其他引入
  • Tomcat控制台打印输出中文时的乱码问题

    这个问题我参考了许多网上的解决方法 这个方法是比较迅速与方便的 产生这个问题的原因是Windows默认编码集为GBK 由于使用startup bat启动Tomcat时 它会读取catalina bat的代码并打开一个新窗口运行 打开的cmd
  • 信号量详细解说

    1 信号量概述 进化版的互斥锁 1 gt N 由于互斥锁的粒度比较大 如果我们希望在多个线程间对某一对象的部分数据进行共享 使用互斥锁是没有办法实现的 只能将整个数据对象锁住 这样虽然达到了多线程操作共享数据时保证数据正确性的目的 却无形中
  • webdriver安装

    首先了解自己所需使用的浏览器 这里以谷歌浏览器为例 火狐 Edge安装方式相同 找相应webdriver即可 查看自己浏览器的版本 去官网找对应版本的webdriver 网址 http npm taobao org mirrors chro
  • SD3.0协议解读三

    SD卡功能描述 所有主机和SD卡间的通信都是由主机控制的 这和USB是一致的 例如 U盘并没有主动通知USB控制器的能力 USB鼠标也没有主动通知USB控制器的能力 当然 SD卡也是没有主动通知SD控制器的能力的 主机发送的命令有两种 一种