]> begriffs open source - cmsis/blob - CMSIS/Driver/Include/Driver_Flash.h
End-of-line normalization
[cmsis] / CMSIS / Driver / Include / Driver_Flash.h
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
19 /* History:
20  *  Version 2.00
21  *    Renamed driver NOR -> Flash (more generic)
22  *    Non-blocking operation
23  *    Added Events, Status and Capabilities
24  *    Linked Flash information (GetInfo)
25  *  Version 1.11
26  *    Changed prefix ARM_DRV -> ARM_DRIVER
27  *  Version 1.10
28  *    Namespace prefix ARM_ added
29  *  Version 1.00
30  *    Initial release
31  */
32
33 #ifndef __DRIVER_FLASH_H
34 #define __DRIVER_FLASH_H
35
36 #include "Driver_Common.h"
37
38 #define ARM_FLASH_API_VERSION ARM_DRIVER_VERSION_MAJOR_MINOR(2,00)  /* API version */
39
40
41 #define _ARM_Driver_Flash_(n)      Driver_Flash##n
42 #define  ARM_Driver_Flash_(n) _ARM_Driver_Flash_(n)
43
44
45 #define ARM_FLASH_SECTOR_INFO(addr,size) { (addr), (addr)+(size)-1 }
46
47 /**
48 \brief Flash Sector information
49 */
50 typedef struct _ARM_FLASH_SECTOR {
51   uint32_t start;                       ///< Sector Start address
52   uint32_t end;                         ///< Sector End address (start+size-1)
53 } const ARM_FLASH_SECTOR;
54
55 /**
56 \brief Flash information
57 */
58 typedef struct _ARM_FLASH_INFO {
59   ARM_FLASH_SECTOR *sector_info;        ///< Sector layout information (NULL=Uniform sectors)
60   uint32_t          sector_count;       ///< Number of sectors
61   uint32_t          sector_size;        ///< Uniform sector size in bytes (0=sector_info used) 
62   uint32_t          page_size;          ///< Optimal programming page size in bytes
63   uint32_t          program_unit;       ///< Smallest programmable unit in bytes
64   uint8_t           erased_value;       ///< Contents of erased memory (usually 0xFF)
65 } const ARM_FLASH_INFO;
66
67
68 /**
69 \brief Flash Status
70 */
71 typedef struct _ARM_FLASH_STATUS {
72   uint32_t busy  : 1;                   ///< Flash busy flag
73   uint32_t error : 1;                   ///< Read/Program/Erase error flag (cleared on start of next operation)
74 } ARM_FLASH_STATUS;
75
76
77 /****** Flash Event *****/
78 #define ARM_FLASH_EVENT_READY           (1UL << 0)  ///< Flash Ready
79 #define ARM_FLASH_EVENT_ERROR           (1UL << 1)  ///< Read/Program/Erase Error
80
81
82 // Function documentation
83 /**
84   \fn          ARM_DRIVER_VERSION ARM_Flash_GetVersion (void)
85   \brief       Get driver version.
86   \return      \ref ARM_DRIVER_VERSION
87 */
88 /**
89   \fn          ARM_FLASH_CAPABILITIES ARM_Flash_GetCapabilities (void)
90   \brief       Get driver capabilities.
91   \return      \ref ARM_FLASH_CAPABILITIES
92 */
93 /**
94   \fn          int32_t ARM_Flash_Initialize (ARM_Flash_SignalEvent_t cb_event)
95   \brief       Initialize the Flash Interface.
96   \param[in]   cb_event  Pointer to \ref ARM_Flash_SignalEvent
97   \return      \ref execution_status
98 */
99 /**
100   \fn          int32_t ARM_Flash_Uninitialize (void)
101   \brief       De-initialize the Flash Interface.
102   \return      \ref execution_status
103 */
104 /**
105   \fn          int32_t ARM_Flash_PowerControl (ARM_POWER_STATE state)
106   \brief       Control the Flash interface power.
107   \param[in]   state  Power state
108   \return      \ref execution_status
109 */
110 /**
111   \fn          int32_t ARM_Flash_ReadData (uint32_t addr, void *data, uint32_t cnt)
112   \brief       Read data from Flash.
113   \param[in]   addr  Data address.
114   \param[out]  data  Pointer to a buffer storing the data read from Flash.
115   \param[in]   cnt   Number of data items to read.
116   \return      number of data items read or \ref execution_status
117 */
118 /**
119   \fn          int32_t ARM_Flash_ProgramData (uint32_t addr, const void *data, uint32_t cnt)
120   \brief       Program data to Flash.
121   \param[in]   addr  Data address.
122   \param[in]   data  Pointer to a buffer containing the data to be programmed to Flash.
123   \param[in]   cnt   Number of data items to program.
124   \return      number of data items programmed or \ref execution_status
125 */
126 /**
127   \fn          int32_t ARM_Flash_EraseSector (uint32_t addr)
128   \brief       Erase Flash Sector.
129   \param[in]   addr  Sector address
130   \return      \ref execution_status
131 */
132 /**
133   \fn          int32_t ARM_Flash_EraseChip (void)
134   \brief       Erase complete Flash.
135                Optional function for faster full chip erase.
136   \return      \ref execution_status
137 */
138 /**
139   \fn          ARM_FLASH_STATUS ARM_Flash_GetStatus (void)
140   \brief       Get Flash status.
141   \return      Flash status \ref ARM_FLASH_STATUS
142 */
143 /**
144   \fn          ARM_FLASH_INFO * ARM_Flash_GetInfo (void)
145   \brief       Get Flash information.
146   \return      Pointer to Flash information \ref ARM_FLASH_INFO
147 */
148
149 /**
150   \fn          void ARM_Flash_SignalEvent (uint32_t event)
151   \brief       Signal Flash event.
152   \param[in]   event  Event notification mask
153   \return      none
154 */
155
156 typedef void (*ARM_Flash_SignalEvent_t) (uint32_t event);    ///< Pointer to \ref ARM_Flash_SignalEvent : Signal Flash Event.
157
158
159 /**
160 \brief Flash Driver Capabilities.
161 */
162 typedef struct _ARM_FLASH_CAPABILITIES {
163   uint32_t event_ready  : 1;            ///< Signal Flash Ready event
164   uint32_t data_width   : 2;            ///< Data width: 0=8-bit, 1=16-bit, 2=32-bit
165   uint32_t erase_chip   : 1;            ///< Supports EraseChip operation
166 } ARM_FLASH_CAPABILITIES;
167
168
169 /**
170 \brief Access structure of the Flash Driver
171 */
172 typedef struct _ARM_DRIVER_FLASH {
173   ARM_DRIVER_VERSION     (*GetVersion)     (void);                                          ///< Pointer to \ref ARM_Flash_GetVersion : Get driver version.
174   ARM_FLASH_CAPABILITIES (*GetCapabilities)(void);                                          ///< Pointer to \ref ARM_Flash_GetCapabilities : Get driver capabilities.
175   int32_t                (*Initialize)     (ARM_Flash_SignalEvent_t cb_event);              ///< Pointer to \ref ARM_Flash_Initialize : Initialize Flash Interface.
176   int32_t                (*Uninitialize)   (void);                                          ///< Pointer to \ref ARM_Flash_Uninitialize : De-initialize Flash Interface.
177   int32_t                (*PowerControl)   (ARM_POWER_STATE state);                         ///< Pointer to \ref ARM_Flash_PowerControl : Control Flash Interface Power.
178   int32_t                (*ReadData)       (uint32_t addr,       void *data, uint32_t cnt); ///< Pointer to \ref ARM_Flash_ReadData : Read data from Flash.
179   int32_t                (*ProgramData)    (uint32_t addr, const void *data, uint32_t cnt); ///< Pointer to \ref ARM_Flash_ProgramData : Program data to Flash.
180   int32_t                (*EraseSector)    (uint32_t addr);                                 ///< Pointer to \ref ARM_Flash_EraseSector : Erase Flash Sector.
181   int32_t                (*EraseChip)      (void);                                          ///< Pointer to \ref ARM_Flash_EraseChip : Erase complete Flash.
182   ARM_FLASH_STATUS       (*GetStatus)      (void);                                          ///< Pointer to \ref ARM_Flash_GetStatus : Get Flash status.
183   ARM_FLASH_INFO *       (*GetInfo)        (void);                                          ///< Pointer to \ref ARM_Flash_GetInfo : Get Flash information.
184 } const ARM_DRIVER_FLASH;
185
186 #endif /* __DRIVER_FLASH_H */