打印

请教关于SD卡的读写

[复制链接]
2178|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lhwaizhu|  楼主 | 2012-11-21 21:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


//实现功能:从SD卡指定地址读取数据,一次最多512字节(参考SD卡读时序)
//================================================================================================
unsigned char SdReadBlock(unsigned char *Block, unsigned long address,unsigned int len)
{
        unsigned int count;

        SD_CS=0;       //使能SD卡

        SdCommand(17,address,0xff);//send command 17读扇区命令
      
        if(SdResponse()==0x00)//command was a success - now send data
            {
                      while(SdRead()!=0xfe); //等待数据的起始令牌号
                    for(count=0;count<len;count++)
                        *Block++=SdRead(); //读512个数据
        
                    SD_CS=1;
                    return 0;
            }
            return 1;
}
//*************************************************************************
//向指定地址写入512个字节
//************************************************************************

unsigned char SdWriteBlock(unsigned char *Block,unsigned long address,unsigned int len)
{
        unsigned int count;

        SD_CS=0;       //使能SD卡

        SdCommand(24,address,0xff);//send command 24 写扇区命令      
        if(SdResponse()==0x00)  //command was a success - now send data
        {
               SdWrite(0xfe) ;//发送数据起始令牌
               for(count=0;count<len;count++)
                       SdWrite(*Block++);  //写入512个字节   
               if((SdResponse()&0x0F)==0x05) //sd卡接受数据
               {
                       SD_CS=1;
                       return 0;
               }
               else
                       return 1;
        }
        else
               return 1;
}



当我用SdWriteBlock某一个扇区写入512字节后,接着用SdReadBlock读出这512个字节,但是发现执行第一次SdReadBlock函数时SdResponse函数返回的一直是0xff,只有再一次执行SdReadBlock函数的时候,才可以把512个字节读出来,请问大家这是什么情况了,谢谢

相关帖子

沙发
sunhq02| | 2012-11-22 08:28 | 只看该作者
sd卡的写操作不是说你发完数据就算结束的
发完数据之后,sd卡需要花费一点时间把数据烧录进去
这段时间之内可能不响应你
你需要查询sd卡是否完成操作,才能进行下一步

使用特权

评论回复
板凳
anboe2012| | 2013-3-21 09:42 | 只看该作者
单片机读写SD卡 模块 支持FAT32 UART接口 .TXT文件

随着电子技术的发展,SD卡作为大容量数据存储器越来越受到广大电子爱好者和客户的衷爱。但是由于SD卡FAT操作的编程复杂,很多电子爱好者望而却步,现在好了,我们推出了这块小巧玲珑的SD卡读卡模块,将复杂的FAT操作集成其内,单片机只需简单的串口操作就能将数据存到SD卡中去,而且支持FAT32。
功能简介:
1. 电源输入范围宽:5~9V,支持3.3V和5V的UART接口。
2. 和单片机的接口简单 UART(串口)接口 可以直接和单片机的UART接口连接
3. 集成FAT32格式系统
4. 文件的读写支持两种模式,一种顺序读写,用以连续的大量数据的读写.一种为给定起始地址的读写,用来随即读写的少量数据的情况,这个功能是的文件的读写非常灵活
5. 波特率可以用拨码开关选择,支持从1200~115200bps
6. 一次性发送数据贞可以长达256字节,有效字节数250
7. 支持<=8G容量的SD卡
8. 读写SD卡模块的速度快
9. 命令结构简单,方便发送
10.能动态监测SD状态有错就会提示
11.模块尺寸小,便于安装与使用。




那个带SD卡的是个模块,带处理器,整合了FAT32,接口是串口(UART)
51单片机串口115200bps读写,写入后文件样子如下:

说明书下载地址:http://www.prog430.com/files/SDV6.pdf

测试软件下载地址:http://www.prog430.com/files/SDV6_test.rar

说明书下载地址:http://www.prog430.com/files/SDV7.pdf

测试软件下载地址:http://www.prog430.com/files/SDV7_test.rar

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

24

主题

79

帖子

2

粉丝