基于ARM含SD控制器的SD卡的SDIO模式..
时间:2010-10-29 来源:alex_decimal
代码如下:
int SD_card_init(void)
{
RECMD2:
rSDICARG=0x0;
rSDICCON=(0x1<<10)|(0x1<<9)|(0x1<<8)|0x42;
//lng_resp, wait_resp, start, CMD2
if(!Chk_CMDend(2, 1)) //查询反馈是否正确
goto RECMD2;
RECMD3:
rSDICARG=MMC<<16;
// CMD3(MMC:Set RCA, SD:Ask RCA-->SBZ)
rSDICCON=(0x1<<9)|(0x1<<8)|0x43;
// sht_resp, wait_resp, start, CMD3
goto RECMD3;
RCA=( rSDIRSP0 & 0xffff0000 )>>16;
if( rSDIRSP0 & 0x1e00!=0x600 )
goto RECMD3;
rSDIPRE=PCLK/(2*NORCLK)-1;
// 设置高速时钟Normal clock="25MHz"
}
void Set_4bit_bus(void)
{
}
void SetBus(void)
{
SET_BUS:
// Make ACMD
}
4.2SD卡的读与写
读写就是正反向的问题,这里只分析读
步骤:1)读单block CMD17 多block CMD18
程序如下:采用DMA模式
void Rd_Block(void)
{
RERDCMD:
//auto-reload off, word, 128blk*num
//no-stop, DMA2 channel on, no-sw trigger
RERCMD12:
}
4.3上面用到的响应判断函数
主要完成对反馈状态的分析。
函数如下:
int Chk_CMDend(int cmd, int be_resp) //指令反馈判断函数
{
}
int Chk_DATend(void)
{
}
int Chk_BUSYend(void) //数据反馈判断函数
{
IDSTA=0xf4; //clear error state
}