FPGA_SD_SPI初始化、读步骤和写步骤

 一、SD卡初始化步骤

  1、上电后延时至少74Clock,等待SD卡内部操作完成。

  2、片选CS低电平选中SD卡。

  3、发送CMD0( {8‘h40, 8‘h00, 8‘h00, 8‘h00, 8‘h00, 8‘h95} ),需要返回0x01,进入Idle状态。

  4、为了区别SD卡是2.0还是1.0,或者是MMC卡,这里根据协议向上兼容的,首先发送只有SD2.0才有的命令CMD8( CMD8= {8‘h48, 8‘h00, 8‘h00, 8‘h01, 8‘haa, 8‘h87} ),

  如果CMD8返回无错误,则初步判断为2.0卡,进一步发送命令循环发送CMD55 (8‘h77, 8‘h00, 8‘h00, 8‘h00, 8‘h00, 8‘hff)+ ACMD41 ( {8‘h69, 8‘h40, 8‘h00, 8‘h00, 8‘h00, 8‘hff} ),直到返回0x00,确定是SD2.0卡。

  5、如果CMD8返回错误则判断为1.0卡或者MMC卡,循环发送CMD55 + ACMD41,返回无错误,则为SD1.0卡,到此SD1.0卡初始化成功,如果在一定的循环次数下,返回为错误,则进一步发送CMD1进行初始化,

  如果返回无错误,则确定是MMC卡,如果在一定的次数下,返回无错误,则不能识别该卡,初始化结束。

  6、CS拉高。

 二、SD卡读步骤

  1、发送CMD17( {8‘h51, 8‘h00, 8‘h00, 8‘h00, 8‘h00, 8‘hff } )(单块)或CMD18(多块)读命令,返回0x00。

  2、接受数据开始令牌0xfe(或者0xfc) + 正式数据512Bytes + CRC校验2Bytes默认正式传输的数据长度是512Bytes,可用CMD16设置块长度。

三、SD卡写步骤

  1、发送CMD24( {8‘h58, 8‘h00, 8‘h00, 8‘h00, 8‘h00, 8‘hff} )(单块)或者CMD25(多块)写命令,返回0x00。

  2、发送数据开始令牌0xfe(或者 0xfc) + 正式数据512Bytes + CRC校验2Bytes。

时间: 2024-10-12 23:28:00

FPGA_SD_SPI初始化、读步骤和写步骤的相关文章

1.30 Java周末总结①控制显示多少位小数位②读txt和写txt模拟ATM数据库

1.30 Java周末总结①控制显示多少位小数位②读txt和写txt模拟ATM数据库 一.控制显示多少位小数位 有些时候小数位数太多了,想保留多少位小数,这里介绍一种利用四舍五入保留想要的小数位数Math.round四舍五入到整数位,所以把小数乘以整10或整百,在除以整10或整百,就得到想要的位数了 double a = 3.14159265359;double weishu = 5;double b = Math.pow(10,weishu);a = Math.round(a*b)/b; 二.

关系链的特点之读扩散和写扩散

微博后台架构浅析--读扩散pull.写扩散push.混合模式(push+pull)--相关cache(redis,memcache) 之前在网上看到关于Twitter.Sina以及腾讯微薄的一些实现技术,这个简单做个摘要. 1.读扩散还是写扩散? inbox: 收件箱,你收到的消息,即你所关注的人发布的消息. outbox: 发件箱,你发布的消息. 写扩散(Push) 该方式为每个用户维护一个订阅列表,记录该用户订阅的消息索引(一般为消息ID.类型.发表时间等一些元数据).每当用户发布消息时,都

Linux中文件的可读,可写,可执行权限的解读以及chmod,chown,chgrp命令的用法

