1.SD卡的命令格式:

SD卡的指令由6字节(Byte)组成,如下:

Byte1:0 1 x x x x x x(命令号,由指令标志定义,如CMD39为100111即16进制0x27,那么完整的CMD39第一字节为01100111,即0x27+0x40) Byte2-5:Command Arguments,命令参数,有些命令没有参数 Byte6:前7位为CRC(Cyclic Redundacy Check,循环冗余校验)校验位,最后一位为停止位0

2.SD卡的命令

SD卡命令共分为12类,分别为class0到class11,

不同的SDd卡,主控根据其功能,支持不同的命令集 如下:

Class0 :(卡的识别、初始化等基本命令集)

CMD0:复位SD 卡.

CMD1:读OCR寄存器.

CMD9:读CSD寄存器.

CMD10:读CID寄存器.

CMD12:停止读多块时的数据传输

CMD13:读 Card_Status 寄存器

Class2 (读卡命令集):

CMD16:设置块的长度

CMD17:读单块.

CMD18:读多块,直至主机发送CMD12为止 .

Class4(写卡命令集) :

CMD24:写单块.

CMD25:写多块.

CMD27:写CSD寄存器 .

Class5 (擦除卡命令集):

CMD32:设置擦除块的起始地址.

CMD33:设置擦除块的终止地址.

CMD38: 擦除所选择的块.

Class6(写保护命令集):

CMD28:设置写保护块的地址.

CMD29:擦除写保护块的地址.

CMD30: Ask the card for the status of the write protection bits

class7:卡的锁定,解锁功能命令集

class8:申请特定命令集 。

class10 -11 :保留

其中 class1,    class3,class9:SPI模式不支持

了解了指令的形式和具体的控制内容,下面主要解决的就是MCU与SD卡的通信问题,通信主要需要注意下面的问题:

(1)供电电压:必须是3.3V

(2) 通信模式的切换:SD卡有两种通信模式:SPI模式和SD模式,默认情况下的通信模式是SD模式,但是我们常用的模式是SPI模式,这就需要一个切换模式的方法,具体的实现方法在其他地方也都有介绍,其关键的地方就是先上电延时大于74个时钟周期后发送复位命令,复位成功(接收到0x01的响应)后,连续发送CMD55和ACMD41,直到响应0X00为止,此时SD卡已经进入SPI模式。

(3)上面所说的发送复位命令(CMD0)以及CMD55和ACMD41要有具体的实现方法,需要解决的就是时序问题,

下图就为复位的时序图,只要能够按照下图的时序进行操作,肯定能够复位成功.

本复位分为(1)上电,(2)延时74个周期以上,(3)发送命令CMD0,(4)发送命令参数0X0000,(5)发送CRC校验0X95,(6)等待响应(7)响应0X01此时得到正确响应复位成功,否则重复以上操作直到成功为止。

介绍复位的同时其他的命令也和复位命令类似,只是根据命令的作用不同有着不同的响应类型和不同的后续操作,下面给出集中常用命令的时序图。

(1)读CID寄存器时序图

说明:当发送命令并得到响应0X00后就开始准备接收CID寄存器中的内容,此时只要接收到起始标志0XFE后,之后的16个字节的内容即为CID寄存器的内容。

(2)读CSD寄存器内容时序和读CID的类似,只是此时发送的命令为CMD9

SD卡数据的读写是以块为单位:默认情况下一块的大小为512字节

(3) 读SD卡一个块(512字节)时序

(4) 写一个块(512字节)时序图

来自:http://hi.baidu.com/fingi/blog/item/1b459d08f9c72c38e8248817.html

转载于:https://www.cnblogs.com/LittleTiger/p/3941055.html

