SD/SDIO(1):SD总线协议介绍

SD标准提供了很大的灵活性,除了作为存储卡外,还提供了SD卡槽的标准来扩展设备的功能。本篇文章就先来介绍一下SD总线的规范。对于SD/MMC协议的发展历史和概念介绍,可以参考我的这篇文章:SD、SDIO和MMC接口基础和规范介绍

文章目录

  • 1 SD总线协议
  • 2 SD内存卡功能描述
  • 3 SD卡识别模式
    • 3.1 复位(Card Reset)
    • 3.2 操作条件验证(Operating Condition Validation)
    • 3.3 SD卡初始化和识别(Card Initialization and Identification)
    • 3.4 数据传输模式(Data Transfer Mode)
    • 3.5 命令(Commands)
      • 3.5.1 命令格式
      • 3.5.2 详细命令描述
    • 3.6 响应(Responses)
      • 3.6.1 R1(normal response command):
      • 3.6.2 R1b
      • 3.6.3 R2(CID, CSD register)
      • 3.6.4 R3(OCR register)
      • 3.6.5 R6(Published RCA response)
      • 3.6.6 R7(Card interface condition)
  • 4 总结

1 SD总线协议

SD总线上的通信以命令/数据的比特流为基础,起始位表示数据的传输的开始,终止位表示数据传输的结束。

  • 命令(Command):命令是开启一个操作的标志。命令可以从主机发送到单个卡(寻址命令),也可以发送到所有已连接的卡(广播命令),命令通过CMD线以串行方式传输
  • 响应(Response):响应是卡收到命令后,需要发送到主机的命令的应答,响应通过CMD线以串行方式传输
  • 数据:数据的传输是双向的,通过Data线传输。

在这里插入图片描述
SD卡寻址是利用初始化阶段分配给卡的会话地址来实现的,SD存储卡的数据输入/输出是以块进行的,数据块后面跟着CRC位用于校验。主机可对数据传输进行配置,采用单线或多线传输数据。
在这里插入图片描述
在进行块写入操作时,DAT0数据线表示忙信号,而不管用于传输数据的数据线数量。
在这里插入图片描述
其中,命令字段的组成如下:
在这里插入图片描述
每个命令以起始位(0)开始,以终止位(1)结束,总长度为48位,且每个命令都通过CRC(16位CCITT多项式)来检测传输错误。根据内容的不同,响应字段有四种编码方式,长度是48或136位。
在这里插入图片描述
在CMD线上,最高有效位(MSB)首先传输,最低有效位(LSB)最后传输。当使用宽总线选项时,数据以每次传输4位的方式传送。对于每个DAT线,都会传输起始位、结束位以及CRC位。CRC位会分别对每个DAT线进行计算和检查。CRC状态响应和繁忙指示将仅通过DAT0由SD卡发送给主机。

SD卡有两种数据包格式:
(1)通用数据(8位):先发LSB,最后发MSB。但是若只有一个字节,则是先发MSB,最后发LSB。
在这里插入图片描述

(2)长数据(SD存储寄存器):从MSB开始传送。
在这里插入图片描述

2 SD内存卡功能描述

  • 主机和SD卡之间的所有通信都由主机端控制。主机发送两种类型的命令

    • 广播命令:广播命令发送给所有SD卡,其中一些命令需要响应
    • 寻址(点对点)命令:寻址命令发送给寻址的卡片,并引发该卡片的响应。
  • SD卡识别模式:主机在复位后以及在总线上寻找新SD卡时将进入SD卡识别模式,卡片在复位后将一直处于此模式,直到接收到SENDRCA命令(CMD3)

  • 数据传输模式:SD卡在其RCA(Relative Card Address,相对卡片地址)首次分配后将进入数据传输模式,主机在识别总线上的所有卡片后将进入数据传输模式。

下表显示了操作模式和卡片状态之间的依赖关系:
在这里插入图片描述

