STM32F4X SDIO(二) SDIO协议

上一节简单介绍了SD卡的分类,本节将会介绍SD卡的通信协议,也就是SDIO协议。

STM32F4X SDIO(二)SDIO协议

  • SD 卡管脚和寄存器
    • SD卡管脚分布
    • SD卡通信协议
    • SD卡寄存器
    • SD卡内部结构
  • SDIO总线
    • SDIO总线拓扑
    • SDIO总线协议
      • SDIO协议的基本结构
      • SDIO协议数据传输
      • SDIO协议命令与响应的结构
        • 命令结构
        • 响应结构
          • 短响应
          • 长响应
      • SDIO数据包格式
        • 常规数据包格式(8bit 宽)
          • 1线模式
          • 4线模式
        • 宽位数据包格式
          • 1线模式
          • 4线模式

SD 卡管脚和寄存器

SD卡管脚分布

我们以标准SD卡为例,先介绍一下SD卡的管脚。我们翻开SD卡的背面就能看到SD卡的管脚分布。STM32F4X SDIO(二) SDIO协议_第1张图片
STM32F4X SDIO(二) SDIO协议_第2张图片

SD卡通信协议

SD卡的通信协议有两种,分别是SDIO协议和SPI协议,本节主要讲的是SDIO协议。

管脚 SDIO协议 SPI协议
名称 类型 描述 名称 类型 描述
1 CD/DAT3 输入输出(推挽模式) 检测/数据线3 CS 输入 片选(低电平有效)
2 CMD 输入输出(推挽模式) 命令/响应 DI 输入 数据输入
3 VSS1 输入 接电源地 VSS 输入 接电源地
4 VDD 输入 电源 VDD 输入 电源
5 CLK 输入 时钟 SCLK 输入 时钟
6 VSS2 输入 接电源地 VSS2 输入 接电源地
7 DAT0 输入输出(推挽模式) 数据线0 DO 输出(推挽模式) 数据输出
8 DAT1 输入输出(推挽模式) 数据线1 保留 x x
9 DAT2 输入输出(推挽模式) 数据线2 保留 x x

SD卡寄存器

每个SD卡内部都有8个寄存器,寄存器的介绍如下

名字 位数 描述
CID 128位 卡识别号;用来识别的卡的个体号码
RCA 16位 相对地址;卡的本地系统地址,初始化时,动态地由卡建议,主机核准,SPI 模式不使用
DSR 16位 驱动级寄存器;配置卡的输出驱动
SCR 64位 SD 配置寄存器;SD 卡的特殊能力信息
CSD 128 卡的具体数据;卡的操作条件信息
OCR 32位 操作条件寄存器
SSR 512 SD 状态;卡专有特征的信息
CSR 32 卡状态;卡状态信息
有关以上寄存器的详细信息在后面的章节会介绍

SD卡内部结构

下图为SD卡的内部结构,其结构主要可以分成以下5部分
STM32F4X SDIO(二) SDIO协议_第3张图片

  • 外部接口(1):外部接口是用户实际能看到的结构,在SD卡的背面,其作用是将内部的管脚引出来,与设备进行连接。
  • 寄存器(2):SD卡内部的寄存器组,SD卡的信息,地址、初始化操作都需要通过读写SD卡的寄存器完成。
  • SD卡接口控制器(3):SD卡内部的控制器,主要是处理用户的发下来命令、数据以及给用户返回SD卡的一些状态,可以理解成一个封装在SD卡内部的MCU。
  • 存储器接口(4):SD卡内部的存储器接口芯片,作用是管理SD卡的存储阵列。
  • 存储阵列:SD卡的数据存储都放在存储阵列中,SDHC的SD卡每个存储阵列大小为512字节。

SDIO总线

SDIO总线拓扑

STM32F4X SDIO(二) SDIO协议_第4张图片
一个SDIO控制器上运行连接多个SD卡设备,此时SDIO控制器相当于是主机,SD卡相当于是从机。在SD卡初始化的过程中,SD卡会给主机返回一个地址(RCA),这个地址就是代表该SD卡的在系统中的唯一编号,可以理解成I2C协议中的从设备地址。

SDIO总线协议

SDIO协议的基本结构

