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 = cmd24; // CMD24: Read Single Block
cmd_buffer = (addr >> 24 ) & 0xFF; // MSB
cmd_buffer = (addr >> 16 ) & 0xFF;
cmd_buffer = (addr >> 8 ) & 0xFF;
cmd_buffer = 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;
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;
} 你把printf注释掉试试,之前我也在程序里用了它,会影响到程序的。 回复 2# withoutwing
嘿嘿!~~谢谢捧场!我的问题今天已经解决了。。。。。跟printf()无关。。。还是时序问题。。。详情请看:http://www.myfpga.org/discuz/viewthread.php?tid=36161&extra=page%3D1 回复 3# wushicu
这个我也弄了几天了一直出不来数据,可否把你的主函数(main.c)和sd读部分(SDCardDriver.c)与(SDCardDriver.h),这三个文件给我吗?我急用呢。参照友晶的范例做了,可是读不出来数据好郁闷呢,帮帮我了。谢谢啊!!!我的邮箱是:183196792@qq.com。 回复 4# WPZAC
直接用友晶提供的源代码,不会有任何问题,刚开始,我的也读不出来,弄了很多天,最后我从新做了硬件部分,然后在nios ii里面直接调用初始化函数和读模块函数,就可以读出来了。先检查你的硬件配置,再检查你的主函数。再就是你在sopc部分要加入JTAG,printf()函数才能有输出显示。 回复 5# wushicu
真是解我一时之急啊,非常感谢。我用DE0做sd卡,友晶提供的是DE0_NIOS_SDCARD。
1.我只要移植代码就可以了吗???
2.硬件部分要重新做????
感谢啊,谢谢。 回复 6# WPZAC
你的硬件有没有问题我就不知道了,硬件有问题的话就重新做。我不知道你编程能力怎么样。。。
还有代码移植可不是直接复制粘贴啊!!!要根据你的硬件引脚的宏定义来改
友晶提供的源代码,如果你system.h文件里面的宏定义全部和友晶的一样,直接复制粘贴就行。。。
页:
[1]