STM32F4X SDIO(三) SD卡命令与响应

2023-10-30 10:20
文章标签 命令 sd 响应 sdio stm32f4x

本文主要是介绍STM32F4X SDIO(三) SD卡命令与响应,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

STM32F4X SDIO(三)SD卡命令与响应

  • SD卡命令
    • 命令类型
    • 通用命令与特殊命令
    • 命令的格式
    • SD卡命令列表
      • 通用命令
        • 基础命令
        • 读操作命令
        • 写操作命令
        • 写保护命令
        • 擦除命令
        • 加锁命令
        • 特定应用命令
      • 特殊命令
    • SD卡响应列表
      • 短响应
        • R1响应(正常响应命令)
        • R1b响应
        • R3响应(OCR 寄存器)
        • R6响应6(发布的 RCA 寄存器响应)
        • R7响应(卡接口条件)
      • 长响应
        • R2响应(CID,CSD 寄存器)

上一节说过SD卡的操作都是基于命令与响应,写操作有写操作的命令,读操作有读操作的命令,这节就来简单看一下SD卡都有哪些命令跟响应。

SD卡命令

命令类型

SD卡定义了4种命令类型,分别是以下几种

  • 广播命令,没有响应(bc)
  • 广播命令,有响应(bcr)
  • 寻址命令,点对点(ac)
  • 寻址数据传输命令(adtc)

通用命令与特殊命令

SD卡的命令可以分为两种使用模式,分别是通用命令特殊命令

  • 通用命令:通用是所有SD卡都可以使用的命令,没有什么特殊的使用要求,直接把命令发给SD卡即可
  • 特殊命令:SD卡制造商使用的的特定命令,在使用特殊命令前,需要先发送CMD55给SD卡,代表从CMD55开始的下一条命令为特殊命令。CMD55只对紧接着的第一条命令有效,如果CMD55的下一条命令为特殊命令,则执行其特殊功能,如果CMD55的下一条命令为通用命令,则执行通用命令。

命令的格式

在这里插入图片描述

  • 所有的命令长度都是48位
  • bit47为命令的起始位,低电平有效
  • bit46命令的传输位,高电平有效,代表从控制器到SD卡
  • bit45~bit40为命令号,代表是第几个命令
  • bit39~bit8为参数,有些命令需要参数,比如传输SD卡地址
  • bit7~bit1为命令的CRC7校验码,保证命令的准确性
  • bit0为结束位,高电平有效
  • 所有命令都是通过CMD信号线传输

SD卡命令列表

通用命令

