MyFPGA Forum

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

SD,初步读写成功!大家分享!!当然了SD模式

[复制链接]
跳转到指定楼层
#
发表于 2010-5-18 08:22:59 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
今天一来实验室,按照时序又走了一遍,一不小心,成功了,我内心的喜悦不知道该如何表达,只能是和大家共享来分享这一刻的心情。见代码(并参考注释):
//-------------------------SD_write_lba----------------------------------------
///////////利用CRC-----CCITT ---16校验码
BYTE SD_write_block(alt_u16 block_number, BYTE *buff)
{
    UINT16 b = 0;
    UINT16 crc=0;
    BYTE temp = 0;
    BYTE crc_status = 0;
   
    ///////////修改数据方式为out方式,即写方式。
    SD_DAT_OUT;
   
    UINT32 i,k,lba;
    lba = block_number * 512;

    Ncc();
    cmd_buffer[0] = cmd24[0];
    cmd_buffer[1] = (lba>>24)&0xff;
    cmd_buffer[2] = (lba>>16)&0xff;
    cmd_buffer[3] = (lba>>8)&0xff;
    cmd_buffer[4] = lba&0xff;
    send_cmd(cmd_buffer);
    Ncr();

    if(response_R(1)>1)
    return 1;
    Ncc();
   
    ////////////S bit
    SD_CLK_LOW;
    SD_DAT_LOW;
    SD_CLK_HIGH;

    /////////////content  
    for(i=0; i < 512; i++)
    {
        temp = buff [ i ];
        
        for(k=0x80; k!=0; k=k>>1)
        {
          SD_CLK_LOW;   

          if(temp&k)     
          SD_DAT_HIGH;
          else
          SD_DAT_LOW;

          SD_CLK_HIGH;   
         
          b = b*2;
          if((b&0x10000))
          b = b^0x11021;
          if((temp&k))
          b = b^(0x10000^0x11021);
        }
    }
    crc = b;  
//    crc =((crc<<1)|0x01);        //////////////end bit  
   
    ////////////crc
    for(i=0; i<16; i++)
    {
      SD_CLK_LOW;
      
      if(crc&0x8000)
      SD_DAT_HIGH;
      else
      SD_DAT_LOW;
      SD_CLK_HIGH;
      crc<<=1;
    }

////////////////////////////////end bit
    SD_CLK_LOW;
    SD_DAT_HIGH;
    SD_CLK_HIGH;
     

    Ncc();

    SD_DAT_IN;        //////////读取CRC status,应当修改DAT的方向。
   
    while(1)            ////////////等待crc status Start 位
    {
      SD_CLK_LOW;
      SD_CLK_HIGH;
      if((SD_TEST_DAT & 0x01) == 0)
      break;
    }
   
    for(i=0;i<8;i++)
    {
        SD_CLK_LOW;
        SD_CLK_HIGH;
        
        crc_status <<= 1;

        if((SD_TEST_DAT & 0x01))
        crc_status |= 0x01;        
    }

   
    for(i=0;i<16;i++)
    {
        SD_CLK_LOW;
        SD_CLK_HIGH;
    }
    write_status = 1;     
    return 0;     
}
//-------------------------------------------------------------------------
30#
发表于 2012-8-5 23:25:29 | 只看该作者
我个晕,你的cmd里面的校验码呢?校验码都没有,你就向外发嘛?
29#
发表于 2012-3-17 23:40:05 | 只看该作者
呵呵,我做了一个4线的SD模式的读取,需要的可以联系332400178@qq.com
28#
发表于 2011-6-23 13:35:33 | 只看该作者
  1. unsigned char abc[512]="TED TED This is a successful test...";

  2.                                 SD_write_block(568,abc);
  3.                                 SD_write_block(569,abc);
  4.                                 SD_write_block(570,abc);       
复制代码
但這樣 只有 第一個  SD_write_block(568,abc);      有真正的把值寫進去。

發現在 SD_write_block 裡面
response_R 裡,等不到 SD_TEST_CMD 。