3 SD卡识别模式

在SD卡识别模式下,主机会对所有处于此模式的SD卡进行复位,验证操作电压范围,识别SD卡并要求它们分配相对卡片地址(RCA)。这个操作会针对每张SD卡分别在其独立的CMD线上执行。在SD卡识别模式中,所有数据通信仅使用CMD线。在SD卡识别以SD时钟频率进行操作。

3.1 复位(Card Reset)

命令GOIDLESTATE(CMD0)是软件复位命令,它会将每张SD卡都置于空闲状态。

3.2 操作条件验证(Operating Condition Validation)

主机通过使用特定电压发出复位命令(CMD0),并假定SD卡支持该电压。为了验证电压,SD物理层规范版本2.00中定义了用于验证SD存储卡接口的操作条件命令:SENDIFCOND(CMD8)。SD卡通过分析CMD8的参数来检查操作条件的有效性,而主机则通过分析CMD8的响应来检查有效性。提供的电压由参数中的VHS字段表示。SD卡片将VHS中指定的电压视为当前提供的电压。VHS字段只能有1 bit设置为1。用于主机检查主机和SD卡之间通信的有效性的方法包括CRC和校验模式。如果SD卡无法在提供的电压下运行,它不会响应,并保持在空闲状态。在初始化高容量SD存储卡之前,发出CMD8命令是强制性的。

SDSENDOPCOND(ACMD41)用于识别和拒绝与主机所需的VDD范围不匹配的SD卡,它们将不再参与总线操作,并进入非活动状态。注意,ACMD41是特定于应用程序的命令,因此在ACMD41之前必须先发送APPCMD(CMD55)表示接下来要发送应用程序命令。

在这里插入图片描述

3.3 SD卡初始化和识别(Card Initialization and Identification)

SD卡的初始化过程从SDSENDOPCOND (ACMD41)开始,通过设置其操作条件和OCR中的HCS (Host Capacity Support,主机容量支持)位。HCS位设置为1表示主机支持高容量SD存储卡,反之不支持。
在这里插入图片描述

3.4 数据传输模式(Data Transfer Mode)

在SD卡识别模式结束之前,主机应保持在fOD频率,因为在此间,一些SD卡可能存在操作频率限制。在数据传输模式下,主机可以在fpp频率范围内操作SD卡。主机发出SENDCSD(CMD9)以获取SD卡的特定数据(从Card Specific Data,即CSD寄存器中获取),例如块长度、存储容量等。广播命令SETDSR(CMD4)配置所有已识别SD卡,对它们进行驱动阶段的设置,包括DSR(Device Select Register,设备选择)寄存器、总线上所接SD卡的数量和数据传输频率。此时时钟率也将从fOD切换到fpp。SETDSR命令是可选的,即可以不发。

