Driver_Flash.h 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. /*
  2. * Copyright (c) 2013-2016 ARM Limited. All rights reserved.
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Licensed under the Apache License, Version 2.0 (the License); you may
  7. * not use this file except in compliance with the License.
  8. * You may obtain a copy of the License at
  9. *
  10. * http://www.apache.org/licenses/LICENSE-2.0
  11. *
  12. * Unless required by applicable law or agreed to in writing, software
  13. * distributed under the License is distributed on an AS IS BASIS, WITHOUT
  14. * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15. * See the License for the specific language governing permissions and
  16. * limitations under the License.
  17. */
  18. /* History:
  19. * Version 2.00
  20. * Renamed driver NOR -> Flash (more generic)
  21. * Non-blocking operation
  22. * Added Events, Status and Capabilities
  23. * Linked Flash information (GetInfo)
  24. * Version 1.11
  25. * Changed prefix ARM_DRV -> ARM_DRIVER
  26. * Version 1.10
  27. * Namespace prefix ARM_ added
  28. * Version 1.00
  29. * Initial release
  30. */
  31. #ifndef __DRIVER_FLASH_H
  32. #define __DRIVER_FLASH_H
  33. #include "Driver_Common.h"
  34. #define ARM_FLASH_API_VERSION ARM_DRIVER_VERSION_MAJOR_MINOR(2,00) /* API version */
  35. #define _ARM_Driver_Flash_(n) Driver_Flash##n
  36. #define ARM_Driver_Flash_(n) _ARM_Driver_Flash_(n)
  37. #define ARM_FLASH_SECTOR_INFO(addr,size) { (addr), (addr)+(size)-1 }
  38. /**
  39. \brief Flash Sector information
  40. */
  41. typedef struct _ARM_FLASH_SECTOR {
  42. uint32_t start; ///< Sector Start address
  43. uint32_t end; ///< Sector End address (start+size-1)
  44. } const ARM_FLASH_SECTOR;
  45. /**
  46. \brief Flash information
  47. */
  48. typedef struct _ARM_FLASH_INFO {
  49. ARM_FLASH_SECTOR *sector_info; ///< Sector layout information (NULL=Uniform sectors)
  50. uint32_t sector_count; ///< Number of sectors
  51. uint32_t sector_size; ///< Uniform sector size in bytes (0=sector_info used)
  52. uint32_t page_size; ///< Optimal programming page size in bytes
  53. uint32_t program_unit; ///< Smallest programmable unit in bytes
  54. uint8_t erased_value; ///< Contents of erased memory (usually 0xFF)
  55. } const ARM_FLASH_INFO;
  56. /**
  57. \brief Flash Status
  58. */
  59. typedef struct _ARM_FLASH_STATUS {
  60. uint32_t busy : 1; ///< Flash busy flag
  61. uint32_t error : 1; ///< Read/Program/Erase error flag (cleared on start of next operation)
  62. } ARM_FLASH_STATUS;
  63. /****** Flash Event *****/
  64. #define ARM_FLASH_EVENT_READY (1UL << 0) ///< Flash Ready
  65. #define ARM_FLASH_EVENT_ERROR (1UL << 1) ///< Read/Program/Erase Error
  66. // Function documentation
  67. /**
  68. \fn ARM_DRIVER_VERSION ARM_Flash_GetVersion (void)
  69. \brief Get driver version.
  70. \return \ref ARM_DRIVER_VERSION
  71. */
  72. /**
  73. \fn ARM_FLASH_CAPABILITIES ARM_Flash_GetCapabilities (void)
  74. \brief Get driver capabilities.
  75. \return \ref ARM_FLASH_CAPABILITIES
  76. */
  77. /**
  78. \fn int32_t ARM_Flash_Initialize (ARM_Flash_SignalEvent_t cb_event)
  79. \brief Initialize the Flash Interface.
  80. \param[in] cb_event Pointer to \ref ARM_Flash_SignalEvent
  81. \return \ref execution_status
  82. */
  83. /**
  84. \fn int32_t ARM_Flash_Uninitialize (void)
  85. \brief De-initialize the Flash Interface.
  86. \return \ref execution_status
  87. */
  88. /**
  89. \fn int32_t ARM_Flash_PowerControl (ARM_POWER_STATE state)
  90. \brief Control the Flash interface power.
  91. \param[in] state Power state
  92. \return \ref execution_status
  93. */
  94. /**
  95. \fn int32_t ARM_Flash_ReadData (uint32_t addr, void *data, uint32_t cnt)
  96. \brief Read data from Flash.
  97. \param[in] addr Data address.
  98. \param[out] data Pointer to a buffer storing the data read from Flash.
  99. \param[in] cnt Number of data items to read.
  100. \return number of data items read or \ref execution_status
  101. */
  102. /**
  103. \fn int32_t ARM_Flash_ProgramData (uint32_t addr, const void *data, uint32_t cnt)
  104. \brief Program data to Flash.
  105. \param[in] addr Data address.
  106. \param[in] data Pointer to a buffer containing the data to be programmed to Flash.
  107. \param[in] cnt Number of data items to program.
  108. \return number of data items programmed or \ref execution_status
  109. */
  110. /**
  111. \fn int32_t ARM_Flash_EraseSector (uint32_t addr)
  112. \brief Erase Flash Sector.
  113. \param[in] addr Sector address
  114. \return \ref execution_status
  115. */
  116. /**
  117. \fn int32_t ARM_Flash_EraseChip (void)
  118. \brief Erase complete Flash.
  119. Optional function for faster full chip erase.
  120. \return \ref execution_status
  121. */
  122. /**
  123. \fn ARM_FLASH_STATUS ARM_Flash_GetStatus (void)
  124. \brief Get Flash status.
  125. \return Flash status \ref ARM_FLASH_STATUS
  126. */
  127. /**
  128. \fn ARM_FLASH_INFO * ARM_Flash_GetInfo (void)
  129. \brief Get Flash information.
  130. \return Pointer to Flash information \ref ARM_FLASH_INFO
  131. */
  132. /**
  133. \fn void ARM_Flash_SignalEvent (uint32_t event)
  134. \brief Signal Flash event.
  135. \param[in] event Event notification mask
  136. \return none
  137. */
  138. typedef void (*ARM_Flash_SignalEvent_t) (uint32_t event); ///< Pointer to \ref ARM_Flash_SignalEvent : Signal Flash Event.
  139. /**
  140. \brief Flash Driver Capabilities.
  141. */
  142. typedef struct _ARM_FLASH_CAPABILITIES {
  143. uint32_t event_ready : 1; ///< Signal Flash Ready event
  144. uint32_t data_width : 2; ///< Data width: 0=8-bit, 1=16-bit, 2=32-bit
  145. uint32_t erase_chip : 1; ///< Supports EraseChip operation
  146. } ARM_FLASH_CAPABILITIES;
  147. /**
  148. \brief Access structure of the Flash Driver
  149. */
  150. typedef struct _ARM_DRIVER_FLASH {
  151. ARM_DRIVER_VERSION (*GetVersion) (void); ///< Pointer to \ref ARM_Flash_GetVersion : Get driver version.
  152. ARM_FLASH_CAPABILITIES (*GetCapabilities)(void); ///< Pointer to \ref ARM_Flash_GetCapabilities : Get driver capabilities.
  153. int32_t (*Initialize) (ARM_Flash_SignalEvent_t cb_event); ///< Pointer to \ref ARM_Flash_Initialize : Initialize Flash Interface.
  154. int32_t (*Uninitialize) (void); ///< Pointer to \ref ARM_Flash_Uninitialize : De-initialize Flash Interface.
  155. int32_t (*PowerControl) (ARM_POWER_STATE state); ///< Pointer to \ref ARM_Flash_PowerControl : Control Flash Interface Power.
  156. int32_t (*ReadData) (uint32_t addr, void *data, uint32_t cnt); ///< Pointer to \ref ARM_Flash_ReadData : Read data from Flash.
  157. int32_t (*ProgramData) (uint32_t addr, const void *data, uint32_t cnt); ///< Pointer to \ref ARM_Flash_ProgramData : Program data to Flash.
  158. int32_t (*EraseSector) (uint32_t addr); ///< Pointer to \ref ARM_Flash_EraseSector : Erase Flash Sector.
  159. int32_t (*EraseChip) (void); ///< Pointer to \ref ARM_Flash_EraseChip : Erase complete Flash.
  160. ARM_FLASH_STATUS (*GetStatus) (void); ///< Pointer to \ref ARM_Flash_GetStatus : Get Flash status.
  161. ARM_FLASH_INFO * (*GetInfo) (void); ///< Pointer to \ref ARM_Flash_GetInfo : Get Flash information.
  162. } const ARM_DRIVER_FLASH;
  163. #endif /* __DRIVER_FLASH_H */