Files
TX/source/eeprom.h

94 lines
4.2 KiB
C
Raw Permalink Normal View History

/*
* eeprom.h
*
* Created on: Nov 11, 2022
* Author: Keith.Lloyd
*/
#ifndef EEPROM_H_
#define EEPROM_H_
#define EE_BUFFER_SIZE (8) //size of buffer for send/receive 4-byte words
#define EE_BYTES_PER_WORD (4)
#define EE_HEADER_NUM_BYTES (3) //number of bytes in m95512 header - instruction, addrH, addrL
/*
* CAUTION: avoid writing across a 128 byte page boundary! This will cause rollover per the datasheet section 6.6
*/
//EEPROM 128 byte pages
#define EE_PAGE_SIZE 128 //Page size in bytes
#define EE_PAGE_BL (0 * EE_PAGE_SIZE) //Bootloader data. DO NOT USE!
#define EE_PAGE_SYS (1 * EE_PAGE_SIZE) //System info
#define EE_PAGE_DATA (2 * EE_PAGE_SIZE) //Saved data
#define EE_PAGE_FREQ1 (3 * EE_PAGE_SIZE) //Frequency data page 1
#define EE_PAGE_FREQ2 (4 * EE_PAGE_SIZE) //Frequency data page 2
#define EE_PAGE_HW_FIXES (5 * EE_PAGE_SIZE) //END of EEPROM data. Used for EE_EraseAllData()
/*******************************************************************************************************************/
//SYSTEM INFO - EE_PAGE_SYS
/*******************************************************************************************************************/
//defines are eeprom addresses in bytes
#define EE_SYS_MFG (EE_PAGE_SYS + 0) //Manufacturer string SYS_INFO_LENGTH is 24 bytes
#define EE_SYS_MODEL_NAME (EE_PAGE_SYS + 24) //Model name string SYS_INFO_LENGTH is 24 bytes
#define EE_SYS_SERIAL (EE_PAGE_SYS + 48) //Serial Number string SYS_INFO_LENGTH is 24 bytes
#define EE_SYS_MFG_DATE (EE_PAGE_SYS + 72) //Manufacture Date SYS_INFO_LENGTH is 24 bytes
#define EE_SYS_MODEL_NUMBER (EE_PAGE_SYS + 96) //Model number string SYS_INFO_LENGTH is 24 bytes
//Next available is 120
/*******************************************************************************************************************/
//SAVED DATA - EE_PAGE_DATA
/*******************************************************************************************************************/
#define EE_DATA_FREQUENCY (EE_PAGE_DATA + 0) //Index of operating frequency UINT32 4 bytes
#define EE_DATA_MODE (EE_PAGE_DATA + 4) //Mode ( In Bytes)
#define EE_DATA_TIMER (EE_PAGE_DATA + 8) //autoShutdown Timer setting UINT32 4 bytes
#define EE_DATA_LANGUAGE (EE_PAGE_DATA + 12) //System language UINT32 4 bytes
/*******************************************************************************************************************/
//FREQUENCY DATA - EE_PAGE_HARDWARE_FIXES
/*******************************************************************************************************************/
#define EE_FREQ_NUM (EE_PAGE_FREQ1 + 0) //Number of frequencies
//Addresses 4 through 39 reserved for future use
#define EE_FREQ_START (EE_PAGE_FREQ1 + 40) //Start of frequency data. Freqs are save as packed UINT32
//Frequencies are stored as 1 packed UINT32_t per frequency, so 32 per 128 byte EEPROM page.
//21 on page1 and up to 32 on page2 gives 53 max frequencies. Need more space if storing more than that!
//If each frequency stored is a separate call to EE_WriteMemoryUINT32() it will not cause problems with EEPROM page wrap
/*******************************************************************************************************************/
//HARDWARE FIX DATA - EE_PAGE_FREQ
/*******************************************************************************************************************/
#define EE_HWFIX_INIT (EE_PAGE_HW_FIXES + 0) //Hardware fix eeprom page initialized
#define EE_HWFIX_VBATT_CAP_021 (EE_PAGE_HW_FIXES + 4) //Add cap parallel with R6 on 208021
#define EE_HWFIX_MAIN_PCBA_PN (EE_PAGE_HW_FIXES + 8) //Main PCBA part number
//future hardware fixes go here
void EE_LoadData(void);
bool EE_LoadFrequencies(void);
void EE_SaveData(void); // Save settings to EEPROM
void EE_EraseAllData(void);
void EE_Test(void);
void EE_TestBytes(void);
void EE_WriteMemoryUINT32(uint16_t address, uint32_t *pdata);
void EE_ReadMemoryUINT32(uint16_t address, uint32_t *pdata);
void EE_WriteUINT32(uint16_t address, uint32_t data);
uint32_t EE_ReadUINT32(uint16_t address);
void EE_WriteBytes(uint16_t address, uint8_t *pdata, uint16_t numBytes);
void EE_ReadBytes(uint16_t address, uint8_t *pdata, uint16_t numBytes);
#endif /* EEPROM_H_ */