20.2.6 SDIO命令寄存器:SDIO_CMD
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
- | |||||||||||||||
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
- | CE_ATACMD | nIEN | ENCMDcomp1 | SDIOSuspend | CPSMEN | WAITPEND | WAITINT | WAITRESP | CMDINDEX |
Bit 14:CE-ATA命令
如果设置该位,CPSM转至CMD61
Bit 13:不使能中断
如果未设置该位,则使能CE-ATA设备的中断
Bit 12:使能CMD完成
如果设置该位,则使能命令完成信号
Bit 11:SDIO暂停命令
如果设置该位,则将要发送的命令是一个暂停命令(只能用于SDIO卡)
Bit 10:命令通道状态机使能位
如果设置该位,则使能CPSM
Bit 9:CPSM等待数据传输结束(CmdPend内部信号)
如果设置该位,则CPSM在开始发送一个命令之前等待数据传输结束
Bit 8:CPSM等待中断请求
如果设置该位,则CPSM关闭命令超时控制并等待中断请求
Bit 7~Bit 6:等待响应位
00:无响应,期待CMDSENT标志
01:短响应,期待CMDREND或CCRCFAIL标志
10:无响应,期待CMDSENT标志
11:长响应,期待CMDREND或CCRCFAIL标志
Bit 5~Bit 0:命令索引,作为命令的一部分发送到卡中
20.2.7 SDIO数据定时器:SDIO_DTIMER
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
DATATIME[31:16] | |||||||||||||||
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
DATATIME[15:0] |
Bit 31~Bit 0:数据超时时间,以卡总线时钟周期为单位的数据超时时间
20.2.8 SDIO数据长度寄存器:SDIO_DLEN
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
- | DATALENGTH[24:16] | ||||||||||||||
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
DATALENGTH[15:0] |
Bit 24~Bit 0:数据长度,要传输的数据字节数目
20.2.9 SDIO数据控制寄存器:SDIO_DCTRL
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
- | |||||||||||||||
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
- | SDIOEN | RWMOD | RWSTOP | RWSTART | DBLOCKSIZE | DMAEN | DTMODE | DTDIR | DTEN |
Bit 11:SDIO使能功能
如果设置了该位,则DPSM执行SDIO卡特定的操作
Bit 10:读等待模式
0:停止SDIO_CK控制读等待
1:使用SDIO_D2控制读等待
Bit 9:读等待停止
0:如果设置了RWSTART,执行读等待
1:如果设置了RWSTART,停止读等待
Bit 8:读等待开始
设置该位开始读等待操作
Bit 7~Bit 4:数据块长度,当选择了块数据传输模式,该域定义数据块长度
0000:块长度=1字节
0001:块长度=2字节
0010:块长度=4字节
0011:块长度=8字节
0100:块长度=16字节
0101:块长度=32字节
0110:块长度=64字节
0111:块长度=128字节
1000:块长度=256字节
1001:块长度=512字节
1010:块长度=1024字节
1011:块长度=2048字节
1100:块长度=4096字节
1101:块长度=8192字节
1110:块长度=16384字节
1111:保留
Bit 3:DMA使能位
0:关闭DMA
1:使能DMA
Bit 2:数据传输模式
0:块数据传输
1:流数据传输
Bit 1:数据传输方向
0:控制器至卡
1:卡至控制器
Bit 0:数据传输使能位
如果设置该位为1,则开始数据传输。根据DTSIR方向位,DPSM进入Wait_S或Wait_R状态,如果在传输的一开始就设置了RWSTART位,则DPSM进入读等待状态。不需要在数据传输结束后清除使能位,但必须更改SDIO_DCTRL以允许新的数据传输。
20.2.10 SDIO状态寄存器:SDIO_STA
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
- | CEATAEND | SDIOIT | RXDAVL | TXDAVL | RXFIFOE | TXFIFOE | RXFIFOF | TXFIFOF | |||||||
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
RXFIFOHF | TXFIFOHF | RXACT | TXACT | CMDACT | DBCKEND | STBITERR | DATAEND | CMDSENT | CMDREND | RXOVERR | TXUNDERR | DTMEOUT | CTIMEOUT | DCRCFAIL | CCRCFAIL |
Bit 23:在CMD61接收到CE-ATA命令完成信号
Bit 22:收到SDIO中断
Bit 21:在接收FIFO中的数据可用
Bit 20:在发送FIFO中的数据可用
Bit 19:接收FIFO空
Bit 18:发送FIFO空
若使用了硬件流控制,当FIFO包含2个字时,TXFIFOE信号变为有效。
Bit 17:接收FIFO满
若使用了硬件流控制,当FIFO还差2个字满时,RXFIFOF信号变为有效。
Bit 16:发送FIFO满
Bit 15:接收FIFO半满,FIFO中至少还有8个字
Bit 14:发送FIFO半空,FIFO中至少还可以写入8个字。
Bit 13:正在接收数据
Bit 12:正在发送数据
Bit 11:正在传输命令
Bit 10:已发送/接收数据块(CRC检测成功)
Bit 9:在宽总线模式,没有在所有数据信号上检测到起始位
Bit 8:数据结束(数据计数器,SDIO_DCOUNT=0)
Bit 7:命令已发送(不需要响应)
Bit 6:已接收到响应(CRC检测成功)
Bit 5:接收FIFO上溢错误
Bit 4:发送FIFO下溢错误
Bit 3:数据超时
Bit 2:命令响应超时
命令超时时间是一个固定的值,为64个SDIO_CK时钟周期。
Bit 1:已发送/接收数据块(CRC检测失败)
Bit 0:已收到命令响应(CRC检测失败)
注:状态寄存器可以用来查询SDIO控制器的当前状态。比如SDIO_STA的位2表示命令响应超时,说明SDIO的命令响应出了问题。我们通过设置SDIO_ICR的位2则可以清除这个超时标志,而设置SDIO_MASK的位2,则可以开启命令响应超时中断,设置为0关闭。
20.2.11 SDIO数据FIFO寄存器:SDIO_FIFO
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
FIFODATA[31:16] | |||||||||||||||
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
FIFODATA[15:0] |
Bit 31~Bit 0:接收或发送FIFO数据
FIFO数据占据32个32位的字,地址为:SDIO基址+0x80至SDIO基址+0xFC
数据FIFO寄存器包括接收和发送FIFO,他们由一组连续的32个地址上的32个寄存器组成,CPU可以使用FIFO读写多个操作数。例如我们要从SD卡读数据,就必须读SDIO_FIFO寄存器,要写数据到SD卡,则要写SDIO_FIFO寄存器。SDIO将这32个地址分为16个一组,发送接收各占一半。而我们每次读写的时候,最多就是读取发送FIFO或写入接收FIFO的一半大小的数据,也就是8个字(32个字节),在操作SDIO_FIFO(不论读出还是写入)必须是以4字节对齐的内存进行操作,否则将导致出错。
20.3 SD卡初始化
20.3.1 卡上电流程
20.3.2 卡初始化流程
-
单片机
+关注
关注
6032文章
44521浏览量
633104 -
存储器
+关注
关注
38文章
7453浏览量
163608 -
SD卡
+关注
关注
2文章
560浏览量
63808 -
SDIO
+关注
关注
2文章
72浏览量
19294
发布评论请先 登录
相关推荐
评论