CMD7用于选择一张SD卡并将其置于传输状态。同一时间内只有一张SD卡可以处于传输状态。如果有SD卡正在处于传输状态,则它与主机的连接将被释放,并返回到空闲状态。当使用保留的相关地址0x0000发出CMD7时,所有SD卡都将返回到空闲状态。
在这里插入图片描述
各种数据传输模式之间的关系总结如下:

  • 所有数据读取命令可以通过停止命令(CMD12)随时中止。数据传输将终止,并且SD卡将返回到传输状态。读取命令包括:块读取(CMD17)、多块读取(CMD18)、发送写保护(CMD30)、发送SCR(ACMD51)和读模式下的通用命令(CMD56)

  • 所有数据写入命令可以通过停止命令(CMD12)随时中止。在通过CMD7取消选定SD卡之前,应先停止写入命令。写入命令包括:块写入(CMD24和CMD25)、CSD编程(CMD27)、锁定/解锁命令(CMD42)和写模式下的通用命令(CMD56)

  • 一旦数据传输完成,卡将退出数据写入状态,进入编程状态(传输成功)或传输状态(传输失败)

  • 如果块写入操作被停止并且最后一个块的块长度和CRC是有效的,则这个块会被写入

  • SD卡可以对块写入进行缓冲处理,这意味着下一个块可以在上一个块被编程的同时发送到SD卡中

    • 如果所有的写入缓冲区都已满,并且SD卡处于编程状态,DAT0将保持低电平(BUSY)
  • 写入CSD、写保护和擦除操作不能缓冲。这意味着当SD卡忙于处理其中任何一个命令时,不会接受其他数据传输命令

    • 只要卡处于忙状态和编程状态,DAT0线路将保持低电平。实际上,如果卡的CMDDAT0线路是分开的,并且主机将忙的DAT0线与其他卡的DAT0线断开连接,主机可以在卡处于忙状态时访问其他卡
  • 在SD卡编程过程中不允许设置参数命令

    • 参数设置命令有:设置块长度(CMD16)、擦除块起始(CMD32)和擦除块结束(CMD33)
  • 在SD卡编程过程中不允许使用读取命令

  • 从空闲状态切换到传输状态(使用CMD7)不会终止擦除和编程操作,SD卡将断开连接并释放DAT线。

  • 在断开状态下,可以使用CMD7重新选定SD卡。在这种情况下,SD卡将设置为到编程状态并指示总线忙

  • 重置卡(使用CMD0CMD15)将终止任何未决或正在活动的编程操作。这可能会破坏卡上的数据内容,但这是主机需要考虑的,要防止发生这种情况。

  • CMD34-37CMD50CMD57是专为SD命令系统扩展而保留的。这些命令的状态转换在每个命令系统规范中有定义。

3.5 命令(Commands)

3.5.1 命令格式

所有命令的固定代码长度为48位,需要1.92µs(25MHz)或0.96µs(50MHz)的传输时间。
在这里插入图片描述

3.5.2 详细命令描述

在这里插入图片描述

3.6 响应(Responses)

所有的响应都通过命令行CMD来发送,响应传输始终以与响应码字相对应的位字符串的左侧一位开始,响应码的长度取决于响应类型。SD存储卡有五种类型的响应,SDIO卡则额外支持两种响应类型(R4和R5)。

3.6.1 R1(normal response command):

响应码的长度为48位,其中第45位到第40位表示要响应的命令的索引,卡的状况用32位进行表示。
在这里插入图片描述

3.6.2 R1b

R1bR1相同,只是可以额外在数据线上发送一个可选的忙信号。在接收这些命令之前处于忙状态中的卡在接收这些命令之后可能仍然处于忙状态,主机应在响应中进行忙检查。

3.6.3 R2(CID, CSD register)

响应码长度为136位。CID寄存器的内容作为对CMD2CMD10命令的响应进行发送。CSD寄存器的内容作为CMD9的响应进行发送。仅传输CIDCSD的位[127:1],这些寄存器的Bit 0表示响应的结束。
在这里插入图片描述

3.6.4 R3(OCR register)

响应码长度为48位,OCR寄存器的内容作为对ACMD41的响应进行发送。
在这里插入图片描述

3.6.5 R6(Published RCA response)

响应码长度为48位。其中第[45:40]位指示要响应的命令的索引,在这种情况下,该值为000011(与Status Bit中的第5位共同使用可以表示CMD3)。Argument field的高16位用于新发布的RCA(Relative Card Address)号。
在这里插入图片描述

3.6.6 R7(Card interface condition)

响应码长度为48位。卡支持的电压信息作为CMD8的响应发送。[19:16]位表示卡所支持的电压范围。接受了所提供电压的SD卡将返回R7响应。在响应中,SD将回传设置的电压范围和校验模式。
在这里插入图片描述
其中Voltage accepted字段如下:
在这里插入图片描述

4 总结

