⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ffs_port_mmc.h

📁 The Fat Fs module is a middleware that written in ANSI C. There is no platform dependence, so long a
💻 H
字号:
/***********************************************************
*                 FFS/FAT Port to MMC/SD-slot              *
*                                                          *
*          by  Frank Goetze  -  www.embedded-os.de         *
************************************************************
*                     FFS_Port_MMC.h                       *
*                  MMC PORT DECLARATIONS                   *
***********************************************************/
#ifndef FFS_MMC
 #define FFS_MMC

/****************** low-level HW-adaption *****************/
// #include "ATMega128/FFSPort_SPI.h"                         // Atmel - ATMega128
 #include "AT91SAM7xxx/FFSPort_SPI.h"                       // Atmel - AT91SAM7..xx
// #include "LPC214x/FFSPort_SPI.h"                           // NXP - LPC2148
// #include "STM32/FFSPort_SPI.h"                             // ST  - STM32
// #include "STR71x/FFSPort_SPI.h"                            // ST - STR711


#ifdef OS_PACK_PRAGMA
 #pragma pack(1)
#endif
/***************** MMC-Sector configuration ***************/
OS_PACKED typedef struct ffs_size {
    U32 maxsectors;                                        // LBAs
    U32 sectorsize;                                        // sector-size in bytes
    U32 vp_id;                                             // vendor- & product-ID of memory (flash)
    U08 flags;                                             // WriteProtect + 7bit unused
} OS_PACKED_ATTR FFS_SIZE;
#ifdef OS_PACK_PRAGMA
 #pragma pack()
#endif

/*
***********************************************************
*            return-codes definitions for FFS-Port
***********************************************************
*/
#define FFS_NO_ERR                  0                      // no errors
#define FFS_PORT_ERR                100                    // error in FFS_Port
#define FFS_NO_MEDIA                101                    // no media found
#define FFS_WR_PROTECT              102                    // write-protect

/************* MMC/SD type marks (internal) ****************/
#define FFSp_MARK_MMC    0x00
#define FFSp_MARK_HDMMC  0x01
#define FFSp_MARK_SD     0x10
#define FFSp_MARK_SDHC   0x11

/************** MMC/SD commands (SPI-mode) *****************/
#define MMC_GO_IDLE_STATE                0
#define MMC_SEND_OP_COND                 1
#define MMC_SWITCH                       6
#define MMC_SEND_EXTCSD                  8
#define MMC_SEND_CSD                     9
#define MMC_SEND_CID                    10
#define MMC_STOP_TRANSMISSION           12
#define MMC_SEND_STATUS                 13
#define MMC_SET_BLOCKLEN                16
#define MMC_READ_SINGLE_BLOCK           17
#define MMC_READ_MULTIPLE_BLOCK         18
#define MMC_SET_BLOCK_COUNT             23
#define MMC_WRITE_SINGLE_BLOCK          24
#define MMC_WRITE_MULTIPLE_BLOCK        25
#define MMC_PROGRAM_CSD                 27
#define MMC_SET_WRITE_PROT              28
#define MMC_CLR_WRITE_PROT              29
#define MMC_SEND_WRITE_PROT             30
#define MMC_TAG_ERASE_GROUP_START       35
#define MMC_TAG_ERASE_GROUP_END         36
#define MMC_ERASE                       38
#define MMC_LOCK_UNLOCK                 42
#define MMC_APP_CMD                     55
#define MMC_GEN_CMD                     56
#define MMC_READ_OCR                    58
#define MMC_CRC_ON_OFF                  59

#define SD_SEND_IF_COND                  8
#define SD_SEND_OP_COND_ACMD41          41
#define SD_SEND_CONFIG_REG_ACMD51       51

/********** not used for backward compatibility ************/
#define MMC_TAG_SECTOR_START            32
#define MMC_TAG_SECTOR_END              33
#define MMC_UNTAG_SECTOR                34
#define MMC_UNTAG_ERASE_GROUP           37

/************** R1 Response bit-defines ********************/
#define MMC_R1_BUSY                     0x80
#define MMC_R1_PARAMETER                0x40
#define MMC_R1_ADDRESS                  0x20
#define MMC_R1_ERASE_SEQ                0x10
#define MMC_R1_COM_CRC                  0x08
#define MMC_R1_ILLEGAL_COM              0x04
#define MMC_R1_ERASE_RESET              0x02
#define MMC_R1_IDLE_STATE               0x01

/********** R2 Response bit-defines (2. byte)***************/
#define MMC_R2_OUT_OF_RANGE             0x80
#define MMC_R2_ERASE_PARAM              0x40
#define MMC_R2_WP_VIOLATION             0x20
#define MMC_R2_ECC_FAIL                 0x10
#define MMC_R2_CC_ERROR                 0x08
#define MMC_R2_ERROR                    0x04
#define MMC_R2_WP_ERASE_SKIP            0x02
#define MMC_R2_CARD_LOCKED              0x01

/******************** Data tokens **************************/
#define MMC_STARTBLOCK_READ             0xFE
#define MMC_STARTBLOCK_WRITE            0xFE
#define MMC_STARTBLOCK_MWRITE           0xFC
#define MMC_STOPTRAN_WRITE              0xFD

/************** Data Error Token values ********************/
#define MMC_DE_MASK                     0x1F
#define MMC_DE_ERROR                    0x01
#define MMC_DE_CC_ERROR                 0x02
#define MMC_DE_ECC_FAIL                 0x04
#define MMC_DE_OUT_OF_RANGE             0x08
#define MMC_DE_CARD_LOCKED              0x10

/************* Data Response Token values ******************/
#define MMC_DR_MASK                     0x1F
#define MMC_DR_ACCEPT                   0x05
#define MMC_DR_REJECT_CRC               0x0B
#define MMC_DR_REJECT_WRITE_ERROR       0x0D

/*
***********************************************************
*               FFS-Port FUNCTION PROTOTYPES
***********************************************************
*/
U08       FFSPort_Init(void);
U08       FFSPort_MediaDetect(void);
FFS_SIZE *FFSPort_MediaInit(void);
U08       FFSPort_ReadSector(U32 sector, U08 OS_HUGE *buff);
U08       FFSPort_WriteSector(U32 sector, U08 OS_HUGE *buff);

/*********************************************************/

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -