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

news2025/1/19 17:12:40

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.coloradmin.cn/o/1107240.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【MySQL】数据库——库操作

文章目录 1. 创建数据库[IF NOT EXISTS] 的使用 2. 删除库3. 数据库的编码问题查看系统默认支持的字符集查看系统默认支持的校验集只查看 database的校验集指定编码创建数据库修改字符集修改校验集验证规则对数据库的影响utf8_general_ci ——不区分大小写utf8_bin ——区分大小…

【Qt之布局】QVBoxLayout、QHBoxLayout、QGridLayout、QFormLayout介绍及使用

在Qt中,布局管理器(Layout)用于管理窗口中的控件的位置和大小,以适应不同大小的窗口。 常用的布局管理器包括QVBoxLayout、QHBoxLayout、QGridLayout和QFormLayout。 先放张布局UI: 1. QVBoxLayout(垂直布…

【爬虫教程】2023最详细的爬虫入门教程~

初识爬虫 学习爬虫之前,我们首先得了解什么是爬虫。 来自于百度百科的解释: 网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则&a…

视频批量加水印:保护版权,提升效率

在当今的自媒体时代,视频制作已经成为许多人的一项必备技能。然而,在视频制作过程中,如何为自己的视频添加独特的水印以保护知识产权,常常让许多制作者感到困扰。本文将为你揭示如何通过固乔剪辑助手软件,简单几步批量…

音乐播放器蜂鸣器ROM存储歌曲verilog,代码/视频

名称:音乐播放器蜂鸣器ROM存储歌曲 软件:Quartus 语言:Verilog 代码功能: 设计音乐播放器,要求至少包含2首歌曲,使用按键切换歌曲,使用开发板的蜂鸣器播放音乐,使用Quartus内的RO…

VUE前端判断是电脑端还是移动端

背景需求 ruoyi框架,前后端分离。现在要在用户访问的时候根据不同的设备跳转到不同的登录页面。 教程 router/index.js 修改src/router/index.js,在这里增加自己的要跳转的页面 permission.js 在白名单中添加自己的登录页面 增加以下识别的代码 le…

solidworks 2024新功能之-打造更加智能的工作 硕迪科技

SOLIDWORKS 2024 的新增功能 SOLIDWORKS 的每个版本都致力于改进您的工作流程,使您常用的工具尽可能快速高效地运作。此外,SOLIDWORKS 2024 可以通过量身定制的解决方案扩展您的工具集,并使您能够通过 Cloud Services 轻松将您的设计数据连接…

vue 写一个大富翁 和 老虎机组件

大富翁 老虎机https://github.com/YaminZheng/zillionaire.git Vue Ts 编写的大富翁,支持自定义路径,动画和图片可以自行添加 Dev git clone https://github.com/YaminZheng/zillionaire.git cd zillionaire yarn set version stable yarn install …

文心大模型4.0亮相2023百度世界大会,助力各赛道应用进一步发展

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师…

Map<String, Object> 和 com.fasterxml.jackson.databind.node.ObjectNode区别

Map<String, Object>和com.fasterxml.jackson.databind.node.ObjectNode都可以用来表示一个键值对集合&#xff0c;其中键是字符串&#xff0c;值可以是任何对象。 Map<String, Object>是Java标准库中的一种数据结构&#xff0c;用于存储一组键值对。它是一个接口…

【Electron】Not allowed to load local resource

问题描述 使用 audio 标签播放音频文件&#xff0c;控制台报错 Not allowed to load local resource。 Not allowed to load local resource原因分析 通常是安全策略所引起的。Electron 默认情况下禁止加载本地资源&#xff0c;以防止潜在的安全风险。 解决方案 在 main.js…

1208. 翻硬币

题目&#xff1a; 1208. 翻硬币 - AcWing题库 思路&#xff1a; 1.对于要求从A变化到B的这类题&#xff0c;可以采用开关控制的方法。 2.一次翻转连续两个硬币&#xff0c;求origin变为result 最少需要翻转多少次。我们在origin的两个硬币中间放一个开关&#xff0c;开关变换…

代码随想录第四十三天|343. 整数拆分 ● 96.不同的二叉搜索树

343.整数拆分 题目&#xff1a; 给定一个正整数 n&#xff0c;将其拆分为至少两个正整数的和&#xff0c;并使这些整数的乘积最大化。 返回你可以获得的最大乘积。 示例 1: 输入: 2 输出: 1 解释: 2 1 1, 1 1 1。 示例 2: 输入: 10 输出: 36 解释: 10 3 3 4, 3 3 4 …

Linux:命令行参数和环境变量

文章目录 命令行参数环境变量环境变量的概念常见的环境变量PATH 环境变量表本地变量和环境变量命令分类 本篇主要解决以下问题&#xff1a; 什么是命令行参数命令行参数有什么用环境变量是什么环境变量存在的意义 命令行参数 在学习C语言中&#xff0c;对于main函数当初的写…

Spring framework Day 23:容器事件

前言 容器事件是 Spring Framework 中的一个重要概念&#xff0c;它提供了一种机制&#xff0c;使我们能够更好地了解和响应 Spring 容器中发生的各种事件。通过容器事件&#xff0c;我们可以在特定的时间点监听和处理容器中的各种状态变化、操作和事件触发&#xff0c;以实现…

【网络编程】多路转接之select、poll、epoll

目录 一、如何进行高效的IO 以read/recv为例 二、五种IO模型 三、常见的高级IO 四、非阻塞IO 1、recv和send自带的非阻塞IO 2、可以将文件描述符设为非阻塞 2.1open自带的非阻塞IO 2.2通过fcntl函数将一个文件描述符设置为非阻塞 2.3非阻塞IO的返回值判定 三、多路转…

网络安全(黑客)自学方向

每年报考网络安全专业的人数很多&#xff0c;但不少同学听说千万别学网络安全&#xff0c;害怕网络安全专业很难就业。下面就带大家深入了解一下网络安全专业毕业后可以干什么&#xff0c;包括网络安全专业的就业前景和方向等。 随着信息化时代的到来&#xff0c;网络安全行业…

Intellij IDEA 运行时报 Command line is too long

文章目录 前言解决方法2020.3 之前的版本2020.3 以及之后版本 前言 有时候使用Intellij IDE 使用项目时&#xff0c;会出现“Command line is too long” 错误&#xff0c;查了很多资料才找到解决方案。为解决该错误颇费周折&#xff0c;写下此文让同道中人少走弯路。 解决方法…

ROL,PIT,YAW

简言之&#xff0c; roll是旋转角&#xff0c;是“翻滚”。绕X轴旋转,ROL pitch是俯仰角&#xff0c;是“点头“。绕Y轴旋转,PIT yaw是偏航角&#xff0c;是‘摇头“。绕Z轴旋转,YAW

软考考试时间已出!采用连考形式!

2023年下半年计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试批次安排已出&#xff01;下面是具体的考试安排。 通知原文如下&#xff1a;↓↓↓ 按照《2023年下半年计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试有关工作调整的通告》&#x…