1 /* 2 * Copyright (C) 2017-2019 Alibaba Group Holding Limited 3 */ 4 5 /****************************************************************************** 6 * @file drv_eflash.h 7 * @brief header file for eflash driver 8 * @version V1.0 9 * @date 02. June 2017 10 * @model eflash 11 ******************************************************************************/ 12 #ifndef _CSI_EFLASH_H_ 13 #define _CSI_EFLASH_H_ 14 15 16 #include <stdint.h> 17 #include <drv/common.h> 18 19 #ifdef __cplusplus 20 extern "C" { 21 #endif 22 23 /// definition for eflash handle. 24 typedef void *eflash_handle_t; 25 26 /** 27 \brief Flash information 28 */ 29 typedef struct { 30 uint32_t start; ///< Chip Start address 31 uint32_t end; ///< Chip End address (start+size-1) 32 uint32_t sector_count; ///< Number of sectors 33 uint32_t sector_size; ///< Uniform sector size in bytes 34 uint32_t page_size; ///< Optimal programming page size in bytes 35 uint32_t program_unit; ///< Smallest programmable unit in bytes 36 uint8_t erased_value; ///< Contents of erased memory (usually 0xFF) 37 } eflash_info_t; 38 39 /** 40 \brief Flash Status 41 */ 42 typedef struct { 43 uint32_t busy : 1; ///< Flash busy flag 44 uint32_t error : 1; ///< Read/Program/Erase error flag (cleared on start of next operation) 45 } eflash_status_t; 46 47 /****** EFLASH Event *****/ 48 typedef enum { 49 EFLASH_EVENT_READY = 0, ///< Flash Ready 50 EFLASH_EVENT_ERROR, ///< Read/Program/Erase Error 51 } eflash_event_e; 52 53 typedef void (*eflash_event_cb_t)(int32_t idx, eflash_event_e event); ///< Pointer to \ref eflash_event_cb_t : EFLASH Event call back. 54 55 /** 56 \brief Flash Driver Capabilities. 57 */ 58 typedef struct { 59 uint32_t event_ready : 1; ///< Signal Flash Ready event 60 uint32_t data_width : 2; ///< Data width: 0=8-bit, 1=16-bit, 2=32-bit 61 uint32_t erase_chip : 1; ///< Supports EraseChip operation 62 } eflash_capabilities_t; 63 64 // Function documentation 65 66 /** 67 \brief Initialize EFLASH Interface. 1. Initializes the resources needed for the EFLASH interface 2.registers event callback function 68 \param[in] idx device id 69 \param[in] cb_event event callback function \ref eflash_event_cb_t 70 \return pointer to eflash handle 71 */ 72 eflash_handle_t csi_eflash_initialize(int32_t idx, eflash_event_cb_t cb_event); 73 74 /** 75 \brief De-initialize EFLASH Interface. stops operation and releases the software resources used by the interface 76 \param[in] handle eflash handle to operate. 77 \return error code 78 */ 79 int32_t csi_eflash_uninitialize(eflash_handle_t handle); 80 81 /** 82 \brief Get driver capabilities. 83 \param[in] idx device id 84 \return \ref eflash_capabilities_t 85 */ 86 eflash_capabilities_t csi_eflash_get_capabilities(int32_t idx); 87 88 /** 89 \brief control eflash power. 90 \param[in] handle eflash handle to operate. 91 \param[in] state power state.\ref csi_power_stat_e. 92 \return error code 93 */ 94 int32_t csi_eflash_power_control(eflash_handle_t handle, csi_power_stat_e state); 95 96 /** 97 \brief Read data from Flash. 98 \param[in] handle eflash handle to operate. 99 \param[in] addr Data address. 100 \param[out] data Pointer to a buffer storing the data read from Flash. 101 \param[in] cnt Number of data items to read. 102 \return number of data items read or error code 103 */ 104 int32_t csi_eflash_read(eflash_handle_t handle, uint32_t addr, void *data, uint32_t cnt); 105 106 /** 107 \brief Program data to Flash. 108 \param[in] handle eflash handle to operate. 109 \param[in] addr Data address. 110 \param[in] data Pointer to a buffer containing the data to be programmed to Flash. 111 \param[in] cnt Number of data items to program. 112 \return number of data items programmed or error code 113 */ 114 int32_t csi_eflash_program(eflash_handle_t handle, uint32_t addr, const void *data, uint32_t cnt); 115 116 /** 117 \brief Erase Flash Sector. 118 \param[in] handle eflash handle to operate. 119 \param[in] addr Sector address 120 \return error code 121 */ 122 int32_t csi_eflash_erase_sector(eflash_handle_t handle, uint32_t addr); 123 124 /** 125 \brief Erase complete Flash. 126 \param[in] handle eflash handle to operate. 127 \return error code 128 */ 129 int32_t csi_eflash_erase_chip(eflash_handle_t handle); 130 131 /** 132 \brief Get Flash information. 133 \param[in] handle eflash handle to operate. 134 \return Pointer to Flash information \ref eflash_info_t 135 */ 136 eflash_info_t *csi_eflash_get_info(eflash_handle_t handle); 137 138 /** 139 \brief Get FLASH status. 140 \param[in] handle eflash handle to operate. 141 \return EFLASH status \ref eflash_status_t 142 */ 143 eflash_status_t csi_eflash_get_status(eflash_handle_t handle); 144 145 #ifdef __cplusplus 146 } 147 #endif 148 149 #endif /* _CSI_EFLASH_H_ */ 150