详解SD卡命令
知晓编程 2022-09-28
0 1 SD卡简介

SD卡(SecureDigital MemoryCard)即:安全数码卡,它是在MMC的基础上发展而来,是一种基于半导体快闪记忆器的新一代记忆设备,它被广泛地于便携式装置上使用,例如数码相机、个人数码助理(PDA)和多媒体播放器等。SD卡由日本松下、东芝及美国SanDisk公司于19998月共同开发研制。

SD卡按容量分类,可以分为3类:SD卡、SDHC卡、SDXC卡,如下表所示:

SD卡外形和接口图如下图所示:

SD卡由9个引脚与外部通信,支持SPI和SDIO两种模式,不同模式下,SD卡引脚功能描述如下表所示:

0 2 SD卡特点

高容量,最大可达2TB(目前已有512GBSD卡)。

②高安全性。

③高速,目前已有读取速度近100MB/S的SD卡。

④体积小巧,标准SD卡大小只有一张邮票大小,重量仅2g。

⑤接口简单,支持SPI和SDIO两种访问模式。

注意:TF+卡套,组合起来也可以当SD卡用,不过,很大一部分TF卡,不支持SPI访问模式。所以,SPI驱动SD卡的时候,尽量选择大卡(SD),而不要选择TF卡。

0 3 SD的寄存器

SD5个寄存器

这些寄存器的详细介绍,请参考《SD卡2.0协议.pdf》第五章

0 4 SD卡的操作

4.1SD的初始化

要实现SDIO驱动SD卡,最重要的步骤就是SD卡的初始化,只要SD卡初始化完成了,那么剩下的(读写操作)就简单了,所以我们这里重点介绍SD卡的初始化。

下图参见《SD卡2.0协议.pdf》这个文档。

从SD卡初始化流程可知,不管什么卡(这里我们将卡分为4类:SD2.0高容量卡(SDHC,最大32G),SD2.0标准容量卡(SDSC,最大2G),SD1.x卡和MMC卡),首先我们要执行的是卡上电(设置SDIO_POWER

[1:0]=11),上电后发送CMD0,对卡进行软复位,之后发送CMD8命令,用于区分SD卡2.0,只有2.0及以后的卡才支持CMD8命令,MMC卡和V1.x的卡,是不支持该命令的。CMD8命令格式如下表:

在发送CMD8的时候,通过其带的参数我们可以设置VHS位,以告诉SD卡,主机的供电情况,让SD卡知道主机的供电范围。

VHS位定义如下表所示:

这里我们使用参数0X1AA,即告诉SD卡,主机供电为2.7~3.6V之间,如果SD卡支持CMD8,且支持该电压范围,则会通过CMD8的响应(R7,关于SD卡响应,请参考《SD卡2.0协议.pdf》第4.9节)将参数部分原本返回给主机,如果不支持CMD8,或者不支持这个电压范围,则不响应。

在发送CMD8后,发送ACMD41(注意:发送ACMD41之前,要先发送CMD55),来进一步确认卡的操作电压范围,并通过HCS位来告诉SD卡,主机是不是支持高容量卡(SDHC)

ACMD41命令格式如下表所示:

ACMD41指令响应(R3),包含了SD卡OCR寄存器内容,其定义如下表所示:

对于支持CMD8的卡,主机设置ACMD41的参数HCS=1,告诉SD卡,主机支持SDHC卡。

对2.0的卡,OCR的CCS位用于表示SDHC还是SDSC;对1.x的卡,则忽略该位;

对MMC卡,则不支持ACMD41,MMC卡只需要发送:CMD0和CMD1即可完成初始化。

CMD2用于获取CID寄存器数据,CID寄存器各位定义如下表:

SD卡在收到CMD2后,将返回R2长响应(136位),其中包含128位有效数据(CID寄存器内容),存放在SDIO_RESP1~4等4个寄存器里面。通过读取这四个寄存器,就可以获得SD卡的CID信息。

CMD3,用于设置卡相对地址(RCA,必须为非0),对于SD卡(非MMC卡),在收到CMD3后,将返回一个新的RCA给主机,方便主机寻址。RCA的存在允许一个SDIO接口挂多个SD卡,通过RCA来区分主机要操作的是哪个卡。对于MMC卡,则不是由SD卡自动返回RCA,而是主机主动设置MMC卡的RCA,即通过CMD3带参数(高16位用于RCA设置),实现RCA设置。同样MMC卡也支持一个SDIO接口挂多个MMC卡,不同于SD卡的是所有的RCA都是由主机主动设置的,而SD卡的RCA则是SD卡发给主机的。

