您的位置:首页 > 其它

SD卡中,比SPI总线模式通信更加快速的SD总线模式通信

2018-03-26 22:23 351 查看
   随着项目中存储数据量的增加,之前用SPI通信模式读写SD卡数据效率有些低,已经跟不上大数据的收集,所以改用比SPI总线模式通信更加快速的SD总线模式通信,效率提高了几倍。现在简单介绍一下,也算是自己的备忘录。

   嵌入式中,单片机与SD卡通信由两种模式:SPI总线通信模式;SD总线通信模式。
编号(按SD卡引脚)SD总线模式SPI总线模式
名称描述名称描述
1DAT3数据线3CS片选
2CMD命令/响应MOSI数据输入
3VSS1电源地VSS1电源地
4VDD电源VDD电源
5CLK时钟线SCK时钟线
6VSS2电源地VSS2电源地
7DAT0数据线0MISO数据输出
8

DAT1数据线1//
9DAT2数据线2//
   值得注意的是SD总线模式中有4条数据线;SPI总线模式中仅有一条数据线(MOSI和MISO不能同时读数据,也不能同时写数据);这样在嵌入式中,单片机与SD卡通信时采用SD总线模式比SPI总线模式速度快几倍。SPI总线模式在之前的文章中介绍过,在这里主要介绍SD总线模式
1、主机(单片机)发送命令:通过CMD线,48位数据。
    主机与SD卡之间的所有通信都由主机控制。主机发送两种类型的命令:广播和寻址(点对点)命令。
①广播命令 广播命令适用于所有卡。其中一些命令需要响应。
②寻址(点对点)命令 被寻址的命令被发送到被寻址的卡并引起该卡的响应。
2、主机(单片机)接收响应:通过CMD线,48位数据或者136位数据。
    响应是R1,R1b,R2,R3,R6,R7。详细介绍看技术手册,链接为!!!
3、主机(单片机)读写数据:通过DAT0-3线。
   SD卡在SPI总线通信模式和SD总线通信模式下的操作模式是不同的,在这里主要介绍SD总线模式的操作模式。
卡状态与操作模式的概述
SD卡状态
操作模式
非活动状态
非活动
空闲状态
 卡识别模式
就绪状态
识别状态
待机状态
 
 
 数据传输模式
转移状态
发送数据状态
接收数据状态
编程状态
断开状态
SD卡识别模式



SD卡初始化和识别流程



SD卡数据传输模式



数据读取
   当没有数据传输时,DAT总线电平由上拉提高。传输的数据块由开始位(1或4位LOW)组成,后面是连续的数据流。数据流包含有效载荷数据。数据流结束位(1或4位高)。数据传输与时钟信号同步。块的有效载荷面向数据传输由1或4位CRC校验和保护。
   块读取-块读取是面向块的数据传输。数据传输的基本单位是一个最大的块大小总是512字节。小块的开始和结束地址完全包含在内在512字节内可以发送边界。无论READ_BL_LEN如何,由CMD16设置的块长度可以设置为512字节。每个块的末尾都会附加一个CRC,以确保数据传输的完整性。 CMD17启动一个块读取,并在完成传输后,卡片返回转移状态。 CMD18开始传输几个连续的块。块将不断传输,直到发出CMD12命令。
数据写入
   数据传输格式与数据读取格式类似。对于面向块的写入数据传输,CRC校验位被添加到每个数据块。通过这种机制,写操作可以防止错误传输的数据。
   块写入-在块写入期间(CMD24 - 27,42,56(w)),一个或多个数据块从主机传输到由主机在每个块末尾附加1或4位CRC的卡。卡支持块需要写CMD16设置的块长度为512字节,无论如何WRITE_BL_LEN被设置为1k或2k字节。
数据擦除
   为了提高数据吞吐量,最好同时擦除许多写块。这些写入块的识别是通过CMD32,CMD33命令完成的。主机应遵守以下命令序列:ERASE_WR_BLK_START,ERASE_WR_BLK_END和ERASE(CMD38)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息