基础命令
命令序号类型参数响应缩写描述
CMD0 bc[31:0]填充位XGO_IDLE_STATE复位所有的卡到 idle 状态
CMD1 保留
CMD2 bcr[31:0]填充位R2ALL_SEND_CID通知所有卡通过CMD线返回CID值
CMD3 bcr[31:0]填充位R6SEND_RELATIVE_ADDR通知所有卡发布新 RCA
CMD4 bc[31:16]DSR [15:0]填充位XSET_DSR编程所有卡的 DSR
CMD5 保留
CMD7 ac[31:16]RCA [15:0]填充位R1bSELECT/DESELECT_CARD选择或取消RCA卡
CMD8 bcr[31:12]保留位 [11:8]VHS [7:0]检查模式R7SEND_IF_COND发送 SD 卡接口条件,包含了主机支持 的电压信息,并询问卡是否支持。保 留位应该设置为 0
CMD9 ac[31:16]RCA [15:0]填充位R2SEND_CSD选定的卡发通过命令线送卡的CSD
CMD10 ac[31:16]RCA [15:0]填充位R2SEND_CID选定的卡发通过命令线送卡的CID
CMD11 保留
CMD12 ac[31:16]RCA [15:0]填充位R1bSTOP_TRANSMISSION强制卡停止传输
CMD13 ac[31:16]RCA [15:0]填充位R1SEND_STATUS选定的卡发送状态寄存器
CMD14 保留
CMD15 ac[31:16]RCA [15:0]填充位XGO_INACTIVE_STATE使选定的卡进入“inactive”状态
读操作命令
命令序号类型参数响应缩写描述
CMD16 ac[31:0]块长度R1SET_BLOCKLEN对于标准SD卡,设置块长度,对于高容量SD卡,块长度固定为512字节
CMD17 adtc[31:0]数据地址R1READ_SINGLE_BLOCK对于标准SD卡,这个命令读取SET_BLOCK_LEN 命令①所规定的长度的一个块。对于高容量卡来说,直接读取 512字节的块
CMD18adtc[31:0]数据地址R1READ_MULTIPLE_BLOCK连续数据块传输(从卡到主机),直到被STOP_TRANSMISSION 命令停止。块长度和 CMD17 一样
CMD19 保留
CMD20保留
CMD21 保留
CMD22 保留
CMD23 保留
写操作命令
命令序号类型参数响应缩写描述
CMD16 ac[31:0]块长度R1SET_BLOCKLEN对于标准SD卡,设置块长度,对于高容量SD卡,块长度固定为512字节
CMD24 adtc[31:0]数据地址R1WRITE_BLOCK标准卡来说,写 SET_BLOCKLEN命令定义的长度的块。高容量卡,写 512 字节长度的块,不管 SET_BLOCKEN
CMD25adtc[31:0]数据地址R1WRITE_MILTIPLE_BLOCK连 续 写 数 据 块 直 到STOP_TRANSMISSION 命令被发送。块长度和 WRITE_BLOCK 一致
CMD26 保留
CMD27adtc[31:0]填充位R1PROGRAM_CSD对 CSD 的可编程位进行编程
写保护命令
命令序号类型参数响应缩写描述
CMD28ac[31:0]数据地址R1bSET_WRITE_PROT如果卡支持写保护功能,这个命 令设置地址组中的写保护位,高容量卡不支持这个功能
CMD29 adtc[31:0]数据地址R1bCLEAR_WRITE_PROT如果卡支持写保护,这个命令清除寻址组的写保护位。高容量卡不支持这个功能
CMD30adtc[31:0]写保护数据地址R1SED_WRITE_PROT如果卡支持写保护,这个命令要求卡返回写保护位的状态。高容量卡不支持这个功能
CMD31 保留
擦除命令
命令序号类型参数响应缩写描述
CMD32ac[31:0]数据地址R1ERASE_WR_BLK_START设置要擦除的第一个块的地址
CMD33 ac[31:0]数据地址R1ERASE_WR_BLK_END设置要擦除的最后一个块的地址
CMD38ac[31:0]填充位R1bERASE擦除所有预先选定的写块
CMD39保留
CMD40保留
CMD41保留
加锁命令
命令序号类型参数响应缩写描述
CMD16 ac[31:0]块长度R1SET_BLOCKLEN对于标准SD卡,设置块长度,对于高容量SD卡,块长度固定为512字节
CMD42adct[31:0]保留全 0R1LOCK_UNLOCK用来设置/复位密码,或者加锁/解锁卡。数据块的长度是通过 SET_BLOCK_LEN 命令设置的。
CMD43~CMD49保留
CMD51保留
特定应用命令
命令序号类型参数响应缩写描述
CMD55 ac[31:16]RCA [15:0]填充位R1APP_CMD告诉卡,下个命令是特定应用命令,而不是标准 命令
CMD56adct[31:1]填充位 [0]读/写R1GEN_CMD通用命令,或者特定应用命令中,用于传输一个数据块到卡,或者卡获取一个数据块。通用卡数据块长度由SET_BLOCK_LEN命令设置。高容量卡为固定512Byte。[Bit0]1为读数据,0表示写数据到卡。
CMD58~CMD63保留

特殊命令

命令序号类型参数响应缩写描述
ACMD6ac[31:2]填充位 [1:0]总线宽度R1SET_BUS_WIDTH 定义数据总线的宽度(‘00’=1bit,‘10’=4bit)。接受的数据总线定义在 SCR 寄存器中
ACMD13adct[31:0]填充位R1SD_STATUS发送 SD 状态
ACMD17保留
ACMD18保留
ACMD19保留
ACMD21保留
ACMD22adct[31:0]填充位R1SEND_NUM_WR_BLOCK发送已经写入的块(没有错误的)的数 目。响应 32bit + CRC 数据块。如果 WRITE_BL_PARTIAL=0,ACMD22 的单位总是 512Byte。如果=1,ACMD22 的单位就是写命令使用的单块的长度
ACMD23ac[32:23]填充位 [22:0]块数R1SET_WR_BLK_ERASE_COUNT设置需要擦除的块的数目(提高速度)。 默认值=1
ACMD24保留
ACMD25保留
ACMD26保留
ACMD38保留
ACMD39保留
ACMD40保留
ACMD41bcr[31]保留位 [30]HCS(OCR30) [29:24]保留位 [23:0]Vdd 电 压 (OCR[23:0])R3SD_SEND_OP_COND发送卡的支持信息(HCS),并要求卡通 过命令线返回 OCR 寄存器内容。当卡收到 SEND_IF_COND 时,HCS 是有效的。保留位设为 0。CCS位对应OCR[30]
ACMD42ac[31:1]填充位 [0]设置卡检测R1SET_CLR_CARD_DETECT1-connect,0-discon,50k 欧姆上拉电阻,DAT3/CD
ACMD43保留
ACMD49保留
ACMD51adct[31:0]填充位R1SEND_SCR读取配置寄存器 SCR

注意:数据地址在标准卡中是以字节为单位的,而高容量卡(SDHC)中,是以块(512byte)为单位的

