IC验证之在SDIO验证中需要注意的问题

SDIO和SD卡存在不同,在进行DUT功能验证中,需要注意一些问题,否则testcase无法通过!
(1)在完成对卡的复位之后,需要设置SDIO 的时钟,在设置时钟时,在操作使能时钟寄存器、分频寄存器和时钟源寄存器之后,都要向命令寄存器里写入0x80202000,第31bit代表start_cmd,该命令被CIU接受后,自动变为0,若在完成之前,控制器对SDIO进行了读写操作,将会在中断寄存器中产生一个hardware lock error,所以在完成对时钟相关寄存器配置后,需要检查第31bit是否变为0 和未处理中断寄存器中是否有HLE中断产生,若start_cmd = 0,且没有HLE中断才代表之前的时钟操作顺利完成。第21bit代表只更新时钟相关寄存器,第13bit代表等待之前命令完成。一般设置时钟频率的步骤:取消使能时钟,配置分频寄存器和时钟源寄存器,重新使能时钟!
(2)在使用SDIO前,需要使用CMD5命令查询SDIO卡所支持的电压范围,在CMD5的response(R4)中的 C标志位代表SDIO卡在初始化后是否已经准备好进行其他操作(READY),在进行其他操作前需要确认该位已经置为1!
(3)在确认SDIO已经Ready后,需要对SDIO的一些关键寄存器进行配置,比如reg2、reg4和reg7,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)位判断是否成功使能。
(4)CMD52的response(R5)中response flag(bit 4 和bit5)标志位代表着当前card所处的工作状态,包括CMD状态和TRAN状态,可以通过读取CCCR区域reg12的BS位,查看card是否处于TRAN状态且BS=1,来判断当前card是否完成读、写操作,适用于CMD53和CMD52的读写操作。
(5)通过向SDIO卡的CCCR区域的Register12的的BR位写1,暂停当前card的读写操作,若card成功暂停,则BR=0,BS=0;若card拒绝进入暂停状态,则card会将BR位置0,BS位置1,代表继续进行当前的数据传输,可以通过查看BR和BS位来判断card是否进入suspend!
(6)在card成功进入暂停状态,可以通过读取TCBCNT和TBBCNT寄存器的数值,来判断当前已经完成的写操作字节数。
(7)通过向SDIO卡的CCCR区域的reg13的FSx写入数值(1-7),resume当前传输,若DF位随后置1,代表有数据正在传输;若置0,代表剩余传输已经结束。在通过CMD53进行字节或块读写操作时,不需要单独配置FSX的值,来选择操作哪个function ,只需要在CMD53 的Argument里配置好Function number 即可!
(8)c语言中,多bit赋值,需要写明进制符!

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