一.文件权限解读 如上图所示,开头的-rwxrw-r--这一字符串标识文件权限. 这个字符串有10位,可以分为4段来解读.注:r--可读,w--可写,x--可执行. 第一段(第1位)表示是目录还是文件,-表示是文件,d表示是目录: 第二段(第2-4位,共3个字符串)表示文件所属用户对它的权限: 第三段(第5-7位,共3个字符串)表示文件所属用户组用户对它的权限: 第四段(第8-10位,共3个字符串)表示其他用户对它的权限: 注:我们用3位8进制来表示文件的权限,r用4标识,w用2标识,x用1标识

【CSS学习笔记】初始化CSS后,写li,并利用背景图片,来完成li小图标的效果,且达到个浏览器兼容

第一种情况 /*当标题前的图标时单独的一个点儿或者方块或者其他类似图标时,定义背景图background要放在<li>里.    在<li>中设置背景图片的尺寸,地址,不重复,位置:以及文字相关的padding,无序列图标,行高等*/ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd

C#多线程:使用ReaderWriterLock类实现多用户读/单用户写同步

C#多线程:使用ReaderWriterLock类实现多用户读/单用户写同步 - mile - 博客园http://www.cnblogs.com/lhws/archive/2014/03/31/3636757.html 摘要:C#提供了System.Threading.ReaderWriterLock类以适应多用户读/单用户写的场景.该类可实现以下功能:如果资源未被写操作锁定,那么任何线程都可对该资源进行读操作锁定,并且对读操作锁数量没有限制,即多个线程可同时对该资源进行读操作锁定,以读取数据

修改Oracle GoldenGate(ogg)各个进程的读检查点和写检查点

请注意:请慎重修改Oracle GoldenGate(ogg)各个进程的读检查点和写检查点.请确保已经 掌握 ogg 各个进程的读检查点和写检查点的具体含义. BEGIN {NOW | yyyy-mm-dd[:hh:mi:[ss[.cccccc]]] | EOF | SEQNO <sequence number>} --修改抽取进程的开始抽取点:(即:myext的读检查点) alter extract myext BEGIN yyyy-mm-dd:hh:mi:ss alter extract 

使用ReaderWriterLock类实现多用户读/单用户写同步

使用ReaderWriterLock类实现多用户读/单用户写同步[1] 2015-03-12 应用程序在访问资源时是进行读操作,写操作相对较少.为解决这一问题,C#提供了System.Threading.ReaderWriterLock类以适应多用户读/单用户写的场景. 该类可实现以下功能:如果资源未被写操作锁定,那么任何线程都可对该资源进行读操作锁定,并且对读操作锁数量没有限制,即多个线程可同时对该资源进行读操作锁定,以读取数据.如果资源未被添加任何读或写操作锁,那么一个且仅有一个线程可对该资

【转】Linux中文件的可读,可写,可执行权限的解读以及chmod,chown,chgrp命令的用法

chmod是更改文件的权限 chown是改改文件的属主与属组 chgrp只是更改文件的属组. 一.文件权限解读 如上图所示,开头的-rwxrw-r--这一字符串标识文件权限. 这个字符串有10位,可以分为4段来解读.注:r--可读,w--可写,x--可执行. 第一段(第1位)表示是目录还是文件,-表示是文件,d表示是目录: 第二段(第2-4位,共3个字符串)表示文件所属用户对它的权限: 第三段(第5-7位,共3个字符串)表示文件所属用户组用户对它的权限: 第四段(第8-10位,共3个字符串)表示

小技巧-读优与写优

读优与写优 读优与写优是面对输入或者输出数据规模比较巨大的时候,cin和cout会TLE,即使是scanf和printf也会浪费大量时间,这时我们就可以使用读优与写优 一个小小的冷知识 cin和cout之所以慢,是因为它有很多的保险设置,浪费了时间,所以只要加入这段代码 1 std::ios::sync_with_stdio(false); 这样就可以取消cin和cout的保险装置 正经的读优与写优 原理 用cin和cout或者scanf和printf读写单个数字时,速度会比getchar和pu