sd卡驱动+FAT文件系统(二)
来源:互联网 发布:剑灵花钱吗 知乎 编辑:程序博客网 时间:2024/05/22 22:25
3、FatFS文件系统移植
FatFS也是一个开源项目,首页http://elm-chan.org/fsw/ff/00index_e.html
它是一种完全免费开源的FAT文件系统模块,专门为小型的嵌入式系统而设计。它完全用标准C语言编写,所以具有良好的硬件平台独立性,可以移植到8051、PIC、AVR、SH、Z80、H8、ARM等系列单片机上而只需做简单的修改。它支持FATl2、FATl6和FAT32,支持多个存储媒介;有独立的缓冲区,可以对多个文件进行读/写,并特别对8位单片机和16位单片机做了优化
整个移植过程十分顺利。
主要是修改了diskio.c文件中的几个文件,结果如下:
/*-----------------------------------------------------------------------*/
/* Low level disk I/O module skeleton for FatFs (C)ChaN, 2007 */
/*-----------------------------------------------------------------------*/
/* This is a stub disk I/O module that acts as front end of the existing */
/* disk I/O modules and attach it to FatFs module with common interface. */
/*-----------------------------------------------------------------------*/
#include "sd_raw.h"
#include "diskio.h"
/*-----------------------------------------------------------------------*/
/* Correspondence between physical drive number and physical drive. */
#define ATA 0
#define MMC 1
#define USB 2
/*-----------------------------------------------------------------------*/
/* Inidialize a Drive */
DSTATUS disk_initialize (
BYTE drv /* Physical drive nmuber (0..) */
)
{
DSTATUS res = RES_OK;
drv = drv;
if(!sd_raw_init())
res = RES_ERROR;
return res;
}
/*-----------------------------------------------------------------------*/
/* Return Disk Status */
DSTATUS disk_status (
BYTE drv /* Physical drive nmuber (0..) */
)
{
DSTATUS stat = RES_OK;
drv = drv;
return stat;
}
/*-----------------------------------------------------------------------*/
/* Read Sector(s) */
DRESULT disk_read (
BYTE drv, /* Physical drive nmuber (0..) */
BYTE *buff, /* Data buffer to store read data */
DWORD sector, /* Sector address (LBA) */
BYTE count /* Number of sectors to read (1..255) */
)
{
DRESULT res = RES_OK;
drv = drv;
if(!sd_raw_read((sector << 9), buff, (count << 9)))
res = RES_ERROR;
return res;
}
/*-----------------------------------------------------------------------*/
/* Write Sector(s) */
#if _READONLY == 0
DRESULT disk_write (
BYTE drv, /* Physical drive nmuber (0..) */
const BYTE *buff, /* Data to be written */
DWORD sector, /* Sector address (LBA) */
BYTE count /* Number of sectors to write (1..255) */
)
{
DRESULT res = RES_OK;
drv = drv;
if(!sd_raw_write((sector << 9), buff, (count << 9)))
res = RES_ERROR;
return res;
}
#endif /* _READONLY */
/*-----------------------------------------------------------------------*/
/* Miscellaneous Functions */
DRESULT disk_ioctl (
BYTE drv, /* Physical drive nmuber (0..) */
BYTE ctrl, /* Control code */
void *buff /* Buffer to send/receive control data */
)
{
DRESULT res = RES_OK;
struct sd_raw_info info;
drv = drv;
if(!sd_raw_get_info(&info))
return RES_ERROR;
switch(ctrl)
{
case CTRL_SYNC:
break;
case GET_SECTOR_SIZE:
*((DWORD *)buff) = 512;
break;
case GET_SECTOR_COUNT:
*((DWORD *)buff) = info.capacity >> 9;
break;
case GET_BLOCK_SIZE:
*((DWORD *)buff) = 512;
break;
}
return res;
}
DWORD get_fattime (void)
{
return (29 << 25) + (8 << 21) + (8 << 16);
}
经过测试,可以正确读出SD卡中的文件系统。
- sd卡驱动+FAT文件系统(二)
- sd卡驱动+FAT文件系统(一)
- sd卡驱动+FAT文件系统(三)
- 图文并茂 SD/TF卡 FAT文件系统彻底剖解(二)
- SD卡的FAT文件系统
- SD卡fat文件系统移植
- SD卡和FAT文件系统示例
- USB_Mega 调试2 --- SD卡&FAT文件系统
- SD + FAT文件系统学习
- 在SD/MMC卡中可读写的FAT文件系统
- FAT文件系统原理(二)
- FAT文件系统原理(二)
- FAT文件系统原理(二)
- FAT文件系统原理(二)
- FAT文件系统原理(二)
- FAT文件系统原理(二)
- FAT文件系统原理(二)
- SD卡中的FAT32文件系统(二)
- Mysql中通过Like匹配中文不准确的解决办法
- STL—vector删除重复元素
- linux架设subversion(svn)版本控制
- C#(.NET)数据访问连接、查询、插入等操作的封装类
- iptables整体模块结构图
- sd卡驱动+FAT文件系统(二)
- ThreadLocal详解
- Asp.net 无限级分类实例
- ruby 大会
- 初学DWR3.0
- 矩阵类
- 光光:北漂族(beipz.com)网站制作过程
- Windows中的映射模式和坐标转换
- 大学生找工作如同女人找老公