现在的位置: 首页 > 综合 > 正文

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

2012年09月11日 ⁄ 综合 ⁄ 共 2067字 ⁄ 字号 评论关闭

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

实现了:获得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 "..\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的卡,以上的用不了的,我在这上面可浪费了大半天时间。一般只要程序无误,很快就可以调通的,读写扇区功能是很好实现的。

抱歉!评论已关闭.