From 40e04e3772726829d66c12e69f24b03920d79c67 Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Wed, 25 Jan 2017 22:24:18 +0100 Subject: o Moving tinyprintf and stm libraries under thirdparty. --- .../Device_Firmware_Upgrade/src/flash_if.c | 171 +++++++++++++++++++++ 1 file changed, 171 insertions(+) create mode 100644 thirdparty/STM32_USB-FS-Device_Lib_V4.0.0/Projects/Device_Firmware_Upgrade/src/flash_if.c (limited to 'thirdparty/STM32_USB-FS-Device_Lib_V4.0.0/Projects/Device_Firmware_Upgrade/src/flash_if.c') diff --git a/thirdparty/STM32_USB-FS-Device_Lib_V4.0.0/Projects/Device_Firmware_Upgrade/src/flash_if.c b/thirdparty/STM32_USB-FS-Device_Lib_V4.0.0/Projects/Device_Firmware_Upgrade/src/flash_if.c new file mode 100644 index 0000000..e6caf41 --- /dev/null +++ b/thirdparty/STM32_USB-FS-Device_Lib_V4.0.0/Projects/Device_Firmware_Upgrade/src/flash_if.c @@ -0,0 +1,171 @@ +/** + ****************************************************************************** + * @file flash_if.c + * @author MCD Application Team + * @version V4.0.0 + * @date 21-January-2013 + * @brief specific media access Layer for internal flash + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2013 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + + +/* Includes ------------------------------------------------------------------*/ +#include "flash_if.h" +#include "dfu_mal.h" + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ + +#if defined(STM32L1XX_MD) || defined(STM32L1XX_HD)|| defined(STM32L1XX_MD_PLUS) + uint32_t tHalfPage1[128/4]; + uint32_t tHalfPage2[128/4]; +#endif /* STM32L1XX_XD */ + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************* +* Function Name : FLASH_If_Init +* Description : Initializes the Media on the STM32 +* Input : None +* Output : None +* Return : None +*******************************************************************************/ +uint16_t FLASH_If_Init(void) +{ + return MAL_OK; +} + +/******************************************************************************* +* Function Name : FLASH_If_Erase +* Description : Erase sector +* Input : None +* Output : None +* Return : None +*******************************************************************************/ +uint16_t FLASH_If_Erase(uint32_t SectorAddress) +{ +#if defined(STM32L1XX_MD) || defined(STM32L1XX_HD)|| defined(STM32L1XX_MD_PLUS) + FLASH_ClearFlag(FLASH_FLAG_PGAERR | FLASH_FLAG_OPTVERR); + FLASH_ErasePage(SectorAddress); +#else + FLASH_ErasePage(SectorAddress); +#endif /* STM32L1XX_XD */ + + return MAL_OK; +} + +/******************************************************************************* +* Function Name : FLASH_If_Write +* Description : Write sectors +* Input : None +* Output : None +* Return : None +*******************************************************************************/ +uint16_t FLASH_If_Write(uint32_t SectorAddress, uint32_t DataLength) +{ + uint32_t idx = 0; +#if defined(STM32L1XX_MD) || defined(STM32L1XX_HD)|| defined(STM32L1XX_MD_PLUS) + __IO uint32_t* malPointer = (uint32_t *)MAL_Buffer; + __IO uint32_t* memPointer = (uint32_t *)SectorAddress; + __IO uint32_t memBuffer[32]; /* Temporary buffer holding data that will be written in a half-page space */ + __IO uint32_t* mempBuffer = memBuffer; + __IO uint32_t* tmp; +#endif /* STM32L1XX_XD */ + + if (DataLength & 0x3) /* Not an aligned data */ + { + for (idx = DataLength; idx < ((DataLength & 0xFFFC) + 4); idx++) + { + MAL_Buffer[idx] = 0xFF; + } + } + +#if defined(STM32L1XX_MD) || defined(STM32L1XX_HD)|| defined(STM32L1XX_MD_PLUS) + /* Reinitialize the intermediate buffer pointer */ + mempBuffer = memBuffer; + + /* If the address is not aligned to half-page fill the first location with existing data */ + if (((uint32_t)memPointer & 0x7F) != 0) + { + /* get the aligned address */ + tmp = (uint32_t *)((uint32_t)memPointer & 0xFFFFFF80); + + /* Read the first part from the memory */ + while (tmp < memPointer) + { + *(uint32_t *)(mempBuffer++) = *(uint32_t *)(tmp++); + } + } + + while (malPointer < (uint32_t*)(MAL_Buffer + DataLength)) + { + /* Fill with the received buffer */ + while (mempBuffer < (memBuffer + 32)) + { + /* If there are still data available in the received buffer */ + if (malPointer < ((uint32_t *)MAL_Buffer + DataLength)) + { + *(uint32_t *)(mempBuffer++) = *(uint32_t *)(malPointer++); + } + else /* no more data available in the received buffer: fill remaining with dummy 0 */ + { + *(uint32_t *)(mempBuffer++) = 0; + } + } + + /* Write the buffer to the memory*/ + FLASH_ProgramHalfPage(((uint32_t)memPointer & 0xFFFFFF80), (uint32_t *)(memBuffer)); + + /* Increment the memory pointer */ + memPointer = (uint32_t *)(((uint32_t)memPointer & 0xFFFFFF80) + (32*4)); + + /* Reinitialize the intermediate buffer pointer */ + mempBuffer = memBuffer; + } + +#else + + /* Data received are Word multiple */ + for (idx = 0; idx < DataLength; idx = idx + 4) + { + FLASH_ProgramWord(SectorAddress, *(uint32_t *)(MAL_Buffer + idx)); + SectorAddress += 4; + } +#endif /* STM32L1XX_XD */ + + return MAL_OK; +} + +/******************************************************************************* +* Function Name : FLASH_If_Read +* Description : Read sectors +* Input : None +* Output : None +* Return : buffer address pointer +*******************************************************************************/ +uint8_t *FLASH_If_Read (uint32_t SectorAddress, uint32_t DataLength) +{ + return (uint8_t*)(SectorAddress); +} + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ -- cgit v1.2.3