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

相关文章

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

30常用 Maven 命令

Maven 是一个强大的项目管理和构建工具,它广泛用于 Java 项目的依赖管理、构建流程和插件集成。Maven 的命令行工具提供了大量的命令来帮助开发人员管理项目的生命周期、依赖和插件。以下是 常用 Maven 命令的使用场景及其详细解释。 1. mvn clean 使用场景:清理项目的生成目录,通常用于删除项目中自动生成的文件(如 target/ 目录)。共性规律:清理操作

深入理解RxJava:响应式编程的现代方式

在当今的软件开发世界中,异步编程和事件驱动的架构变得越来越重要。RxJava,作为响应式编程(Reactive Programming)的一个流行库,为Java和Android开发者提供了一种强大的方式来处理异步任务和事件流。本文将深入探讨RxJava的核心概念、优势以及如何在实际项目中应用它。 文章目录 💯 什么是RxJava?💯 响应式编程的优势💯 RxJava的核心概念

利用命令模式构建高效的手游后端架构

在现代手游开发中,后端架构的设计对于支持高并发、快速迭代和复杂游戏逻辑至关重要。命令模式作为一种行为设计模式,可以有效地解耦请求的发起者与接收者,提升系统的可维护性和扩展性。本文将深入探讨如何利用命令模式构建一个强大且灵活的手游后端架构。 1. 命令模式的概念与优势 命令模式通过将请求封装为对象,使得请求的发起者和接收者之间的耦合度降低。这种模式的主要优势包括: 解耦请求发起者与处理者

linux 判断某个命令是否安装

linux 判断某个命令是否安装 if ! [ -x "$(command -v git)" ]; thenecho 'Error: git is not installed.' >&2exit 1fi

jenkins 插件执行shell命令时,提示“Command not found”处理方法

首先提示找不到“Command not found,可能我们第一反应是查看目标机器是否已支持该命令,不过如果相信能找到这里来的朋友估计遇到的跟我一样,其实目标机器是没有问题的通过一些远程工具执行shell命令是可以执行。奇怪的就是通过jenkinsSSH插件无法执行,经一番折腾各种搜索发现是jenkins没有加载/etc/profile导致。 【解决办法】: 需要在jenkins调用shell脚

简单的角色响应鼠标而移动

actor类 //处理移动距离,核心是找到角色坐标在世界坐标的向量的投影(x,y,z),然后在世界坐标中合成,此CC是在地面行走,所以Y轴投影始终置为0; using UnityEngine; using System.Collections; public class actor : MonoBehaviour { public float speed=0.1f; CharacterCo

Linux命令(4):fg与bg命令

fg、bg、jobs、&、ctrl + z都是跟系统任务有关的,虽然现在基本上不怎么需要用到这些命令,但学会了也是很实用的 一.& 最经常被用到 这个用在一个命令的最后,可以把这个命令放到后台执行 二.ctrl + z 可以将一个正在前台执行的命令放到后台,并且暂停 三.jobs 查看当前有多少在后台运行的命令 四.fg 将后台中的命令调至前台继续运行 如果后台中有多个命令,可以

Linux命令(3):sz与rz命令

一般来说,linux服务器大多是通过ssh客户端来进行远程的登陆和管理的,使用ssh登陆linux主机以后,如何能够快速的和本地机器进行文件的交互呢,也就是上传和下载文件到服务器和本地; 与ssh有关的两个命令可以提供很方便的操作: sz:将选定的文件发送(send)到本地机器 rz:运行该命令会弹出一个文件选择窗口,从本地选择文件上传到服务器(receive) rz,sz是便是Linux

Detectorn2预训练模型复现:数据准备、训练命令、日志分析与输出目录

Detectorn2预训练模型复现:数据准备、训练命令、日志分析与输出目录 在深度学习项目中,目标检测是一项重要的任务。本文将详细介绍如何使用Detectron2进行目标检测模型的复现训练,涵盖训练数据准备、训练命令、训练日志分析、训练指标以及训练输出目录的各个文件及其作用。特别地,我们将演示在训练过程中出现中断后,如何使用 resume 功能继续训练,并将我们复现的模型与Model Zoo中的