第20章 SD卡与znFAT文件系统 1 电路图 2 程序移植 3 znFAT文件系统介绍
SD卡广泛运用在手机、数码相机中,本章带领大家入门。
TF卡比标准SD卡(如数码相机上使用的SD卡)在外形上更加小巧,通过SD转接卡也可当 作标准SD卡使用,TF卡主要用在手机上,其容量从128MB到32GB各种规格齐全, TF卡与 标准SD卡仅仅是封装上的不同,它们的传输协议是完全相同的。 SDHC是表示“高容量SD存储卡”,SD 2.0系统规定SDHC是容量大于2GB小于等于32GB的SD 卡,传输速度被定义为Class2(2MB/sec)、Class4(4MB/sec)、Class6(6MB/sec)等级别, 并且在卡片上必须有SDHC标志和速度等级标志,符合SDHC标准的TF卡如下图左所示
(class4是市场上用得最普遍的速度等级),另外,SD协会规定SDHC必须采用FAT32 文 件系统,这是因为之前在SD卡中使用的FAT16文件系统所支持的最大容量为2GB,并不能 满足SDHC的要求。
1 电路图
SD卡的读写程序可直接使用成熟的程序包,一般不需要对程序包进行修改。 例20.1 SD卡扇区读写驱动测试,要求单片机上电后读取SD卡总容量并将结果通过串口发送 到计算机,R/C时钟:22.1184MHz,波特率9600,计算机串口助手使用字符格式显示,单片 机读取SD卡总容量后对一个程序指定的扇区地址进行数据写入与读出,并验证写入与读出数 据是否完全相符,同时把验证结果发送给计算机串口助手进行显示。 主程序代码如下: // SD卡的扇区读写测试,可以支持MMC+SD1.0+SD2.0(SD与SDHC)。 #include "sd.h" #include "uart.h" void main() { int i=0,res=0; // res 用于存放函数返回值 unsigned long sec=0; // sec 用于存放函数返回的扇区总数 port_mode(); // 所有IO口设为准双向弱上拉方式。 UART_Init(); // 波特率:9600 /22.1184MHZ UART_Send_Str("串口设置完毕"); res=SD_Init(); UART_Send_StrNum("SD卡初始化完毕:",res); sec=SD_GetTotalSec(); UART_Send_StrNum("总扇区:",sec); // 总容量=总扇区*512字节 UART_Send_StrNum("总容量(M):",sec>>11); // sec>>11表示:总容量(字节)/1024/1024=兆字节 for(i=0;i<512;i++) pbuf[ i]=i; // 清空测试缓冲区 res=SD_Write_Sector(1000,pbuf); // 512*1000=512千字节,表明可测试小至1M的卡 UART_Send_StrNum("SD卡写扇区完成:",res); for(i=0;i<512;i++) pbuf[ i]=0; // 清空测试缓冲区 res=SD_Read_Sector(1000,pbuf); UART_Send_StrNum("SD卡读扇区完成:",res); res=0; for(i=0;i<512;i++) if(pbuf[ i]!=((unsigned char)i)) res=1; if(res) UART_Send_Str("SD卡读写有错"); else UART_Send_Str("SD卡OK"); while(1); } 程序运行结果如下图所示。
3 znFAT文件系统介绍 有了前面的驱动程序,我们已经可以使用SD卡来存储程序运行过程中的重要数据 了,由于SD卡存储容量很大,即使每次使用1个不同的扇区(512字节),也有足 够的空间来存储数据,但有一个问题,通过前面的驱动程序直接写入到SD卡的数 据无法直接在计算机上显示,在计算机上写入到SD卡中的数据也无法使用前面的 驱动程序直接读取出来,为解决这个问题,需要在前面驱动程序的基础上加入文 件系统,让单片机对文件的操作与计算机对文件的操作相兼容,在8位单片机上 方便使用的文件系统是znFAT,znFAT与存储设备的关系如图所示。
51单片机驱动sd卡上面压缩包所有程序下载:
第20章 SD卡.rar
(11.3 MB, 下载次数: 374)
|