142 lines
4.8 KiB
C
142 lines
4.8 KiB
C
#ifndef _DISKIO_DEFINED
|
|
#define _DISKIO_DEFINED
|
|
/**
|
|
*****************************************************************************
|
|
* @addtogroup FatFs FatFs
|
|
* @{
|
|
* @defgroup FatFs_DiskIO Disk IO
|
|
* @brief Low level disk I/O module skeleton for FatFs
|
|
* @{
|
|
*
|
|
* \file diskio.c
|
|
* \version R0.10
|
|
* \date 2013-10-02
|
|
* \author ChaN
|
|
*
|
|
* @brief Low level disk I/O module skeleton for FatFs
|
|
* @note If a working storage control module is available, it should
|
|
* be attached to the FatFs via a glue function rather than
|
|
* modifying it.\n
|
|
* This is an example of glue functions to attach various
|
|
* exsisting storage control module to the FatFs module with a
|
|
* defined API.
|
|
*
|
|
*****************************************************************************
|
|
* @copyright
|
|
* @{
|
|
*
|
|
* Copyright © 2013, ChaN, all right reserved.
|
|
*
|
|
* FatFs module is a generic FAT file system module for small embedded
|
|
* systems.
|
|
* This is a free software that opened for education, research and commercial
|
|
* developments under license policy of following terms.
|
|
*
|
|
* * The FatFs module is a free software and there is NO WARRANTY.
|
|
* * No restriction on use. You can use, modify and redistribute it for
|
|
* personal, non-profit or commercial products UNDER YOUR RESPONSIBILITY.
|
|
* * Redistributions of source code must retain the above copyright notice.
|
|
*
|
|
* @}
|
|
*****************************************************************************
|
|
*/
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif /* __cplusplus */
|
|
|
|
/*----- Header-Files -------------------------------------------------------*/
|
|
#include "integer.h"
|
|
|
|
/*----- Macros -------------------------------------------------------------*/
|
|
#define _USE_WRITE 1 /**< 1: Enable disk_write function */
|
|
#define _USE_IOCTL 1 /**< 1: Enable disk_ioctl function */
|
|
|
|
/* Disk Status Bits (DSTATUS) */
|
|
#define STA_NOINIT 0x01 /**< Drive not initialized */
|
|
#define STA_NODISK 0x02 /**< No medium in the drive */
|
|
#define STA_PROTECT 0x04 /**< Write protected */
|
|
|
|
/* Command code for disk_ioctrl fucntion */
|
|
|
|
/* Generic command (used by FatFs) */
|
|
#define CTRL_SYNC 0 /**< Flush disk cache (for write functions) */
|
|
#define GET_SECTOR_COUNT 1 /**< Get media size (for only f_mkfs()) */
|
|
#define GET_SECTOR_SIZE 2 /**< Get sector size (for multiple sector
|
|
size (_MAX_SS >= 1024)) */
|
|
#define GET_BLOCK_SIZE 3 /**< Get erase block size (for only
|
|
f_mkfs()) */
|
|
#define CTRL_ERASE_SECTOR 4 /**< Force erased a block of sectors (for
|
|
only _USE_ERASE) */
|
|
|
|
/* Generic command (not used by FatFs) */
|
|
#define CTRL_POWER 5 /**< Get/Set power status */
|
|
#define CTRL_LOCK 6 /**< Lock/Unlock media removal */
|
|
#define CTRL_EJECT 7 /**< Eject media */
|
|
#define CTRL_FORMAT 8 /**< Create physical format on the media */
|
|
|
|
/* MMC/SDC specific ioctl command */
|
|
#define MMC_GET_TYPE 10 /**< Get card type */
|
|
#define MMC_GET_CSD 11 /**< Get CSD */
|
|
#define MMC_GET_CID 12 /**< Get CID */
|
|
#define MMC_GET_OCR 13 /**< Get OCR */
|
|
#define MMC_GET_SDSTAT 14 /**< Get SD status */
|
|
|
|
/* ATA/CF specific ioctl command */
|
|
#define ATA_GET_REV 20 /**< Get F/W revision */
|
|
#define ATA_GET_MODEL 21 /**< Get model name */
|
|
#define ATA_GET_SN 22 /**< Get serial number */
|
|
|
|
|
|
/* MMC card type flags (MMC_GET_TYPE) */
|
|
#define CT_MMC 0x01 /**< MMC ver 3 */
|
|
#define CT_SD1 0x02 /**< SD ver 1 */
|
|
#define CT_SD2 0x04 /**< SD ver 2 */
|
|
#define CT_SDC (CT_SD1|CT_SD2) /**< SD */
|
|
#define CT_BLOCK 0x08 /**< Block addressing */
|
|
|
|
/*----- Data types ---------------------------------------------------------*/
|
|
/**
|
|
* \brief Status of Disk Functions
|
|
* \typedef DSTATUS
|
|
*/
|
|
typedef BYTE DSTATUS;
|
|
|
|
/**
|
|
* \brief Results of Disk Functions
|
|
* \typedef DRESULT
|
|
*/
|
|
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;
|
|
|
|
/*----- Function prototypes ------------------------------------------------*/
|
|
DSTATUS disk_initialize (BYTE drv);
|
|
DSTATUS disk_status (BYTE drv);
|
|
DRESULT disk_read (BYTE drv, BYTE*buff, DWORD sector, UINT count);
|
|
#if _USE_WRITE
|
|
DRESULT disk_write(BYTE drv, const BYTE *buff, DWORD sector, BYTE count);
|
|
#endif /* _USE_WRITE */
|
|
#if _USE_IOCTL
|
|
DRESULT disk_ioctl (BYTE drv, BYTE cmd, void* buff);
|
|
#endif /* _USE_IOCTL */
|
|
|
|
/*----- Data ---------------------------------------------------------------*/
|
|
|
|
/*----- Implementation -----------------------------------------------------*/
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif /* __cplusplus */
|
|
|
|
/**
|
|
* \}
|
|
* \}
|
|
*/
|
|
|
|
#endif /* _DISKIO_DEFINED */
|