EEPROM for SX1272

Dependencies:   X_NUCLEO_IKS01A1 driver_mbed_TH02 LoRaWAN-lib-v1_0_1 SX1272Lib mbed

Fork of Canada-SX1272-LoRaWAN-Bootcamp by Uttam Bhat

app/eeprom.cpp

Committer:
terence304
Date:
2018-01-24
Revision:
8:bca4f3d51eaa
Child:
9:4c8f32a4044d

File content as of revision 8:bca4f3d51eaa:

#include "mbed.h"
#include "eeprom.h"

#if defined( TARGET_NUCLEO_L476RG )
#define DATA_EEPROM_BASE    ( ( uint32_t )0x0807F800U )
#define DATA_EEPROM_END     ( ( uint32_t )DATA_EEPROM_BASE + 2048 )
#elif defined( TARGET_NUCLEO_L152RE )
#define DATA_EEPROM_BASE    ( ( uint32_t )0x08080000U ) 
#define DATA_EEPROM_END     ( ( uint32_t )0x080807FFU )
#else
#error "Please define EEPROM base address and size for your board "
#endif

uint8_t EepromMcuReadBuffer( uint16_t addr, uint8_t *buffer, uint16_t size )
{
    assert_param( buffer != NULL );

    // assert_param( addr >= DATA_EEPROM_BASE );
    assert_param( buffer != NULL );
    assert_param( size < ( DATA_EEPROM_END - DATA_EEPROM_BASE ) );

    memcpy( buffer, ( uint8_t* )DATA_EEPROM_BASE, size );

    return SUCCESS;
}

uint8_t EepromMcuWriteBuffer( uint16_t addr, uint8_t *buffer, uint16_t size )
{
    int n = size / 4 + (size % 4 ? 1 : 0);
    uint32_t *flash = ( uint32_t* )buffer;

    assert_param( buffer != NULL );
    assert_param( size < ( DATA_EEPROM_END - DATA_EEPROM_BASE ) );

    HAL_FLASH_Unlock( );

    for( uint32_t i = 0; i < n; i++ )
    {
        HAL_FLASH_Program( 0x02U, DATA_EEPROM_BASE + \
                           ( 4 * i ), flash[i] );
    }

    HAL_FLASH_Lock( );

    return SUCCESS;
}