我爱编程

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

2018-01-23  本文已影响0人  吴松乾

SDIO主要功能

SDIO总线拓扑

SDIO功能描述

  1. 适配器,一共五个部分

电源管理和时钟分频

命令通道

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

数据通道

  1. SD卡可以选择4位总线或者1位总线,默认为1位
  2. 数据通道状态机:DPSM使能后进入WAIT-S或者WAIT-R状态
  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不支持这种最快速的操作。

上一篇 下一篇

猜你喜欢

热点阅读