不知是否有其他大大 成功的嗎?
27#
发表于 2011-3-4 18:28:54 | 只看该作者
你好,用你的方法在de2-70试了下,但是将写进去的又读出来时错误,读出为0 1 56 150.。。。,不知为何,求解。email:hat_trick@126.com
26#
发表于 2010-10-15 11:41:09 | 只看该作者
ALtera 不是有 SPI IP 嗎?怎麼會用i/o模式?
25#
发表于 2010-8-21 15:14:33 | 只看该作者
楼主啊,你是怎么做的,分享下,我QQ:1244673032
24#
发表于 2010-8-21 11:34:40 | 只看该作者
楼主贴下工程
23#
发表于 2010-8-21 10:52:18 | 只看该作者
楼主您好,可不可以将您完整的写工程发给我看看,我邮箱:1244673032@qq.com
22#
发表于 2010-8-20 14:32:37 | 只看该作者
楼主你好,我在用DE0做图像采集,现在想将RGB转换成bmp图片存储于SD卡中,能不能分享一下你的SD卡驱动程序,我QQ:1244673032,
21#
发表于 2010-7-23 18:53:46 | 只看该作者
兄台!~~~我刚验证了,你的校验码输出是错误的!~~当输入数据为512个 ff 时。crc16的校验码应该为:7fa1。而你的程序输出校验码是 : f01f  。
但是我的程序虽然校验码输出是正确的,但是还是没写进去。时序也没有问题。。。。。
我真是快疯了。
20#
发表于 2010-7-23 18:49:53 | 只看该作者
兄台!~~~我刚验证了,你的校验码输出是错误的!~~当输入数据为512个 ff 时。crc16的校验码应该为:7fa1。而你的程序输出校验码是 : f01f  。
但是我的程序虽然校验码输出是正确的,但是还是没写进去。时序也没有问题。。。。。
我真是快疯了。
19#
发表于 2010-7-21 19:03:27 | 只看该作者
兄弟!~~我用你的程序怎么还是写不进去啊!~??crc status = 111~~~这问题怎么解决啊???急死我了!~~邮箱或QQ:303402882@qq.com
18#
发表于 2010-7-21 16:07:59 | 只看该作者
兄台!~偶看你的程序还是有点问题。在发送数据的部分:temp没有移位,temp
wushicu 发表于 2010-7-21 16:02


偶错了,看错了,!~你是在k移位。不过那个crc校验码生成的算法我就看不太懂 了!~~
17#
发表于 2010-7-21 16:02:37 | 只看该作者
兄台!~偶看你的程序还是有点问题。在发送数据的部分:temp没有移位,temp<<=1;
16#
发表于 2010-7-21 10:23:06 | 只看该作者
感谢分享...嘿嘿...这份喜悦...
15#
发表于 2010-7-18 20:02:43 | 只看该作者
回复 15# WPZAC
你可以写一个数组的数据,然后读出来,做printf显示。看与写入的是否一致。
14#
发表于 2010-7-18 10:21:54 | 只看该作者
回复 2# jiayanfu


    请问,在NIOS里面如何验证呢?????谢谢。
13#
发表于 2010-7-17 21:14:11 | 只看该作者
回复 13# liusw0003


    请问你是做什么的?交流下。
12#
发表于 2010-7-14 22:05:56 | 只看该作者
楼主:你的程序我测试了,在DE0上没跑通~~
提出2点建议:
1。
     SD_write_block(block_num,Buf_write);
       [color=Red ]memset(Buf_read,0,block_num);  //加上这句看还能不能读出数据
        SD_read_block(block_num,Buf_read);
2. CRC16效验输出为0
本人QQ :1050504518
欢迎交流
11#
发表于 2010-7-3 15:02:16 | 只看该作者
版主啊,可否给个SDCARD读与写的程序呀,上面的我照进行了,可是主函数提示有错误。谢谢啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|MyFPGA

GMT+8, 2024-5-5 00:15 , Processed in 0.046717 second(s), 15 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

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