Mit dieser Library können die “One-Time-Programmable-Bytes” beschrieben werden.
Die STM32F4 CPU besitzt 512 Bytes die nur einmalig beschrieben werden können.
Bei Auslieferung sind diese Bits auf “1″ gesetzt und können per Software nur auf “0″ gelöscht werden.
Die 512 Bytes sind aufgeteilt in 16 Bänke (zu je 32 Bytes) von denen jede Bank mit einem zusätzlichen Lock-Register für weiteres beschreiben geschützt werden kann.
(Dieses Lock-Register kann auch nur gelöscht werden)
Ich habe 4 Funktionen geschrieben. Zwei um die Daten Bytes einzeln lesen und schreiben zu können. (schreiben geht wie gesagt nur Bits auf “0″ setzen)
Mit den zwei anderen Funktionen kann das Lock-Register gelesen und geschrieben werden.
Hinweis : Damit beim testen der Software nicht aus versehen in ein OTP-Register
geschrieben wird, ist im H-File die “write protection” aktiviert. Wenn ihr sicher seid, das euer Programm funktioniert, könnt ihr diese deaktivieren.
Voraussetzungen :
1 2 | Benutzte Module der CooCox-IDE : FLASH Benutzte Librarys : keine |
Funktionen :
1 2 3 4 | uint8_t UB_OTP_Read_DataByte(uint8_t block_nr, uint8_t byte_nr); // zum lesen eines OTP-Bytes ErrorStatusUB_OTP_Write_DataByte(uint8_t block_nr, uint8_t byte_nr, uint8_t byte_value); // zum schreiben eines OTP-Bytes uint8_t UB_OTP_Read_Lock(uint8_t block_nr); // zum lesen vom Lock-Register ErrorStatusUB_OTP_Lock_Block(uint8_t block_nr); // zum setzen vom Lock-Register |
Beispiel :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | //-------------------------------------------------------------- // File : main.c // Datum : 01.01.2015 // Version : 1.0 // Autor : UB // EMail : mc-4u(@)t-online.de // Web : www.mikrocontroller-4u.de // CPU : STM32F4 // IDE : CooCox CoIDE 1.7.4 // GCC : 4.7 2012q4 // Module : CMSIS_BOOT, M4_CMSIS_CORE // Funktion : Demo der OTP-Library // Hinweis : Diese zwei Files muessen auf 8MHz stehen // "cmsis_boot/stm32f4xx.h" // "cmsis_boot/system_stm32f4xx.c" //-------------------------------------------------------------- #include "main.h" #include "stm32_ub_otp.h" int main(void) { uint8_t value; SystemInit(); // Quarz Einstellungen aktivieren // OTP-Byte auslesen (Block=3, Byte=7) value=UB_OTP_Read_DataByte(3,7); while(1) { } } |
Hier die Library zum Download :
Hier der komplette CooCox-Projektordner zum Download :