1
0

cmem7_flash.h 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. /**
  2. *****************************************************************************
  3. * @file cmem7_flash.h
  4. *
  5. * @brief CMEM7 flash controller source file
  6. *
  7. *
  8. * @version V1.0
  9. * @date 3. September 2013
  10. *
  11. * @note
  12. *
  13. *****************************************************************************
  14. * @attention
  15. *
  16. * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  17. * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  18. * TIME. AS A RESULT, CAPITAL-MICRO SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
  19. * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  20. * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  21. * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  22. *
  23. * <h2><center>&copy; COPYRIGHT 2013 Capital-micro </center></h2>
  24. *****************************************************************************
  25. */
  26. #ifndef __CMEM7_FLASH_H
  27. #define __CMEM7_FLASH_H
  28. #ifdef __cplusplus
  29. extern "C" {
  30. #endif
  31. #include "cmem7.h"
  32. #include "cmem7_conf.h"
  33. /** @defgroup FLASH_PROTECT_MODE
  34. * @{
  35. */
  36. #define FLASH_PROTECT_MODE_SW 0 /*!< The Status Register can be written to after a Write
  37. Enable command.(Default) */
  38. #define FLASH_PROTECT_MODE_HW 1 /*!< WP pin decides if the Status Register can be written
  39. WP#=0, the Status Register locked
  40. WP#=1, the Status Register is unlocked and can be written to
  41. after a Write Enable command */
  42. #define FLASH_PROTECT_MODE_POWERDOWN 2 /*!< Status Register is protected and can not be written to again
  43. until the next Power-Down, Power-Up cycle */
  44. #define FLASH_PROTECT_MODE_OTP 3 /*!< Status Register is permanently protected */
  45. #define IS_FLASH_PROTECT_MODE(MODE) (((MODE) == FLASH_PROTECT_MODE_SW) || \
  46. ((MODE) == FLASH_PROTECT_MODE_HW) || \
  47. ((MODE) == FLASH_PROTECT_MODE_POWERDOWN) || \
  48. ((MODE) == FLASH_PROTECT_MODE_OTP))
  49. /**
  50. * @}
  51. */
  52. /** @defgroup FLASH_PROTECT_REGION
  53. * @{
  54. */
  55. #define FLASH_PROTECT_REGION_NONE 0x00 /*!< no region is protected */
  56. #define FLASH_PROTECT_REGION_UP_64K 0x01 /*!< region(0F0000H-0FFFFFH) is protected */
  57. #define FLASH_PROTECT_REGION_UP_128K 0x02 /*!< region(0E0000H-0FFFFFH) is protected */
  58. #define FLASH_PROTECT_REGION_UP_256K 0x03 /*!< region(0C0000H-0FFFFFH) is protected */
  59. #define FLASH_PROTECT_REGION_UP_512K 0x04 /*!< region(080000H-0FFFFFH) is protected */
  60. #define FLASH_PROTECT_REGION_LOW_64K 0x09 /*!< region(000000H-00FFFFH) is protected */
  61. #define FLASH_PROTECT_REGION_LOW_128K 0x0A /*!< region(000000H-01FFFFH) is protected */
  62. #define FLASH_PROTECT_REGION_LOW_256K 0x0B /*!< region(000000H-03FFFFH) is protected */
  63. #define FLASH_PROTECT_REGION_LOW_512K 0x0C /*!< region(000000H-07FFFFH) is protected */
  64. #define FLASH_PROTECT_REGION_ALL 0x0D /*!< region(000000H-0FFFFFH) is protected */
  65. #define FLASH_PROTECT_REGION_UP_4K 0x11 /*!< region(0FF000H-0FFFFFH) is protected */
  66. #define FLASH_PROTECT_REGION_UP_8K 0x12 /*!< region(0FE000H-0FFFFFH) is protected */
  67. #define FLASH_PROTECT_REGION_UP_16K 0x13 /*!< region(0FC000H-0FFFFFH) is protected */
  68. #define FLASH_PROTECT_REGION_UP_32K 0x14 /*!< region(0F8000H-0FFFFFH) is protected */
  69. #define FLASH_PROTECT_REGION_LOW_4K 0x19 /*!< region(000000H-000FFFH) is protected */
  70. #define FLASH_PROTECT_REGION_LOW_8K 0x1A /*!< region(000000H-001FFFH) is protected */
  71. #define FLASH_PROTECT_REGION_LOW_16K 0x1B /*!< region(000000H-003FFFH) is protected */
  72. #define FLASH_PROTECT_REGION_LOW_32K 0x1C /*!< region(000000H-007FFFH) is protected */
  73. #define IS_FLASH_PROTECT_REGION(REGION) (((REGION) == FLASH_PROTECT_REGION_NONE) || \
  74. ((REGION) == FLASH_PROTECT_REGION_UP_64K) || \
  75. ((REGION) == FLASH_PROTECT_REGION_UP_128K) || \
  76. ((REGION) == FLASH_PROTECT_REGION_UP_256K) || \
  77. ((REGION) == FLASH_PROTECT_REGION_UP_512K) || \
  78. ((REGION) == FLASH_PROTECT_REGION_LOW_64K) || \
  79. ((REGION) == FLASH_PROTECT_REGION_LOW_128K) || \
  80. ((REGION) == FLASH_PROTECT_REGION_LOW_256K) || \
  81. ((REGION) == FLASH_PROTECT_REGION_LOW_512K) || \
  82. ((REGION) == FLASH_PROTECT_REGION_ALL) || \
  83. ((REGION) == FLASH_PROTECT_REGION_UP_4K) || \
  84. ((REGION) == FLASH_PROTECT_REGION_UP_8K) || \
  85. ((REGION) == FLASH_PROTECT_REGION_UP_16K) || \
  86. ((REGION) == FLASH_PROTECT_REGION_UP_32K) || \
  87. ((REGION) == FLASH_PROTECT_REGION_LOW_4K) || \
  88. ((REGION) == FLASH_PROTECT_REGION_LOW_8K) || \
  89. ((REGION) == FLASH_PROTECT_REGION_LOW_16K) || \
  90. ((REGION) == FLASH_PROTECT_REGION_LOW_32K))
  91. /**
  92. * @}
  93. */
  94. /** @defgroup FLASH_READ_MODE
  95. * @{
  96. */
  97. #define FLASH_READ_MODE_NORMAL 0 /*!< normal read, 1 bitwidth, highest freqency is 90MHz */
  98. #define FLASH_READ_MODE_FAST 1 /*!< fast read, 1 bitwidth, highest freqency is 120MHz */
  99. #define FLASH_READ_MODE_FAST_DUAL 2 /*!< fast read, 2 bitwidth, highest freqency is 120MHz */
  100. #define FLASH_READ_MODE_FAST_QUAD 3 /*!< fast read, 4 bitwidth, highest freqency is 90MHz */
  101. #define IS_FLASH_READ_MODE(MODE) (((MODE) == FLASH_READ_MODE_NORMAL) || \
  102. ((MODE) == FLASH_READ_MODE_FAST) || \
  103. ((MODE) == FLASH_READ_MODE_FAST_DUAL) || \
  104. ((MODE) == FLASH_READ_MODE_FAST_QUAD))
  105. /**
  106. * @}
  107. */
  108. /**
  109. * @brief UART initialization structure
  110. */
  111. typedef struct
  112. {
  113. uint8_t FLASH_ClockDividor; /*!< flash clock dividor, 2 in n times */
  114. uint8_t FLASH_ProtectMode; /*!< Status Register protection mode */
  115. uint8_t FLASH_ProtectRegion; /*!< flash protection region */
  116. BOOL FLASH_QuadEnable; /*!< if allows Quad operation */
  117. void (*FLASH_Wait)(void); /*!< When the former read or write operation is excuting,
  118. Flash has to call a callback to wait it finish.
  119. If null, Flash will wait forever until finish */
  120. } FLASH_InitTypeDef;
  121. /**
  122. * @brief flash initialization
  123. * @note This function should be called at first before any other interfaces.
  124. * Users should make sure that doesn't erase or write data in a
  125. * write-protected region.
  126. * @param[in] init A pointer to structure FLASH_InitTypeDef
  127. * @retval None
  128. */
  129. void FLASH_Init(FLASH_InitTypeDef* init);
  130. /**
  131. * @brief Get flash status
  132. * @param[out] ProtectMode flash protect mode, ref as @ref FLASH_PROTECT_MODE
  133. * @param[out] ProtectRegion flash protect region, ref as @ref FLASH_PROTECT_REGION
  134. * @param[out] QuadEnable quad speed mode enable bit
  135. * @retval None
  136. */
  137. void FLASH_GetStatus(uint8_t* ProtectMode, uint8_t* ProtectRegion, BOOL* QuadEnable);
  138. /**
  139. * @brief Erase a sector, which is 4K bytes large.
  140. * @param[in] addr Start address of a sector
  141. * @retval None
  142. */
  143. void FLASH_EraseSector(uint32_t addr);
  144. /**
  145. * @brief Erase a block, which is 32K bytes large.
  146. * @param[in] addr Start address of a block
  147. * @retval None
  148. */
  149. void FLASH_Erase32kBlock(uint32_t addr);
  150. /**
  151. * @brief Erase a block, which is 64K bytes large.
  152. * @param[in] addr Start address of a block
  153. * @retval None
  154. */
  155. void FLASH_Erase64kBlock(uint32_t addr);
  156. /**
  157. * @brief Erase all chip
  158. * @param None
  159. * @retval None
  160. */
  161. void FLASH_EraseChip(void);
  162. /**
  163. * @brief Enable flash power down mode or not
  164. * @param[in] enable The bit indicates if flash power down mode is enable or not
  165. * @retval None
  166. */
  167. void FLASH_EnableDeepPowerDown(BOOL enable);
  168. /**
  169. * @brief Read data from flash
  170. * @param[in] ReadMode Normal or fast read, ref as @ref FLASH_READ_MODE
  171. * @param[in] addr Start address to be read
  172. * @param[in] size Expected data size to be read
  173. * @param[out] data A user-allocated buffer to fetch data to be read
  174. * @retval None
  175. */
  176. void FLASH_Read(uint8_t ReadMode, uint32_t addr, uint16_t size, uint8_t* data);
  177. /**
  178. * @brief Write data to flash
  179. * @param[in] addr Start address to be read
  180. * @param[in] size Expected data size to be read
  181. * @param[out] data A pointer to the data to be written
  182. * @retval None
  183. */
  184. void FLASH_Write(uint32_t addr, uint16_t size, uint8_t* data);
  185. void flash_WaitInWritting(void) ;
  186. void flash_WaitReadFifoNotEmpty(void);
  187. uint16_t flash_ReadFifo(uint16_t size, uint8_t* data) ;
  188. #ifdef __cplusplus
  189. }
  190. #endif
  191. #endif /* __CMEM7_FLASH_H */