IC验证之SDIO使用

IC验证之SDIO使用


SD控制器和SDIO卡初始化流程如下:
1. 配置SD控制器的寄存器:
1) 配置控制寄存器CTRL,bit0置高复位控制器,bit1置高复位FIFO,bit2置高复位DMA,bit4置高使能中断,bit5置高使能DMA传输模式,bit25置高使用内部DMAC控制器;
2) 配置控制寄存器CTRL,bit0置低控制器复位释放,bit1置低FIFO复位释放,bit2置低DMA复位释放;
3) 配置电源使能寄存器PWREN,bit置高,对应卡供电,最高支持16个卡;
4) 配置命令寄存器CMD,bit13置高,表示当前命令完成后,才允许发送下一条命令;bit21置高,表示只更新时钟相关寄存器;bit31置高,表示host不应该尝试发送任何命令,否则有硬件错误产生;配置时钟使能寄存器CLKENA,所有bit置低关闭时钟使能;配置时钟分频寄存器CLKDIV,分频系数为2n(n为寄存器值),将时钟设置为400KHZ(初始化时钟为400KHZ);配置时钟源寄存器CLKSRC,选择时钟分频系数;再次配置时钟使能寄存器CLKENA,使能卡时钟;
5) 配置未处理中断寄存器RINTSTS,清所有中断;
6) 配置中断屏蔽寄存器INTMASK,使能所有中断;
7) 配置超时响应寄存器TMOUT,设置超时限制时间;
8) 配置卡类型寄存器CTYPE,设置DUT侧传输位宽,SD传输模式下可选为1bit或4bit;
2. 发送CMD0,命令内容寄存器CMDARG设为全0,命令寄存器CMD的bit15置高,表示在上电后向卡发送第一条命令前,需要自动发送初始化序列(80个时钟周期高电平),目的是等待电源进入稳定状态;
3. 发送CMD8,CMD8可以初始化SD存储卡。同时命令内容寄存器CMDARG的bit[11:8]设置为1,用于检查卡电压范围是否在2.7-3.6V范围内,bit[7:0]设置为任意8bit数据;
4. 发送CMD5,命令内容寄存器CMDARG设置为全0。如果命令响应R4的存储功能位MP为高,代表卡有存储功能,如果命令响应R4的功能区位NF不为0,代表卡有SDIO功能,如果标志位C为高,表示卡在初始化后已经准备好进行后续操作,如果标志位C为低,将响应R4的低24bit,即OCR部分设置为命令寄存器值,再次发送CMD8,直至标志位C为高;
5.发送CMD3,命令内容寄存器CMDARG设置为全0,查询卡的相对地址;
6. 发送CMD7, 命令内容寄存器CMDARG设置为步骤e获取的相对地址,表示选中该卡,并将该卡由空闲状态跳转到传输状态;
7.配置时钟分频寄存器CLKDIV,将频率上升为正常频率,在控制器的输入时钟为25MHZ情况下,SD存储卡典型工作频率为25MHZ,全速SDIO卡的工作频率为25MHZ,低速SDIO卡工作频率为400KHZ。
8 对SDIO卡内寄存器进行初始化,分别是reg2、reg4、reg7和reg13等。reg2(I/O ENABLE)中写入0XFE,使能function1-7,否则function不能正常工作,可以通过读取reg3(I/O READY)寄存器的值可以判断functon是否成功使能。向reg4中写入0xFF,使能所有中断。向reg7中的CD DISABLE 位置1,保证CMD53命令可以执行,向ECSI位置1,使能 continuous SPI interrupt,通过读取SCSI(Support Continuous SPI Interrupt)位判断是否成功使能,bus width位写入2’0,表示选择1bit模式,写入2’h2,表示选择4bit模式;向reg13中的FS位写入1,表示操作功能区1。
以上完成控制器和SDIO卡内部初始化,以下介绍如何对SDIO卡进行读写操作,以字节写为例:
9使用CMD52向SDIO卡地址32’hx10和32’hx11(x=0-7,代表不同的功能区,操作功能区1,就是1)写入将要写入的byte数;
10.使能控制器内部DMA,配置BMOD寄存器和DBADDR寄存器,同时还要配置好描述符,具体参见DMA配置内容 IC验证之DMA使用;
11. 使用CMD53向卡内些数据,命令内容包括,读/写、功能区、起始地址、字节数、字节/块模式等;

你可能感兴趣的:(#,IC验证实例,ic)