simple test EEPROM emulation (STM algorithm described in the application notes: AN4061, AN3969, AN2594, AN3390, AN4056) for STM32F091

Dependencies:   mbed

Description in AN4061 from STM.

Changed (compared with the original code AN4061):

  • possibility of a larger size of emulated EEPROM (using multiple Flash pages)
  • dummy variables prevent overwrite code in Flash by algorithm of EEPROM emulation




Macro PAGE_NB_PVP (in eeprom.h) defines the size of the virtual page.
Eg. For F091 where Flash page are 2kB value 4 gives 8kB.

Size 8kB virtual page gives you the ability to use max. approx. 2k of 16-bit variables.

Committer:
mega64
Date:
Sun May 29 01:22:48 2016 +0000
Revision:
0:bbe849f641a8
Child:
2:3d16b28380a9
simple test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mega64 0:bbe849f641a8 1 /**
mega64 0:bbe849f641a8 2 ******************************************************************************
mega64 0:bbe849f641a8 3 * @file main.cpp
mega64 0:bbe849f641a8 4 * @author ANG Group (Nelson Santos; Irina Baptista; Pierluigi Urru)
mega64 0:bbe849f641a8 5 * @version V0.0.3
mega64 0:bbe849f641a8 6 * @brief Simple Example application for using the X_NUCLEO_IKS01A1
mega64 0:bbe849f641a8 7 * MEMS Inertial & Environmental Sensor Nucleo expansion board.
mega64 0:bbe849f641a8 8 ******************************************************************************
mega64 0:bbe849f641a8 9 */
mega64 0:bbe849f641a8 10
mega64 0:bbe849f641a8 11 #include "mbed.h"
mega64 0:bbe849f641a8 12 #include "eeprom.h"
mega64 0:bbe849f641a8 13 #include <ctype.h>
mega64 0:bbe849f641a8 14
mega64 0:bbe849f641a8 15 uint16_t n = 0;
mega64 0:bbe849f641a8 16 /* Virtual address defined by the user: 0xFFFF value is prohibited */
mega64 0:bbe849f641a8 17 uint16_t VirtAddVarTab[] = {0x5555, 0x6666, 0x7777};
mega64 0:bbe849f641a8 18 uint16_t VarDataTab[] = {0, 0, 0};
mega64 0:bbe849f641a8 19
mega64 0:bbe849f641a8 20
mega64 0:bbe849f641a8 21 int main()
mega64 0:bbe849f641a8 22 {
mega64 0:bbe849f641a8 23
mega64 0:bbe849f641a8 24 /* Unlock the Flash Program Erase controller */
mega64 0:bbe849f641a8 25 HAL_FLASH_Unlock();
mega64 0:bbe849f641a8 26
mega64 0:bbe849f641a8 27 EE_Init();
mega64 0:bbe849f641a8 28
mega64 0:bbe849f641a8 29 printf("EEPROM emulation test\n");
mega64 0:bbe849f641a8 30
mega64 0:bbe849f641a8 31 printf("\n\rType one of the following commands and press space or enter");
mega64 0:bbe849f641a8 32 printf("\n\r READ - read all variables\n\r WRITE1 <n> - write first variable\n\r WRITE2 <n> - write second variable\n\r WRITE3 <n> - write third variable");
mega64 0:bbe849f641a8 33 printf("\n\rwhere <n> is uint16_t value (0-65535)");
mega64 0:bbe849f641a8 34 printf("\n\r");
mega64 0:bbe849f641a8 35
mega64 0:bbe849f641a8 36
mega64 0:bbe849f641a8 37 char command[20];
mega64 0:bbe849f641a8 38 char arg[10];
mega64 0:bbe849f641a8 39 int i;
mega64 0:bbe849f641a8 40
mega64 0:bbe849f641a8 41 while(1) {
mega64 0:bbe849f641a8 42 scanf("%s", command);
mega64 0:bbe849f641a8 43 i=0;
mega64 0:bbe849f641a8 44 while(command[i])
mega64 0:bbe849f641a8 45 {
mega64 0:bbe849f641a8 46 command[i]=toupper(command[i]);
mega64 0:bbe849f641a8 47 i++;
mega64 0:bbe849f641a8 48 }
mega64 0:bbe849f641a8 49
mega64 0:bbe849f641a8 50
mega64 0:bbe849f641a8 51 if (strcmp("READ", command)==0) {
mega64 0:bbe849f641a8 52 for (i=0; i<3; i++) {
mega64 0:bbe849f641a8 53 EE_ReadVariable(VirtAddVarTab[i], &VarDataTab[i]);
mega64 0:bbe849f641a8 54 };
mega64 0:bbe849f641a8 55 printf("\nvar1=%6u, var2=%6u, var3=%6u",VarDataTab[0],VarDataTab[1],VarDataTab[2]);
mega64 0:bbe849f641a8 56 }
mega64 0:bbe849f641a8 57 ///////////////////////////////////////////////////////////////////////////////////////////////////////
mega64 0:bbe849f641a8 58 else if (strcmp("WRITE1", command)==0) {
mega64 0:bbe849f641a8 59 scanf("%s", arg);
mega64 0:bbe849f641a8 60 printf("\nok");
mega64 0:bbe849f641a8 61 n=atoi(arg);
mega64 0:bbe849f641a8 62 EE_WriteVariable(VirtAddVarTab[0], n);
mega64 0:bbe849f641a8 63 }
mega64 0:bbe849f641a8 64 ////////////////////////////////////////////////////////////////////////////////////
mega64 0:bbe849f641a8 65 else if (strcmp("WRITE2", command)==0) {
mega64 0:bbe849f641a8 66 scanf("%s", arg);
mega64 0:bbe849f641a8 67 printf("\nok");
mega64 0:bbe849f641a8 68 n=atoi(arg);
mega64 0:bbe849f641a8 69 EE_WriteVariable(VirtAddVarTab[1], n);
mega64 0:bbe849f641a8 70 }
mega64 0:bbe849f641a8 71 ////////////////////////////////////////////////////////////////////////////////////
mega64 0:bbe849f641a8 72 else if (strcmp("WRITE3", command)==0) {
mega64 0:bbe849f641a8 73 scanf("%s", arg);
mega64 0:bbe849f641a8 74 printf("\nok");
mega64 0:bbe849f641a8 75 n=atoi(arg);
mega64 0:bbe849f641a8 76 EE_WriteVariable(VirtAddVarTab[2], n);
mega64 0:bbe849f641a8 77 }
mega64 0:bbe849f641a8 78 ////////////////////////////////////////////////////////////////////////////////////
mega64 0:bbe849f641a8 79 else if (strcmp("T1", command)==0) {
mega64 0:bbe849f641a8 80 // multiple write test. After test var1 = 1000
mega64 0:bbe849f641a8 81 printf("\nok");
mega64 0:bbe849f641a8 82 for (n=0;n<1001;n++)
mega64 0:bbe849f641a8 83 {
mega64 0:bbe849f641a8 84 EE_WriteVariable(VirtAddVarTab[0], n);
mega64 0:bbe849f641a8 85 };
mega64 0:bbe849f641a8 86 }
mega64 0:bbe849f641a8 87 ////////////////////////////////////////////////////////////////////////////////////
mega64 0:bbe849f641a8 88 else if (strcmp("T2", command)==0) {
mega64 0:bbe849f641a8 89 // multiple write test. After test var1 = 1001
mega64 0:bbe849f641a8 90 printf("\nok");
mega64 0:bbe849f641a8 91 for (n=0;n<1002;n++)
mega64 0:bbe849f641a8 92 {
mega64 0:bbe849f641a8 93 EE_WriteVariable(VirtAddVarTab[1], n);
mega64 0:bbe849f641a8 94 };
mega64 0:bbe849f641a8 95 }
mega64 0:bbe849f641a8 96 ////////////////////////////////////////////////////////////////////////////////////
mega64 0:bbe849f641a8 97 else if (strcmp("T3", command)==0) {
mega64 0:bbe849f641a8 98 // multiple write test. After test var1 = 1002
mega64 0:bbe849f641a8 99 printf("\nok");
mega64 0:bbe849f641a8 100 for (n=0;n<1003;n++)
mega64 0:bbe849f641a8 101 {
mega64 0:bbe849f641a8 102 EE_WriteVariable(VirtAddVarTab[2], n);
mega64 0:bbe849f641a8 103 };
mega64 0:bbe849f641a8 104 }
mega64 0:bbe849f641a8 105 ////////////////////////////////////////////////////////////////////////////////////
mega64 0:bbe849f641a8 106
mega64 0:bbe849f641a8 107 else perror("\nThere is no command matching. Try again");
mega64 0:bbe849f641a8 108
mega64 0:bbe849f641a8 109 command[0] = arg[0] = 0;
mega64 0:bbe849f641a8 110 printf("\n\r");
mega64 0:bbe849f641a8 111 }
mega64 0:bbe849f641a8 112
mega64 0:bbe849f641a8 113
mega64 0:bbe849f641a8 114 }