You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
2.6 KiB
77 lines
2.6 KiB
/**
|
|
* \file
|
|
* \brief Interface for the Non-Volatile-Memory
|
|
* \author Erich Styger
|
|
* \license SPDX-License-Identifier: BSD-3-Clause
|
|
* This provides an interface to store and retrieve data from the on-chip memory.
|
|
*/
|
|
|
|
#ifndef CONFIGNVM_H_
|
|
#define CONFIGNVM_H_
|
|
|
|
#include "platform.h"
|
|
#if PL_CONFIG_HAS_NVM_CONFIG
|
|
#include <stdint.h>
|
|
#include <stdbool.h>
|
|
#include <stddef.h>
|
|
|
|
#if PL_IS_FRDM
|
|
#define NVMC_FLASH_START_ADDR 0x1FC00 /* NVRM_Config, start address of configuration data in flash */
|
|
#define NVMC_FLASH_BLOCK_SIZE 0x400 /* IntFlashLdd1_BLOCK0_ERASABLE_UNIT_SIZE */
|
|
#elif PL_IS_INTRO_ZUMO_K22
|
|
#define NVMC_FLASH_START_ADDR 0x10000000 /* DFLASH, NVRM_Config, start address of configuration data in flash */
|
|
#define NVMC_FLASH_BLOCK_SIZE 0x1000 /* IntFlashLdd1_BLOCK0_ERASABLE_UNIT_SIZE */
|
|
#else
|
|
#error "unknown platform/board!"
|
|
#endif
|
|
#define NVMC_FLASH_ERASED_UINT8 0xFF
|
|
#define NVMC_FLASH_ERASED_UINT16 0xFFFF
|
|
|
|
typedef struct {
|
|
uint8_t version;
|
|
bool MazeLeftHandOnTheWall; /* use left-hand-on-the-wall */
|
|
} NVMC_RobotData;
|
|
|
|
/* note: blocks need to be 8byte aligned! */
|
|
#define NVMC_DEVICE_ADDR16_START_ADDR (NVMC_FLASH_START_ADDR)
|
|
#define NVMC_DEVICE_ADDR16_DATA_SIZE (2)
|
|
#define NVMC_DEVICE_ADDR16_END_ADDR (NVMC_DEVICE_ADDR16_START_ADDR+NVMC_DEVICE_ADDR16_DATA_SIZE)
|
|
|
|
#define NVMC_REFLECTANCE_DATA_START_ADDR (NVMC_DEVICE_ADDR16_END_ADDR)
|
|
#define NVMC_REFLECTANCE_DATA_SIZE (8*2*2) /* maximum of 8 sensors (min and max) values with 16 bits */
|
|
#define NVMC_REFLECTANCE_END_ADDR (NVMC_REFLECTANCE_DATA_START_ADDR+NVMC_REFLECTANCE_DATA_SIZE)
|
|
|
|
#define NVMC_SUMO_DATA_START_ADDR (NVMC_REFLECTANCE_END_ADDR)
|
|
#define NVMC_SUMO_DATA_SIZE (4) /* 4 bytes of data */
|
|
#define NVMC_SUMO_END_ADDR (NVMC_SUMO_DATA_START_ADDR+NVMC_SUMO_DATA_SIZE)
|
|
|
|
#define NVMC_ROBOT_DATA_START_ADDR (NVMC_SUMO_END_ADDR)
|
|
#define NVMC_ROBOT_DATA_SIZE (sizeof(NVMC_RobotData))
|
|
#define NVMC_ROBOT_END_ADDR (NVMC_ROBOT_DATA_START_ADDR+NVMC_ROBOT_DATA_SIZE)
|
|
|
|
/* Access macros */
|
|
#define NVMC_GetDeviceAddr16Addr() ((uint16_t*)(NVMC_DEVICE_ADDR16_START_ADDR))
|
|
|
|
|
|
uint8_t NVMC_SaveReflectanceData(void *data, uint16_t dataSize);
|
|
void *NVMC_GetReflectanceData(void);
|
|
|
|
uint8_t NVMC_SaveDeviceAddress16(void *data, size_t dataSize);
|
|
|
|
uint8_t NVMC_SaveRobotData(NVMC_RobotData *data);
|
|
const NVMC_RobotData *NVMC_GetRobotData(void);
|
|
|
|
#if PL_CONFIG_APP_SUMO
|
|
uint8_t NVMC_SaveSumoData(void *data, uint16_t dataSize);
|
|
void *NVMC_GetSumoData(void);
|
|
#endif /* PL_CONFIG_APP_SUMO */
|
|
|
|
|
|
void NVMC_Deinit(void);
|
|
|
|
void NVMC_Init(void);
|
|
|
|
|
|
#endif /* #if PL_CONFIG_HAS_NVM_CONFIG */
|
|
|
|
#endif /* CONFIGNVM_H_ */
|
|
|