在获得卡RCA之后,我们便可以发送CMD9(带RCA参数),获得SD卡的CSD寄存器内容,从CSD寄存器,我们可以得到SD卡的容量和扇区大小等十分重要的信息。CSD寄存器我们在这里就不详细介绍了,关于CSD寄存器的详细介绍,请大家参考《SD卡2.0协议.pdf》。

至此,我们的SD卡初始化基本就结束了,最后通过CMD7命令,选中我们要操作的SD卡,即可开始对SD卡的读写操作了。

4.2SD卡读操作

SD卡单块数据块读取流程

SD卡多块数据块读取流程

CMD16指令说明

CMD17指令说明

CMD18指令说明

CMD12指令说明

4.3SD卡写操作

SD卡单块数据块写入流程

SD卡多块数据块写入流程

CMD13指令说明

R1响应:

SD卡状态,请参考《SD卡2.0协议.pdf》第63页-Table4-35

CMD24指令说明

ACMD23指令说明

注意:发送ACMD之前,必须先发送CMD55,通知SD卡,接下来要发送的是应用命令(APPCMD),而非标准命令

CMD55指令说明

CMD25指令说明


本文源自微信公众号:知晓编程,不代表用户或本站观点,如有侵权,请联系nick.zong@aspencore.com 删除!

声明: 本文转载自其它媒体或授权刊载,目的在于信息传递,并不代表本站赞同其观点和对其真实性负责,如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系我们及时删除。(联系我们,邮箱:evan.li@aspencore.com )
0
评论
  • 相关技术文库
  • 电源
  • DC
  • AC
  • 稳压
  • 揭秘新老款MacBook Pro的USB Type-C有何不同

      尽管参与USB-IF的多家巨头,像是苹果与Intel都以具体移动告诉市场,USBtype-c就是未来,不过在未来的美好来临前,使用者却仍需面对连接埠的阵痛期

    11-24
  • 利用无线探头测量感应电源的电压频率转换器

    为执行长期监视任务的便携式遥测系统供电,向人们提出了有趣的设计挑战。电池不适合于某些关键性应用,且在这些环境中,设计人员一般用无线感应链路来传输功率与数据。感应链路由一个驱动固定初级线圈的射频发射器与一个为便携式装置提供电源的松耦合次级线圈组成。对设计工程师来说,测量发射功率相当重要,因为它会限制设计人员可包含至便携式装置中的电路数量。但不幸的是,传统测试设备不适合执行该任务,因为标准电压探头会拾...

    11-24
  • 全面讲解pwm波形发生器

    波形发生器在生活中有诸多应用,不过对于波形发生器,大家并非均有所了解。此外,波形发生器种类较多,无法在短时间内全部掌握。本文中,将为大家讲解pwm波形发生器,并

    11-24
  • 线交互式UPS逆变器特性

    一、功能部件输入开关市电正常时,开关导通;市电停电时,开关自动断开,防止逆变器向电网反向馈电。自动稳压有市电供电时,可粗略稳压并吸收部分电网干扰。其稳压方式与后

    11-23
  • LTC3643 用作针对 3.3V 电压轨的备份电源解决方案

    在嵌入式系统需要可靠供电的电信、工业和汽车应用中,数据丢失是一个关切的问题。供电的突然中断会在硬盘和闪存器执行读写操作时损坏数据。我们常常使用电池、电容器和超级

    11-23
  • 如何测量开关电源稳定性

    随着电子,自控,航天,通讯,医疗器械等技术不断向深度和广度的发展,势必要求为期供电的电源要有更高的稳定性,即不仅要有好的线性调节率、负载调节率还要有快速的动态负

    11-23
  • 如何对一个简单的峰值电流限制进行改进

    故障保护是所有电源控制器都有的一个重要功能。几乎所有应用都要求使用过载保护。对于峰值电流模式控制器而言,可以通过限制最大峰值电流来轻松实现这个功能。在非连续反向

    11-23
  • NTC PTC热敏电阻在电源电路中的作用

    本文以问答的形式介绍了NTC PTC热敏电阻在电源电路中的作用。问题1: NTC电阻串联在交流电路中主要是起什么作用!它是怎样工作!请大侠指点!谢谢!问题2:

    11-23
  • 适用于便携式设备的功率开关电源IC

    1 引言开关电源是近几年电源市场的焦点之一,它最大的优点是大幅度缩小变压器的体积和重量,这样就缩小了整个系统的体积和重量。一般说来,开关电源的重量是线性电源的1

    11-23
  • 电流控制电流传输器 CCCII

    在模拟电子电路中,人们长久以来习惯于采用电压作为信号变量,并通过处理电压信号来决定电路的功能。因此促成了大量电压信号处理电路,或者称为电压模式电路的诞生和发展。

    11-23
下载排行榜
更多
广告