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

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

   嵌入式中,单片机与SD卡通信由两种模式:SPI总线通信模式;SD总线通信模式。

编号(按SD卡引脚)

SD总线模式

SPI总线模式

名称

描述

名称

描述

1

DAT3

数据线3

CS

片选

2

CMD

命令/响应

MOSI

数据输入

3

VSS1

电源地

VSS1

电源地

4

VDD

电源

VDD

电源

5

CLK

时钟线

SCK

时钟线

6

VSS2

电源地

VSS2

电源地

7

DAT0

数据线0

MISO

数据输出

8


DAT1

数据线1

/

/

9

DAT2

数据线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卡中,比SPI总线模式通信更加快速的SD总线模式通信_第1张图片

SD卡初始化和识别流程

SD卡中,比SPI总线模式通信更加快速的SD总线模式通信_第2张图片

SD卡数据传输模式

SD卡中,比SPI总线模式通信更加快速的SD总线模式通信_第3张图片

数据读取

   当没有数据传输时,DAT总线电平由上拉提高。传输的数据块由开始位(14LOW)组成,后面是连续的数据流。数据流包含有效载荷数据。数据流结束位(14位高)。数据传输与时钟信号同步。块的有效载荷面向数据传输由14CRC校验和保护。

   块读取-块读取是面向块的数据传输。数据传输的基本单位是一个最大的块大小总是512字节。小块的开始和结束地址完全包含在内在512字节内可以发送边界。无论READ_BL_LEN如何,由CMD16设置的块长度可以设置为512字节。每个块的末尾都会附加一个CRC,以确保数据传输的完整性。 CMD17启动一个块读取,并在完成传输后,卡片返回转移状态。 CMD18开始传输几个连续的块。块将不断传输,直到发出CMD12命令。

数据写入

   数据传输格式与数据读取格式类似。对于面向块的写入数据传输,CRC校验位被添加到每个数据块。通过这种机制,写操作可以防止错误传输的数据。

   块写入-在块写入期间(CMD24 - 27,42,56w)),一个或多个数据块从主机传输到由主机在每个块末尾附加14CRC的卡。卡支持块需要写CMD16设置的块长度为512字节,无论如何WRITE_BL_LEN被设置为1k2k字节。

数据擦除

   为了提高数据吞吐量,最好同时擦除许多写块。这些写入块的识别是通过CMD32,CMD33命令完成的。主机应遵守以下命令序列:ERASE_WR_BLK_STARTERASE_WR_BLK_ENDERASECMD38)。


你可能感兴趣的:(嵌入式,程序开发,通信传输效率)