当前位置: 首页 > 编程日记 > 正文

SD卡的控制方法(指令集和控制时序)

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要有具体的实现方法,需要解决的就是时序问题

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

SD卡的控制方法(指令集和控制时序) - 我心永恒 - ARM-新的梦想

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

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

(1)读CID寄存器时序图

SD卡的控制方法(指令集和控制时序) - 我心永恒 - ARM-新的梦想

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

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

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

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

SD卡的控制方法(指令集和控制时序) - 我心永恒 - ARM-新的梦想

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

SD卡的控制方法(指令集和控制时序) - 我心永恒 - ARM-新的梦想
来自:http://hi.baidu.com/fingi/blog/item/1b459d08f9c72c38e8248817.html

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

相关文章:

javascript 代码_代码简介:2016年JavaScript的现状

javascript 代码Here are three stories we published this week that are worth your time:这是我们本周发布的三个值得您关注的故事: The state of JavaScript in 2016: 5 minute read 2016年JavaScript状况: 阅读5分钟 Upgrading to macOS Sierra wi…

Unity协程截图,WWWForm、WWW配合上传

先说一下原理。。 截图有两种方法,第一种: Application.CaptureScreenshot(url); 这个API可以截全屏并保存到指定路径 这里我们不采用此方法 下面的代码采用第二种方法,自己建一个Texture2D 这种方法灵活,操作性更高 WWWForm方法是…

OC 的反射机制以及使用场景

OC 的反射机制 一 定义概念 普遍的概念就是类似于java的反射机制,动态机制使得OC语言更加灵活。 反射机制就是可以根据指定的类名获取类的相关信息。 二 作用 1 根据类名获得class // 选择器 和字符串之间的相互转化 FOUNDATION_EXPORT NSString *NSStringFr…

centos 网卡聚合及Cisco交换机链路聚合

一、配置环境 centos 系统。网卡1口和2口做链路聚合。 交换机网口 6口和7口。 二、服务器操作步骤 centos 6 1.创建一个channel bonding interface #vi /etc/sysconfig/network-scripts/ifcfg-bond0 添加如下几行: GATEWAY192.168.10.1 DNS1202.106.0.20 DEVICEb…

graphql redux_如何在Redux应用程序中使用GraphQL

graphql reduxby Howon Song通过宋颂恩 如何在Redux应用程序中使用GraphQL (How to use GraphQL in your Redux app) Fetching and managing data in Redux requires too much work. As Sashko Stubailo points out:在Redux中获取和管理数据需要太多的工作。 正如Sashko Stuba…

原创:去繁存简,回归本源:微信小程序公开课信息分析《一》

以前我开过一些帖子,我们内部也做过一些讨论,我们从张小龙的碎屏图中 ,发现了重要讯息: 1:微信支付将成为重要场景; 2:这些应用与春节关系不小,很多应用在春节时,有重要的…

ubuntu 14.0 下github 配置

一:创建Repositories 1:首先在github下创建一个帐号。这个不用多说,然后创建一个Repositories。 2:然后在ubuntu下安装git相关的东东: 1sudo apt-get install git-core git-gui git-doc -y 3:在ubuntu本地创建一个ssh密匙: 1ssh-k…

OC 消息转发实现多继承

消息转发实现多继承 在OC 中,一个类只支持单继承,但是可以通过别的手段实现多继承。 利用消息转发实现多继承。 在OC 中,对象调用方法实际是在发消息,对象接收到一条消息的时候,消息函数随着对象的isa 指针到自己的…

chatscript_如何使用ChatScript构建您的第一个聊天机器人

chatscriptby Giorgio Robino通过乔治罗宾诺(Giorgio Robino) 如何使用ChatScript构建您的第一个聊天机器人 (How to build your first chatbot using ChatScript) 10–10–2018: article updated with new github repo url.2018年10月10日:文章更新为新的github r…

web安全浅析

就之前本人主持开发的金融产品所遇到的安全问题,设计部分请参见:http://www.cnblogs.com/shenliang123/p/3835072.html 这里就部分web安全防护就简单的交流: 1.1系统安全 1.1.1 客户端脚本安全 (1)跨站脚本攻击&#…

HDU 1556 Color the ball

题解&#xff1a;基础的树状数组区间修改&#xff0c;单点查询。 #include <cstdio> #include <cstring> int c[100005],a,b,n; int modify(int x,int num){while(x<n)c[x]num,xx&-x;} int query(int x){int s0;while(x>0)sc[x],x-x&-x;return s;} …

OC协议实现多继承

协议实现多继承 协议实现多继承的话&#xff0c;只是简答的提供了接口&#xff0c;并灭有提供实现的方式。 A #import <Foundation/Foundation.h>NS_ASSUME_NONNULL_BEGINprotocol StuAProtocal <NSObject>// 学生A 会游泳 - (void)swimming;endinterface Stude…

扶梯正确使用_乘坐自动扶梯解释CSS浮动

扶梯正确使用by Kevin Kononenko凯文科诺年科(Kevin Kononenko) 乘坐自动扶梯解释CSS浮动 (CSS Floats Explained By Riding An Escalator) 如果您曾经跳过自动扶梯&#xff0c;那么您可以快速了解浮动。 (If you have ever jumped on an escalator, then you can quickly und…

安卓学习-界面-ui-ListView

ListView继承自AbsListView AbsListView属性 XML属性代码说明 android:choiceMode setChoiceMode(int choiceMode) AbsListView.CHOICE_MODE_SINGLEAbsListView.CHOICE_MODE_MULTIPLEAbsListView.CHOICE_MODE_MULTIPLE_MODAL none :无选择模式 singleChoice&#xff1a;允许单…

swift 浮点型字符串的运算

