运动控制器23:STM32的SDIO功能介绍1

SDIO主要功能

  • 支持1位总线,4位总线,8位总线,8位总线可达48M传输速率。
  • 支持MMC卡,SD卡和CE-ATA等标准

SDIO总线拓扑

  • 总线上的通信是通过传送数据和命令实现的。

  • 基本操作:命令/响应,某些操作还有数据令牌。

  • 在SD存储器上是以数据块的形式进行传输。

  • 当选择SDIO工作在SD4位数据总线工作模式时候,我们选中的引脚如下:


    运动控制器23:STM32的SDIO功能介绍1_第1张图片
    SD卡用到的引脚
  • 数据的传输操作流程如下:(以读操作为例)

    • 主机发送命令,等待卡的响应。
    • 卡响应以后,数据从卡发送至主机,经过CRC后(也可能是数据流,无需每次CRC).
    • 继续发送下一个数据块。
    • 主机发送一个STOP的命令后,卡发回一个响应,传输完成。

SDIO功能描述

  • 包含两个部分,一个是SDIO适配器,一个是AHB总线接口。
  • 所有的数据线都工作于推挽模式。
  • 对于SD或SD I/O卡,时钟频率可以在0MHz至25MHz间变化。
  1. 适配器,一共五个部分
  • 寄存器
  • 控制单元

电源管理和时钟分频

命令通道

发送命令和接收响应
- 命令通道状态机CPSM
- 命令固定为48位,其中包括了开始和结束位,传输位一共3位
- 6位命令索引
- 32位参数
- 7位CRC
- 响应则有两种格式,短格式如上命令格式,长格式136位包括CID和CSD

数据通道

  1. SD卡可以选择4位总线或者1位总线,默认为1位
  2. 数据通道状态机:DPSM使能后进入WAIT-S或者WAIT-R状态
  • 发送状态:如果FIFO中有数据,则发送出去
  • 接收状态,收到起始位进入接收状态,从卡中读数据
  1. DPSM一共6个状态,包括idle,busy以外,还有WAIT-S和WAIT-R,以及sending和receiving状态。
  2. 数据令牌格式分成两种,一种是块数据,一种是流数据,块数据包含了16位CRC,流数据则没有。
  3. 数据为32位+起始2位+CRC16位。

数据FIFO

  1. FIFO大小为32*32,根据RXACT和TXACT来分配FIFO为发送还是接收
  2. 发送FIFO,AHB数据写入FIFO,有TXFIFOF和TXFIFOE表示FULL和EMPTY,当8个以上的FIFO空时候,TXFIFOHE,此时可以通知DMA继续填入数据,TXDAVL和TXUNDERR用于处理异常。
  3. 接收FIFO类似。

总线接口

下面的例子,主机控制器使用CMD24(WRITE_BLOCK)从主机传送512字节到MMC卡,关于CMD24命令,后面有统一描述。

  1. 执行卡识别过程
  2. 提高SDIO_CK频率
  3. 发送CMD7命令选择卡
  4. 配置DMA2:清中断,设置源地址和目标地址,设置DMA2的其他参数,使能DMA
  5. 发送CMD24:
    • 设置数据长度
    • 卡的地址
    • 设置命令WRITE_BLOCK
    • 等待SDIO_STA中断
    • 等待DBCKEND
  6. 查询DMA通道的使能状态

卡功能描述

卡识别模式

此模式只用到了CMD线,执行流程:复位所有卡,检测电压范围,分配地址RCA

卡复位

CMD0软件复位后,所有的卡处于闲置模式,分配默认地址,闲置模式下卡的输出端为高阻状态。

操作电压范围确认

超出操作电压的卡将进入非激活状态,存储了CID和CSD的卡,电压正常后则可以通信。

卡识别过程

MMC和SD卡的识别略有不同,MMC卡就是数码相机用的卡,而SD卡更小,而SDIO接口通常用于WIFI和蓝牙,GPS模块用,SD卡的识别过程如下:

  1. 总线被激活
  2. 主机发送SEND_OP_COND
  3. 主机得到响应,不兼容的卡设为非激活状态
  4. ALL_SEND_CID广播发送到激活卡
  5. 激活的卡发送CID,如果有多个竞争,则用线与仲裁
  6. 主机发送SET_RELATIVE_ADDR,作为刚刚CID卡的地址,然后此卡进行待机。
  7. 如果有多个卡,则进行下一次循环。

写数据块

  1. 执行CMD24-27时,主机写入数据,在数据块后跟CRC
  2. WRITE_BL_LEN决定了数据长度,如果CRC错误,则所有数据全部丢掉。
  3. 如果卡已写满,或者有对齐等错误发生时进行处理,主机可以随时发送SEND_STATUS来查询状态。
  4. READY_FOR_DATA表示卡还可以继续写入数据,主机才继续写入
  5. 有错误时,SDIO_D拉低。

读数据块

读数据块的操作有点同写数据块

数据流操作

只适用于多媒体卡,SD卡和SDIO不支持这种最快速的操作。

你可能感兴趣的:(运动控制器23:STM32的SDIO功能介绍1)