在读取SD卡的R2长响应折腾了不少时间,原因是必须开启DMA,不开启DMA,R2响应将不会传输到SDIO的FIFO中,将SDIO接口与STM32保持一致,并兼容应用层SDIO_SDCARD驱动。
寄存器地址
//SDIO========================================================================================================
#define SDIO_BUFF_BASE (0xB000C000) //寄存器基址
#define SDIO_DMA_BASE (0xB000C000+0x400) //寄存器基址
#define SDIO_BASE (0xB000C000+0x800) //寄存器基址
typedef struct
{
vu8 Buff[128]; //SD主机嵌入式缓冲区
}SDIO_BUFF_TypeDef;
typedef struct
{
vu32 CTL; //SD主机DMA控制和状态寄存器
u32 Reserved1;
vu32 SA; //SD主机DMA传输起始地址寄存器
vu32 BCNT; //SD主机DMA传输字节计数寄存器
vu32 INTEN; //SD主机DMA中断使能寄存器
vu32 INTSTS; //SD主机DMA中断状态寄存器
}SDIO_DMA_TypeDef;
typedef struct
{
vu32 GCTL; //SD主机全局控制和状态寄存器
vu32 GINTEN; //SD主机全局中断控制寄存器
vu32 GINTSTS; //SD主机全局中断状态寄存器
u32 Reserved1[5];
vu32 CTL; //SD主机控制和状态寄存器
vu32 ARG; //SD主机命令参数寄存器
vu32 INTEN; //SD主机中断允许寄存器
vu32 INTSTS; //SD主机中断状态寄存器
vu32 RESP0; //SD主机接收响应令牌寄存器0
vu32 RESP1; //SD主机接收响应令牌寄存器1
vu32 BLEN; //SD主机块长度寄存器
vu32 TMOUT; //SD主机响应/数据输入超时寄存器
vu32 ECTL; //SD主机扩展控制寄存器
}SDIO_TypeDef;
#define SDIO_BUFF ((SDIO_BUFF_TypeDef *) SDIO_BUFF_BASE)
#define SDIO_DMA ((SDIO_DMA_TypeDef *) SDIO_DMA_BASE)
#define SDIO ((SDIO_TypeDef *) SDIO_BASE)
|