简介
AT32 MCU的主机模块(SDIO)在AHB外设总线和多媒体卡(MMC)、SD存储卡、SDIO卡间提供了操作接口。SD储存卡和SDIO卡的系统规格书可以通过SD卡协议网站。多媒体卡系统规格书由MMCA技术委员会发布,可以在多媒体卡协会的网站上获得。1、SD Card:SDSC/SDHC/SDXC,支持的卡最大容量不同,支持1bit或4bit传输,0-25MHz或0-50MHz的传输模式。2、MMC Card:支持1bit,4bit或8bit传输,0-20MHz,0-26MHz或0-52MHz的传输模式。3、SDIO Card:一种使用SD接口协议,支持多功能的卡,比如wifi卡,GPS卡,蓝牙卡等等。
SDIO主要结构
SDIO包含4个部分:1、SDIO适配器模块:由控制单元、命令单元和数据单元所组成,实现所有MMC/SD/SDIO卡的相关功能,如时钟的产生、命令和数据的传送
- 控制单元:管理并产生时钟信号
- 命令单元:管理命令的传输
- 数据单元:管理数据的传输
2、AHB接口:产生中断和DMA请求信号3、适配器寄存器:SDIO寄存器4、BUF:用于数据传输校准功能图1. SDIO框图
- 所有数据线配置为复用推挽模式。SDIO_CMD和SDIO_D[7:0]可双向通信,应外接上拉电阻或内部上拉。
- SDIO使用一个时钟信号:SDIO适配器时钟(SDIOCLK=AHB总线时钟(HCLK))。
- 复位后默认情况下SDIO_D0用于数据传输。初始化后主机可以改变数据总线的宽度。可选1bit(SDIO_D0)、4bit(SDIO_D[3:0])、8bit(SDIO_D[7:0])三种数据总线的宽度。
表1. SDIO外部引脚说明
SDIO总线通信
总线上的通信是通过传送命令和数据实现。
1、在多媒体卡/SD/SDIO总线上的基本操作是命令/响应结构。2、在SD/SDIO Card上传送的数据是只能以数据块的形式传输;在MMC Card上传送的数据是以数据块或数据流的形式传输。图2. SDIO命令“无响应”和“有响应”操作图3. SDIO(多)数据块读操作图4. SDIO(多)数据块写操作注意:当有Busy(繁忙)信号时,SDIO(SDIO_D0被拉低)将不会发送任何数据。图5. SDIO MMC卡数据流读操作图6. SDIO MMC卡数据流写操作
SDIO功能
SDIO时钟
1)SDIO_CK是MCU端输出到卡的时钟:每个时钟周期在命令和数据线上传输1bit命令或数据。2)SDIO_CK信号的两下降沿之间为一个时钟周期,硬件在上升沿捕获数据。3)当启动了省电模式并且卡总线处于空闲状态(命令通道和数据通道子单元进入空闲阶段后的8个时钟周期)。图7. 开启省电模式的命令/响应波形图4)支持多达10位分频系数,也就是1024级分频,此时可得SDIO_CK频率=SDIOCLK/[CLKPSC[9:0]+2]。5)可以使用bypass模式,输出一个不分频的时钟,SDIO_CK频率=SDIOCLK。6)硬件流控模式,可在数据传输即将发生上溢或者下溢的时候,通过停止SDIO_CK防止溢出。7)可以配置CLKEDG bit来选择时钟的产生。SDIO_CK可实现略微偏移(半个SDIOCLK)。8)应用时,SD卡初始化的时候SDIO_CK不能大于400kHZ,之后的时钟频率由对应卡型号限制。
SDIO时钟配置相关函数
配置SDIO时钟
使能省电模式
使能SDIO时钟bypass模式使能硬件流控模式设置SDIO电源使能SDIO时钟输出SDIO时钟初始化举例:
命令通道
1)命令通道单元通过SDIO_CMD向卡发送命令并从卡接收响应。2)命令超时,即等待卡响应的时间,固定为64个SDIO_CK时钟周期。这个由通信协议决定,固定不可配置。3)可以置位WAITPEND bit,命令只有在数据传输完之后才由硬件自动发出,而不是立刻发出。多用于流数据的传输模式,目的是保证中止命令可以精准地停止卡的数据传输。表2. 命令格式4)根据该命令的需要,可配置等待响应位(Wait for response bits)来指示CPSM是否需要等待响应。具体可配置为:1、无响应;2、短响应;3、长响应。表3. 短响应格式表4. 长响应格式5)当设置SDIO_CMDCTRL寄存器的CCSMEN位,控制器开始发送命令。命令发送完成时,命令通道状态机(CCSM)设置命令通道状态标志并在不需要响应时进入空闲状态。当收到响应后,接收到的CRC码将会与内部产生的CRC码比较,然后设置相应的状态标志。图8. 命令通道状态机(CCSM)6)当CMDRSPCMPL、CMDFAIL、CMDCMPL、CMDTIMEOUT置位后,命令通道状态机(CCSM)都会回到Idle状态。而DOCMD置位时,CPSM处于除Idle以外的任何状态。表5. 命令通道标志命令通道配置相关函数配置命令通道状态机使能命令通道状态机
命令通道初始化举例:
数据通道
1)数据通道单元通过SDIO_D[7:0]在主机与卡之间传输数据。图9. 数据通道状态机(DCSM)2)数据BUF(先进先出)子单元是一个具有发送和接收单元的数据缓冲区。3)BUF包含一个每字32位宽、共32个字的数据缓冲区,共128Byte。表6. 数据令牌格式4)DOTX和DORX由数据通道单元设置而且是互斥的:
- 当DOTX标志有效时,BUF代表发送数据缓冲区。(DPSM处于Wait_R或者Receive状态)
- 当DORX标志有效时,BUF代表接收数据缓冲区。(DPSM处于Wait_S或者Send状态)
表7. 发送BUF状态标志表8. 接收BUF状态标志
SDIO_D[7:0]时序1)在块模式下,发送完数据后,卡会返回一个确认CRC的序列,数据通道状态机(DCSM)在等待“这个序列和Busy结束”时有超时控制,超时时间由SDIO数据定时器寄存器(SDIO_DTTMR)设置。2)卡端返回的CRC status(5bit)只会发送在SDIO_D0上,卡端收到正确的数据(CRC正确)后发出的序列为“00101”,若是错误的数据(CRC错误)的序列为“01011”。3)数据通道状态机(DCSM)在WAIT_R等待接收数据时也有超时控制,超时时间也由SDIO数据定时器寄存器(SDIO_DTTMR)设置。4)在块模式下的数据传输总个数一定要是block size的整数倍。当一个块发送完后需要收到“CRC序列和Busy结束”时,硬件才会发送下一个数据块。在流模式下不需设定blocksize的大小。图10. 1bit数据传输方式图11. 4bit数据传输方式图12. 8bit数据传输方式数据通道配置相关函数配置数据通道状态机使能数据通道状态机设置数据总线宽度
数据通道初始化举例:
SDIO AHB接口
1)AHB接口产生中断和DMA请求,并访问SDIO接口寄存器和数据BUF。它包含一个数据通道、寄存器译码器和中断/DMA控制逻辑。2)SDIO中断:当至少有一个选中的状态标志为高时,中断控制逻辑产生中断请求。中断屏蔽寄存器用于选择可以产生中断的条件,如果设置了相应的屏蔽标志位,则对应的状态标志可以产生中断。表9. SDIO中断屏蔽寄存器3)DMA接口:DMA主要用于在SDIO BUF和Memory之间传输数据。
- BUF在接收数据时,RXBUFH标志作为DMA接收请求。
- BUF在发送数据时,TXBUFH标志作为DMA发送请求。
SDIO中断/DMA配置相关函数
SDIO中断配置函数
SDIO DMA使能函数使能SDIO DMA接收数据举例:
数据传输模式
当SD/MMC卡需要读/写数据时,可以配置、使能SDIO主机的数据通道后,通过PIO模式或DMA模式来读/写SDIO的数据BUF的方式实现。
PIO模式
SDIO的数据BUF共128字节,读/写数据共用。根据SDIO主机数据通道所配置的传送方向来判断读或写数据BUF。在读取数据BUF接收数据时,用户查询SDIO_STS寄存器的RXBUFH标志位,如置位可读取8字节的数据,最后再查询RXBUF标志位,以读完剩余小于8字节的未读数据。在写入数据BUF发送数据时,用户查询SDIO_STS寄存器的TXBUFH标志位,如置位可写入最多8字节的数据,直至写完所有待发送的数据。当在PIO模式下运行时,用户都必须确保轮询状态。
DMA模式
DMA模式是访问数据BUF的另一种选择。使用DMA控制器来代替CPU对数据BUF的访问,可以节省CPU运行的时间。使用DMA控制器之前,要先使能SDIO的DMA模式,再去设置DMA控制器的功能,最后使能与数据BUF读或写相关的中断,用以判断数据BUF读/写是否完成,是否有数据校验错误等。控制方式和范例可以参照BSP里的demo。SDIO用DMA模式读或写数据BUF时,只能以WORD为最小传输单位。DMA的长度需换算成WORD单位,数据宽度也必须选择WORD。DMA模式相关配置函数SDIO的DMA模式使能SDIO的中断使能
SDIO主机接口初始化
初始化SDIO主机
这部分介绍了如何去初始化SD/MMC主机接口来建立命令通道和数据通道去初始化 SD/MMC卡。图13. 初始化SD/MMC主机接口流程图时钟配置SDIO使用一个时钟信号:SDIO适配器时钟(SDIOCLK=AHB总线时钟(HCLK))。SDIO_CK的时钟配置对于SD/MMC卡初始化配置时,该时钟范围在100到400KHz。
SD卡初始化
SD卡上电和初始化的流程可参考协议”SD Physical Layer Specification Version 2.00”来实现,并由此来配置命令通道和数据通道去识别和初始化SD卡。图14. SD卡识别和初始化流程图SD卡的上电和初始化发送CMD0:软件复位命令,将卡置于空闲状态。发送CMD8:根据卡端的响应识别SD卡的版本型号和支持的电压范围。
- 如果卡端回复了响应,这说明是V2.00或更新的SD卡。再判断响应是否有效,如响应无效,则支持的电压范围不兼容;如有效,则支持的电压范围是兼容的。
- 如果卡端没有回复响应。则说明是V2.00或更新的SD卡(没有匹配支持的电压),或是V1.X的SD卡,或是没有连接SD卡。
发送ACMD41:获取SD卡的OCR(Operation Conditions Register)。
- 读取OCR中的Busy(Card power up status)bit,判断SD卡的上电过程是否完成,直到该位置1说明上电完成。
- 读取OCR中的CCS(Card Capacity Status)bit,判断该卡是高容量或是标准容量的V2.00的SD卡。
SD卡的识别过程发送CMD2:获取SD卡的CID(Card IDentification)Register。发送CMD3:获取SD卡的相对地址。发送CMD9:获取SD卡的CSD(Card Specific Data)Register。配置SD卡的数据总线宽度1)发送ACMD6:改变SD卡的数据总线宽度(可支持1-bit或4-bit线宽)2)配置SDIO主机的数据总线宽度线宽。总线宽度设置函数
配置SD卡数据总线宽度举例:
MMC卡初始化
MMC卡上电和初始化的流程可参考协议”MultiMediaCard (MMC) Electrical Standard(MMCA, 4.2)”来实现,并由此来配置命令通道和数据通道去识别和初始化MMC卡。图15. MMC卡识别和初始化流程图MMC卡的上电和初始化发送CMD0:软件复位命令,将卡置于空闲状态。发送CMD1:获取MMC卡的OCR(Operation Conditions Register)。
- 读取OCR中的Busy(Card power up status)bit,判断MMC卡的上电过程是否完成,直到该位置1说明上电完成。
MMC卡的识别过程发送CMD2:获取MMC卡的CID(Card IDentification)Register。发送CMD3:设置MMC卡的相对地址。发送CMD9:获取MMC卡的CSD(Card Specific Data)Register。配置MMC卡的数据总线宽度1)发送CMD6:改变MMC卡的数据总线宽度(可支持1-bit或4-bit或8-bit线宽)2)配置SDIO主机的数据总线宽度线宽。总线宽度设置函数
配置MMC卡数据总线宽度举例:
SDIO主机接口读/写 SD/MMC卡
s
读/写SD卡
在读/写SD卡时,只能以数据块的方式进行读/写。当SD卡上电并初始化完成,由空闲状态进入传输状态后,就可以进行SD卡的读/写操作。图16. SD卡状态图(数据传输模式)在初始化完成后,SD卡进入Stand-by状态,需发送CMD7根据相对地址去选中SD卡,此时可进入到transfer状态,便可以进行SD卡的读/写操作。
发送CMD13:获取SD卡状态。
发送CMD16:设置SD卡单块的大小。下面的命令是用于读/写单块或多块的数据:
- CMD1:读单块数据。
- CMD18:读多块数据。
- CMD23:写单块数据。
- CMD24:写多块数据。
读/写MMC卡
在读/写MMC卡时,可以以数据块或数据流的方式进行读/写。当MMC卡上电并初始化完成,由空闲状态进入传输状态后,就可以进行MMC卡的读/写操作。图17. MMC卡状态图(数据传输模式)在初始化完成后,MMC卡进入Stand-by状态,需发送CMD7根据相对地址去选中MMC卡,此时可进入到transfer状态,便可以进行MMC卡的读/写操作。发送CMD13:获取MMC卡状态。发送CMD16:设置MMC卡单块的大小。
下面的命令是用于读/写单块或多块的数据:
- CMD1:读单块数据。
- CMD18:读多块数据。
- CMD23:写单块数据。
- CMD24:写多块数据。
下面的命令是用于读/写数据流:
- CMD11:读数据流。
- CMD20:写数据流。
读/写 SD/MMC卡 案例
下图展示了读/写SD/MMC卡案例的流程图。图18. 读/写SD/MMC卡案例
SDIO主机读写基于 SD/MMC卡的FATFS文件
s在SD/MMC卡上装载FATFS文件系统,文件能被传送,可使用PIO或DMA的传输模式。后面有案例会具体描述如何去创建、写入然后读取一个文件在SD/MMC卡上。
将文件系统导入工程文件
在案例中,我们需要导入FATFS文件系统的API层和硬件层,并根据具体的存储介质来修改硬件层。通过”ffconf.h”配置FatFs的相关功能(可裁剪),以满足应用的需要。图19. FATFS文件系统相关文件
FATFS文件系统案例
下图展示了FATFS文件系统案例的流程图。图20. FATFS文件系统案例PS.
-
mcu
+关注
关注
146文章
17127浏览量
350997 -
AT32
+关注
关注
1文章
113浏览量
2090
发布评论请先 登录
相关推荐
评论