SD卡中,比SPI总线模式通信更加快速的SD总线模式通信
2018-03-26 22:23
351 查看
随着项目中存储数据量的增加,之前用SPI通信模式读写SD卡数据效率有些低,已经跟不上大数据的收集,所以改用比SPI总线模式通信更加快速的SD总线模式通信,效率提高了几倍。现在简单介绍一下,也算是自己的备忘录。
嵌入式中,单片机与SD卡通信由两种模式:SPI总线通信模式;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)。
嵌入式中,单片机与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 | / | / |
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)。
相关文章推荐
- SD卡对应SD模式和SPI模式的引脚定义
- STM32F030 Nucleo-多样的SPI通信之Master标准模式-SPIFlash读写
- spi总线的4种工作模式
- STM32的使用之SPI通信DMA模式
- SD/MMC SPI模式下命令合集
- 基于SPI模式的SD卡驱动
- 浅谈总线通信机制(串口、I2C、SPI、USB。。。)(通信基础+串口部分)
- SPI、I2C、UART三种串行总线通信的原理以及区别
- 【iCore3 双核心板_FPGA】实验十四:FSMC总线通信实验——独立地址模式
- SD卡学习(SDIO和SPI模式)
- SPI模式下MCU对SD卡的控制及操作命令
- SPI通信总线-51
- STM32开发板入门教程(十三) - SPI模式读写SD卡
- SD卡底层驱动 SPI模式
- 【iCore4 双核心板_FPGA】例程十:FSMC总线通信实验——复用地址模式
- 【iCore3 双核心板_FPGA】实验十六:基于SPI总线的ARM与FPGA通信实验
- SD卡的SPI模式的调试
- cortex_m3_stm32嵌入式学习笔记(二十一):SPI实验(通信总线)
- 浅谈总线通信机制(串口、I2C、SPI、USB。。。)(通信基础+串口部分)
- SPI总线 SPI接口 SPI协议 SPI模式 SPI通讯