Mercurial > public > ostc4
diff Small_CPU/Src/tm_stm32f4_otp.c @ 38:5f11787b4f42
include in ostc4 repository
author | heinrichsweikamp |
---|---|
date | Sat, 28 Apr 2018 11:52:34 +0200 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Small_CPU/Src/tm_stm32f4_otp.c Sat Apr 28 11:52:34 2018 +0200 @@ -0,0 +1,66 @@ +/** + * |---------------------------------------------------------------------- + * | Copyright (C) Tilen Majerle, 2014 + * | + * | This program is free software: you can redistribute it and/or modify + * | it under the terms of the GNU General Public License as published by + * | the Free Software Foundation, either version 3 of the License, or + * | any later version. + * | + * | This program is distributed in the hope that it will be useful, + * | but WITHOUT ANY WARRANTY; without even the implied warranty of + * | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * | GNU General Public License for more details. + * | + * | You should have received a copy of the GNU General Public License + * | along with this program. If not, see <http://www.gnu.org/licenses/>. + * |---------------------------------------------------------------------- + */ +#include "tm_stm32f4_otp.h" + +HAL_StatusTypeDef TM_OTP_Write(uint8_t block, uint8_t byte, uint8_t data) +{ + HAL_StatusTypeDef answer; + + /* Check input parameters */ + if ( + block >= OTP_BLOCKS || + byte >= OTP_BYTES_IN_BLOCK + ) { + /* Invalid parameters */ + return HAL_ERROR; + } + + if(*(uint8_t *)(OTP_START_ADDR + block * OTP_BYTES_IN_BLOCK + byte) != 0xFF) + return HAL_ERROR; + + /* Unlock FLASH */ + HAL_FLASH_Unlock(); + + answer = HAL_FLASH_Program(FLASH_TYPEPROGRAM_BYTE, (OTP_START_ADDR + block * OTP_BYTES_IN_BLOCK + byte), data); + + /* Lock FLASH */ + HAL_FLASH_Lock(); + + return answer; +} + + +uint8_t TM_OTP_Read(uint8_t block, uint8_t byte) { + uint8_t data; + + /* Check input parameters */ + if ( + block >= OTP_BLOCKS || + byte >= OTP_BYTES_IN_BLOCK + ) { + /* Invalid parameters */ + return HAL_ERROR; + } + + /* Get value */ + data = *(__IO uint8_t *)(OTP_START_ADDR + block * OTP_BYTES_IN_BLOCK + byte); + + /* Return data */ + return data; +}