| 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****/
 
 
  |