MyFPGA Forum
标题:
sd卡sd模式读写
[打印本页]
作者:
wushicu
时间:
2010-7-23 19:03
标题:
sd卡sd模式读写
我的写单块程序如下:时序我仔细看过了,都没问题,crc16校验也正确,就是写不进去。求高手路过
指点迷津。。。。
bool SD_write_block(alt_u32 block_num , alt_u8 *buff)
{
int i,j;
alt_u8 rsp,data,crc_status=0;
alt_16 crc,crc0;
alt_u32 addr;
SD_DAT_OUT;
Ncc();
addr = block_num * 512;
cmd_buffer[0] = cmd24[0]; // CMD24: Read Single Block
cmd_buffer[1] = (addr >> 24 ) & 0xFF; // MSB
cmd_buffer[2] = (addr >> 16 ) & 0xFF;
cmd_buffer[3] = (addr >> 8 ) & 0xFF;
cmd_buffer[4] = addr & 0xFF; // LSB
send_cmd(cmd_buffer);
Ncr();
rsp = response_R(1);
if(rsp > 1)
{ printf("rsp fail !\n");
return FALSE;
}
else
printf("rsp right !\n");
Ncc();
SD_CLK_LOW; //start bit = 0
SD_DAT_LOW;
SD_CLK_HIGH;
for(i=0;i<512;i++)
{
data = buff[i];
for(j=0;j<8;j++)
{
SD_CLK_LOW;
if(data & 0x80)
SD_DAT_HIGH;
else
SD_DAT_LOW;
SD_CLK_HIGH;
data <<= 1;
}
}
crc = cal_crc(buff , 512);
printf("crc :: %x \n",crc);
crc0 = 0;
for(i=0;i<16;i++)
{
SD_CLK_LOW;
crc0 <<=1;
if(crc & 0x8000)
{
SD_DAT_HIGH;
crc0 |= 0x0001;
}
else
SD_DAT_LOW;
SD_CLK_HIGH;
crc <<= 1;
}
printf(" crc0 : %x \n" , crc0);
SD_CLK_LOW;
SD_DAT_HIGH;
SD_CLK_HIGH;
Ncc();
SD_DAT_IN;
i = 0;
while(1)
{
SD_CLK_LOW;
SD_CLK_HIGH;
if((SD_TEST_DAT & 0x01)== 0)
break;
i++;
if(i>500)
{
printf(" there is not data rsp!\n");
break;
}
}
for(i=0;i<8;i++)
{
SD_CLK_LOW;
SD_CLK_HIGH;
crc_status <<= 1;
if((SD_TEST_DAT & 0x01))
crc_status |= 0x01;
}
printf("crc_status : %d \n" , crc_status);
for(i=0;i<16;i++)
{
SD_CLK_LOW;
SD_CLK_HIGH;
}
return TRUE;
}
作者:
withoutwing
时间:
2010-7-24 09:30
你把printf注释掉试试,之前我也在程序里用了它,会影响到程序的。
作者:
wushicu
时间:
2010-7-24 23:17
回复
2#
withoutwing
嘿嘿!~~谢谢捧场!我的问题今天已经解决了。。。。。跟printf()无关。。。还是时序问题。。。详情请看:
http://www.myfpga.org/discuz/vie ... &extra=page%3D1
作者:
WPZAC
时间:
2010-7-25 09:52
回复
3#
wushicu
这个我也弄了几天了一直出不来数据,可否把你的
主函数
(main.c)和
sd读
部分(
SDCardDriver.c
)与(
SDCardDriver.h
),这三个文件给我吗?我急用呢。参照友晶的范例做了,可是读不出来数据好郁闷呢,帮帮我了。谢谢啊!!!我的邮箱是:
183196792@qq.com
。
作者:
wushicu
时间:
2010-7-25 11:58
回复
4#
WPZAC
直接用友晶提供的源代码,不会有任何问题,刚开始,我的也读不出来,弄了很多天,最后我从新做了硬件部分,然后在nios ii里面直接调用初始化函数和读模块函数,就可以读出来了。先检查你的硬件配置,再检查你的主函数。再就是你在sopc部分要加入JTAG,printf()函数才能有输出显示。
作者:
WPZAC
时间:
2010-7-25 13:17
回复
5#
wushicu
真是解我一时之急啊,非常感谢。我用DE0做sd卡,友晶提供的是DE0_NIOS_SDCARD。
1.我只要移植代码就可以了吗???
2.硬件部分要重新做????
感谢啊,谢谢。
作者:
wushicu
时间:
2010-7-25 18:13
回复
6#
WPZAC
你的硬件有没有问题我就不知道了,硬件有问题的话就重新做。我不知道你编程能力怎么样。。。
还有代码移植可不是直接复制粘贴啊!!!要根据你的硬件引脚的宏定义来改
友晶提供的源代码,如果你system.h文件里面的宏定义全部和友晶的一样,直接复制粘贴就行。。。
欢迎光临 MyFPGA Forum (http://www.myfpga.org/discuz/)
Powered by Discuz! X3