首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

深入理解SD卡原理和其内部结构总结

深入理解SD卡原理和其内部结构总结

  • //***************************************************************
  • ***********
  • //查找数据开始标志 (预设DATASTART)根据实际需要删改
  • //***************************************************************
  • ***********
  • unsigned long SD_find(void)
  • {
  •     unsigned long tmp=400;
  •    unsigned char data[512];
  •    do
  •     {
  •         SD_read_sector(tmp,data);                    //从0 扇区开始查
  •         tmp++;                                        //查找DATASTART
  •      }while(!((data[0]       'D')&&(data[1]         'A')&&(data[2]        'T')&&(data[3]        'A
    )&&(data[4]        'S')&&(data[5]         'T')&&(data[6]        'A')&&(data[7]        'R')&&(data[8 ]    'T')));
  •      return tmp;                                    //返回开始标志的下一个扇区
  • }


关于SD 卡的几点注意事项。  

1、无论我们愿意不愿意,SD 卡每次读写数据的最小单位是1个扇区,即512 个字节。  

2、SD 卡与单片机连接的SPI 总线不能太长,要尽量短。这样的好处是速度可以更快,也不容

易出错。  

3、虽然我们并不关心FAT 文件表,但是我们仍然要关心SD 卡的存储结构,如果我们不想使用

PC 机来读取保存在SD 卡上的数据那我们就不用关心SD 存储结构了。但,作为一个大容量的

可移动存储设备,不能用PC机来读取是个很大的遗憾,我解决这个遗憾的方法如下:  

3-1、因为我不了解FAT 复杂的结构,所以我做的程序没法去按照FAT 表的各项功能来进行创

建文件、删除文件、创建目录等等操作。  

3-2、虽然我们的单片机不能创建文件,但是PC 机是可以创建文件的啊!所以我使用PC 机将

SD 卡格式化,之后在SD卡上创建一个大文件,比如我的128M的SD 卡上我建立了一个100M

的文件。这里需要注意一下,一般使用windows 创建文件的功能时是没有办法指定创建文件的

大小的,空文件就是0 个字节的长度,而我们是需要一个固定长度的文件的,所以我用VC 编写
了一个小软件,这个软件可以为我创建一个100M 长度的空文件,记住,这点很重要:一个固

定长度的空文件  

3-3、虽然我们建立了个文件在SD 卡上,可是我们因为不去了解FAT 表,所以我们一样不知道

这个文件到底位于SD 卡的什么地方,不要以为它会在0 字节的地方开始,为了找到这个文件

的开始位置,我们可以在建立的那个空文件的开头写上几个字符,比如我程序里面写的

“DATASTART”,接下来我们要做的就是一个扇区一个扇区的去找这个几个特殊的字符,这是个

笨方法,但却是最简单直观的方法。这个方法有两个缺点:a、如果文件建立在整个SD 卡的后

面,那找到这个文件需要漫长的等待。b、如果碰巧某个文件里面也有我们定义的那个特殊字符

串的话,那就乱套了!不过好在我们使用的SD 卡一般都是专用的,并不能拿去做其他应用,比

如从公司copy 点文件回家之类的,那就能保证这个SD 卡上文件的简单性,即只有我们需要的

那个文件,其他文件并不存在,而且这个文件肯定会从SD 卡开始的那些扇区中的某一个开始。

这样说来的话找到这个字符串也不是那么慢嘛!^_^。不过这里要建议一下,在使用SD 卡之

前最好用windows 将它完全格式话一下。  

3-4、一旦我们找到了我们要写入文件的起始位置 (它一般表示为一个扇区号),那我们就可以

在这个起始扇区的下一个扇区写入数据了。  

4、OK,看起来很简单!有了这种存储方式我们还需要IIC 接口的EEPROM 干吗呢?^_^,

说句玩笑而已!
继承事业,薪火相传
返回列表