SD卡SD总线模式通信

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

   嵌入式中,单片机与SD卡通信由两种模式:

1. SPI总线通信模式;

2. SD总线通信模式。
 

值得注意的是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卡数据传输模式

数据读取

   当没有数据传输时,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)。
--------------------- 

 

猜你喜欢

转载自blog.csdn.net/u010783226/article/details/92063006
sd
今日推荐