本文大致地介绍了一下SD总线协议,主要是为了理解SD卡初始化和使用的过程。具体的一些指令和操作流程就没有详细说明了,大家可以参考文档:SD物理层规范文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/162753.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# 关于托管调试助手 “FatalExecutionEngineError“:“运行时遇到了错误。解决方案

托管调试助手 “FatalExecutionEngineError”:“运行时遇到了错误。此错误的地址为 0x740161f8,在线程 0x1174 上。错误代码为 0xc0000005。此错误可能是 CLR 中的 bug,或者是用户代码的不安全部分或不可验证部分中的 bug。此 bug 的常见来源包括用户对 …

回顾 | E³CI效能认知与改进论坛,助力企业研发效能度量和提升

2023年8月,TiD质量竞争力大会组委会和ECI专家委员会成功举办TiD大时段课程“度量驱动研发效能提升”与“ECI效能认知与改进论坛”。与会专家以《ECI软件研发效能度量规范》团体标准为要点,为企业研发效能度量和提升分享诸多实践成果与经验。 《ECI软件研…

手术麻醉临床信息管理系统源码,客户端可以接入监护仪、麻醉机、呼吸机

一、手术麻醉临床信息管理系统介绍 1、手术麻醉临床信息管理系统是数字化手段应用于手术过程中的重要组成部分,用数字形式获取并存储手术相关信息,既便捷又高效。既然是管理系统,那就是一整套流程,管理患者手术、麻醉的申请、审批…

摩尔信使MThings的协议转换(数据网关)功能

摩尔信使MThings可以作为现场总线(RS485)和以太网的数据中枢,并拥有强大的Modbus协议转换功能。 数据网关功能提供协议转换和数据汇聚功能,可实现多维度映射,包括:不同的通道(总线)类型、协议类型&#xff…

2023年【公路水运工程施工企业安全生产管理人员】新版试题及公路水运工程施工企业安全生产管理人员模拟试题

题库来源:安全生产模拟考试一点通公众号小程序 公路水运工程施工企业安全生产管理人员新版试题是安全生产模拟考试一点通生成的,公路水运工程施工企业安全生产管理人员证模拟考试题库是根据公路水运工程施工企业安全生产管理人员最新版教材汇编出公路水…

tomcat动静分离

1.七层代理动静分离 nginx代理服务器:192.168.233.61 代理又是静态 tomcat1:192.168.233.71 tomcat2:192.168.233.72 全部关闭防火墙 在http模块里面 tomcat1,2 删除上面的hostname 148 配置 直接访问 http://192.168.66.17/index.jsp 2.四层七层动…

web前端面试-- http的各个版本的区别(HTTP/0.9、HTTP/1.0、HTTP/1.1、HTTP/2.0、HTTP/3.0)