SD卡的控制方法(指令集和控制时序)相关推荐

  1. SD卡的控制方法与时序

    1 1.SD卡的命令格式: SD卡的指令由6字节(Byte)组成,如下: Byte1:0 1 x x x x x x(命令号,由指令标志定义,如CMD39为100111即16进制0x27,那么完整的C ...

  2. SD卡/iNand操作指令movi

    1.SD卡/iNand操作指令movi (1)开发板如果用SD卡/EMMC/iNand等作为Flash,则在uboot中操作flash的指令为movi(或mmc) (2)movi的指令都是movi r ...

  3. Linux设备驱动子系统第二弹 - SD卡

    1. 总论 2. 主控制器 3. 协议层 4. 块设备 1. 总论 1.1 概念 MMC - MultiMedia Card SD    - Secure Digital Card 1.2 分类 按存 ...

  4. SD/TF卡驱动(二)--------SD卡程序初始化流程以及读写

    说明: ①测试的SD卡为高容量卡,支持SD卡2.0协议,容量为16G ②采用GPIO模拟SPI时序的方式对SD卡进行驱动,很方便移植到没有硬件SPI或者SDIO的MCU,对于这类MCU,只需要将对应的 ...

  5. S5PV210裸机之SD卡

    主流的外存设备介绍 内存和外存的区别: 一般是把这种RAM(random access memory,随机访问存储器,特点是任意字节读写,掉电丢失)叫内存,把ROM(read only memory, ...

  6. S5PV210体系结构与接口09:SD卡启动详解

    目录 1. MMC技术演进 1.1 NandFlash & NorFlash芯片 1.2 MMC卡 & SD卡 & MicroSD卡(TF卡) 1.2.1 代际关系 1.2.2 ...

  7. 嵌入式知识-ARM裸机-学习笔记(9):SD卡启动详解(S5PV210)

    嵌入式知识-ARM裸机-学习笔记(9):SD卡启动详解(S5PV210) 一.SD卡介绍 1. SD卡背景知识和特点 SD卡.MMC卡.MicroSD.TF卡:这些卡其实内部就是Flash存储颗粒,比 ...

  8. 第十一天: SD卡原理分析及SD卡启动详解

    主流的外存设备 内存和外存的区别: 一般是把这种(random access memory,随机访问存储器,特点是任意字节读写,掉电丢失)叫内存,把ROM(read only memory,只读存储器 ...

  9. STM32利用SPI读写SD卡的程序详解

    STM32利用SPI读写SD卡的一些程序详解 关于SD卡的基础知识这里不做过多陈述,如果有对这方面感兴趣的朋友可以直接百度一下,有很多讲SD卡的文章,这里主要是针对SD卡的读写程序实现做一些详细说明. ...

最新文章

  1. java程序设计第一次作业
  2. 基于某网站的信息爬取与保存_指定查询内容
  3. 8、泛型程序设计与c++标准模板库2.4列表容器
  4. python函数参数类型及顺序_python函数参数类型及其顺序
  5. java中wait的场景,wait——webdriver实用指南java版
  6. 比dropout更好的方法_比较自己的更好方法
  7. 【独立小程序商城】THINKPHP带后台管理+MYSQL数据库微信小程序商城系统源码
  8. 关于RJ45插座(HR911130C)硬件连接
  9. TASKCTL连接不到服务端的几种情况和解决办法
  10. Android shape自定义形状,设置渐变色
  11. Ubuntu 切换中文目录为英文目录
  12. 大学模电实验合集丨实验二 单管共射放大电路的原理
  13. 老师用计算机教我们画画拼音,小学一年级语文《汉语拼音13angengingong》第三课时教学设计.docx...
  14. 计算apk包的安装之后占用空间以及运行时占用内存
  15. java手机游戏主角技能上剑魂,DNF高手来回答
  16. 智慧城市同城小程序 智慧城市同城标准版源码
  17. HTML文档中注释标记作用,html的注释有什么作用
  18. Sql语句中的DDL、DML、DCL的介绍
  19. 高考数学90分能学好计算机,高中数学,如何从90分以下突破120分?你必须做好这两个方面!...
  20. 一个例程学会使用——模糊逻辑工具箱

热门文章

  1. 区块链从一夜暴富到一夜暴“负”的辛酸史
  2. Spring servlet
  3. web前端的就业前景好不好
  4. Java入门培训班怎么选择
  5. 探索机器学习的公平性(Delayed Impact of Fair Machine Learning)论文 pdf
  6. XML 标签 首字母转换为大写
  7. 数据预处理(完整步骤)
  8. 精品软件 推荐 瑞星 杀毒软件 安全软件
  9. linux启动x不启动桌面,redhat开机不启动桌面登录程序
  10. linux 内核 sscanf,linux sscanf()