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

2019-04-15 17:16发布

首先申明,我只实现了部分的功能,没有提到的功能默认是没有的。 实现了:获得SD信息,获得总分区信息,获得某分区的信息,读取fat分区表功能。 具体有列出根目录下所有文件功能,查找某文件是否存在功能,显示某文件内容功能,删除某文件功能。 都仅限于在根目录下操作,且要满足8.3文件名格式。 因老师有要求,不能列出所有文件内容,现列出头文件,给各位一个参考。 /*********************************************************** * * sd卡底层驱动 * *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * * 文件名: sd.h * 依赖性: 无 * 处理器: C8051F410 * 编译器: keil 3 * 单位: 宁夏大学 * * 历史: * <作者> <时间> <版本> <描述> * 李居强 2011/11/11 V1.0 建立原始文档 * ************************************************************ * * 程序版权声明 * * 本程序为自由程序,您可以自由用于个人或商业行为。可以公布 * 程序代码,但是不得收费,不得修改。 * * 本程序的版权归宁夏大学 李居强所有。 * * 按照惯例 自由软件不会对因为使用该软件而造成的任何损失承担 * 任何责任。请谨慎考虑! * * 更多信息请访问我的博客:http://blog.csdn.net/lineter * * 本程序最终解释权归李居强所有。 * ***********************************************************/ #ifndef SD_H #define SD_H #include "..includecomplier.h" #include "..include ypedefs.h" #include "..includespi.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的卡,以上的用不了的,我在这上面可浪费了大半天时间。一般只要程序无误,很快就可以调通的,读写扇区功能是很好实现的。