MyFPGA Forum

 找回密码
 注册
搜索
查看: 5998|回复: 6
打印 上一主题 下一主题

sd卡sd模式读写

[复制链接]
跳转到指定楼层
1#
发表于 2010-7-23 19:03:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的写单块程序如下:时序我仔细看过了,都没问题,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;
}
2#
发表于 2010-7-24 09:30:19 | 只看该作者
你把printf注释掉试试,之前我也在程序里用了它,会影响到程序的。
3#
 楼主| 发表于 2010-7-24 23:17:26 | 只看该作者
回复 2# withoutwing


嘿嘿!~~谢谢捧场!我的问题今天已经解决了。。。。。跟printf()无关。。。还是时序问题。。。详情请看:http://www.myfpga.org/discuz/vie ... &extra=page%3D1
4#
发表于 2010-7-25 09:52:50 | 只看该作者
回复 3# wushicu


    这个我也弄了几天了一直出不来数据,可否把你的主函数(main.c)和sd读部分(SDCardDriver.c)与(SDCardDriver.h),这三个文件给我吗?我急用呢。参照友晶的范例做了,可是读不出来数据好郁闷呢,帮帮我了。谢谢啊!!!我的邮箱是:183196792@qq.com
5#
 楼主| 发表于 2010-7-25 11:58:59 | 只看该作者
回复 4# WPZAC


    直接用友晶提供的源代码,不会有任何问题,刚开始,我的也读不出来,弄了很多天,最后我从新做了硬件部分,然后在nios ii里面直接调用初始化函数和读模块函数,就可以读出来了。先检查你的硬件配置,再检查你的主函数。再就是你在sopc部分要加入JTAG,printf()函数才能有输出显示。
6#
发表于 2010-7-25 13:17:36 | 只看该作者
回复 5# wushicu


    真是解我一时之急啊,非常感谢。我用DE0做sd卡,友晶提供的是DE0_NIOS_SDCARD。
  1.我只要移植代码就可以了吗???
  2.硬件部分要重新做????

  感谢啊,谢谢。
7#
 楼主| 发表于 2010-7-25 18:13:34 | 只看该作者
回复 6# WPZAC


    你的硬件有没有问题我就不知道了,硬件有问题的话就重新做。我不知道你编程能力怎么样。。。
还有代码移植可不是直接复制粘贴啊!!!要根据你的硬件引脚的宏定义来改
友晶提供的源代码,如果你system.h文件里面的宏定义全部和友晶的一样,直接复制粘贴就行。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|MyFPGA

GMT+8, 2024-5-5 22:05 , Processed in 0.043022 second(s), 15 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表