SDIO总线协议是基于命令和数据流,在开始传输数据之前会有一个起始位,通常为0,结束时有一个停止位,通常为1.

  • 命令(Command):命令是主机发送给SD卡,通过CMD信号线进行传输,其作用向SD卡发起一个操作。
  • 响应((Response):响应是SD卡给主机,也是通过CMD线进行传输,作为收到命令后的操作,有些命令可以没有响应。
  • 数据((Data):数据的传输是双向的,通过数据线进行传输。

STM32F4X SDIO(二) SDIO协议_第5张图片

  • 没有响应的命令(1):对于没有响应的命令来说,主机只需要往CMD信号线上传输命令即可,不需要等待接收SD卡的响应。
  • 有响应的命令(2):对于有响应的命令,主机在CMD线上传输完命令之后,需要等待接收SD卡返回的响应,也是在CMD线上接收响应。

SDIO协议数据传输

SD卡的数据传输都是以为单位进行传输,SDHC容量的SD卡,每个块大小为512字节。
STM32F4X SDIO(二) SDIO协议_第6张图片
数据块的后面需要一个CRC来保证数据的准确性,CRC由SD卡或者SDIO硬件自动产生,在数据写入时需要检查busy信号,因为数据写入到SD卡的存储阵列需要时间。多块数据的写入还需要主机给从机发送停止命令让SD卡停止接收数据,SD卡的读操作类似。

SDIO协议命令与响应的结构

命令结构

STM32F4X SDIO(二) SDIO协议_第7张图片

  • 每一个命令的开始都要发送一个起始位,起始位的电平为低电平。
  • 每一个命令会都会接一个传输位,通常为1,代表主机发送命令。
  • CMD命令带参数传输,其参数位数为32位
  • 每个CMD都会一个7位的CRC校验码,保证命令的传输没有错误。
  • 结束时发送一个结束位,结束位电平为高电平。
  • 命令的总长度为48位。

命令格式:起始位(1bit)+传输位(1bit)+参数(32bit)+CRC(7bit)+停止位(1bit)

响应结构

SD卡的响应分为两种,分别是短响应(48bit)和长响应(136bit)
STM32F4X SDIO(二) SDIO协议_第8张图片

短响应
  • 每一个短响应发送一个起始位,起始位的电平为低电平。
  • 每一个短响应都会接一个传输位,通常为0,代表响应。
  • 接着是45位的响应数据,CRC(7bit)包含在响应数据里面
  • 结束时发送一个结束位,结束位电平为高电平。
  • 短响应的总长度为48位。
    短响应格式:起始位(1bit)+传输位(1bit)+响应数据(45bit)+停止位(1bit)
长响应
  • 每一个长响应发送一个起始位,起始位的电平为低电平。
  • 每一个长响应都会接一个传输位,通常为0,代表响应。
  • 接着是133位的响应数据,CRC(7bit)包含在响应数据里面
  • 结束时发送一个结束位,结束位电平为高电平。
  • 长响应的总长度为136位。
    短响应格式:起始位(1bit)+传输位(1bit)+响应数据(133bit)+停止位(1bit)

SDIO数据包格式

SDIO协议的数据包有两种格式,分别是常规数据包格式(8bit 宽)宽位数据包格式

常规数据包格式(8bit 宽)

常规数据包格式又可以分为两种,分别是1线4线模式

1线模式

STM32F4X SDIO(二) SDIO协议_第9张图片

  • 在数据发送前,需要发送一个起始位,低电平有效
  • 将数据按照8bit的格式一个一个在DATA0数据线上发送出去
  • 当所有数据传输完成后,需要发送一个CRC校验码,保证数据准确
  • 最后发送一个停止位,高电平有效
4线模式

STM32F4X SDIO(二) SDIO协议_第10张图片

  • 在数据发送前,需要发送一个起始位,低电平有效
  • 当发送一个字节时,需要将字节的高4位先发送,最后再发送字节的低4位。字节的发送按照DATA3:bit7 bit3,DATA2:bit6 bit2,DATA1:bit5 bit1,DATA0:bit4 bit0的格式进行发送
  • 当所有数据传输完成后,每根数据线上需要发送一个CRC校验码,保证数据准确
  • 最后发送一个停止位,高电平有效。
宽位数据包格式

宽位数据包格式也可以分为两种,分别是1线4线模式。其特点跟常规数据包模式类似。

1线模式

STM32F4X SDIO(二) SDIO协议_第11张图片

  • 在数据发送前,需要发送一个起始位,低电平有效
  • 将数据按照高位在前,低位在后的格式在DATA0数据线上发送出去
  • 当所有数据传输完成后,需要发送一个CRC校验码,保证数据准确
  • 最后发送一个停止位,高电平有效
4线模式

STM32F4X SDIO(二) SDIO协议_第12张图片

  • 在数据发送前,需要发送一个起始位,低电平有效
  • 按照高4位在前,低4位在后的格式依次在数据线上发送
  • 当所有数据传输完成后,每根数据线上需要发送一个CRC校验码,保证数据准确
  • 最后发送一个停止位,高电平有效。

你可能感兴趣的:(STM32学习,stm32,嵌入式硬件,单片机)