STM32入门学习笔记之SD卡基础读写实验2

20.2.6 sdio命令寄存器:sdio_cmd31302928272625242322212019181716
-
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_dtimer31302928272625242322212019181716
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_dlen31302928272625242322212019181716
- 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_dctrl31302928272625242322212019181716
-
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:使能dmabit 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_sta31302928272625242322212019181716
- 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_fifo31302928272625242322212019181716
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 卡初始化流程

OPPO挖孔屏专利曝光 相机App图标与前置相机融合
工控机在电力巡检机器人市场中的作用
BLE蓝牙模块主从一体功能应用场景详解
察打一体消防灭火无人机的优势,消防灭火无人机是有效的高层建筑灭火手段
如何实现城市数字化转型的宏伟目标?
STM32入门学习笔记之SD卡基础读写实验2
iPhone8什么时候上市最新消息:iPhone8全新概念图,iPhone8透明化视觉设计+机身透明+无线充电致敬乔布斯
小米11渲染图、售价、参数曝光
cpu使用率多少算正常_cpu使用率100怎么办
高压大功率型运算放大器是什么意思
液位变送器好坏的判断
三星CEO辞职事件影响空前
GaussDB技术解读
光电测径仪适应产品自动化生产的需要
基于MiniGUI/mDolphin/mPeer 技术的网络
莫仕发布1.25毫米螺距SlimStack浮动式板对板连接器
利用传感器数字部分完成对汽车雷达IC设计的验证
开关电容滤波器(SCF)的选型及研究开发
工控电脑能否当普通电脑使用
Gartner指出绿色IT势在必行