123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- /**
- ******************************************************************************
- * @file flash_if.c
- * @author MCD Application Team
- * @version V1.0.0
- * @date 31-October-2011
- * @brief This file provides high level routines to manage internal Flash
- * programming (erase and write).
- ******************************************************************************
- * @attention
- *
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *
- * <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2>
- ******************************************************************************
- */
- /* Includes ------------------------------------------------------------------*/
- #include "flash_if.h"
- #include "httpserver.h"
- #include "common_config.h"
- #include "wdg.h"
- #include "tinystdio.h"
- /**
- * @brief Чтение данных из flash
- * @param address
- * @retval data
- */
- uint32_t flash_read(uint32_t address)
- {
- return (*(__IO uint32_t*) address);
- }
- /**
- * @brief Unlocks Flash for write access
- * @param None
- * @retval None
- */
- void FLASH_If_Init(void)
- {
- FLASH_Unlock();
- }
- /**
- * @brief This function does an erase of all user flash area
- * @param StartSector: start of user flash area
- * @retval 0: user flash area successfully erased
- * 1: error occurred
- */
- int8_t FLASH_If_Erase(uint32_t StartSector)
- {
- uint32_t FlashAddress;
-
- FlashAddress = StartSector;
- /* Device voltage range supposed to be [2.7V to 3.6V], the operation will
- be done by word */
-
- if (FlashAddress <= (uint32_t) USER_FLASH_LAST_PAGE_ADDRESS)
- {
- FLASH_Unlock();
- GPIOE->ODR ^= WDT_PIN;
- FLASH_EraseSector(FLASH_Sector_5, VoltageRange_3); /* 128 Kbyte */
- GPIOE->ODR ^= WDT_PIN;
- FLASH_EraseSector(FLASH_Sector_6, VoltageRange_3); /* 128 Kbyte */
- GPIOE->ODR ^= WDT_PIN;
- FLASH_EraseSector(FLASH_Sector_7, VoltageRange_3); /* 128 Kbyte */
- GPIOE->ODR ^= WDT_PIN;
- /* Check if we use more than 512K flash */
- if (USER_FLASH_END_ADDRESS > 0x08000000 + 0x7FFFF) {
- FLASH_EraseSector(FLASH_Sector_8, VoltageRange_3); /* 128 Kbyte */
- GPIOE->ODR ^= WDT_PIN;
- FLASH_EraseSector(FLASH_Sector_9, VoltageRange_3); /* 128 Kbyte */
- GPIOE->ODR ^= WDT_PIN;
- }
- FLASH_Lock();
- }
- else
- {
- return (1);
- }
- return (0);
- }
- /**
- * @brief This function writes a data buffer in flash (data are 32-bit aligned).
- * @note After writing data buffer, the flash content is checked.
- * @param FlashAddress: start address for writing data buffer
- * @param Data: pointer on data buffer
- * @param DataLength: length of data buffer (unit is 32-bit word)
- * @retval 0: Data successfully written to Flash memory
- * 1: Error occurred while writing data in Flash memory
- * 2: Written Data in flash memory is different from expected one
- */
- uint32_t FLASH_If_Write(__IO uint32_t* FlashAddress, uint32_t* Data ,uint16_t DataLength)
- {
- uint32_t i = 0;
- uint32_t delta;
- /*
- delta = 0x0805FFFF - *FlashAddress; // ReturnFlashWriteAddress();
- printf("%i", delta);
-
- if ((delta < 1460) && (DataLength != 1))
- DataLength = delta / 4;
- */
- for (i = 0; (i < DataLength) && (*FlashAddress <= (USER_FLASH_END_ADDRESS)); i++)
- {
- /* Device voltage range supposed to be [2.7V to 3.6V], the operation will
- be done by word */
- if (FLASH_ProgramWord(*FlashAddress, *(uint32_t*)(Data+i)) == FLASH_COMPLETE)
- {
- /* Check the written value */
- if (*(uint32_t*)*FlashAddress != *(uint32_t*)(Data+i))
- {
- /* Flash content doesn't match SRAM content */
- return(2);
- }
- /* Increment FLASH destination address */
- *FlashAddress += 4;
- }
- else
- {
- /* Error occurred while writing data in Flash memory */
- return (1);
- }
- }
- return (0);
- }
- /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
|