RSS

单片机与MMC卡的接口

发布时间:2008-04-15 关键字: 接口 MMC // 数据 mmc_buffer 读写 目录 字节 系统

   

       在MMC卡上创建文件(或目录)的过程就是在文件目录表FDT中申请登记项的过程。登记项中包括文件名、文件长度和起始簇号等内容。为此定义了如下结构:   


     代码
typedef struct{   
  u8 FileName[8]; //文件名,不足8字节用空格补充   
  u8 ExtName[3]; //扩展名   
  u8 attribute; //属性,典型值:存档(0x20)、卷标(0x08)   
  u8 reserved[10]; //保留   
  u16 time; //time=Hr*2048+Min*32+Sec+2   
  u16 date; //date=(Yr-1980)*512+Mon*32+Day   
  u16 StartCluster; //起始簇号   
  u32 FileLength; //文件长度   
}DIR_tag;  

        文件名一般占用8字节,长的文件名需要用resetx,ed[]数组。文件名的首字节又表明该文件的状态,00H表示该目录项未使用,E5H表示该文件(或目录)已被删除。创建目录时,属性值设置为10H(表示子目录),文件长度为0。

      3.2 文件的读写
   

        MMC卡上文件都是以簇为单位存取的。当读取MMC卡上的文件时,首先要根据文件名查找到该文件的目录登记项。根据目录登记项中的起始簇号既可找到文件在数据区DATA中第1簇的内容,又可在FAT表中找到第2个簇号。根据第2个簇号又能找到第2簇的内容和FAT表中的第3个簇号。这样,就可以根据FAT 表中的簇号读取到全部文件数据。写文件时要保证FAT1和FAT2中内容的一致性,即对两块都要进行同样的写操作。对于FATl6,可以由下面的公式计算出数据起始逻辑扇区号:
   

       起始逻辑扇区=隐藏扇区数+1+2*每FAT扇区数+FDT扇区数+(起始簇号-2)*每簇扇区数
   

       从表1可知,MMC卡上隐藏的扇区数为0,每个FAT占用243个扇区,FDT固定占用32个扇区。写文件的相关代码如下(设文件长度小于512字节):

<DIV class=codeHead>
       代码
void file_write(DIR_tag  *file_tag,char *data){   
    //data为指向数据的指针   
    u16  j,offset=file_tag.StartCluster*2;   
    //FAT16用16位表示1个簇   
    mmc_read block(&sdc,fat1_addr+offset/512,mmc_buffer);    //读取起始簇号所在的块   
    mmc_buffer[offset%512]=0xff;//文件结束标志ff ff   
    mme_buffer[offset%512+1]=0xff;   
    mmc_write_block(&sdc,fat1_addr+offset/512,mmc_buffer);    //写FAT1   
  mmc_write_block(&sdc,fat2_addr+offset/512,mmc_buffer);    //写FAT2,与FAT1同   
  for(j=0,j<file_tag.FileLength;j++) mmc_buffer[i]=data[j];   
  mmc_write_block(&sdc,519+(file_tag.StartCluster-2),mmc_buffer);    //写入数据   
}   </DIV>

       3.3 文件的删除
   

        文件的删除也是对MMC卡上文件管理的一个重要方面。删除文件时,并不涉及数据区的操作,只须在文件的目录登记项上作一个删除标记,并把文件在FAT表中所占用的簇标记为“空簇”。删除文件的代码如下:

<DIV class=codeHead>        代码</DIV>
  1. int file_delete(DIR_tag *file_tag){   
  2.   u16 k,clust_buf,offset1,offset= file_tag.StartCluster*2; //FAT16用16位表示1个簇   
  3.   file_tag.FileName[7]=0xe5;//FDT中文件被删除标志
上一篇:没有了
下一篇:用8031单片机控制的数字钟
最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册