/* * @file hv_drv_Flash.h * @brief Header file of misc module. * * @verbatim * ============================================================================== * ##### How to use ##### * ============================================================================== * (+) Use () * * @endverbatim * @author HiView SoC Software Team * @version 1.0.0 * @date 2023-05-11 */ #ifndef _HV_DRV_FLASH_H #define _HV_DRV_FLASH_H typedef enum _FlashAddressWidth { FLASH_ADDRESS_WIDTH_24 = 24, FLASH_ADDRESS_WIDTH_32 = 32, } FlashAddressWidth; typedef enum FlashRateMode { FLASH_STANDARD = 0, FLASH_DUAL, FLASH_QUAD, FLASH_4XIO, FLASH_QPI, } FlashRateMode; typedef enum _FlashMultiIOType { /*!< In Dual and quad mode, instruction and address send by one line*/ FLASH_MULTIIO_FAST_TYPE = 0, /*!< instruction and address send by 4 line */ FLASH_INSTRUCT_ADDR_4LINE, FLASH_ADDR_4LINE, } FlashMultiIOType; typedef enum _FlashWorkModeSel { FLASH_USE_POLLING = 0, FLASH_USE_INT, FLASH_USE_DMA, } FlashWorkModeSel; typedef enum _FlashDataWidth { /*! <The DataSize for transmition is 8bits */ FLASH_DATAWIDTH_8 = 8, /*!< The DataSize for transmition is 16bits */ FLASH_DATAWIDTH_16 = 16, /*!< The DataSize for transmition is 32bits */ FLASH_DATAWIDTH_32 = 32, } FlashDataWidth; typedef enum _FlashEraseType { FLASH_ERASE_SECTOR = 0, FLASH_ERASE_MULTI_SECTOR, FLASH_ERASE_CHIP } FlashEraseType; typedef enum _FlashTransRW { FLASH_WRITE = 0, FLASH_READ, } FlashTransRW; typedef enum _FlashCSSel { FLASH_CS_HARDWARE_SELF = 0, FLASH_CS_BY_GPIO, } FlashCSSel; typedef struct _FlashTxMem { UCHAR8 cmdAddr[20]; UCHAR8 txData[256]; } FlashTxMem; typedef Status (*Flash_CpltCallback)(FlashTransRW transType, void *arg); typedef struct _FlashInitParam { /*!< Specifies flash adress is 24 or 32 bits */ FlashAddressWidth AddrWidth; FlashWorkModeSel WorkModeSel; FlashRateMode RateMode; /*!< Specifies the SPI data size. */ FlashDataWidth DataSize; FlashMultiIOType TransType; Flash_CpltCallback FlashCpltCallback; FlashModel FlashModel; FlashCSSel CsSel; void* FlashCallback; }FlashInitParam; typedef struct _FlashSelf FlashSelf; /** @defgroup flash flash * flash rd/rw functions * @{ */ /** * @brief write pm data to flash. * @param uiAddress write offset at flash * @param pucData address write data to * @param uiDataSize write data size * @retval Status */ Status Hv_Drv_Flash_WritePMConfigData(UINT32 uiIndex, UINT32 uiData); /** * @brief write data to flash. * @param uiAddress write offset at flash. only support monitordata partition * @param pucData address write data to * @param uiDataSize write data size * @retval Status */ Status Hv_Drv_Flash_WriteMonitorData(UINT32 uiAddress, UCHAR8 *pucData, UINT32 uiDataSize); /** * @brief read data from flash in xip mode. * @param uiAddress read offset at flash * @param pucData address for read data * @param uiDataSize size to read data * @retval Status */ Status Hv_Drv_Flash_ReadXIP(UINT32 uiAddress, UCHAR8 *pucData, UINT32 uiDataSize); /** * @brief read data from flash. * @param uiAddress read offset at flash. only support monitordata partition * @param pucData address for read data * @param uiDataSize size to read data * @retval Status */ Status Hv_Drv_Flash_ReadMonitorData(UINT32 uiAddress, UCHAR8 *pucData, UINT32 uiDataSize); /** * @brief int flash interface. */ void Hv_Drv_Flash_SetQspiMode(FlashModel FlashModel, FlashRateMode RateMode, FlashWorkModeSel workMode); /** * @brief deint flash interface. */ void Hv_Drv_Flash_SetXipMode(void); /** * @brief config logo data and pq etc data partition flag */ void Hv_Drv_Flash_ConfigPartFlag(void); /** * @brief erase flash. * @param[in] uiWriteAddr Address of flash to do erase. * @param[in] uiLength Date length to be written. * @return None */ void Hv_Drv_Flash_OnlyErase(UINT32 uiReadAddr, UINT32 uiLength); /** * @brief Erase flash by a 64K Bytes(Multi Sector) length. Warning: Always erase 64K bytes, please be sure to keep your data safe. * @param[in] uiAddr Address of flash to do erase. * @return None */ void Hv_Drv_Flash_OnlyEraseMultiSector(UINT32 uiAddr); /** * @brief Write flash. * @param[in] uiWriteAddr Address of flash to do write. * @param[in] pucWriteBuf Date buffer to be written. * @param[in] uiLength Date length to be written. * @return Status */ Status Hv_Drv_Flash_OnlyWrite(UINT32 uiWriteAddr, UCHAR8 *pucWriteBuf, UINT32 uiLength); /** * @brief Write flash. * @param[in] uiReadAddr Address of flash to do read. * @param[in] pucReadBuf Buffer for saving read back data. * @param[in] uiLength Date length to be read. * @return None */ void Hv_Drv_Flash_OnlyRead(UINT32 uiReadAddr, UCHAR8* pucReadBuf, UINT32 uiLength); /** * @brief whether w/r is ongoing. * @return w/r state */ UCHAR8 Hv_Drv_Flash_InWritting(void); /** * @brief Flash chip erase. * @param[in] None. * @return None */ void Hv_Drv_Flash_EraseChip(void); /** @} */ #endif