38
+ − 1 /**
+ − 2 * @author Tilen Majerle
+ − 3 * @email tilen@majerle.eu
+ − 4 * @website http://stm32f4-discovery.com
+ − 5 * @link http://stm32f4-discovery.com/2015/01/library-49-one-time-programmable-otp-bytes-on-stm32f4xx
+ − 6 * @version v1.0
+ − 7 * @ide Keil uVision
+ − 8 * @license GNU GPL v3
+ − 9 * @brief OTP (One-Time Programmable) flash section library for STM32F4xx
+ − 10 *
+ − 11 @verbatim
+ − 12 ----------------------------------------------------------------------
+ − 13 Copyright (C) Tilen Majerle, 2015
+ − 14
+ − 15 This program is free software: you can redistribute it and/or modify
+ − 16 it under the terms of the GNU General Public License as published by
+ − 17 the Free Software Foundation, either version 3 of the License, or
+ − 18 any later version.
+ − 19
+ − 20 This program is distributed in the hope that it will be useful,
+ − 21 but WITHOUT ANY WARRANTY; without even the implied warranty of
+ − 22 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ − 23 GNU General Public License for more details.
+ − 24
+ − 25 You should have received a copy of the GNU General Public License
+ − 26 along with this program. If not, see <http://www.gnu.org/licenses/>.
+ − 27 ----------------------------------------------------------------------
+ − 28 @endverbatim
+ − 29 */
+ − 30 #ifndef TM_STM32F4_OPT_H
+ − 31 #define TM_STM32F4_OPT_H
+ − 32
+ − 33 /* C++ detection */
+ − 34 #ifdef __cplusplus
+ − 35 extern "C" {
+ − 36 #endif
+ − 37 /**
+ − 38 * @addtogroup TM_STM32F4xx_Libraries
+ − 39 * @{
+ − 40 */
+ − 41
+ − 42 /**
+ − 43 * @defgroup TM_OTP
+ − 44 * @brief OTP (One-Time Programmable) flash section library for STM32F4xx - http://stm32f4-discovery.com/2015/01/library-49-one-time-programmable-otp-bytes-on-stm32f4xx
+ − 45 * @{
+ − 46 *
+ − 47 * \par Changelog
+ − 48 *
+ − 49 @verbatim
+ − 50 Version 1.0
+ − 51 - First release
+ − 52 @endverbatim
+ − 53 *
+ − 54 * \par Dependencies
+ − 55 *
+ − 56 @verbatim
+ − 57 - STM32F4xx
+ − 58 - STM32F4xx RCC
+ − 59 - STM32F4xx FLASH
+ − 60 - defines.h
+ − 61 @endverbatim
+ − 62 */
+ − 63 //#include "stm32f4xx.h"
+ − 64 //#include "stm32f4xx_rcc.h"
+ − 65 //#include "stm32f4xx_flash.h"
+ − 66 //#include "defines.h"
+ − 67 #include "stm32f4xx_hal.h"
+ − 68
+ − 69 /**
+ − 70 * @defgroup TM_OTP_Macros
+ − 71 * @brief Library defines
+ − 72 * @{
+ − 73 */
+ − 74
+ − 75 /**
+ − 76 * @brief OTP memory start address
+ − 77 */
+ − 78 #define OTP_START_ADDR (0x1FFF7800)
+ − 79
+ − 80 /**
+ − 81 * @brief OTP memory lock address
+ − 82 */
+ − 83 #define OTP_LOCK_ADDR (0x1FFF7A00)
+ − 84
+ − 85 /**
+ − 86 * @brief Number of OTP blocks
+ − 87 */
+ − 88 #define OTP_BLOCKS 16
+ − 89
+ − 90 /**
+ − 91 * @brief Number of bytes in one block
+ − 92 */
+ − 93 #define OTP_BYTES_IN_BLOCK 32
+ − 94
+ − 95 /**
+ − 96 * @brief Number of all OTP bytes
+ − 97 */
+ − 98 #define OTP_SIZE (OTP_BLOCKS * OTP_BYTES_IN_BLOCK)
+ − 99
+ − 100 /**
+ − 101 * @}
+ − 102 */
+ − 103
+ − 104
+ − 105 /**
+ − 106 * @defgroup TM_OTP_Functions
+ − 107 * @brief Library Functions
+ − 108 * @{
+ − 109 */
+ − 110
+ − 111 /**
+ − 112 * @brief Writes one-time data to specific block and specific byte in this block
+ − 113 * @note You can only ONCE write data at desired byte in specific block, if you will try to do it more times, you can have broken data at this location.
+ − 114 * @param block: OTP block number, 0 to 15 is allowed
+ − 115 * @param byte: OTP byte inside one block, 0 to 31 is allowed
+ − 116 * @param data: Data to be written to OTP memory
+ − 117 * @retval Member of @ref TM_OTP_Result_t enumeration
+ − 118 */
+ − 119 HAL_StatusTypeDef TM_OTP_Write(uint8_t block, uint8_t byte, uint8_t data);
+ − 120
+ − 121 /**
+ − 122 * @brief Reads data from specific block and specific byte in this block
+ − 123 * @note You can read data unlimited times from locations
+ − 124 * @param block: OTP block number, 0 to 15 is allowed
+ − 125 * @param byte: OTP byte inside one block, 0 to 31 is allowed
+ − 126 * @retval Value at specific block and byte location, or 0 if location is invalid
+ − 127 */
+ − 128 uint8_t TM_OTP_Read(uint8_t block, uint8_t byte);
+ − 129
+ − 130
+ − 131 /**
+ − 132 * @}
+ − 133 */
+ − 134
+ − 135 /**
+ − 136 * @}
+ − 137 */
+ − 138
+ − 139 /**
+ − 140 * @}
+ − 141 */
+ − 142
+ − 143 /* C++ detection */
+ − 144 #ifdef __cplusplus
+ − 145 }
+ − 146 #endif
+ − 147
+ − 148 #endif // TM_STM32F4_OPT_H