基于单片机的文件系统实现

来源:互联网 发布:2016韩国男团知乎 编辑:程序博客网 时间:2024/05/21 22:01

首先申明,我只实现了部分的功能,没有提到的功能默认是没有的。

实现了:获得SD信息,获得总分区信息,获得某分区的信息,读取fat分区表功能。

具体有列出根目录下所有文件功能,查找某文件是否存在功能,显示某文件内容功能,删除某文件功能。

都仅限于在根目录下操作,且要满足8.3文件名格式。

因老师有要求,不能列出所有文件内容,现列出头文件,给各位一个参考。

/*************************************************************sd卡底层驱动**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**文件名:sd.h*依赖性:无*处理器:C8051F410*编译器:keil 3*单位:宁夏大学**历史:*<作者><时间><版本><描述>*李居强2011/11/11V1.0建立原始文档***************************************************************程序版权声明**本程序为自由程序,您可以自由用于个人或商业行为。可以公布*程序代码,但是不得收费,不得修改。**本程序的版权归宁夏大学 李居强所有。**按照惯例 自由软件不会对因为使用该软件而造成的任何损失承担*任何责任。请谨慎考虑!**更多信息请访问我的博客:http://blog.csdn.net/lineter**本程序最终解释权归李居强所有。************************************************************/#ifndef SD_H#define SD_H#include "..\include\complier.h"#include "..\include\typedefs.h"#include "..\include\spi.h"typedef enum//SD_ErrorList{ SD_RESET_OK       = 0x00,// SD卡重启成功 SD_RESET_TIMEOUT= 0x01,// SD卡重启超时(可能无卡) SD_ACTIVE_TIMEOUT   = 0x02,// SD卡初始化失败 SD_NO_SPI = 0x03,// SD卡不支持spi模式(大于2G) SD_WRITE_BLOCK_ERROR= 0x04,// 不能设置为写块模式SD_WRITE_BLOCK_TIMEOUT = 0x05,// 设置块写入超时SD_WRITE_NOT_ACCEPT = 0x06,// 块写入未接受SD_WRITE_SAVE_TIMEOUT= 0x07,// 块写入保存超时 SD_WRITE_BLOCK_OK       = 0x08,// 块写入成功SD_READ_BLOCK_TIMEOUT  = 0x09,// 设置块读取超时SD_READ_RESPOND_TIMEOUT= 0x0A,// 块读取响应超时SD_READ_BLOCK_OK  = 0x0B,// 块读取成功 SD_GET_CID_TIMEOUT    = 0x0C,// 设置读取CID超时 SD_CID_NOT_RESPOND    = 0x0D,// 读取CID未响应 SD_GET_CID_OK      = 0x0E,// 读取CID成功 SD_GET_CSD_TIMEOUT    = 0x0F,// 设置读取CSD超时 SD_CSD_NOT_RESPOND    = 0x10,// 读取CSD未响应 SD_GET_CSD_OK      = 0x11,// 读取CSD成功 SD_OTHER_ERROR      = 0xFE, SD_TIMEOUT_ERROR    = 0xFF}SD_ErrorList;typedef enum// CommandList{SD_CAMMAND= 0x40,// SD卡命令标示 SD_RESET                = 0x00,// SD卡重启:0 SD_RECOGNITION          = 0x37,// SD卡识别:55 SD_ACTIVE          = 0x01,// SD卡激活:1 SD_WRITE_BLOCK          = 0x18,// SD卡写数据块:24 SD_READ_BLOCK          = 0x11,// SD卡读数据块:17 SD_GET_CID              = 0x0A,// 获得SD卡CID:10 SD_GET_CSD              = 0x09, // 获得SD卡CSD:9 }CommandList;byte sd_write_command(byte Command, dword date, byte CRC);SD_ErrorList sd_reset(void);SD_ErrorList sd_init(void);SD_ErrorList sd_write_sector(byte *buffer, dword address);SD_ErrorList sd_read_sector(byte *buffer, dword address);word sd_get_capaity(void);#endif

一定要注意,spi模式下SD卡最大支持2G的卡,以上的用不了的,我在这上面可浪费了大半天时间。一般只要程序无误,很快就可以调通的,读写扇区功能是很好实现的。