SD卡响应列表

SD卡的响应分为两种,分别是短响应和长响应,其中短响应长度为48bit,长响应长度为136bit,所有响应都是通过CMD信号线发送。

短响应

R1响应(正常响应命令)

在这里插入图片描述
R1响应会返回32位的卡状态。

R1b响应

在这里插入图片描述
R1b响应跟R1响应差不多,但是R1b响应在数据线上会有busy信号,主机在发送完数据后,应该检查 busy 信号。

R3响应(OCR 寄存器)

在这里插入图片描述
R3响应会返回32位的OCR寄存器

R6响应6(发布的 RCA 寄存器响应)

在这里插入图片描述
[45:40]是响应的命令号,这里就是‘000011’,即 CMD3。参数中的16 位MSB 用于产生 RCA 号。

R7响应(卡接口条件)

在这里插入图片描述
卡支持的电压信息通过 CMD8 的响应发送。Bit[19:16]表明卡支持的电压范围。卡接受提供的电压范围就返回 R7 响应。卡会在响应的参数中返回电压范围和检查模式。

长响应

R2响应(CID,CSD 寄存器)

在这里插入图片描述
R2响应会返回SD卡饿CID或者CSD寄存器的值

以上就是SD卡常用的命令和响应,当然这些命令和响应不用全部记住,只需要在使用的时候再查找就行。

这篇关于STM32F4X SDIO(三) SD卡命令与响应的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/307248

相关文章

Linux join命令的使用及说明

《Linuxjoin命令的使用及说明》`join`命令用于在Linux中按字段将两个文件进行连接,类似于SQL的JOIN,它需要两个文件按用于匹配的字段排序,并且第一个文件的换行符必须是LF,`jo... 目录一. 基本语法二. 数据准备三. 指定文件的连接key四.-a输出指定文件的所有行五.-o指定输出

Linux jq命令的使用解读

《Linuxjq命令的使用解读》jq是一个强大的命令行工具,用于处理JSON数据,它可以用来查看、过滤、修改、格式化JSON数据,通过使用各种选项和过滤器,可以实现复杂的JSON处理任务... 目录一. 简介二. 选项2.1.2.2-c2.3-r2.4-R三. 字段提取3.1 普通字段3.2 数组字段四.

java中ssh2执行多条命令的四种方法

《java中ssh2执行多条命令的四种方法》本文主要介绍了java中ssh2执行多条命令的四种方法,包括分号分隔、管道分隔、EOF块、脚本调用,可确保环境配置生效,提升操作效率,具有一定的参考价值,感... 目录1 使用分号隔开2 使用管道符号隔开3 使用写EOF的方式4 使用脚本的方式大家平时有没有遇到自

Linux命令rm如何删除名字以“-”开头的文件

《Linux命令rm如何删除名字以“-”开头的文件》Linux中,命令的解析机制非常灵活,它会根据命令的开头字符来判断是否需要执行命令选项,对于文件操作命令(如rm、ls等),系统默认会将命令开头的某... 目录先搞懂:为啥“-”开头的文件删不掉?两种超简单的删除方法(小白也能学会)方法1:用“--”分隔命

Redis 的 SUBSCRIBE命令详解

《Redis的SUBSCRIBE命令详解》Redis的SUBSCRIBE命令用于订阅一个或多个频道,以便接收发送到这些频道的消息,本文给大家介绍Redis的SUBSCRIBE命令,感兴趣的朋友跟随... 目录基本语法工作原理示例消息格式相关命令python 示例Redis 的 SUBSCRIBE 命令用于订

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

Linux查询服务器 IP 地址的命令详解

《Linux查询服务器IP地址的命令详解》在服务器管理和网络运维中,快速准确地获取服务器的IP地址是一项基本但至关重要的技能,下面我们来看看Linux中查询服务器IP的相关命令使用吧... 目录一、hostname 命令:简单高效的 IP 查询工具命令详解实际应用技巧注意事项二、ip 命令:新一代网络配置全

Linux grep 命令的使用指南

《Linuxgrep命令的使用指南》本文给大家介绍Linuxgrep命令的使用指南,包括基础搜索语法、实践指南,感兴趣的朋友跟随小编一起看看吧... 目录linux grep 命令全面使用指南一、基础搜索语法1. 基本文本搜索2. 多文件搜索二、常用选项详解1. 输出控制选项2. 上下文控制选项三、正则表达

DNS查询的利器! linux的dig命令基本用法详解

《DNS查询的利器!linux的dig命令基本用法详解》dig命令可以查询各种类型DNS记录信息,下面我们将通过实际示例和dig命令常用参数来详细说明如何使用dig实用程序... dig(Domain Information Groper)是一款功能强大的 linux 命令行实用程序,通过查询名称服务器并输