本节介绍MSP430F5438A FatFs文件系统的移植。
FatFs是一个通用的文件系统模块,用于在小型嵌入式系统中实现FAT文件系统。FatFs模块与IO是分开的,因此移植时需要实现下面几个底层函数:
DSTATUS disk_initialize (BYTE drv); //初始化存储器
DSTATUS disk_status (BYTE drv); //获取存储器状态
DRESULT disk_read (BYTE drv, BYTE* buff, DWORD sector, UINT count); //读存储器
DRESULT disk_write (BYTE drv, const BYTE* buff, DWORD sector, UINT count); //写存储器
DRESULT disk_ioctl (BYTE drv, BYTE ctrl, void* buff); //额外功能
DWORD get_fattime (void); //获取时间(此函数可以没有,和FatFs模块配置有关)
根据不同的处理器平台,需要修改 integer.h 相应的数据类型定义。
修改 ffconf.h 可以配置FatFs的功能。
下面是本人实现的MSP430F5438A平台的移植,使用官方函数库msp430_driverlib_2_60_00_02,使用IAR for msp430 6.3通过编译。
本节代码对SD卡进行了区分,程序在金士顿 8GB SDHC microSD卡经过验证可以正常运行。
diskio.h
/*-----------------------------------------------------------------------/
/ Low level disk interface modlue include file (C)ChaN, 2014 /
/-----------------------------------------------------------------------*/
#ifndef _DISKIO_DEFINED
#define _DISKIO_DEFINED
#ifdef __cplusplus
extern "C" {
#endif
#include "integer.h"
/* Status of Disk Functions */
typedef BYTE DSTATUS;
/* Results of Disk Functions */
typedef enum {
RES_OK = 0, /* 0: Successful */
RES_ERROR, /* 1: R/W Error */
RES_WRPRT, /* 2: Write Protected */
RES_NOTRDY, /* 3: Not Ready */
RES_PARERR /* 4: Invalid Parameter */
} DRESULT;
#define SD_INIT_CLK 125000
#define SD_HIGH_CLK 3125000
#define SD_CS_PORT GPIO_PORT_P9
#define SD_CS_PIN GPIO_PIN0
/* MMC/SD command (SPI mode) */
#define CMD0 (0) /* GO_IDLE_STATE */
#define CMD1 (1) /* SEND_OP_COND */
#defi