MyFPGA Forum
标题:
SD卡源码问题
[打印本页]
作者:
wushicu
时间:
2010-7-30 14:49
标题:
SD卡源码问题
下面是DE0配套提供的SD卡应用的代码:
bool SD_card_init(void)
{
alt_u8 x,y;
// richard add: pull-high DAT3 to enter SD mode?
#ifndef SD_4BIT_MODE
// SD_DAT3_OUT;
// SD_DAT3_HIGH;
#endif
//printf(("--- Power On, Card Identification Mode, Idle State\r\n"));
// printf(("default 1-bit mode\r\n"));
usleep(74*10);
SD_CMD_OUT;
SD_DAT_IN;
SD_CLK_HIGH;
SD_CMD_HIGH;
SD_DAT_LOW;
gbActive = FALSE;
read_status=0;
for(x=0;x<40;x++)
Ncr();
for(x=0;x<5;x++)
cmd_buffer[x]=cmd0[x];
y = send_cmd(cmd_buffer);
//printf(("CMD0[GO_IDLE_STATE]\r\n"));
do
{
// issue cmd55 & wait response
for(x=0;x<40;x++);
Ncc();
for(x=0;x<5;x++)
cmd_buffer[x]=cmd55[x];
y = send_cmd(cmd_buffer);
// printf(("CMD55[APP_CMD]\r\n"));
Ncr();
if(
response_R(1)>1
){ //response too long or crc error
//printf(("response error for CMD55\r\n"));
return FALSE;
}
Ncc();
。。。。。。。。。。。。。。省略
alt_u8
response_R(alt_u8 s)
{
alt_u8 a=0,b=0,c=0,r=0,crc=0;
alt_u8 i,j=6,k;
while(1)
{
SD_CLK_LOW;
SD_CLK_HIGH;
if(!(
SD_TEST_CMD
))
break;
。。。。。。。。省略
我要问的CMD线是双向的,因此发送命令和接收响应的时候都应该要改变CMD线的方向。
而初始化程序SD_card_init(void)中SD_CMD_OUT初始化命令线为由主机向SD卡发送,而在接受响应时调用response_R()函数中并没有SD_CMD_IN。而
直接if(!(
SD_TEST_CMD
)),这样也能测试成功,实在是匪夷所思。。。
作者:
tornadomeet
时间:
2011-5-9 09:35
是啊,我也觉得很神奇,都是乱来的。连SD卡的CS片选都没有,怎么可能成功啊,我都试了n多次都失败了
欢迎光临 MyFPGA Forum (http://www.myfpga.org/discuz/)
Powered by Discuz! X3