本人是一个web前端开发工程师,主要是vue框架,整理了一些面试题,今后也会一直更新,有好题目的同学欢迎评论区分享 ;-) web面试题专栏:点击此处 http的各个版本的区别 HTTP(超文本传输协议&…

MySQL学习(七)——存储过程

文章目录 1. 基本语法2. 变量2.1 系统变量2.2 用户定义变量2.3 局部变量 3. 逻辑关系3.1 if3.2 参数3.3 case3.4 while3.4 repeat3.5 loop 4. 存储结构4.1 游标4.2 条件处理程序4.3 存储函数 存储过程是事先经过编译并存储在数据库中的一段 SQL 语句的集合,调用存储…

VMware安装银河麒麟高级服务器操作系统V10

目标 VMware安装银河麒麟高级服务器操作系统V10背景介绍环境准备安装步骤配置VM虚拟机系统安装 VMware安装银河麒麟高级服务器操作系统V10 背景介绍 近期,随着国产信创的持续发热和大众关注度的上升,我们公司决定与时俱进,针对国产技术趋势…

selenium教程 —— css定位

说明:本篇博客基于selenium 4.1.0 selenium-css定位 element_css driver.find_element(By.CSS_SELECTOR, css表达式) 复制代码 css定位说明 selenium中的css定位,实际是通过css选择器来定位到具体元素,css选择器来自于css语法 css定位优点…

优雅而高效——立即执行函数表达式()();

😆博主:小猫娃来啦 😆文章核心:优雅而高效——立即执行函数表达式()(); 文章目录 前言立即执行函数表达式的定义和特点立即执行函数表达式的应用场景封装私有变量和方法避免全局变量污染模块化开发 立即执行函数表达式的写法和示例…

pinia下载使用时报错如何解决?

报错 可能是因为pnpm下载的时候版本出现了问题 更新pnpm的版本 一、windowr打开终端 输入pnpm -v检查是否是最新版本 如果是8.6.2的话 就更新 更新步骤如下: 二:打开pnpm下载的网盘位置 我的是在c盘 找到里面的用户文件夹 点击选择dell里面的App data文…

【AI视野·今日Sound 声学论文速览 第二十六期】Mon, 16 Oct 2023

AI视野今日CS.Sound 声学论文速览 Mon, 16 Oct 2023 Totally 7 papers 👉上期速览✈更多精彩请移步主页 Daily Sound Papers Low-latency Speech Enhancement via Speech Token Generation Authors Huaying Xue, Xiulian Peng, Yan Lu现有的基于深度学习的语音增强…

数字孪生技术在智慧城市应用的推进建议

(一)坚持需求牵引,强场景重实效 必须始终坚持以人为本、场景导向、需求牵引,站在供给侧结构性改革的角度,突出以用促建,强调建用并重,真正发挥数字孪生城市应用建设的实效。从构建数字孪生创新…

分布式内存计算Spark环境部署与分布式内存计算Flink环境部署

目录 分布式内存计算Spark环境部署 1. 简介 2. 安装 2.1【node1执行】下载并解压 2.2【node1执行】修改配置文件名称 2.3【node1执行】修改配置文件,spark-env.sh 2.4 【node1执行】修改配置文件,slaves 2.5【node1执行】分发 2.6【node2、no…

Linux知识点 -- 高级IO(二)

Linux知识点 – 高级IO(二) 文章目录 Linux知识点 -- 高级IO(二)一、IO多路转接 -- poll1.poll接口2.poll实现3.poll优缺点 二、IO多路转接 -- epoll1.epoll接口2.epoll的工作原理3.epoll服务器实现4.epoll的优点5.epoll的工作模式…

Django REST Framework完整教程-认证与权限-JWT的使用

文章目录 1.认证(Authentication)与权限(Permission)1.1.视图添加权限1.2.登录验证1.3.常用DRF自带权限类1.4.自定义权限类1.5.全局权限1.6.函数视图权限 2.认证详解2.1.认证方案2.2.如何使用TokenAuthentication? 3.JSON Web Token(JWT)认证3.1.工作原理3.2.安装3.…

Java学习笔记(四)——程序控制结构

一、顺序控制 二、分支控制 (一)单分支 (二)双分支 (三)多分支 (四)嵌套分支 (五)switch分支结构 (六)if和switch的选择 三、循…

Megatron-LM GPT 源码分析(一) Tensor Parallel分析

引用 本文基于开源代码 https://github.com/NVIDIA/Megatron-LM ,通过GPT的模型运行示例,从三个维度 - 模型结构、代码运行、代码逻辑说明 对其源码做深入的分析。 Tensor Parallel源码分析

uniapp(uncloud) 使用生态开发接口详情4(wangeditor 富文本, 云对象, postman 网络请求)

wangeditor 官网: https://www.wangeditor.com/v4/pages/01-%E5%BC%80%E5%A7%8B%E4%BD%BF%E7%94%A8/01-%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8.html 这里用vue2版本,用wangeditor 4 终端命令: npm i wangeditor --save 开始使用 在项目pages > sy_news > add.vue 页面中…