mirror of
https://gitee.com/Lyon1998/pikapython.git
synced 2025-01-22 17:12:55 +08:00
356 lines
8.2 KiB
C
356 lines
8.2 KiB
C
|
/*!
|
||
|
* @file apm32e10x_emmc.h
|
||
|
*
|
||
|
* @brief This file contains all the functions prototypes for the EMMC firmware library
|
||
|
*
|
||
|
* @version V1.0.0
|
||
|
*
|
||
|
* @date 2021-07-26
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
#ifndef __APM32E10X_EMMC_H
|
||
|
#define __APM32E10X_EMMC_H
|
||
|
|
||
|
#include "apm32e10x.h"
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
/** @addtogroup Peripherals_Library Standard Peripheral Library
|
||
|
@{
|
||
|
*/
|
||
|
|
||
|
/** @addtogroup EMMC_Driver EMMC Driver
|
||
|
@{
|
||
|
*/
|
||
|
|
||
|
/** @addtogroup EMMC_Enumerations Enumerations
|
||
|
@{
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* @brief EMMC NORSRAM_Bank
|
||
|
*/
|
||
|
typedef enum
|
||
|
{
|
||
|
EMMC_BANK1_NORSRAM_1 = 0x00000000,
|
||
|
EMMC_BANK1_NORSRAM_2 = 0x00000002,
|
||
|
EMMC_BANK1_NORSRAM_3 = 0x00000004,
|
||
|
EMMC_BANK1_NORSRAM_4 = 0x00000006
|
||
|
} EMMC_BANK1_NORSRAM_T;
|
||
|
|
||
|
/**
|
||
|
* @brief EMMC NAND and PC Card Bank
|
||
|
*/
|
||
|
typedef enum
|
||
|
{
|
||
|
EMMC_BANK2_NAND = 0x00000010,
|
||
|
EMMC_BANK3_NAND = 0x00000100,
|
||
|
EMMC_BANK4_PCCARD = 0x00001000
|
||
|
} EMMC_BANK_NAND_T;
|
||
|
|
||
|
/**
|
||
|
* @brief EMMC_Data_Address_Bus_Multiplexing
|
||
|
*/
|
||
|
typedef enum
|
||
|
{
|
||
|
EMMC_DATA_ADDRESS_MUX_DISABLE = 0x00000000,
|
||
|
EMMC_DATA_ADDRESS_MUX_ENABLE = 0x00000002
|
||
|
} EMMC_DATA_ADDRESS_MUX_T;
|
||
|
|
||
|
/**
|
||
|
* @brief EMMC_Memory_Type
|
||
|
*/
|
||
|
typedef enum
|
||
|
{
|
||
|
EMMC_MEMORY_TYPE_SRAM = 0x00000000,
|
||
|
EMMC_MEMORY_TYPE_PSRAM = 0x00000004,
|
||
|
EMMC_MEMORY_TYPE_NOR = 0x00000008
|
||
|
} EMMC_MEMORY_TYPE_T;
|
||
|
|
||
|
/**
|
||
|
* @brief EMMC_Data_Width
|
||
|
*/
|
||
|
typedef enum
|
||
|
{
|
||
|
EMMC_MEMORY_DATA_WIDTH_8BIT = 0x00000000,
|
||
|
EMMC_MEMORY_DATA_WIDTH_16BIT = 0x00000010
|
||
|
} EMMC_MEMORY_DATA_WIDTH_T;
|
||
|
|
||
|
/**
|
||
|
* @brief EMMC_Burst_Access_Mode
|
||
|
*/
|
||
|
typedef enum
|
||
|
{
|
||
|
EMMC_BURST_ACCESS_MODE_DISABLE = 0x00000000,
|
||
|
EMMC_BURST_ACCESS_MODE_ENABLE = 0x00000100
|
||
|
} EMMC_BURST_ACCESS_MODE_T;
|
||
|
|
||
|
/**
|
||
|
* @brief EMMC_AsynchronousWait
|
||
|
*/
|
||
|
typedef enum
|
||
|
{
|
||
|
EMMC_ASYNCHRONOUS_WAIT_DISABLE = 0x00000000,
|
||
|
EMMC_ASYNCHRONOUS_WAIT_ENABLE = 0x00008000
|
||
|
} EMMC_ASYNCHRONOUS_WAIT_T;
|
||
|
|
||
|
/**
|
||
|
* @brief EMMC_Wait_Signal_Polarity
|
||
|
*/
|
||
|
typedef enum
|
||
|
{
|
||
|
EMMC_WAIT_SIGNAL_POLARITY_LOW = 0x00000000,
|
||
|
EMMC_WAIT_SIGNAL_POLARITY_HIGH = 0x00000200
|
||
|
} EMMC_WAIT_SIGNAL_POLARITY_T;
|
||
|
|
||
|
/**
|
||
|
* @brief EMMC_Wrap_Mode
|
||
|
*/
|
||
|
typedef enum
|
||
|
{
|
||
|
EMMC_WRAP_MODE_DISABLE = 0x00000000,
|
||
|
EMMC_WRAP_MODE_ENABLE = 0x00000400
|
||
|
} EMMC_WRAP_MODE_T;
|
||
|
|
||
|
/**
|
||
|
* @brief EMMC_Wait_Timing
|
||
|
*/
|
||
|
typedef enum
|
||
|
{
|
||
|
EMMC_WAIT_SIGNAL_ACTIVE_BEFORE_WAIT = 0x00000000,
|
||
|
EMMC_WAIT_SIGNAL_ACTIVE_DURING_WAIT = 0x00000800
|
||
|
} EMMC_WAIT_SIGNAL_ACTIVE_T;
|
||
|
|
||
|
/**
|
||
|
* @brief EMMC_Write_Operation
|
||
|
*/
|
||
|
typedef enum
|
||
|
{
|
||
|
EMMC_WRITE_OPERATION_DISABLE = 0x00000000,
|
||
|
EMMC_WRITE_OPERATION_ENABLE = 0x00001000
|
||
|
} EMMC_WRITE_OPERATION_T;
|
||
|
|
||
|
/**
|
||
|
* @brief EMMC_Wait_Signal
|
||
|
*/
|
||
|
typedef enum
|
||
|
{
|
||
|
EMMC_WAITE_SIGNAL_DISABLE = 0x00000000,
|
||
|
EMMC_WAITE_SIGNAL_ENABLE = 0x00002000
|
||
|
} EMMC_WAITE_SIGNAL_T;
|
||
|
|
||
|
/**
|
||
|
* @brief EMMC_Extended_Mode
|
||
|
*/
|
||
|
typedef enum
|
||
|
{
|
||
|
EMMC_EXTENDEN_MODE_DISABLE = 0x00000000,
|
||
|
EMMC_EXTENDEN_MODE_ENABLE = 0x00004000
|
||
|
} EMMC_EXTENDEN_MODE_T;
|
||
|
|
||
|
/**
|
||
|
* @brief EMMC_Write_Burst
|
||
|
*/
|
||
|
typedef enum
|
||
|
{
|
||
|
EMMC_WRITE_BURST_DISABLE = 0x00000000,
|
||
|
EMMC_WRITE_BURST_ENABLE = 0x00080000
|
||
|
} EMMC_WRITE_BURST_T;
|
||
|
|
||
|
/**
|
||
|
* @brief EMMC_WAIT_FEATURE
|
||
|
*/
|
||
|
typedef enum
|
||
|
{
|
||
|
EMMC_WAIT_FEATURE_DISABLE = 0x00000000,
|
||
|
EMMC_WAIT_FEATURE_ENABLE = 0x00000002
|
||
|
} EMMC_WAIT_FEATURE_T;
|
||
|
|
||
|
/**
|
||
|
* @brief EMMC_ECC
|
||
|
*/
|
||
|
typedef enum
|
||
|
{
|
||
|
EMMC_ECC_DISABLE = 0x00000000,
|
||
|
EMMC_ECC_ENABLE = 0x00000040
|
||
|
} EMMC_ECC_T;
|
||
|
|
||
|
/**
|
||
|
* @brief EMMC_ECC_Page_Size
|
||
|
*/
|
||
|
typedef enum
|
||
|
{
|
||
|
EMMC_ECC_PAGE_SIZE_BYTE_256 = 0x00000000,
|
||
|
EMMC_ECC_PAGE_SIZE_BYTE_512 = 0x00020000,
|
||
|
EMMC_ECC_PAGE_SIZE_BYTE_1024 = 0x00040000,
|
||
|
EMMC_ECC_PAGE_SIZE_BYTE_2048 = 0x00060000,
|
||
|
EMMC_ECC_PAGE_SIZE_BYTE_4096 = 0x00080000,
|
||
|
EMMC_ECC_PAGE_SIZE_BYTE_8192 = 0x000A0000
|
||
|
} EMMC_ECC_PAGE_SIZE_BYTE_T;
|
||
|
|
||
|
/**
|
||
|
* @brief EMMC_Access_Mode
|
||
|
*/
|
||
|
typedef enum
|
||
|
{
|
||
|
EMMC_ACCESS_MODE_A = 0x00000000,
|
||
|
EMMC_ACCESS_MODE_B = 0x10000000,
|
||
|
EMMC_ACCESS_MODE_C = 0x20000000,
|
||
|
EMMC_ACCESS_MODE_D = 0x30000000
|
||
|
} EMMC_ACCESS_MODE_T;
|
||
|
|
||
|
/**
|
||
|
* @brief EMMC_Interrupt_sources
|
||
|
*/
|
||
|
typedef enum
|
||
|
{
|
||
|
EMMC_INT_EDGE_RISING = 0x00000008,
|
||
|
EMMC_INT_LEVEL_HIGH = 0x00000010,
|
||
|
EMMC_INT_EDGE_FALLING = 0x00000020
|
||
|
} EMMC_INT_T;
|
||
|
|
||
|
/**
|
||
|
* @brief EMMC_Flags
|
||
|
*/
|
||
|
typedef enum
|
||
|
{
|
||
|
EMMC_FLAG_EDGE_RISING = 0x00000001,
|
||
|
EMMC_FLAG_LEVEL_HIGH = 0x00000002,
|
||
|
EMMC_FLAG_EDGE_FALLING = 0x00000004,
|
||
|
EMMC_FLAG_FIFO_EMPTY = 0x00000040
|
||
|
} EMMC_FLAG_T;
|
||
|
|
||
|
/**@} end of group EMMC_Enumerations*/
|
||
|
|
||
|
|
||
|
/** @addtogroup EMMC_Structure Data Structure
|
||
|
@{
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* @brief Timing parameters for NOR/SRAM Banks
|
||
|
*/
|
||
|
typedef struct
|
||
|
{
|
||
|
uint32_t addressSetupTime;
|
||
|
uint32_t addressHodeTime;
|
||
|
uint32_t dataSetupTime;
|
||
|
uint32_t busTurnaroundTime;
|
||
|
uint32_t clockDivision;
|
||
|
uint32_t dataLatency;
|
||
|
EMMC_ACCESS_MODE_T accessMode;
|
||
|
} EMMC_NORSRAMTimingConfig_T;
|
||
|
|
||
|
/**
|
||
|
* @brief EMMC NOR/SRAM Config structure
|
||
|
*/
|
||
|
typedef struct
|
||
|
{
|
||
|
EMMC_BANK1_NORSRAM_T bank;
|
||
|
EMMC_DATA_ADDRESS_MUX_T dataAddressMux;
|
||
|
EMMC_MEMORY_TYPE_T memoryType;
|
||
|
EMMC_MEMORY_DATA_WIDTH_T memoryDataWidth;
|
||
|
EMMC_BURST_ACCESS_MODE_T burstAcceesMode;
|
||
|
EMMC_ASYNCHRONOUS_WAIT_T asynchronousWait;
|
||
|
EMMC_WAIT_SIGNAL_POLARITY_T waitSignalPolarity;
|
||
|
EMMC_WRAP_MODE_T wrapMode;
|
||
|
EMMC_WAIT_SIGNAL_ACTIVE_T waitSignalActive;
|
||
|
EMMC_WRITE_OPERATION_T writeOperation;
|
||
|
EMMC_WAITE_SIGNAL_T waiteSignal;
|
||
|
EMMC_EXTENDEN_MODE_T extendedMode;
|
||
|
EMMC_WRITE_BURST_T writeBurst;
|
||
|
EMMC_NORSRAMTimingConfig_T* readWriteTimingStruct;
|
||
|
EMMC_NORSRAMTimingConfig_T* writeTimingStruct;
|
||
|
} EMMC_NORSRAMConfig_T;
|
||
|
|
||
|
/**
|
||
|
* @brief Timing parameters for NAND and PCCARD Banks
|
||
|
*/
|
||
|
typedef struct
|
||
|
{
|
||
|
uint32_t setupTime;
|
||
|
uint32_t waitSetupTime;
|
||
|
uint32_t holdSetupTime;
|
||
|
uint32_t HiZSetupTime;
|
||
|
} EMMC_NAND_PCCARDTimingConfig_T;
|
||
|
|
||
|
/**
|
||
|
* @brief EMMC NAND Config structure
|
||
|
*/
|
||
|
typedef struct
|
||
|
{
|
||
|
EMMC_BANK_NAND_T bank;
|
||
|
EMMC_WAIT_FEATURE_T waitFeature;
|
||
|
EMMC_MEMORY_DATA_WIDTH_T memoryDataWidth;
|
||
|
EMMC_ECC_T ECC;
|
||
|
EMMC_ECC_PAGE_SIZE_BYTE_T ECCPageSize;
|
||
|
uint32_t TCLRSetupTime;
|
||
|
uint32_t TARSetupTime;
|
||
|
EMMC_NAND_PCCARDTimingConfig_T* commonSpaceTimingStruct;
|
||
|
EMMC_NAND_PCCARDTimingConfig_T* attributeSpaceTimingStruct;
|
||
|
} EMMC_NANDConfig_T;
|
||
|
|
||
|
/**
|
||
|
* @brief EMMC PCCARD Config structure
|
||
|
*/
|
||
|
typedef struct
|
||
|
{
|
||
|
EMMC_WAIT_FEATURE_T waitFeature;
|
||
|
uint32_t TCLRSetupTime;
|
||
|
uint32_t TARSetupTime;
|
||
|
EMMC_NAND_PCCARDTimingConfig_T* commonSpaceTimingStruct;
|
||
|
EMMC_NAND_PCCARDTimingConfig_T* attributeSpaceTimingStruct;
|
||
|
EMMC_NAND_PCCARDTimingConfig_T* IOSpaceTimingStruct;
|
||
|
} EMMC_PCCARDConfig_T;
|
||
|
|
||
|
/**@} end of group EMMC_Structure*/
|
||
|
|
||
|
/** @addtogroup EMMC_Fuctions Fuctions
|
||
|
@{
|
||
|
*/
|
||
|
|
||
|
/** EMMC reset */
|
||
|
void EMMC_ResetNORSRAM(EMMC_BANK1_NORSRAM_T bank);
|
||
|
void EMMC_ResetNAND(EMMC_BANK_NAND_T bank);
|
||
|
void EMMC_ResetPCCard(void);
|
||
|
|
||
|
/** EMMC Configuration */
|
||
|
void EMMC_ConfigNORSRAM(EMMC_NORSRAMConfig_T* emmcNORSRAMConfig);
|
||
|
void EMMC_ConfigNAND(EMMC_NANDConfig_T* emmcNANDConfig);
|
||
|
void EMMC_ConfigPCCard(EMMC_PCCARDConfig_T* emmcPCCardConfig);
|
||
|
void EMMC_ConfigNORSRAMStructInit(EMMC_NORSRAMConfig_T* emmcNORSRAMConfig);
|
||
|
void EMMC_ConfigNANDStructInit(EMMC_NANDConfig_T* emmcNANDConfig);
|
||
|
void EMMC_ConfigPCCardStructInit(EMMC_PCCARDConfig_T* emmcPCCardConfig);
|
||
|
|
||
|
/** EMMC bank control */
|
||
|
void EMMC_EnableNORSRAM(EMMC_BANK1_NORSRAM_T bank);
|
||
|
void EMMC_DisableNORSRAM(EMMC_BANK1_NORSRAM_T bank);
|
||
|
void EMMC_EnableNAND(EMMC_BANK_NAND_T bank);
|
||
|
void EMMC_DisableNAND(EMMC_BANK_NAND_T bank);
|
||
|
void EMMC_EnablePCCARD(void);
|
||
|
void EMMC_DisablePCCARD(void);
|
||
|
void EMMC_EnableNANDECC(EMMC_BANK_NAND_T bank);
|
||
|
void EMMC_DisableNANDECC(EMMC_BANK_NAND_T bank);
|
||
|
uint32_t EMMC_ReadECC(EMMC_BANK_NAND_T bank);
|
||
|
|
||
|
/** Interrupt and flag */
|
||
|
void EMMC_EnableInterrupt(EMMC_BANK_NAND_T bank, uint32_t interrupt);
|
||
|
void EMMC_DisableInterrupt(EMMC_BANK_NAND_T bank, uint32_t interrupt);
|
||
|
uint8_t EMMC_ReadStatusFlag(EMMC_BANK_NAND_T bank, EMMC_FLAG_T flag);
|
||
|
void EMMC_ClearStatusFlag(EMMC_BANK_NAND_T bank, uint32_t flag);
|
||
|
uint8_t EMMC_ReadIntFlag(EMMC_BANK_NAND_T bank, EMMC_INT_T flag);
|
||
|
void EMMC_ClearIntFlag(EMMC_BANK_NAND_T bank, uint32_t flag);
|
||
|
|
||
|
/**@} end of group EMMC_Fuctions*/
|
||
|
/**@} end of group EMMC_Driver */
|
||
|
/**@} end of group Peripherals_Library*/
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#endif /* __APM32E10X_EMMC_H */
|