// 1 两个浮点字符串之间的运算 let str1 "1.3"; let str2 "2.4"; let val1 Double(str1); let val2 Double(str2);let val3 CGFloat(Double(str1)!) * CGFloat(Double(str2)!);print(val3);// 2 string 转 double 不失精度 let formattor NumberFo…

为什么要在JavaScript中使用静态类型? (使用Flow进行静态打字的4部分入门)

by Preethi Kasireddy通过Preethi Kasireddy 为什么要在JavaScript中使用静态类型&#xff1f; (使用Flow进行静态打字的4部分入门) (Why use static types in JavaScript? (A 4-part primer on static typing with Flow)) As a JavaScript developer, you can code all day …

客户端如何连接 DataSnap Server 调用服务的方法

一般http访问的地址是 http://localhost:8099/datasnap/rest/TServerMethods1/EchoString/abc 一、用FDConnection1连接Datasnap服务器 FireDAC 连接Datasnap服务端。这个是tcp协议连接通讯&#xff0c;长连接。服务端不是没个方法都建立实例释放实例&#xff0c;而是连接的时…

Solr_全文检索引擎系统

Solr介绍&#xff1a; Solr 是Apache下的一个顶级开源项目&#xff0c;采用Java开发&#xff0c;它是基于Lucene的全文搜索服务。Solr可以独立运行在Jetty、Tomcat等这些Servlet容器中。 Solr的作用&#xff1a; solr是一个现成的全文检索引擎系统&#xff0c; 放入tomcat下可以…

swift 数组 filter reduce sort 等方法

数组的常用方法 swift 数组有很多的操作方法&#xff0c;但是用的时候用常常想不起来&#xff0c;就列出来看看 map 和 flatMap对数组中的元素进行变形操作filter主要对数组进行过滤reduce主要对数组进行计算sort对数组进行排序forEach循环遍历每一个元素min 和 max找出数组中…

im和音视频开发哪个更好_找时间成为更好的开发人员

im和音视频开发哪个更好There’s no time for anything. At least that’s how it feels doesn’t it? No time to learn all the things you think you need to learn to stay ahead of the curve. No time to go back and refactor that ugly piece of code. It works (sort…

4-8 同义词

雅思阅读&#xff1a;剑4~剑8阅读的所有同义词转换 雅思必考词汇 Cambridge 4 TEST 1 1. ignorepay no attentionnot pay any attentiontake no noticenot take any notice忽略&#xff0c;无视v. 2. encounterfaceconfrontmeet遇见&#xff0c;遭遇v. 3. mistaken viewmisconc…

swift可选类型

import UIKitvar array1 ["1","2","3","4","5"];// 1 if let 是一个组合关键字 来进行可选绑定 // 解决Optional对象解包时产生空对象的处理。 for i in array1 {print(i); }if let idx array1.firstIndex(of: "4&q…

java 配置及Eclipse安装

jdk下载 点我~ Java SE Development Kit 8u20 You must accept the Oracle Binary Code License Agreement for Java SE to download this software. Accept License Agreement Decline License Agreement Thank you for accepting the Oracle Binary Code License Agree…

golang 命令行_如何使用Golang编写快速有趣的命令行应用程序

golang 命令行by Peter Benjamin彼得本杰明(Peter Benjamin) 如何使用Golang编写快速有趣的命令行应用程序 (How to write fast, fun command-line applications with Golang) A while back, I wrote an article about “Writing Command-Line Applications in NodeJS”.不久前…

【Pyhon 3】: 170104:优品课堂: GUI -tkinter

from tkinter import * root Tk() root.title("BMS 图书管理系统") lbl Label(root, text书名:)#(1) lbl.pack() #(2) lbl.place(45.50) #(3) web 早期布局&#xff0c;&#xff0c; 常见。 lbl.grid(row0, column0) # web 早期布局&#xff0c;&#xff0c; 常见…

swift Sequence 和 SubSequence

1 序列 Sequence 序列协议是集合类型结构中的基础。 一个序列是代表有一系列具有相同类型的值&#xff0c;并且对这些值进行迭代。 协议中主要有两个参数&#xff0c;一个是元素Element&#xff0c;一个就是迭代器Iterator /// A type representing the sequences elements.…

PDF数据提取------1.介绍

1.关于PDF文件 PDF&#xff08;Portable Document Format的简称&#xff0c;意为“便携式文件格式”&#xff09;是由Adobe Systems在1993年用于文件交换所发展出的文件格式。它的优点在于跨平台、能保留文件原有格式&#xff08;Layout&#xff09;、开放标准&#xff0c;能自…

javascript_治愈JavaScript疲劳的研究计划

javascriptby Sacha Greif由Sacha Greif 治愈JavaScript疲劳的研究计划 (A Study Plan To Cure JavaScript Fatigue) Like everybody else, I recently came across Jose Aguinaga’s post “How it feels to learn JavaScript in 2016”.像其他所有人一样&#xff0c;我最近遇…

SQL Server中SELECT会真的阻塞SELECT吗?

在SQL Server中&#xff0c;我们知道一个SELECT语句执行过程中只会申请一些意向共享锁(IS) 与共享锁(S), 例如我使用SQL Profile跟踪会话86执行SELECT * FROM dbo.TEST WHERE OBJECT_ID 1 这个查询语句&#xff0c;其申请、释放的锁资源的过程如下所示&#xff1a; 而且从最常见…

appium IOS真机测试

看了 http://blog.csdn.net/today520/article/details/36378805 的文章&#xff0c;终于在真机上面测试成功。 由于没有开发者账号&#xff0c;不能发布应用到机器上面。所以就用了网易新闻的客户端来测试 没有开发者账号&#xff0c;貌似不能真正的开始测试。只能启动一下客户…