运动控制器31:FATFS文件系统的接口函数2-媒体接口层

FATFS将物理层和平台层完全分开,这样大大的方便了FATFS的使用,物理层的控制不属于FATFS,我们需要自己编写物理层的程序,而物理层和FATFS的接口函数如下所示,另外一下常用的物理层驱动,FATFS也提供了驱动,比如下面的链接提供了SD卡的驱动操作 How to Use MMC/SDC,驱动SD卡或者数码相机用的MMC卡可以参考下面的介绍。

媒体层函数

disk_status - Get device status

在单个磁盘的系统中,这里返回0,我们编写的函数如下:

/* Physical drive nmuber(0..) */
DSTATUS disk_status(BYTE drv)   
{
    return 0;
}
disk_initialize - Initialize device

存储器的初始化函数定义如下:

// Inidialize a Drive
DSTATUS disk_initialize(BYTE drv)       /* Physical drive nmuber(0..) */
{
    DSTATUS res;
    if(drv)
        res = STA_NOINIT;
    else
        res = (SPIFLASH_disk_initialize() ? STA_NOINIT : 0);

    return res;
}

而SPIFLASH_disk_initialize实际上调用的是我们定义在SPI_FLASH头文件中的SPI_FLASH_SPI_Init,我们在进行格式化一个磁盘的时候,就进行了磁盘的初始化,这样应用层和物理层进行了连接。

disk_read - Read sector(s)
disk_write - Write sector(s)

下面是我们的程序,对上面的两个函数进行了修改,如下:

/* 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) */
)
{   
    UINT i;
    if (SPI_FLASH_ID != SPI_FLASH_Check_Is_OK())
    {
       return RES_ERROR;    //FR_DISK_ERR
    }

    for(i=0;i
disk_ioctl - Control device dependent functions

这个实际上用来返回物理存储器的一些参数,比如扇区大小,512字节,扇区总数已获取存储器的总容量。

get_fattime - Get current time

返回系统的时间,这个时间可以自己随便定义,如下:

DWORD date;
        date = ((2015-1980) << 25) | (4<<21) | (2<<16)|\
            (0<<11) | (1<<5) | (10);
    return date;

这样,我们对物理层和FATFS系统进行了连接。
官网还提供了各个平台的一个示范应用,需要下载可以点击此链接各平台的FATFS应用(包括STM32)
另外,可以将上面所有应用层和物理层的函数进行打包成一个APP的接口文件,里面可以直接调用format_disk进行格式化,我们的系统中,有一个fatfs_app.h的文件,可以进行使用。

你可能感兴趣的:(运动控制器31:FATFS文件系统的接口函数2-媒体接口层)