EEPROM
Detailed Description
The LPC17 variant uses the on-board EEPROM of the LPCXPRESSO module
The 24LC64 allows to store up to 8192 bytes.
Since this driver works halfword-wise to keep it compatible to the STM32 variant, this means that EEPROM_EMULATED_SIZE can be up to 4096
Optionally an external EEPROM can be connected to one of the two IIC ports of the MBHP_CORE_LPC17 by setting following defines in mios32_config.h
set this either to 0 (for first IIC port) or 2 (for second IIC port) IIC1 selects the on-board EEPROM define EEPROM_IIC_DEVICE 1 Set a device number if the 3 address pins are not tied to ground define EEPROM_IIC_CS 0
Usage:
-
EEPROM_Init(0) should be called after startup to check for valid flash pages. Pages will be formatted if this hasn't been done before.
Formatting can be enforced with EEPROM_Init(1)
-
EEPROM_Read(u16 address) reads a 16bit value from EEPROM
Returns <0 if address hasn't been programmed yet (it's up to the application, how to handle this, e.g. value could be zeroed)
Extra LPC17: returns -1 if EEPROM not available
-
EEPROM_Write(u16 address, u16 value): programs the 16bit value
Configuration: optionally EEPROM_EMULATED_SIZE can be overruled in mios32_config.h to change the number of virtual addresses.
By default, 128 addresses are available:
#define EEPROM_EMULATED_SIZE 128 // -> 128 half words = 256 bytes
Example application:
$MIOS32_PATH/apps/tutorials/025_sysex_and_eeprom (see patch.c)
Usage:
-
EEPROM_Init(0) should be called after startup to check for valid flash pages. Pages will be formatted if this hasn't been done before.
Formatting can be enforced with EEPROM_Init(1)
-
EEPROM_Read(u16 address) reads a 16bit value from EEPROM
Returns <0 if address hasn't been programmed yet (it's up to the application, how to handle this, e.g. value could be zeroed)
-
EEPROM_Write(u16 address, u16 value): programs the 16bit value
Configuration: optionally EEPROM_EMULATED_SIZE can be overruled in mios32_config.h to change the number of virtual addresses.
By default, 128 addresses are available:
#define EEPROM_EMULATED_SIZE 128 // -> 128 half words = 256 bytes
Note: each address allocates 4 bytes in flash. The emulation can handle with two pages (STM32F103RB: 2*1k, STM32F103RE: 2*2k), and the number of addresses shouldn't exceed (page size - 4).
Accordingly, the maximum EEPROM_EMULATED_SIZE for STM32F103RB is 255, and for STM32F103RE 511.
Than lower the specified size, than faster EEPROM_Write() will work, especially once pages have to be switched.
Example application:
$MIOS32_PATH/apps/tutorials/025_sysex_and_eeprom (see patch.c)
Additional informations to EEPROM emulation approach:
http://www.st.com/stonline/products/literature/an/13718.pdf
Usage:
-
EEPROM_Init(0) should be called after startup to check for valid flash pages. Pages will be formatted if this hasn't been done before.
Formatting can be enforced with EEPROM_Init(1)
-
EEPROM_Read(u16 address) reads a 16bit value from EEPROM
Returns <0 if address hasn't been programmed yet (it's up to the application, how to handle this, e.g. value could be zeroed)
-
EEPROM_Write(u16 address, u16 value): programs the 16bit value
Configuration: optionally EEPROM_EMULATED_SIZE can be overruled in mios32_config.h to change the number of virtual addresses.
By default, 128 addresses are available:
#define EEPROM_EMULATED_SIZE 128 // -> 128 half words = 256 bytes
Note: each 16bit address allocates 4 bytes in flash. The emulation can handle with two pages (STM32F4xx: 2*16k), and the number of addresses shouldn't exceed (page size - 4).
Accordingly, the maximum EEPROM_EMULATED_SIZE for STM32F4xx is 4095.
Than lower the specified size, than faster EEPROM_Write() will work, especially once pages have to be switched.
Example application:
$MIOS32_PATH/apps/tutorials/025_sysex_and_eeprom (see patch.c)
Additional informations to EEPROM emulation approach:
http://www.st.com/stonline/products/literature/an/13718.pdf
Define Documentation
#define DEBUG_MSG MIOS32_MIDI_SendDebugMessage |
#define DEBUG_VERBOSE_LEVEL 1 |
#define ERASED ((uint16_t)0xFFFF) |
#define ERASED ((uint16_t)0xFFFF) |
#define NO_VALID_PAGE ((uint16_t)0x00AB) |
#define NO_VALID_PAGE ((uint16_t)0x00AB) |
#define PAGE0 ((uint16_t)0x0000) |
#define PAGE0 ((uint16_t)0x0000) |
#define PAGE0_BASE_ADDRESS ((uint32_t)(EEPROM_START_ADDRESS + 0x000)) |
#define PAGE0_BASE_ADDRESS ((uint32_t)(EEPROM_START_ADDRESS + 0x000)) |
#define PAGE0_END_ADDRESS ((uint32_t)(EEPROM_START_ADDRESS + (PAGE_SIZE - 1))) |
#define PAGE0_END_ADDRESS ((uint32_t)(EEPROM_START_ADDRESS + (PAGE_SIZE - 1))) |
#define PAGE1 ((uint16_t)0x0001) |
#define PAGE1 ((uint16_t)0x0001) |
#define PAGE1_BASE_ADDRESS ((uint32_t)(EEPROM_START_ADDRESS + PAGE_SIZE)) |
#define PAGE1_BASE_ADDRESS ((uint32_t)(EEPROM_START_ADDRESS + PAGE_SIZE)) |
#define PAGE1_END_ADDRESS ((uint32_t)(EEPROM_START_ADDRESS + (2 * PAGE_SIZE - 1))) |
#define PAGE1_END_ADDRESS ((uint32_t)(EEPROM_START_ADDRESS + (2 * PAGE_SIZE - 1))) |
#define PAGE_FULL ((uint8_t)0x80) |
#define PAGE_FULL ((uint8_t)0x80) |
#define READ_FROM_VALID_PAGE ((uint8_t)0x00) |
#define READ_FROM_VALID_PAGE ((uint8_t)0x00) |
#define RECEIVE_DATA ((uint16_t)0xEEEE) |
#define RECEIVE_DATA ((uint16_t)0xEEEE) |
#define VALID_PAGE ((uint16_t)0x0000) |
#define VALID_PAGE ((uint16_t)0x0000) |
#define WRITE_IN_VALID_PAGE ((uint8_t)0x01) |
#define WRITE_IN_VALID_PAGE ((uint8_t)0x01) |
Function Documentation
Restore the pages to a known good state in case of page's status corruption after a power loss.
Connects to the (on-board) EEPROM
- Parameters:
-
[in] | mode | 0: normal initialisation, 1: enforce formatting |
- Returns:
- < 0 on error
- Parameters:
-
| mode | 0: normal initialisation, 1: enforce formatting |
- Return values:
-
| - | < 0: error during writing flash
|
s32 EEPROM_Read |
( |
u16 |
VirtAddress |
) |
|
Returns the last stored variable data, if found, which correspond to the passed virtual address.
Returns the 16bit word on the given halfword address
- Parameters:
-
[in] | address | the address which should be read |
- Returns:
- >= 0 if value could be successfully read (16bit value)
-
-1 if EEPROM not available
- Parameters:
-
| VirtAddress,: | Variable virtual address |
- Return values:
-
| Success | or error status:
- >= 0: the 16bit variable if it has been found
- -1: if the variable was not found (not programmed yet)
- -2: if no valid page was found.
|
s32 EEPROM_SendDebugMessage |
( |
u32 |
mode |
) |
|
Sends the EEPROM content and optionally the whole flash page content to the MIOS Terminal
- Parameters:
-
[in] | mode | following modes are provided:
-
0: send EEPROM content
-
1: send content of flash pages
-
2: send EEPROM content and flash pages
|
- Returns:
- < 0 on errors
s32 EEPROM_Write |
( |
u16 |
VirtAddress, |
|
|
u16 |
Data | |
|
) |
| | |
Writes/upadtes variable data in EEPROM.
Writes into EEPROM at given halfword address
- Parameters:
-
[in] | address | the address which should be written |
[in] | value | the 16bit value which should be written |
- Returns:
- 0 on success, < 0 on errors
- Parameters:
-
| VirtAddress,: | Variable virtual address |
| Data,: | 16 bit data to be written |
- Return values:
-
| Success | or error status:
- 0: on success
- -1: if valid page is full
- -2: if no valid page was found
- -3: on write flash error
|