Modified version of the mbed library for use with the Nucleo boards.

Dependents:   EEPROMWrite Full-Project

Fork of mbed-src by mbed official

Committer:
mbed_official
Date:
Thu Aug 20 10:45:13 2015 +0100
Revision:
613:bc40b8d2aec4
Parent:
532:fe11edbda85c
Synchronized with git revision 92ca8c7b60a283b6bb60eb65b183dac1599f0ade

Full URL: https://github.com/mbedmicro/mbed/commit/92ca8c7b60a283b6bb60eb65b183dac1599f0ade/

Nordic: update application start address in GCC linker script

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 235:685d5f11838f 1 /**
mbed_official 235:685d5f11838f 2 ******************************************************************************
mbed_official 235:685d5f11838f 3 * @file stm32f4xx_hal_nor.c
mbed_official 235:685d5f11838f 4 * @author MCD Application Team
mbed_official 613:bc40b8d2aec4 5 * @version V1.3.2
mbed_official 613:bc40b8d2aec4 6 * @date 26-June-2015
mbed_official 235:685d5f11838f 7 * @brief NOR HAL module driver.
mbed_official 235:685d5f11838f 8 * This file provides a generic firmware to drive NOR memories mounted
mbed_official 235:685d5f11838f 9 * as external device.
mbed_official 235:685d5f11838f 10 *
mbed_official 235:685d5f11838f 11 @verbatim
mbed_official 235:685d5f11838f 12 ==============================================================================
mbed_official 235:685d5f11838f 13 ##### How to use this driver #####
mbed_official 235:685d5f11838f 14 ==============================================================================
mbed_official 235:685d5f11838f 15 [..]
mbed_official 235:685d5f11838f 16 This driver is a generic layered driver which contains a set of APIs used to
mbed_official 235:685d5f11838f 17 control NOR flash memories. It uses the FMC/FSMC layer functions to interface
mbed_official 235:685d5f11838f 18 with NOR devices. This driver is used as follows:
mbed_official 235:685d5f11838f 19
mbed_official 235:685d5f11838f 20 (+) NOR flash memory configuration sequence using the function HAL_NOR_Init()
mbed_official 235:685d5f11838f 21 with control and timing parameters for both normal and extended mode.
mbed_official 235:685d5f11838f 22
mbed_official 235:685d5f11838f 23 (+) Read NOR flash memory manufacturer code and device IDs using the function
mbed_official 235:685d5f11838f 24 HAL_NOR_Read_ID(). The read information is stored in the NOR_ID_TypeDef
mbed_official 235:685d5f11838f 25 structure declared by the function caller.
mbed_official 235:685d5f11838f 26
mbed_official 235:685d5f11838f 27 (+) Access NOR flash memory by read/write data unit operations using the functions
mbed_official 235:685d5f11838f 28 HAL_NOR_Read(), HAL_NOR_Program().
mbed_official 235:685d5f11838f 29
mbed_official 235:685d5f11838f 30 (+) Perform NOR flash erase block/chip operations using the functions
mbed_official 235:685d5f11838f 31 HAL_NOR_Erase_Block() and HAL_NOR_Erase_Chip().
mbed_official 235:685d5f11838f 32
mbed_official 235:685d5f11838f 33 (+) Read the NOR flash CFI (common flash interface) IDs using the function
mbed_official 235:685d5f11838f 34 HAL_NOR_Read_CFI(). The read information is stored in the NOR_CFI_TypeDef
mbed_official 235:685d5f11838f 35 structure declared by the function caller.
mbed_official 235:685d5f11838f 36
mbed_official 235:685d5f11838f 37 (+) You can also control the NOR device by calling the control APIs HAL_NOR_WriteOperation_Enable()/
mbed_official 235:685d5f11838f 38 HAL_NOR_WriteOperation_Disable() to respectively enable/disable the NOR write operation
mbed_official 235:685d5f11838f 39
mbed_official 235:685d5f11838f 40 (+) You can monitor the NOR device HAL state by calling the function
mbed_official 235:685d5f11838f 41 HAL_NOR_GetState()
mbed_official 235:685d5f11838f 42 [..]
mbed_official 235:685d5f11838f 43 (@) This driver is a set of generic APIs which handle standard NOR flash operations.
mbed_official 235:685d5f11838f 44 If a NOR flash device contains different operations and/or implementations,
mbed_official 235:685d5f11838f 45 it should be implemented separately.
mbed_official 235:685d5f11838f 46
mbed_official 235:685d5f11838f 47 *** NOR HAL driver macros list ***
mbed_official 235:685d5f11838f 48 =============================================
mbed_official 235:685d5f11838f 49 [..]
mbed_official 235:685d5f11838f 50 Below the list of most used macros in NOR HAL driver.
mbed_official 235:685d5f11838f 51
mbed_official 532:fe11edbda85c 52 (+) NOR_WRITE : NOR memory write data to specified address
mbed_official 235:685d5f11838f 53
mbed_official 235:685d5f11838f 54 @endverbatim
mbed_official 235:685d5f11838f 55 ******************************************************************************
mbed_official 235:685d5f11838f 56 * @attention
mbed_official 235:685d5f11838f 57 *
mbed_official 532:fe11edbda85c 58 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
mbed_official 235:685d5f11838f 59 *
mbed_official 235:685d5f11838f 60 * Redistribution and use in source and binary forms, with or without modification,
mbed_official 235:685d5f11838f 61 * are permitted provided that the following conditions are met:
mbed_official 235:685d5f11838f 62 * 1. Redistributions of source code must retain the above copyright notice,
mbed_official 235:685d5f11838f 63 * this list of conditions and the following disclaimer.
mbed_official 235:685d5f11838f 64 * 2. Redistributions in binary form must reproduce the above copyright notice,
mbed_official 235:685d5f11838f 65 * this list of conditions and the following disclaimer in the documentation
mbed_official 235:685d5f11838f 66 * and/or other materials provided with the distribution.
mbed_official 235:685d5f11838f 67 * 3. Neither the name of STMicroelectronics nor the names of its contributors
mbed_official 235:685d5f11838f 68 * may be used to endorse or promote products derived from this software
mbed_official 235:685d5f11838f 69 * without specific prior written permission.
mbed_official 235:685d5f11838f 70 *
mbed_official 235:685d5f11838f 71 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
mbed_official 235:685d5f11838f 72 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
mbed_official 235:685d5f11838f 73 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
mbed_official 235:685d5f11838f 74 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
mbed_official 235:685d5f11838f 75 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
mbed_official 235:685d5f11838f 76 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
mbed_official 235:685d5f11838f 77 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
mbed_official 235:685d5f11838f 78 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
mbed_official 235:685d5f11838f 79 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
mbed_official 235:685d5f11838f 80 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
mbed_official 235:685d5f11838f 81 *
mbed_official 235:685d5f11838f 82 ******************************************************************************
mbed_official 235:685d5f11838f 83 */
mbed_official 235:685d5f11838f 84
mbed_official 235:685d5f11838f 85 /* Includes ------------------------------------------------------------------*/
mbed_official 235:685d5f11838f 86 #include "stm32f4xx_hal.h"
mbed_official 235:685d5f11838f 87
mbed_official 235:685d5f11838f 88 /** @addtogroup STM32F4xx_HAL_Driver
mbed_official 235:685d5f11838f 89 * @{
mbed_official 235:685d5f11838f 90 */
mbed_official 235:685d5f11838f 91
mbed_official 532:fe11edbda85c 92 /** @defgroup NOR NOR
mbed_official 235:685d5f11838f 93 * @brief NOR driver modules
mbed_official 235:685d5f11838f 94 * @{
mbed_official 235:685d5f11838f 95 */
mbed_official 235:685d5f11838f 96 #ifdef HAL_NOR_MODULE_ENABLED
mbed_official 532:fe11edbda85c 97 #if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) ||\
mbed_official 532:fe11edbda85c 98 defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\
mbed_official 532:fe11edbda85c 99 defined(STM32F446xx)
mbed_official 235:685d5f11838f 100 /* Private typedef -----------------------------------------------------------*/
mbed_official 235:685d5f11838f 101 /* Private define ------------------------------------------------------------*/
mbed_official 235:685d5f11838f 102
mbed_official 532:fe11edbda85c 103 /** @defgroup NOR_Private_Defines NOR Private Defines
mbed_official 235:685d5f11838f 104 * @{
mbed_official 235:685d5f11838f 105 */
mbed_official 235:685d5f11838f 106
mbed_official 532:fe11edbda85c 107 /* Constants to define address to set to write a command */
mbed_official 532:fe11edbda85c 108 #define NOR_CMD_ADDRESS_FIRST (uint16_t)0x0555
mbed_official 532:fe11edbda85c 109 #define NOR_CMD_ADDRESS_FIRST_CFI (uint16_t)0x0055
mbed_official 532:fe11edbda85c 110 #define NOR_CMD_ADDRESS_SECOND (uint16_t)0x02AA
mbed_official 532:fe11edbda85c 111 #define NOR_CMD_ADDRESS_THIRD (uint16_t)0x0555
mbed_official 532:fe11edbda85c 112 #define NOR_CMD_ADDRESS_FOURTH (uint16_t)0x0555
mbed_official 532:fe11edbda85c 113 #define NOR_CMD_ADDRESS_FIFTH (uint16_t)0x02AA
mbed_official 532:fe11edbda85c 114 #define NOR_CMD_ADDRESS_SIXTH (uint16_t)0x0555
mbed_official 532:fe11edbda85c 115
mbed_official 532:fe11edbda85c 116 /* Constants to define data to program a command */
mbed_official 532:fe11edbda85c 117 #define NOR_CMD_DATA_READ_RESET (uint16_t)0x00F0
mbed_official 532:fe11edbda85c 118 #define NOR_CMD_DATA_FIRST (uint16_t)0x00AA
mbed_official 532:fe11edbda85c 119 #define NOR_CMD_DATA_SECOND (uint16_t)0x0055
mbed_official 532:fe11edbda85c 120 #define NOR_CMD_DATA_AUTO_SELECT (uint16_t)0x0090
mbed_official 532:fe11edbda85c 121 #define NOR_CMD_DATA_PROGRAM (uint16_t)0x00A0
mbed_official 532:fe11edbda85c 122 #define NOR_CMD_DATA_CHIP_BLOCK_ERASE_THIRD (uint16_t)0x0080
mbed_official 532:fe11edbda85c 123 #define NOR_CMD_DATA_CHIP_BLOCK_ERASE_FOURTH (uint16_t)0x00AA
mbed_official 532:fe11edbda85c 124 #define NOR_CMD_DATA_CHIP_BLOCK_ERASE_FIFTH (uint16_t)0x0055
mbed_official 532:fe11edbda85c 125 #define NOR_CMD_DATA_CHIP_ERASE (uint16_t)0x0010
mbed_official 532:fe11edbda85c 126 #define NOR_CMD_DATA_CFI (uint16_t)0x0098
mbed_official 532:fe11edbda85c 127
mbed_official 532:fe11edbda85c 128 #define NOR_CMD_DATA_BUFFER_AND_PROG (uint8_t)0x25
mbed_official 532:fe11edbda85c 129 #define NOR_CMD_DATA_BUFFER_AND_PROG_CONFIRM (uint8_t)0x29
mbed_official 532:fe11edbda85c 130 #define NOR_CMD_DATA_BLOCK_ERASE (uint8_t)0x30
mbed_official 532:fe11edbda85c 131
mbed_official 532:fe11edbda85c 132 /* Mask on NOR STATUS REGISTER */
mbed_official 532:fe11edbda85c 133 #define NOR_MASK_STATUS_DQ5 (uint16_t)0x0020
mbed_official 532:fe11edbda85c 134 #define NOR_MASK_STATUS_DQ6 (uint16_t)0x0040
mbed_official 532:fe11edbda85c 135
mbed_official 532:fe11edbda85c 136 /**
mbed_official 532:fe11edbda85c 137 * @}
mbed_official 532:fe11edbda85c 138 */
mbed_official 532:fe11edbda85c 139
mbed_official 532:fe11edbda85c 140 /* Private macro -------------------------------------------------------------*/
mbed_official 532:fe11edbda85c 141 /* Private variables ---------------------------------------------------------*/
mbed_official 532:fe11edbda85c 142 /* Private functions ---------------------------------------------------------*/
mbed_official 532:fe11edbda85c 143 /* Exported functions --------------------------------------------------------*/
mbed_official 532:fe11edbda85c 144 /** @defgroup NOR_Exported_Functions NOR Exported Functions
mbed_official 532:fe11edbda85c 145 * @{
mbed_official 532:fe11edbda85c 146 */
mbed_official 532:fe11edbda85c 147
mbed_official 532:fe11edbda85c 148 /** @defgroup NOR_Exported_Functions_Group1 Initialization and de-initialization functions
mbed_official 235:685d5f11838f 149 * @brief Initialization and Configuration functions
mbed_official 235:685d5f11838f 150 *
mbed_official 235:685d5f11838f 151 @verbatim
mbed_official 235:685d5f11838f 152 ==============================================================================
mbed_official 235:685d5f11838f 153 ##### NOR Initialization and de_initialization functions #####
mbed_official 235:685d5f11838f 154 ==============================================================================
mbed_official 235:685d5f11838f 155 [..]
mbed_official 235:685d5f11838f 156 This section provides functions allowing to initialize/de-initialize
mbed_official 235:685d5f11838f 157 the NOR memory
mbed_official 235:685d5f11838f 158
mbed_official 235:685d5f11838f 159 @endverbatim
mbed_official 235:685d5f11838f 160 * @{
mbed_official 235:685d5f11838f 161 */
mbed_official 235:685d5f11838f 162
mbed_official 235:685d5f11838f 163 /**
mbed_official 235:685d5f11838f 164 * @brief Perform the NOR memory Initialization sequence
mbed_official 235:685d5f11838f 165 * @param hnor: pointer to the NOR handle
mbed_official 235:685d5f11838f 166 * @param Timing: pointer to NOR control timing structure
mbed_official 235:685d5f11838f 167 * @param ExtTiming: pointer to NOR extended mode timing structure
mbed_official 235:685d5f11838f 168 * @retval HAL status
mbed_official 235:685d5f11838f 169 */
mbed_official 235:685d5f11838f 170 HAL_StatusTypeDef HAL_NOR_Init(NOR_HandleTypeDef *hnor, FMC_NORSRAM_TimingTypeDef *Timing, FMC_NORSRAM_TimingTypeDef *ExtTiming)
mbed_official 235:685d5f11838f 171 {
mbed_official 235:685d5f11838f 172 /* Check the NOR handle parameter */
mbed_official 613:bc40b8d2aec4 173 if(hnor == NULL)
mbed_official 235:685d5f11838f 174 {
mbed_official 235:685d5f11838f 175 return HAL_ERROR;
mbed_official 235:685d5f11838f 176 }
mbed_official 235:685d5f11838f 177
mbed_official 235:685d5f11838f 178 if(hnor->State == HAL_NOR_STATE_RESET)
mbed_official 235:685d5f11838f 179 {
mbed_official 532:fe11edbda85c 180 /* Allocate lock resource and initialize it */
mbed_official 532:fe11edbda85c 181 hnor->Lock = HAL_UNLOCKED;
mbed_official 235:685d5f11838f 182 /* Initialize the low level hardware (MSP) */
mbed_official 235:685d5f11838f 183 HAL_NOR_MspInit(hnor);
mbed_official 235:685d5f11838f 184 }
mbed_official 532:fe11edbda85c 185
mbed_official 235:685d5f11838f 186 /* Initialize NOR control Interface */
mbed_official 235:685d5f11838f 187 FMC_NORSRAM_Init(hnor->Instance, &(hnor->Init));
mbed_official 235:685d5f11838f 188
mbed_official 235:685d5f11838f 189 /* Initialize NOR timing Interface */
mbed_official 235:685d5f11838f 190 FMC_NORSRAM_Timing_Init(hnor->Instance, Timing, hnor->Init.NSBank);
mbed_official 235:685d5f11838f 191
mbed_official 235:685d5f11838f 192 /* Initialize NOR extended mode timing Interface */
mbed_official 235:685d5f11838f 193 FMC_NORSRAM_Extended_Timing_Init(hnor->Extended, ExtTiming, hnor->Init.NSBank, hnor->Init.ExtendedMode);
mbed_official 235:685d5f11838f 194
mbed_official 235:685d5f11838f 195 /* Enable the NORSRAM device */
mbed_official 532:fe11edbda85c 196 __FMC_NORSRAM_ENABLE(hnor->Instance, hnor->Init.NSBank);
mbed_official 235:685d5f11838f 197
mbed_official 235:685d5f11838f 198 /* Check the NOR controller state */
mbed_official 235:685d5f11838f 199 hnor->State = HAL_NOR_STATE_READY;
mbed_official 235:685d5f11838f 200
mbed_official 235:685d5f11838f 201 return HAL_OK;
mbed_official 235:685d5f11838f 202 }
mbed_official 235:685d5f11838f 203
mbed_official 235:685d5f11838f 204 /**
mbed_official 235:685d5f11838f 205 * @brief Perform NOR memory De-Initialization sequence
mbed_official 235:685d5f11838f 206 * @param hnor: pointer to a NOR_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 207 * the configuration information for NOR module.
mbed_official 235:685d5f11838f 208 * @retval HAL status
mbed_official 235:685d5f11838f 209 */
mbed_official 235:685d5f11838f 210 HAL_StatusTypeDef HAL_NOR_DeInit(NOR_HandleTypeDef *hnor)
mbed_official 235:685d5f11838f 211 {
mbed_official 235:685d5f11838f 212 /* De-Initialize the low level hardware (MSP) */
mbed_official 235:685d5f11838f 213 HAL_NOR_MspDeInit(hnor);
mbed_official 235:685d5f11838f 214
mbed_official 235:685d5f11838f 215 /* Configure the NOR registers with their reset values */
mbed_official 235:685d5f11838f 216 FMC_NORSRAM_DeInit(hnor->Instance, hnor->Extended, hnor->Init.NSBank);
mbed_official 235:685d5f11838f 217
mbed_official 235:685d5f11838f 218 /* Update the NOR controller state */
mbed_official 235:685d5f11838f 219 hnor->State = HAL_NOR_STATE_RESET;
mbed_official 235:685d5f11838f 220
mbed_official 235:685d5f11838f 221 /* Release Lock */
mbed_official 235:685d5f11838f 222 __HAL_UNLOCK(hnor);
mbed_official 235:685d5f11838f 223
mbed_official 235:685d5f11838f 224 return HAL_OK;
mbed_official 235:685d5f11838f 225 }
mbed_official 235:685d5f11838f 226
mbed_official 235:685d5f11838f 227 /**
mbed_official 235:685d5f11838f 228 * @brief NOR MSP Init
mbed_official 235:685d5f11838f 229 * @param hnor: pointer to a NOR_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 230 * the configuration information for NOR module.
mbed_official 235:685d5f11838f 231 * @retval None
mbed_official 235:685d5f11838f 232 */
mbed_official 235:685d5f11838f 233 __weak void HAL_NOR_MspInit(NOR_HandleTypeDef *hnor)
mbed_official 235:685d5f11838f 234 {
mbed_official 235:685d5f11838f 235 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 235:685d5f11838f 236 the HAL_NOR_MspInit could be implemented in the user file
mbed_official 235:685d5f11838f 237 */
mbed_official 235:685d5f11838f 238 }
mbed_official 235:685d5f11838f 239
mbed_official 235:685d5f11838f 240 /**
mbed_official 235:685d5f11838f 241 * @brief NOR MSP DeInit
mbed_official 235:685d5f11838f 242 * @param hnor: pointer to a NOR_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 243 * the configuration information for NOR module.
mbed_official 235:685d5f11838f 244 * @retval None
mbed_official 235:685d5f11838f 245 */
mbed_official 235:685d5f11838f 246 __weak void HAL_NOR_MspDeInit(NOR_HandleTypeDef *hnor)
mbed_official 235:685d5f11838f 247 {
mbed_official 235:685d5f11838f 248 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 235:685d5f11838f 249 the HAL_NOR_MspDeInit could be implemented in the user file
mbed_official 235:685d5f11838f 250 */
mbed_official 235:685d5f11838f 251 }
mbed_official 235:685d5f11838f 252
mbed_official 235:685d5f11838f 253 /**
mbed_official 532:fe11edbda85c 254 * @brief NOR BSP Wait for Ready/Busy signal
mbed_official 235:685d5f11838f 255 * @param hnor: pointer to a NOR_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 256 * the configuration information for NOR module.
mbed_official 235:685d5f11838f 257 * @param Timeout: Maximum timeout value
mbed_official 235:685d5f11838f 258 * @retval None
mbed_official 235:685d5f11838f 259 */
mbed_official 235:685d5f11838f 260 __weak void HAL_NOR_MspWait(NOR_HandleTypeDef *hnor, uint32_t Timeout)
mbed_official 235:685d5f11838f 261 {
mbed_official 235:685d5f11838f 262 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 235:685d5f11838f 263 the HAL_NOR_BspWait could be implemented in the user file
mbed_official 235:685d5f11838f 264 */
mbed_official 235:685d5f11838f 265 }
mbed_official 235:685d5f11838f 266
mbed_official 235:685d5f11838f 267 /**
mbed_official 235:685d5f11838f 268 * @}
mbed_official 235:685d5f11838f 269 */
mbed_official 235:685d5f11838f 270
mbed_official 532:fe11edbda85c 271 /** @defgroup NOR_Exported_Functions_Group2 Input and Output functions
mbed_official 235:685d5f11838f 272 * @brief Input Output and memory control functions
mbed_official 235:685d5f11838f 273 *
mbed_official 235:685d5f11838f 274 @verbatim
mbed_official 235:685d5f11838f 275 ==============================================================================
mbed_official 235:685d5f11838f 276 ##### NOR Input and Output functions #####
mbed_official 235:685d5f11838f 277 ==============================================================================
mbed_official 235:685d5f11838f 278 [..]
mbed_official 235:685d5f11838f 279 This section provides functions allowing to use and control the NOR memory
mbed_official 235:685d5f11838f 280
mbed_official 235:685d5f11838f 281 @endverbatim
mbed_official 235:685d5f11838f 282 * @{
mbed_official 235:685d5f11838f 283 */
mbed_official 235:685d5f11838f 284
mbed_official 235:685d5f11838f 285 /**
mbed_official 235:685d5f11838f 286 * @brief Read NOR flash IDs
mbed_official 235:685d5f11838f 287 * @param hnor: pointer to the NOR handle
mbed_official 235:685d5f11838f 288 * @param pNOR_ID : pointer to NOR ID structure
mbed_official 235:685d5f11838f 289 * @retval HAL status
mbed_official 235:685d5f11838f 290 */
mbed_official 235:685d5f11838f 291 HAL_StatusTypeDef HAL_NOR_Read_ID(NOR_HandleTypeDef *hnor, NOR_IDTypeDef *pNOR_ID)
mbed_official 235:685d5f11838f 292 {
mbed_official 532:fe11edbda85c 293 uint32_t deviceaddress = 0;
mbed_official 235:685d5f11838f 294
mbed_official 235:685d5f11838f 295 /* Process Locked */
mbed_official 235:685d5f11838f 296 __HAL_LOCK(hnor);
mbed_official 235:685d5f11838f 297
mbed_official 235:685d5f11838f 298 /* Check the NOR controller state */
mbed_official 235:685d5f11838f 299 if(hnor->State == HAL_NOR_STATE_BUSY)
mbed_official 235:685d5f11838f 300 {
mbed_official 235:685d5f11838f 301 return HAL_BUSY;
mbed_official 235:685d5f11838f 302 }
mbed_official 235:685d5f11838f 303
mbed_official 235:685d5f11838f 304 /* Select the NOR device address */
mbed_official 235:685d5f11838f 305 if (hnor->Init.NSBank == FMC_NORSRAM_BANK1)
mbed_official 235:685d5f11838f 306 {
mbed_official 532:fe11edbda85c 307 deviceaddress = NOR_MEMORY_ADRESS1;
mbed_official 235:685d5f11838f 308 }
mbed_official 235:685d5f11838f 309 else if (hnor->Init.NSBank == FMC_NORSRAM_BANK2)
mbed_official 235:685d5f11838f 310 {
mbed_official 532:fe11edbda85c 311 deviceaddress = NOR_MEMORY_ADRESS2;
mbed_official 235:685d5f11838f 312 }
mbed_official 235:685d5f11838f 313 else if (hnor->Init.NSBank == FMC_NORSRAM_BANK3)
mbed_official 235:685d5f11838f 314 {
mbed_official 532:fe11edbda85c 315 deviceaddress = NOR_MEMORY_ADRESS3;
mbed_official 235:685d5f11838f 316 }
mbed_official 235:685d5f11838f 317 else /* FMC_NORSRAM_BANK4 */
mbed_official 235:685d5f11838f 318 {
mbed_official 532:fe11edbda85c 319 deviceaddress = NOR_MEMORY_ADRESS4;
mbed_official 235:685d5f11838f 320 }
mbed_official 235:685d5f11838f 321
mbed_official 235:685d5f11838f 322 /* Update the NOR controller state */
mbed_official 235:685d5f11838f 323 hnor->State = HAL_NOR_STATE_BUSY;
mbed_official 235:685d5f11838f 324
mbed_official 235:685d5f11838f 325 /* Send read ID command */
mbed_official 532:fe11edbda85c 326 NOR_WRITE(NOR_ADDR_SHIFT(deviceaddress, NOR_MEMORY_8B, NOR_CMD_ADDRESS_FIRST), NOR_CMD_DATA_FIRST);
mbed_official 532:fe11edbda85c 327 NOR_WRITE(NOR_ADDR_SHIFT(deviceaddress, NOR_MEMORY_8B, NOR_CMD_ADDRESS_SECOND), NOR_CMD_DATA_SECOND);
mbed_official 532:fe11edbda85c 328 NOR_WRITE(NOR_ADDR_SHIFT(deviceaddress, NOR_MEMORY_8B, NOR_CMD_ADDRESS_THIRD), NOR_CMD_DATA_AUTO_SELECT);
mbed_official 235:685d5f11838f 329
mbed_official 235:685d5f11838f 330 /* Read the NOR IDs */
mbed_official 532:fe11edbda85c 331 pNOR_ID->Manufacturer_Code = *(__IO uint16_t *) NOR_ADDR_SHIFT(deviceaddress, NOR_MEMORY_8B, MC_ADDRESS);
mbed_official 532:fe11edbda85c 332 pNOR_ID->Device_Code1 = *(__IO uint16_t *) NOR_ADDR_SHIFT(deviceaddress, NOR_MEMORY_8B, DEVICE_CODE1_ADDR);
mbed_official 532:fe11edbda85c 333 pNOR_ID->Device_Code2 = *(__IO uint16_t *) NOR_ADDR_SHIFT(deviceaddress, NOR_MEMORY_8B, DEVICE_CODE2_ADDR);
mbed_official 532:fe11edbda85c 334 pNOR_ID->Device_Code3 = *(__IO uint16_t *) NOR_ADDR_SHIFT(deviceaddress, NOR_MEMORY_8B, DEVICE_CODE3_ADDR);
mbed_official 235:685d5f11838f 335
mbed_official 235:685d5f11838f 336 /* Check the NOR controller state */
mbed_official 235:685d5f11838f 337 hnor->State = HAL_NOR_STATE_READY;
mbed_official 235:685d5f11838f 338
mbed_official 235:685d5f11838f 339 /* Process unlocked */
mbed_official 235:685d5f11838f 340 __HAL_UNLOCK(hnor);
mbed_official 235:685d5f11838f 341
mbed_official 235:685d5f11838f 342 return HAL_OK;
mbed_official 235:685d5f11838f 343 }
mbed_official 235:685d5f11838f 344
mbed_official 235:685d5f11838f 345 /**
mbed_official 235:685d5f11838f 346 * @brief Returns the NOR memory to Read mode.
mbed_official 235:685d5f11838f 347 * @param hnor: pointer to the NOR handle
mbed_official 235:685d5f11838f 348 * @retval HAL status
mbed_official 235:685d5f11838f 349 */
mbed_official 235:685d5f11838f 350 HAL_StatusTypeDef HAL_NOR_ReturnToReadMode(NOR_HandleTypeDef *hnor)
mbed_official 235:685d5f11838f 351 {
mbed_official 532:fe11edbda85c 352 uint32_t deviceaddress = 0;
mbed_official 235:685d5f11838f 353
mbed_official 235:685d5f11838f 354 /* Process Locked */
mbed_official 235:685d5f11838f 355 __HAL_LOCK(hnor);
mbed_official 235:685d5f11838f 356
mbed_official 235:685d5f11838f 357 /* Check the NOR controller state */
mbed_official 235:685d5f11838f 358 if(hnor->State == HAL_NOR_STATE_BUSY)
mbed_official 235:685d5f11838f 359 {
mbed_official 235:685d5f11838f 360 return HAL_BUSY;
mbed_official 235:685d5f11838f 361 }
mbed_official 235:685d5f11838f 362
mbed_official 235:685d5f11838f 363 /* Select the NOR device address */
mbed_official 235:685d5f11838f 364 if (hnor->Init.NSBank == FMC_NORSRAM_BANK1)
mbed_official 235:685d5f11838f 365 {
mbed_official 532:fe11edbda85c 366 deviceaddress = NOR_MEMORY_ADRESS1;
mbed_official 235:685d5f11838f 367 }
mbed_official 235:685d5f11838f 368 else if (hnor->Init.NSBank == FMC_NORSRAM_BANK2)
mbed_official 235:685d5f11838f 369 {
mbed_official 532:fe11edbda85c 370 deviceaddress = NOR_MEMORY_ADRESS2;
mbed_official 235:685d5f11838f 371 }
mbed_official 235:685d5f11838f 372 else if (hnor->Init.NSBank == FMC_NORSRAM_BANK3)
mbed_official 235:685d5f11838f 373 {
mbed_official 532:fe11edbda85c 374 deviceaddress = NOR_MEMORY_ADRESS3;
mbed_official 235:685d5f11838f 375 }
mbed_official 235:685d5f11838f 376 else /* FMC_NORSRAM_BANK4 */
mbed_official 235:685d5f11838f 377 {
mbed_official 532:fe11edbda85c 378 deviceaddress = NOR_MEMORY_ADRESS4;
mbed_official 235:685d5f11838f 379 }
mbed_official 235:685d5f11838f 380
mbed_official 532:fe11edbda85c 381 NOR_WRITE(deviceaddress, NOR_CMD_DATA_READ_RESET);
mbed_official 235:685d5f11838f 382
mbed_official 235:685d5f11838f 383 /* Check the NOR controller state */
mbed_official 235:685d5f11838f 384 hnor->State = HAL_NOR_STATE_READY;
mbed_official 235:685d5f11838f 385
mbed_official 235:685d5f11838f 386 /* Process unlocked */
mbed_official 235:685d5f11838f 387 __HAL_UNLOCK(hnor);
mbed_official 235:685d5f11838f 388
mbed_official 235:685d5f11838f 389 return HAL_OK;
mbed_official 235:685d5f11838f 390 }
mbed_official 235:685d5f11838f 391
mbed_official 235:685d5f11838f 392 /**
mbed_official 235:685d5f11838f 393 * @brief Read data from NOR memory
mbed_official 235:685d5f11838f 394 * @param hnor: pointer to the NOR handle
mbed_official 235:685d5f11838f 395 * @param pAddress: pointer to Device address
mbed_official 235:685d5f11838f 396 * @param pData : pointer to read data
mbed_official 235:685d5f11838f 397 * @retval HAL status
mbed_official 235:685d5f11838f 398 */
mbed_official 235:685d5f11838f 399 HAL_StatusTypeDef HAL_NOR_Read(NOR_HandleTypeDef *hnor, uint32_t *pAddress, uint16_t *pData)
mbed_official 235:685d5f11838f 400 {
mbed_official 532:fe11edbda85c 401 uint32_t deviceaddress = 0;
mbed_official 235:685d5f11838f 402
mbed_official 235:685d5f11838f 403 /* Process Locked */
mbed_official 235:685d5f11838f 404 __HAL_LOCK(hnor);
mbed_official 235:685d5f11838f 405
mbed_official 235:685d5f11838f 406 /* Check the NOR controller state */
mbed_official 235:685d5f11838f 407 if(hnor->State == HAL_NOR_STATE_BUSY)
mbed_official 235:685d5f11838f 408 {
mbed_official 235:685d5f11838f 409 return HAL_BUSY;
mbed_official 235:685d5f11838f 410 }
mbed_official 235:685d5f11838f 411
mbed_official 235:685d5f11838f 412 /* Select the NOR device address */
mbed_official 235:685d5f11838f 413 if (hnor->Init.NSBank == FMC_NORSRAM_BANK1)
mbed_official 235:685d5f11838f 414 {
mbed_official 532:fe11edbda85c 415 deviceaddress = NOR_MEMORY_ADRESS1;
mbed_official 235:685d5f11838f 416 }
mbed_official 235:685d5f11838f 417 else if (hnor->Init.NSBank == FMC_NORSRAM_BANK2)
mbed_official 235:685d5f11838f 418 {
mbed_official 532:fe11edbda85c 419 deviceaddress = NOR_MEMORY_ADRESS2;
mbed_official 235:685d5f11838f 420 }
mbed_official 235:685d5f11838f 421 else if (hnor->Init.NSBank == FMC_NORSRAM_BANK3)
mbed_official 235:685d5f11838f 422 {
mbed_official 532:fe11edbda85c 423 deviceaddress = NOR_MEMORY_ADRESS3;
mbed_official 235:685d5f11838f 424 }
mbed_official 235:685d5f11838f 425 else /* FMC_NORSRAM_BANK4 */
mbed_official 235:685d5f11838f 426 {
mbed_official 532:fe11edbda85c 427 deviceaddress = NOR_MEMORY_ADRESS4;
mbed_official 235:685d5f11838f 428 }
mbed_official 235:685d5f11838f 429
mbed_official 235:685d5f11838f 430 /* Update the NOR controller state */
mbed_official 235:685d5f11838f 431 hnor->State = HAL_NOR_STATE_BUSY;
mbed_official 235:685d5f11838f 432
mbed_official 235:685d5f11838f 433 /* Send read data command */
mbed_official 532:fe11edbda85c 434 NOR_WRITE(NOR_ADDR_SHIFT(deviceaddress, NOR_MEMORY_8B, NOR_CMD_ADDRESS_FIRST), NOR_CMD_DATA_FIRST);
mbed_official 532:fe11edbda85c 435 NOR_WRITE(NOR_ADDR_SHIFT(deviceaddress, NOR_MEMORY_8B, NOR_CMD_ADDRESS_SECOND), NOR_CMD_DATA_SECOND);
mbed_official 613:bc40b8d2aec4 436 NOR_WRITE((uint32_t)pAddress, NOR_CMD_DATA_READ_RESET);
mbed_official 235:685d5f11838f 437
mbed_official 235:685d5f11838f 438 /* Read the data */
mbed_official 532:fe11edbda85c 439 *pData = *(__IO uint32_t *)(uint32_t)pAddress;
mbed_official 235:685d5f11838f 440
mbed_official 235:685d5f11838f 441 /* Check the NOR controller state */
mbed_official 235:685d5f11838f 442 hnor->State = HAL_NOR_STATE_READY;
mbed_official 235:685d5f11838f 443
mbed_official 235:685d5f11838f 444 /* Process unlocked */
mbed_official 235:685d5f11838f 445 __HAL_UNLOCK(hnor);
mbed_official 235:685d5f11838f 446
mbed_official 235:685d5f11838f 447 return HAL_OK;
mbed_official 235:685d5f11838f 448 }
mbed_official 235:685d5f11838f 449
mbed_official 235:685d5f11838f 450 /**
mbed_official 235:685d5f11838f 451 * @brief Program data to NOR memory
mbed_official 235:685d5f11838f 452 * @param hnor: pointer to the NOR handle
mbed_official 235:685d5f11838f 453 * @param pAddress: Device address
mbed_official 235:685d5f11838f 454 * @param pData : pointer to the data to write
mbed_official 235:685d5f11838f 455 * @retval HAL status
mbed_official 235:685d5f11838f 456 */
mbed_official 235:685d5f11838f 457 HAL_StatusTypeDef HAL_NOR_Program(NOR_HandleTypeDef *hnor, uint32_t *pAddress, uint16_t *pData)
mbed_official 235:685d5f11838f 458 {
mbed_official 532:fe11edbda85c 459 uint32_t deviceaddress = 0;
mbed_official 235:685d5f11838f 460
mbed_official 235:685d5f11838f 461 /* Process Locked */
mbed_official 235:685d5f11838f 462 __HAL_LOCK(hnor);
mbed_official 235:685d5f11838f 463
mbed_official 235:685d5f11838f 464 /* Check the NOR controller state */
mbed_official 235:685d5f11838f 465 if(hnor->State == HAL_NOR_STATE_BUSY)
mbed_official 235:685d5f11838f 466 {
mbed_official 235:685d5f11838f 467 return HAL_BUSY;
mbed_official 235:685d5f11838f 468 }
mbed_official 235:685d5f11838f 469
mbed_official 235:685d5f11838f 470 /* Select the NOR device address */
mbed_official 235:685d5f11838f 471 if (hnor->Init.NSBank == FMC_NORSRAM_BANK1)
mbed_official 235:685d5f11838f 472 {
mbed_official 532:fe11edbda85c 473 deviceaddress = NOR_MEMORY_ADRESS1;
mbed_official 235:685d5f11838f 474 }
mbed_official 235:685d5f11838f 475 else if (hnor->Init.NSBank == FMC_NORSRAM_BANK2)
mbed_official 235:685d5f11838f 476 {
mbed_official 532:fe11edbda85c 477 deviceaddress = NOR_MEMORY_ADRESS2;
mbed_official 235:685d5f11838f 478 }
mbed_official 235:685d5f11838f 479 else if (hnor->Init.NSBank == FMC_NORSRAM_BANK3)
mbed_official 235:685d5f11838f 480 {
mbed_official 532:fe11edbda85c 481 deviceaddress = NOR_MEMORY_ADRESS3;
mbed_official 235:685d5f11838f 482 }
mbed_official 235:685d5f11838f 483 else /* FMC_NORSRAM_BANK4 */
mbed_official 235:685d5f11838f 484 {
mbed_official 532:fe11edbda85c 485 deviceaddress = NOR_MEMORY_ADRESS4;
mbed_official 235:685d5f11838f 486 }
mbed_official 235:685d5f11838f 487
mbed_official 235:685d5f11838f 488 /* Update the NOR controller state */
mbed_official 235:685d5f11838f 489 hnor->State = HAL_NOR_STATE_BUSY;
mbed_official 235:685d5f11838f 490
mbed_official 235:685d5f11838f 491 /* Send program data command */
mbed_official 532:fe11edbda85c 492 NOR_WRITE(NOR_ADDR_SHIFT(deviceaddress, NOR_MEMORY_8B, NOR_CMD_ADDRESS_FIRST), NOR_CMD_DATA_FIRST);
mbed_official 532:fe11edbda85c 493 NOR_WRITE(NOR_ADDR_SHIFT(deviceaddress, NOR_MEMORY_8B, NOR_CMD_ADDRESS_SECOND), NOR_CMD_DATA_SECOND);
mbed_official 532:fe11edbda85c 494 NOR_WRITE(NOR_ADDR_SHIFT(deviceaddress, NOR_MEMORY_8B, NOR_CMD_ADDRESS_THIRD), NOR_CMD_DATA_PROGRAM);
mbed_official 235:685d5f11838f 495
mbed_official 235:685d5f11838f 496 /* Write the data */
mbed_official 532:fe11edbda85c 497 NOR_WRITE(pAddress, *pData);
mbed_official 235:685d5f11838f 498
mbed_official 235:685d5f11838f 499 /* Check the NOR controller state */
mbed_official 235:685d5f11838f 500 hnor->State = HAL_NOR_STATE_READY;
mbed_official 235:685d5f11838f 501
mbed_official 235:685d5f11838f 502 /* Process unlocked */
mbed_official 235:685d5f11838f 503 __HAL_UNLOCK(hnor);
mbed_official 235:685d5f11838f 504
mbed_official 235:685d5f11838f 505 return HAL_OK;
mbed_official 235:685d5f11838f 506 }
mbed_official 235:685d5f11838f 507
mbed_official 235:685d5f11838f 508 /**
mbed_official 235:685d5f11838f 509 * @brief Reads a half-word buffer from the NOR memory.
mbed_official 235:685d5f11838f 510 * @param hnor: pointer to the NOR handle
mbed_official 235:685d5f11838f 511 * @param uwAddress: NOR memory internal address to read from.
mbed_official 235:685d5f11838f 512 * @param pData: pointer to the buffer that receives the data read from the
mbed_official 235:685d5f11838f 513 * NOR memory.
mbed_official 235:685d5f11838f 514 * @param uwBufferSize : number of Half word to read.
mbed_official 235:685d5f11838f 515 * @retval HAL status
mbed_official 235:685d5f11838f 516 */
mbed_official 235:685d5f11838f 517 HAL_StatusTypeDef HAL_NOR_ReadBuffer(NOR_HandleTypeDef *hnor, uint32_t uwAddress, uint16_t *pData, uint32_t uwBufferSize)
mbed_official 235:685d5f11838f 518 {
mbed_official 532:fe11edbda85c 519 uint32_t deviceaddress = 0;
mbed_official 235:685d5f11838f 520
mbed_official 235:685d5f11838f 521 /* Process Locked */
mbed_official 235:685d5f11838f 522 __HAL_LOCK(hnor);
mbed_official 235:685d5f11838f 523
mbed_official 235:685d5f11838f 524 /* Check the NOR controller state */
mbed_official 235:685d5f11838f 525 if(hnor->State == HAL_NOR_STATE_BUSY)
mbed_official 235:685d5f11838f 526 {
mbed_official 235:685d5f11838f 527 return HAL_BUSY;
mbed_official 235:685d5f11838f 528 }
mbed_official 235:685d5f11838f 529
mbed_official 235:685d5f11838f 530 /* Select the NOR device address */
mbed_official 235:685d5f11838f 531 if (hnor->Init.NSBank == FMC_NORSRAM_BANK1)
mbed_official 235:685d5f11838f 532 {
mbed_official 532:fe11edbda85c 533 deviceaddress = NOR_MEMORY_ADRESS1;
mbed_official 235:685d5f11838f 534 }
mbed_official 235:685d5f11838f 535 else if (hnor->Init.NSBank == FMC_NORSRAM_BANK2)
mbed_official 235:685d5f11838f 536 {
mbed_official 532:fe11edbda85c 537 deviceaddress = NOR_MEMORY_ADRESS2;
mbed_official 235:685d5f11838f 538 }
mbed_official 235:685d5f11838f 539 else if (hnor->Init.NSBank == FMC_NORSRAM_BANK3)
mbed_official 235:685d5f11838f 540 {
mbed_official 532:fe11edbda85c 541 deviceaddress = NOR_MEMORY_ADRESS3;
mbed_official 235:685d5f11838f 542 }
mbed_official 235:685d5f11838f 543 else /* FMC_NORSRAM_BANK4 */
mbed_official 235:685d5f11838f 544 {
mbed_official 532:fe11edbda85c 545 deviceaddress = NOR_MEMORY_ADRESS4;
mbed_official 235:685d5f11838f 546 }
mbed_official 235:685d5f11838f 547
mbed_official 235:685d5f11838f 548 /* Update the NOR controller state */
mbed_official 235:685d5f11838f 549 hnor->State = HAL_NOR_STATE_BUSY;
mbed_official 235:685d5f11838f 550
mbed_official 235:685d5f11838f 551 /* Send read data command */
mbed_official 532:fe11edbda85c 552 NOR_WRITE(NOR_ADDR_SHIFT(deviceaddress, NOR_MEMORY_8B, NOR_CMD_ADDRESS_FIRST), NOR_CMD_DATA_FIRST);
mbed_official 532:fe11edbda85c 553 NOR_WRITE(NOR_ADDR_SHIFT(deviceaddress, NOR_MEMORY_8B, NOR_CMD_ADDRESS_SECOND), NOR_CMD_DATA_SECOND);
mbed_official 532:fe11edbda85c 554 NOR_WRITE(uwAddress, 0x00F0);
mbed_official 235:685d5f11838f 555
mbed_official 235:685d5f11838f 556 /* Read buffer */
mbed_official 235:685d5f11838f 557 while( uwBufferSize > 0)
mbed_official 235:685d5f11838f 558 {
mbed_official 235:685d5f11838f 559 *pData++ = *(__IO uint16_t *)uwAddress;
mbed_official 235:685d5f11838f 560 uwAddress += 2;
mbed_official 235:685d5f11838f 561 uwBufferSize--;
mbed_official 235:685d5f11838f 562 }
mbed_official 235:685d5f11838f 563
mbed_official 235:685d5f11838f 564 /* Check the NOR controller state */
mbed_official 235:685d5f11838f 565 hnor->State = HAL_NOR_STATE_READY;
mbed_official 235:685d5f11838f 566
mbed_official 235:685d5f11838f 567 /* Process unlocked */
mbed_official 235:685d5f11838f 568 __HAL_UNLOCK(hnor);
mbed_official 235:685d5f11838f 569
mbed_official 235:685d5f11838f 570 return HAL_OK;
mbed_official 235:685d5f11838f 571 }
mbed_official 235:685d5f11838f 572
mbed_official 235:685d5f11838f 573 /**
mbed_official 235:685d5f11838f 574 * @brief Writes a half-word buffer to the NOR memory. This function must be used
mbed_official 235:685d5f11838f 575 only with S29GL128P NOR memory.
mbed_official 235:685d5f11838f 576 * @param hnor: pointer to the NOR handle
mbed_official 235:685d5f11838f 577 * @param uwAddress: NOR memory internal start write address
mbed_official 235:685d5f11838f 578 * @param pData: pointer to source data buffer.
mbed_official 235:685d5f11838f 579 * @param uwBufferSize: Size of the buffer to write
mbed_official 235:685d5f11838f 580 * @retval HAL status
mbed_official 235:685d5f11838f 581 */
mbed_official 235:685d5f11838f 582 HAL_StatusTypeDef HAL_NOR_ProgramBuffer(NOR_HandleTypeDef *hnor, uint32_t uwAddress, uint16_t *pData, uint32_t uwBufferSize)
mbed_official 235:685d5f11838f 583 {
mbed_official 532:fe11edbda85c 584 uint16_t * p_currentaddress = (uint16_t *)NULL;
mbed_official 532:fe11edbda85c 585 uint16_t * p_endaddress = (uint16_t *)NULL;
mbed_official 532:fe11edbda85c 586 uint32_t lastloadedaddress = 0, deviceaddress = 0;
mbed_official 235:685d5f11838f 587
mbed_official 235:685d5f11838f 588 /* Process Locked */
mbed_official 235:685d5f11838f 589 __HAL_LOCK(hnor);
mbed_official 235:685d5f11838f 590
mbed_official 235:685d5f11838f 591 /* Check the NOR controller state */
mbed_official 235:685d5f11838f 592 if(hnor->State == HAL_NOR_STATE_BUSY)
mbed_official 235:685d5f11838f 593 {
mbed_official 235:685d5f11838f 594 return HAL_BUSY;
mbed_official 235:685d5f11838f 595 }
mbed_official 235:685d5f11838f 596
mbed_official 235:685d5f11838f 597 /* Select the NOR device address */
mbed_official 235:685d5f11838f 598 if (hnor->Init.NSBank == FMC_NORSRAM_BANK1)
mbed_official 235:685d5f11838f 599 {
mbed_official 532:fe11edbda85c 600 deviceaddress = NOR_MEMORY_ADRESS1;
mbed_official 235:685d5f11838f 601 }
mbed_official 235:685d5f11838f 602 else if (hnor->Init.NSBank == FMC_NORSRAM_BANK2)
mbed_official 235:685d5f11838f 603 {
mbed_official 532:fe11edbda85c 604 deviceaddress = NOR_MEMORY_ADRESS2;
mbed_official 235:685d5f11838f 605 }
mbed_official 235:685d5f11838f 606 else if (hnor->Init.NSBank == FMC_NORSRAM_BANK3)
mbed_official 235:685d5f11838f 607 {
mbed_official 532:fe11edbda85c 608 deviceaddress = NOR_MEMORY_ADRESS3;
mbed_official 235:685d5f11838f 609 }
mbed_official 235:685d5f11838f 610 else /* FMC_NORSRAM_BANK4 */
mbed_official 235:685d5f11838f 611 {
mbed_official 532:fe11edbda85c 612 deviceaddress = NOR_MEMORY_ADRESS4;
mbed_official 235:685d5f11838f 613 }
mbed_official 235:685d5f11838f 614
mbed_official 235:685d5f11838f 615 /* Update the NOR controller state */
mbed_official 235:685d5f11838f 616 hnor->State = HAL_NOR_STATE_BUSY;
mbed_official 235:685d5f11838f 617
mbed_official 235:685d5f11838f 618 /* Initialize variables */
mbed_official 532:fe11edbda85c 619 p_currentaddress = (uint16_t*)((uint32_t)(uwAddress));
mbed_official 532:fe11edbda85c 620 p_endaddress = p_currentaddress + (uwBufferSize-1);
mbed_official 532:fe11edbda85c 621 lastloadedaddress = (uint32_t)(uwAddress);
mbed_official 235:685d5f11838f 622
mbed_official 235:685d5f11838f 623 /* Issue unlock command sequence */
mbed_official 532:fe11edbda85c 624 NOR_WRITE(NOR_ADDR_SHIFT(deviceaddress, NOR_MEMORY_8B, NOR_CMD_ADDRESS_FIRST), NOR_CMD_DATA_FIRST);
mbed_official 532:fe11edbda85c 625 NOR_WRITE(NOR_ADDR_SHIFT(deviceaddress, NOR_MEMORY_8B, NOR_CMD_ADDRESS_SECOND), NOR_CMD_DATA_SECOND);
mbed_official 235:685d5f11838f 626
mbed_official 235:685d5f11838f 627 /* Write Buffer Load Command */
mbed_official 532:fe11edbda85c 628 NOR_WRITE(NOR_ADDR_SHIFT(deviceaddress, NOR_MEMORY_8B, uwAddress), NOR_CMD_DATA_BUFFER_AND_PROG);
mbed_official 532:fe11edbda85c 629 NOR_WRITE(NOR_ADDR_SHIFT(deviceaddress, NOR_MEMORY_8B, uwAddress), (uwBufferSize - 1));
mbed_official 235:685d5f11838f 630
mbed_official 235:685d5f11838f 631 /* Load Data into NOR Buffer */
mbed_official 532:fe11edbda85c 632 while(p_currentaddress <= p_endaddress)
mbed_official 235:685d5f11838f 633 {
mbed_official 235:685d5f11838f 634 /* Store last loaded address & data value (for polling) */
mbed_official 532:fe11edbda85c 635 lastloadedaddress = (uint32_t)p_currentaddress;
mbed_official 235:685d5f11838f 636
mbed_official 532:fe11edbda85c 637 NOR_WRITE(p_currentaddress, *pData++);
mbed_official 235:685d5f11838f 638
mbed_official 532:fe11edbda85c 639 p_currentaddress ++;
mbed_official 235:685d5f11838f 640 }
mbed_official 235:685d5f11838f 641
mbed_official 532:fe11edbda85c 642 NOR_WRITE((uint32_t)(lastloadedaddress), NOR_CMD_DATA_BUFFER_AND_PROG_CONFIRM);
mbed_official 235:685d5f11838f 643
mbed_official 235:685d5f11838f 644 /* Check the NOR controller state */
mbed_official 235:685d5f11838f 645 hnor->State = HAL_NOR_STATE_READY;
mbed_official 235:685d5f11838f 646
mbed_official 235:685d5f11838f 647 /* Process unlocked */
mbed_official 235:685d5f11838f 648 __HAL_UNLOCK(hnor);
mbed_official 235:685d5f11838f 649
mbed_official 235:685d5f11838f 650 return HAL_OK;
mbed_official 235:685d5f11838f 651
mbed_official 235:685d5f11838f 652 }
mbed_official 235:685d5f11838f 653
mbed_official 235:685d5f11838f 654 /**
mbed_official 235:685d5f11838f 655 * @brief Erase the specified block of the NOR memory
mbed_official 235:685d5f11838f 656 * @param hnor: pointer to the NOR handle
mbed_official 235:685d5f11838f 657 * @param BlockAddress : Block to erase address
mbed_official 235:685d5f11838f 658 * @param Address: Device address
mbed_official 235:685d5f11838f 659 * @retval HAL status
mbed_official 235:685d5f11838f 660 */
mbed_official 235:685d5f11838f 661 HAL_StatusTypeDef HAL_NOR_Erase_Block(NOR_HandleTypeDef *hnor, uint32_t BlockAddress, uint32_t Address)
mbed_official 235:685d5f11838f 662 {
mbed_official 532:fe11edbda85c 663 uint32_t deviceaddress = 0;
mbed_official 235:685d5f11838f 664
mbed_official 235:685d5f11838f 665 /* Process Locked */
mbed_official 235:685d5f11838f 666 __HAL_LOCK(hnor);
mbed_official 235:685d5f11838f 667
mbed_official 235:685d5f11838f 668 /* Check the NOR controller state */
mbed_official 235:685d5f11838f 669 if(hnor->State == HAL_NOR_STATE_BUSY)
mbed_official 235:685d5f11838f 670 {
mbed_official 235:685d5f11838f 671 return HAL_BUSY;
mbed_official 235:685d5f11838f 672 }
mbed_official 235:685d5f11838f 673
mbed_official 235:685d5f11838f 674 /* Select the NOR device address */
mbed_official 235:685d5f11838f 675 if (hnor->Init.NSBank == FMC_NORSRAM_BANK1)
mbed_official 235:685d5f11838f 676 {
mbed_official 532:fe11edbda85c 677 deviceaddress = NOR_MEMORY_ADRESS1;
mbed_official 235:685d5f11838f 678 }
mbed_official 235:685d5f11838f 679 else if (hnor->Init.NSBank == FMC_NORSRAM_BANK2)
mbed_official 235:685d5f11838f 680 {
mbed_official 532:fe11edbda85c 681 deviceaddress = NOR_MEMORY_ADRESS2;
mbed_official 235:685d5f11838f 682 }
mbed_official 235:685d5f11838f 683 else if (hnor->Init.NSBank == FMC_NORSRAM_BANK3)
mbed_official 235:685d5f11838f 684 {
mbed_official 532:fe11edbda85c 685 deviceaddress = NOR_MEMORY_ADRESS3;
mbed_official 235:685d5f11838f 686 }
mbed_official 235:685d5f11838f 687 else /* FMC_NORSRAM_BANK4 */
mbed_official 235:685d5f11838f 688 {
mbed_official 532:fe11edbda85c 689 deviceaddress = NOR_MEMORY_ADRESS4;
mbed_official 235:685d5f11838f 690 }
mbed_official 235:685d5f11838f 691
mbed_official 235:685d5f11838f 692 /* Update the NOR controller state */
mbed_official 235:685d5f11838f 693 hnor->State = HAL_NOR_STATE_BUSY;
mbed_official 235:685d5f11838f 694
mbed_official 235:685d5f11838f 695 /* Send block erase command sequence */
mbed_official 532:fe11edbda85c 696 NOR_WRITE(NOR_ADDR_SHIFT(deviceaddress, NOR_MEMORY_8B, NOR_CMD_ADDRESS_FIRST), NOR_CMD_DATA_FIRST);
mbed_official 532:fe11edbda85c 697 NOR_WRITE(NOR_ADDR_SHIFT(deviceaddress, NOR_MEMORY_8B, NOR_CMD_ADDRESS_SECOND), NOR_CMD_DATA_SECOND);
mbed_official 532:fe11edbda85c 698 NOR_WRITE(NOR_ADDR_SHIFT(deviceaddress, NOR_MEMORY_8B, NOR_CMD_ADDRESS_THIRD), NOR_CMD_DATA_CHIP_BLOCK_ERASE_THIRD);
mbed_official 532:fe11edbda85c 699 NOR_WRITE(NOR_ADDR_SHIFT(deviceaddress, NOR_MEMORY_8B, NOR_CMD_ADDRESS_FOURTH), NOR_CMD_DATA_CHIP_BLOCK_ERASE_FOURTH);
mbed_official 532:fe11edbda85c 700 NOR_WRITE(NOR_ADDR_SHIFT(deviceaddress, NOR_MEMORY_8B, NOR_CMD_ADDRESS_FIFTH), NOR_CMD_DATA_CHIP_BLOCK_ERASE_FIFTH);
mbed_official 532:fe11edbda85c 701 NOR_WRITE((uint32_t)(BlockAddress + Address), NOR_CMD_DATA_BLOCK_ERASE);
mbed_official 235:685d5f11838f 702
mbed_official 235:685d5f11838f 703 /* Check the NOR memory status and update the controller state */
mbed_official 235:685d5f11838f 704 hnor->State = HAL_NOR_STATE_READY;
mbed_official 235:685d5f11838f 705
mbed_official 235:685d5f11838f 706 /* Process unlocked */
mbed_official 235:685d5f11838f 707 __HAL_UNLOCK(hnor);
mbed_official 235:685d5f11838f 708
mbed_official 235:685d5f11838f 709 return HAL_OK;
mbed_official 235:685d5f11838f 710
mbed_official 235:685d5f11838f 711 }
mbed_official 235:685d5f11838f 712
mbed_official 235:685d5f11838f 713 /**
mbed_official 235:685d5f11838f 714 * @brief Erase the entire NOR chip.
mbed_official 235:685d5f11838f 715 * @param hnor: pointer to the NOR handle
mbed_official 235:685d5f11838f 716 * @param Address : Device address
mbed_official 235:685d5f11838f 717 * @retval HAL status
mbed_official 235:685d5f11838f 718 */
mbed_official 235:685d5f11838f 719 HAL_StatusTypeDef HAL_NOR_Erase_Chip(NOR_HandleTypeDef *hnor, uint32_t Address)
mbed_official 235:685d5f11838f 720 {
mbed_official 532:fe11edbda85c 721 uint32_t deviceaddress = 0;
mbed_official 235:685d5f11838f 722
mbed_official 235:685d5f11838f 723 /* Process Locked */
mbed_official 235:685d5f11838f 724 __HAL_LOCK(hnor);
mbed_official 235:685d5f11838f 725
mbed_official 235:685d5f11838f 726 /* Check the NOR controller state */
mbed_official 235:685d5f11838f 727 if(hnor->State == HAL_NOR_STATE_BUSY)
mbed_official 235:685d5f11838f 728 {
mbed_official 235:685d5f11838f 729 return HAL_BUSY;
mbed_official 235:685d5f11838f 730 }
mbed_official 235:685d5f11838f 731
mbed_official 235:685d5f11838f 732 /* Select the NOR device address */
mbed_official 235:685d5f11838f 733 if (hnor->Init.NSBank == FMC_NORSRAM_BANK1)
mbed_official 235:685d5f11838f 734 {
mbed_official 532:fe11edbda85c 735 deviceaddress = NOR_MEMORY_ADRESS1;
mbed_official 235:685d5f11838f 736 }
mbed_official 235:685d5f11838f 737 else if (hnor->Init.NSBank == FMC_NORSRAM_BANK2)
mbed_official 235:685d5f11838f 738 {
mbed_official 532:fe11edbda85c 739 deviceaddress = NOR_MEMORY_ADRESS2;
mbed_official 235:685d5f11838f 740 }
mbed_official 235:685d5f11838f 741 else if (hnor->Init.NSBank == FMC_NORSRAM_BANK3)
mbed_official 235:685d5f11838f 742 {
mbed_official 532:fe11edbda85c 743 deviceaddress = NOR_MEMORY_ADRESS3;
mbed_official 235:685d5f11838f 744 }
mbed_official 235:685d5f11838f 745 else /* FMC_NORSRAM_BANK4 */
mbed_official 235:685d5f11838f 746 {
mbed_official 532:fe11edbda85c 747 deviceaddress = NOR_MEMORY_ADRESS4;
mbed_official 235:685d5f11838f 748 }
mbed_official 235:685d5f11838f 749
mbed_official 235:685d5f11838f 750 /* Update the NOR controller state */
mbed_official 235:685d5f11838f 751 hnor->State = HAL_NOR_STATE_BUSY;
mbed_official 235:685d5f11838f 752
mbed_official 235:685d5f11838f 753 /* Send NOR chip erase command sequence */
mbed_official 532:fe11edbda85c 754 NOR_WRITE(NOR_ADDR_SHIFT(deviceaddress, NOR_MEMORY_8B, NOR_CMD_ADDRESS_FIRST), NOR_CMD_DATA_FIRST);
mbed_official 532:fe11edbda85c 755 NOR_WRITE(NOR_ADDR_SHIFT(deviceaddress, NOR_MEMORY_8B, NOR_CMD_ADDRESS_SECOND), NOR_CMD_DATA_SECOND);
mbed_official 532:fe11edbda85c 756 NOR_WRITE(NOR_ADDR_SHIFT(deviceaddress, NOR_MEMORY_8B, NOR_CMD_ADDRESS_THIRD), NOR_CMD_DATA_CHIP_BLOCK_ERASE_THIRD);
mbed_official 532:fe11edbda85c 757 NOR_WRITE(NOR_ADDR_SHIFT(deviceaddress, NOR_MEMORY_8B, NOR_CMD_ADDRESS_FOURTH), NOR_CMD_DATA_CHIP_BLOCK_ERASE_FOURTH);
mbed_official 532:fe11edbda85c 758 NOR_WRITE(NOR_ADDR_SHIFT(deviceaddress, NOR_MEMORY_8B, NOR_CMD_ADDRESS_FIFTH), NOR_CMD_DATA_CHIP_BLOCK_ERASE_FIFTH);
mbed_official 532:fe11edbda85c 759 NOR_WRITE(NOR_ADDR_SHIFT(deviceaddress, NOR_MEMORY_8B, NOR_CMD_ADDRESS_SIXTH), NOR_CMD_DATA_CHIP_ERASE);
mbed_official 235:685d5f11838f 760
mbed_official 235:685d5f11838f 761 /* Check the NOR memory status and update the controller state */
mbed_official 235:685d5f11838f 762 hnor->State = HAL_NOR_STATE_READY;
mbed_official 235:685d5f11838f 763
mbed_official 235:685d5f11838f 764 /* Process unlocked */
mbed_official 235:685d5f11838f 765 __HAL_UNLOCK(hnor);
mbed_official 235:685d5f11838f 766
mbed_official 235:685d5f11838f 767 return HAL_OK;
mbed_official 235:685d5f11838f 768 }
mbed_official 235:685d5f11838f 769
mbed_official 235:685d5f11838f 770 /**
mbed_official 235:685d5f11838f 771 * @brief Read NOR flash CFI IDs
mbed_official 235:685d5f11838f 772 * @param hnor: pointer to the NOR handle
mbed_official 235:685d5f11838f 773 * @param pNOR_CFI : pointer to NOR CFI IDs structure
mbed_official 235:685d5f11838f 774 * @retval HAL status
mbed_official 235:685d5f11838f 775 */
mbed_official 235:685d5f11838f 776 HAL_StatusTypeDef HAL_NOR_Read_CFI(NOR_HandleTypeDef *hnor, NOR_CFITypeDef *pNOR_CFI)
mbed_official 235:685d5f11838f 777 {
mbed_official 532:fe11edbda85c 778 uint32_t deviceaddress = 0;
mbed_official 235:685d5f11838f 779
mbed_official 235:685d5f11838f 780 /* Process Locked */
mbed_official 235:685d5f11838f 781 __HAL_LOCK(hnor);
mbed_official 235:685d5f11838f 782
mbed_official 235:685d5f11838f 783 /* Check the NOR controller state */
mbed_official 235:685d5f11838f 784 if(hnor->State == HAL_NOR_STATE_BUSY)
mbed_official 235:685d5f11838f 785 {
mbed_official 235:685d5f11838f 786 return HAL_BUSY;
mbed_official 235:685d5f11838f 787 }
mbed_official 235:685d5f11838f 788
mbed_official 235:685d5f11838f 789 /* Select the NOR device address */
mbed_official 235:685d5f11838f 790 if (hnor->Init.NSBank == FMC_NORSRAM_BANK1)
mbed_official 235:685d5f11838f 791 {
mbed_official 532:fe11edbda85c 792 deviceaddress = NOR_MEMORY_ADRESS1;
mbed_official 235:685d5f11838f 793 }
mbed_official 235:685d5f11838f 794 else if (hnor->Init.NSBank == FMC_NORSRAM_BANK2)
mbed_official 235:685d5f11838f 795 {
mbed_official 532:fe11edbda85c 796 deviceaddress = NOR_MEMORY_ADRESS2;
mbed_official 235:685d5f11838f 797 }
mbed_official 235:685d5f11838f 798 else if (hnor->Init.NSBank == FMC_NORSRAM_BANK3)
mbed_official 235:685d5f11838f 799 {
mbed_official 532:fe11edbda85c 800 deviceaddress = NOR_MEMORY_ADRESS3;
mbed_official 235:685d5f11838f 801 }
mbed_official 235:685d5f11838f 802 else /* FMC_NORSRAM_BANK4 */
mbed_official 235:685d5f11838f 803 {
mbed_official 532:fe11edbda85c 804 deviceaddress = NOR_MEMORY_ADRESS4;
mbed_official 235:685d5f11838f 805 }
mbed_official 235:685d5f11838f 806
mbed_official 235:685d5f11838f 807 /* Update the NOR controller state */
mbed_official 235:685d5f11838f 808 hnor->State = HAL_NOR_STATE_BUSY;
mbed_official 235:685d5f11838f 809
mbed_official 235:685d5f11838f 810 /* Send read CFI query command */
mbed_official 532:fe11edbda85c 811 NOR_WRITE(NOR_ADDR_SHIFT(deviceaddress, NOR_MEMORY_8B, NOR_CMD_ADDRESS_FIRST_CFI), NOR_CMD_DATA_CFI);
mbed_official 235:685d5f11838f 812
mbed_official 235:685d5f11838f 813 /* read the NOR CFI information */
mbed_official 532:fe11edbda85c 814 pNOR_CFI->CFI_1 = *(__IO uint16_t *) NOR_ADDR_SHIFT(deviceaddress, NOR_MEMORY_8B, CFI1_ADDRESS);
mbed_official 532:fe11edbda85c 815 pNOR_CFI->CFI_2 = *(__IO uint16_t *) NOR_ADDR_SHIFT(deviceaddress, NOR_MEMORY_8B, CFI2_ADDRESS);
mbed_official 532:fe11edbda85c 816 pNOR_CFI->CFI_3 = *(__IO uint16_t *) NOR_ADDR_SHIFT(deviceaddress, NOR_MEMORY_8B, CFI3_ADDRESS);
mbed_official 532:fe11edbda85c 817 pNOR_CFI->CFI_4 = *(__IO uint16_t *) NOR_ADDR_SHIFT(deviceaddress, NOR_MEMORY_8B, CFI4_ADDRESS);
mbed_official 235:685d5f11838f 818
mbed_official 235:685d5f11838f 819 /* Check the NOR controller state */
mbed_official 235:685d5f11838f 820 hnor->State = HAL_NOR_STATE_READY;
mbed_official 235:685d5f11838f 821
mbed_official 235:685d5f11838f 822 /* Process unlocked */
mbed_official 235:685d5f11838f 823 __HAL_UNLOCK(hnor);
mbed_official 235:685d5f11838f 824
mbed_official 235:685d5f11838f 825 return HAL_OK;
mbed_official 235:685d5f11838f 826 }
mbed_official 235:685d5f11838f 827
mbed_official 235:685d5f11838f 828 /**
mbed_official 235:685d5f11838f 829 * @}
mbed_official 235:685d5f11838f 830 */
mbed_official 235:685d5f11838f 831
mbed_official 532:fe11edbda85c 832 /** @defgroup NOR_Exported_Functions_Group3 Control functions
mbed_official 235:685d5f11838f 833 * @brief management functions
mbed_official 235:685d5f11838f 834 *
mbed_official 235:685d5f11838f 835 @verbatim
mbed_official 235:685d5f11838f 836 ==============================================================================
mbed_official 235:685d5f11838f 837 ##### NOR Control functions #####
mbed_official 235:685d5f11838f 838 ==============================================================================
mbed_official 235:685d5f11838f 839 [..]
mbed_official 235:685d5f11838f 840 This subsection provides a set of functions allowing to control dynamically
mbed_official 235:685d5f11838f 841 the NOR interface.
mbed_official 235:685d5f11838f 842
mbed_official 235:685d5f11838f 843 @endverbatim
mbed_official 235:685d5f11838f 844 * @{
mbed_official 235:685d5f11838f 845 */
mbed_official 235:685d5f11838f 846
mbed_official 235:685d5f11838f 847 /**
mbed_official 235:685d5f11838f 848 * @brief Enables dynamically NOR write operation.
mbed_official 235:685d5f11838f 849 * @param hnor: pointer to the NOR handle
mbed_official 235:685d5f11838f 850 * @retval HAL status
mbed_official 235:685d5f11838f 851 */
mbed_official 235:685d5f11838f 852 HAL_StatusTypeDef HAL_NOR_WriteOperation_Enable(NOR_HandleTypeDef *hnor)
mbed_official 235:685d5f11838f 853 {
mbed_official 235:685d5f11838f 854 /* Process Locked */
mbed_official 235:685d5f11838f 855 __HAL_LOCK(hnor);
mbed_official 235:685d5f11838f 856
mbed_official 235:685d5f11838f 857 /* Enable write operation */
mbed_official 235:685d5f11838f 858 FMC_NORSRAM_WriteOperation_Enable(hnor->Instance, hnor->Init.NSBank);
mbed_official 235:685d5f11838f 859
mbed_official 235:685d5f11838f 860 /* Update the NOR controller state */
mbed_official 235:685d5f11838f 861 hnor->State = HAL_NOR_STATE_READY;
mbed_official 235:685d5f11838f 862
mbed_official 235:685d5f11838f 863 /* Process unlocked */
mbed_official 235:685d5f11838f 864 __HAL_UNLOCK(hnor);
mbed_official 235:685d5f11838f 865
mbed_official 235:685d5f11838f 866 return HAL_OK;
mbed_official 235:685d5f11838f 867 }
mbed_official 235:685d5f11838f 868
mbed_official 235:685d5f11838f 869 /**
mbed_official 235:685d5f11838f 870 * @brief Disables dynamically NOR write operation.
mbed_official 235:685d5f11838f 871 * @param hnor: pointer to the NOR handle
mbed_official 235:685d5f11838f 872 * @retval HAL status
mbed_official 235:685d5f11838f 873 */
mbed_official 235:685d5f11838f 874 HAL_StatusTypeDef HAL_NOR_WriteOperation_Disable(NOR_HandleTypeDef *hnor)
mbed_official 235:685d5f11838f 875 {
mbed_official 235:685d5f11838f 876 /* Process Locked */
mbed_official 235:685d5f11838f 877 __HAL_LOCK(hnor);
mbed_official 235:685d5f11838f 878
mbed_official 235:685d5f11838f 879 /* Update the SRAM controller state */
mbed_official 235:685d5f11838f 880 hnor->State = HAL_NOR_STATE_BUSY;
mbed_official 235:685d5f11838f 881
mbed_official 235:685d5f11838f 882 /* Disable write operation */
mbed_official 235:685d5f11838f 883 FMC_NORSRAM_WriteOperation_Disable(hnor->Instance, hnor->Init.NSBank);
mbed_official 235:685d5f11838f 884
mbed_official 235:685d5f11838f 885 /* Update the NOR controller state */
mbed_official 235:685d5f11838f 886 hnor->State = HAL_NOR_STATE_PROTECTED;
mbed_official 235:685d5f11838f 887
mbed_official 235:685d5f11838f 888 /* Process unlocked */
mbed_official 235:685d5f11838f 889 __HAL_UNLOCK(hnor);
mbed_official 235:685d5f11838f 890
mbed_official 235:685d5f11838f 891 return HAL_OK;
mbed_official 235:685d5f11838f 892 }
mbed_official 235:685d5f11838f 893
mbed_official 235:685d5f11838f 894 /**
mbed_official 235:685d5f11838f 895 * @}
mbed_official 235:685d5f11838f 896 */
mbed_official 235:685d5f11838f 897
mbed_official 532:fe11edbda85c 898 /** @defgroup NOR_Exported_Functions_Group4 State functions
mbed_official 235:685d5f11838f 899 * @brief Peripheral State functions
mbed_official 235:685d5f11838f 900 *
mbed_official 235:685d5f11838f 901 @verbatim
mbed_official 235:685d5f11838f 902 ==============================================================================
mbed_official 235:685d5f11838f 903 ##### NOR State functions #####
mbed_official 235:685d5f11838f 904 ==============================================================================
mbed_official 235:685d5f11838f 905 [..]
mbed_official 235:685d5f11838f 906 This subsection permits to get in run-time the status of the NOR controller
mbed_official 235:685d5f11838f 907 and the data flow.
mbed_official 235:685d5f11838f 908
mbed_official 235:685d5f11838f 909 @endverbatim
mbed_official 235:685d5f11838f 910 * @{
mbed_official 235:685d5f11838f 911 */
mbed_official 235:685d5f11838f 912
mbed_official 235:685d5f11838f 913 /**
mbed_official 235:685d5f11838f 914 * @brief return the NOR controller state
mbed_official 235:685d5f11838f 915 * @param hnor: pointer to the NOR handle
mbed_official 235:685d5f11838f 916 * @retval NOR controller state
mbed_official 235:685d5f11838f 917 */
mbed_official 235:685d5f11838f 918 HAL_NOR_StateTypeDef HAL_NOR_GetState(NOR_HandleTypeDef *hnor)
mbed_official 235:685d5f11838f 919 {
mbed_official 235:685d5f11838f 920 return hnor->State;
mbed_official 235:685d5f11838f 921 }
mbed_official 235:685d5f11838f 922
mbed_official 235:685d5f11838f 923 /**
mbed_official 235:685d5f11838f 924 * @brief Returns the NOR operation status.
mbed_official 235:685d5f11838f 925 * @param hnor: pointer to the NOR handle
mbed_official 235:685d5f11838f 926 * @param Address: Device address
mbed_official 532:fe11edbda85c 927 * @param Timeout: NOR programming Timeout
mbed_official 532:fe11edbda85c 928 * @retval NOR_Status: The returned value can be: HAL_NOR_STATUS_SUCCESS, HAL_NOR_STATUS_ERROR
mbed_official 532:fe11edbda85c 929 * or HAL_NOR_STATUS_TIMEOUT
mbed_official 235:685d5f11838f 930 */
mbed_official 532:fe11edbda85c 931 HAL_NOR_StatusTypeDef HAL_NOR_GetStatus(NOR_HandleTypeDef *hnor, uint32_t Address, uint32_t Timeout)
mbed_official 235:685d5f11838f 932 {
mbed_official 532:fe11edbda85c 933 HAL_NOR_StatusTypeDef status = HAL_NOR_STATUS_ONGOING;
mbed_official 235:685d5f11838f 934 uint16_t tmpSR1 = 0, tmpSR2 = 0;
mbed_official 235:685d5f11838f 935 uint32_t tickstart = 0;
mbed_official 235:685d5f11838f 936
mbed_official 235:685d5f11838f 937 /* Poll on NOR memory Ready/Busy signal ------------------------------------*/
mbed_official 235:685d5f11838f 938 HAL_NOR_MspWait(hnor, Timeout);
mbed_official 235:685d5f11838f 939
mbed_official 235:685d5f11838f 940 /* Get the NOR memory operation status -------------------------------------*/
mbed_official 532:fe11edbda85c 941
mbed_official 532:fe11edbda85c 942 /* Get tick */
mbed_official 532:fe11edbda85c 943 tickstart = HAL_GetTick();
mbed_official 532:fe11edbda85c 944 while((status != HAL_NOR_STATUS_SUCCESS ) && (status != HAL_NOR_STATUS_TIMEOUT))
mbed_official 235:685d5f11838f 945 {
mbed_official 235:685d5f11838f 946 /* Check for the Timeout */
mbed_official 235:685d5f11838f 947 if(Timeout != HAL_MAX_DELAY)
mbed_official 235:685d5f11838f 948 {
mbed_official 235:685d5f11838f 949 if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout))
mbed_official 235:685d5f11838f 950 {
mbed_official 532:fe11edbda85c 951 status = HAL_NOR_STATUS_TIMEOUT;
mbed_official 235:685d5f11838f 952 }
mbed_official 235:685d5f11838f 953 }
mbed_official 235:685d5f11838f 954
mbed_official 235:685d5f11838f 955 /* Read NOR status register (DQ6 and DQ5) */
mbed_official 235:685d5f11838f 956 tmpSR1 = *(__IO uint16_t *)Address;
mbed_official 235:685d5f11838f 957 tmpSR2 = *(__IO uint16_t *)Address;
mbed_official 235:685d5f11838f 958
mbed_official 532:fe11edbda85c 959 /* If DQ6 did not toggle between the two reads then return HAL_NOR_STATUS_SUCCESS */
mbed_official 532:fe11edbda85c 960 if((tmpSR1 & NOR_MASK_STATUS_DQ6) == (tmpSR2 & NOR_MASK_STATUS_DQ6))
mbed_official 235:685d5f11838f 961 {
mbed_official 532:fe11edbda85c 962 return HAL_NOR_STATUS_SUCCESS ;
mbed_official 235:685d5f11838f 963 }
mbed_official 235:685d5f11838f 964
mbed_official 532:fe11edbda85c 965 if((tmpSR1 & NOR_MASK_STATUS_DQ5) == NOR_MASK_STATUS_DQ5)
mbed_official 235:685d5f11838f 966 {
mbed_official 532:fe11edbda85c 967 status = HAL_NOR_STATUS_ONGOING;
mbed_official 235:685d5f11838f 968 }
mbed_official 235:685d5f11838f 969
mbed_official 235:685d5f11838f 970 tmpSR1 = *(__IO uint16_t *)Address;
mbed_official 235:685d5f11838f 971 tmpSR2 = *(__IO uint16_t *)Address;
mbed_official 235:685d5f11838f 972
mbed_official 532:fe11edbda85c 973 /* If DQ6 did not toggle between the two reads then return HAL_NOR_STATUS_SUCCESS */
mbed_official 532:fe11edbda85c 974 if((tmpSR1 & NOR_MASK_STATUS_DQ6) == (tmpSR2 & NOR_MASK_STATUS_DQ6))
mbed_official 235:685d5f11838f 975 {
mbed_official 532:fe11edbda85c 976 return HAL_NOR_STATUS_SUCCESS;
mbed_official 235:685d5f11838f 977 }
mbed_official 532:fe11edbda85c 978 if((tmpSR1 & NOR_MASK_STATUS_DQ5) == NOR_MASK_STATUS_DQ5)
mbed_official 235:685d5f11838f 979 {
mbed_official 532:fe11edbda85c 980 return HAL_NOR_STATUS_ERROR;
mbed_official 235:685d5f11838f 981 }
mbed_official 235:685d5f11838f 982 }
mbed_official 235:685d5f11838f 983
mbed_official 235:685d5f11838f 984 /* Return the operation status */
mbed_official 235:685d5f11838f 985 return status;
mbed_official 235:685d5f11838f 986 }
mbed_official 235:685d5f11838f 987
mbed_official 235:685d5f11838f 988 /**
mbed_official 235:685d5f11838f 989 * @}
mbed_official 235:685d5f11838f 990 */
mbed_official 532:fe11edbda85c 991
mbed_official 235:685d5f11838f 992
mbed_official 235:685d5f11838f 993 /**
mbed_official 235:685d5f11838f 994 * @}
mbed_official 235:685d5f11838f 995 */
mbed_official 532:fe11edbda85c 996 #endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx ||\
mbed_official 532:fe11edbda85c 997 STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx */
mbed_official 235:685d5f11838f 998 #endif /* HAL_NOR_MODULE_ENABLED */
mbed_official 235:685d5f11838f 999 /**
mbed_official 235:685d5f11838f 1000 * @}
mbed_official 235:685d5f11838f 1001 */
mbed_official 235:685d5f11838f 1002
mbed_official 235:685d5f11838f 1003 /**
mbed_official 235:685d5f11838f 1004 * @}
mbed_official 235:685d5f11838f 1005 */
mbed_official 235:685d5f11838f 1006
mbed_official 235:685d5f11838f 1007 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/