speeduino/speeduino/storage.h

201 lines
15 KiB
C

#ifndef STORAGE_H
#define STORAGE_H
/** @file storage.h
* @brief Functions for reading and writing user settings to/from EEPROM
*
* Current layout of EEPROM is as follows (Version 18):
*
* |Offset (Dec)|Size (Bytes)| Description | Reference |
* | ---------: | :--------: | :----------------------------------: | :--------------------------------- |
* | 0 |1 | EEPROM version | @ref EEPROM_DATA_VERSION |
* | 1 |2 | X and Y sizes for fuel table | |
* | 3 |256 | Fuel table (16x16) | @ref EEPROM_CONFIG1_MAP |
* | 259 |16 | Fuel table (X axis) (RPM) | |
* | 275 |16 | Fuel table (Y axis) (MAP/TPS) | |
* | 291 |128 | Page 2 settings | @ref EEPROM_CONFIG2_START |
* | 419 |2 | X and Y sizes for ignition table | |
* | 421 |256 | Ignition table (16x16) | @ref EEPROM_CONFIG3_MAP |
* | 677 |16 | Ignition table (X axis) (RPM) | |
* | 693 |16 | Ignition table (Y axis) (MAP/TPS) | |
* | 709 |128 | Page 4 settings | @ref EEPROM_CONFIG4_START |
* | 837 |2 | X and Y sizes for AFR target table | |
* | 839 |256 | AFR target table (16x16) | @ref EEPROM_CONFIG5_MAP |
* | 1095 |16 | AFR target table (X axis) (RPM) | |
* | 1111 |16 | AFR target table (Y axis) (MAP/TPS) | |
* | 1127 |128 | Page 6 settings | @ref EEPROM_CONFIG6_START |
* | 1255 |2 | X and Y sizes for boost table | |
* | 1257 |64 | Boost table (8x8) | @ref EEPROM_CONFIG7_MAP1 |
* | 1321 |8 | Boost table (X axis) (RPM) | |
* | 1329 |8 | Boost table (Y axis) (TPS) | |
* | 1337 |2 | X and Y sizes for vvt table | |
* | 1339 |64 | VVT table (8x8) | @ref EEPROM_CONFIG7_MAP2 |
* | 1403 |8 | VVT table (X axis) (RPM) | |
* | 1411 |8 | VVT table (Y axis) (MAP) | |
* | 1419 |2 | X and Y sizes for staging table | |
* | 1421 |64 | Staging table (8x8) | @ref EEPROM_CONFIG7_MAP3 |
* | 1485 |8 | Staging table (X axis) (RPM) | |
* | 1493 |8 | Staging table (Y axis) (MAP) | |
* | 1501 |2 | X and Y sizes for trim1 table | |
* | 1503 |36 | Trim1 table (6x6) | @ref EEPROM_CONFIG8_MAP1 |
* | 1539 |6 | Trim1 table (X axis) (RPM) | |
* | 1545 |6 | Trim1 table (Y axis) (MAP) | |
* | 1551 |2 | X and Y sizes for trim2 table | |
* | 1553 |36 | Trim2 table (6x6) | @ref EEPROM_CONFIG8_MAP2 |
* | 1589 |6 | Trim2 table (X axis) (RPM) | |
* | 1595 |6 | Trim2 table (Y axis) (MAP) | |
* | 1601 |2 | X and Y sizes for trim3 table | |
* | 1603 |36 | Trim3 table (6x6) | @ref EEPROM_CONFIG8_MAP3 |
* | 1639 |6 | Trim3 table (X axis) (RPM) | |
* | 1545 |6 | Trim3 table (Y axis) (MAP) | |
* | 1651 |2 | X and Y sizes for trim4 table | |
* | 1653 |36 | Trim4 table (6x6) | @ref EEPROM_CONFIG8_MAP4 |
* | 1689 |6 | Trim4 table (X axis) (RPM) | |
* | 1595 |6 | Trim4 table (Y axis) (MAP) | |
* | 1701 |9 | HOLE ?? | |
* | 1710 |192 | Page 9 settings | @ref EEPROM_CONFIG9_START |
* | 1902 |192 | Page 10 settings | @ref EEPROM_CONFIG10_START |
* | 2094 |2 | X and Y sizes for fuel2 table | |
* | 2096 |256 | Fuel2 table (16x16) | @ref EEPROM_CONFIG11_MAP |
* | 2352 |16 | Fuel2 table (X axis) (RPM) | |
* | 2368 |16 | Fuel2 table (Y axis) (MAP/TPS) | |
* | 2384 |1 | HOLE ?? | |
* | 2385 |2 | X and Y sizes for WMI table | |
* | 2387 |64 | WMI table (8x8) | @ref EEPROM_CONFIG12_MAP |
* | 2451 |8 | WMI table (X axis) (RPM) | |
* | 2459 |8 | WMI table (Y axis) (MAP) | |
* | 2467 |2 | X and Y sizes VVT2 table | |
* | 2469 |64 | VVT2 table (8x8) | @ref EEPROM_CONFIG12_MAP2 |
* | 2553 |8 | VVT2 table (X axis) (RPM) | |
* | 2541 |8 | VVT2 table (Y axis) (MAP) | |
* | 2549 |2 | X and Y sizes dwell table | |
* | 2551 |16 | Dwell table (4x4) | @ref EEPROM_CONFIG12_MAP3 |
* | 2567 |4 | Dwell table (X axis) (RPM) | |
* | 2571 |4 | Dwell table (Y axis) (MAP) | |
* | 2575 |5 | HOLE ?? | |
* | 2580 |128 | Page 13 settings | @ref EEPROM_CONFIG13_START |
* | 2708 |2 | X and Y sizes for ignition2 table | |
* | 2710 |256 | Ignition2 table (16x16) | @ref EEPROM_CONFIG14_MAP |
* | 2966 |16 | Ignition2 table (X axis) (RPM) | |
* | 2982 |16 | Ignition2 table (Y axis) (MAP/TPS) | |
* | 2998 |1 | HOLE ?? | |
* | 2999 |2 | X and Y sizes for trim5 table | |
* | 3001 |36 | Trim5 table (6x6) | @ref EEPROM_CONFIG8_MAP5 |
* | 3037 |6 | Trim5 table (X axis) (RPM) | |
* | 3043 |6 | Trim5 table (Y axis) (MAP) | |
* | 3049 |2 | X and Y sizes for trim6 table | |
* | 3051 |36 | Trim6 table (6x6) | @ref EEPROM_CONFIG8_MAP6 |
* | 3087 |6 | Trim6 table (X axis) (RPM) | |
* | 3093 |6 | Trim6 table (Y axis) (MAP) | |
* | 3099 |2 | X and Y sizes for trim7 table | |
* | 3101 |36 | Trim7 table (6x6) | @ref EEPROM_CONFIG8_MAP7 |
* | 3137 |6 | Trim7 table (X axis) (RPM) | |
* | 3143 |6 | Trim7 table (Y axis) (MAP) | |
* | 3149 |2 | X and Y sizes for trim8 table | |
* | 3151 |36 | Trim8 table (6x6) | @ref EEPROM_CONFIG8_MAP8 |
* | 3187 |6 | Trim8 table (X axis) (RPM) | |
* | 3193 |6 | Trim8 table (Y axis) (MAP) | |
* | 3199 |2 | X and Y sizes boostLUT table | |
* | 3201 |64 | boostLUT table (8x8) | @ref EEPROM_CONFIG15_MAP |
* | 3265 |8 | boostLUT table (X axis) (RPM) | |
* | 3273 |8 | boostLUT table (Y axis) (targetBoost)| |
* | 3281 |1 | boostLUT enable | @ref EEPROM_CONFIG15_START |
* | 3282 |1 | boostDCWhenDisabled | |
* | 3283 |1 | boostControlEnableThreshold | |
* | 3284 |14 | A/C Control Settings | |
* | 3298 |159 | Page 15 spare | |
* | 3457 |217 | EMPTY | |
* | 3674 |4 | CLT Calibration CRC32 | |
* | 3678 |4 | IAT Calibration CRC32 | |
* | 3682 |4 | O2 Calibration CRC32 | |
* | 3686 |56 | Page CRC32 sums (4x14) | Last first, 14 -> 1 |
* | 3742 |1 | Baro value saved at init | @ref EEPROM_LAST_BARO |
* | 3743 |64 | O2 Calibration Bins | @ref EEPROM_CALIBRATION_O2_BINS |
* | 3807 |32 | O2 Calibration Values | @ref EEPROM_CALIBRATION_O2_VALUES |
* | 3839 |64 | IAT Calibration Bins | @ref EEPROM_CALIBRATION_IAT_BINS |
* | 3903 |64 | IAT Calibration Values | @ref EEPROM_CALIBRATION_IAT_VALUES |
* | 3967 |64 | CLT Calibration Bins | @ref EEPROM_CALIBRATION_CLT_BINS |
* | 4031 |64 | CLT Calibration Values | @ref EEPROM_CALIBRATION_CLT_VALUES |
* | 4095 | | END | |
*
*/
void writeAllConfig(void);
void writeConfig(uint8_t pageNum);
void EEPROMWriteRaw(uint16_t address, uint8_t data);
uint8_t EEPROMReadRaw(uint16_t address);
void loadConfig(void);
void loadCalibration(void);
void writeCalibration(void);
void writeCalibrationPage(uint8_t pageNum);
void resetConfigPages(void);
//These are utility functions that prevent other files from having to use EEPROM.h directly
byte readLastBaro(void);
void storeLastBaro(byte newValue);
uint8_t readEEPROMVersion(void);
void storeEEPROMVersion(byte newVersion);
void storePageCRC32(uint8_t pageNum, uint32_t crcValue);
uint32_t readPageCRC32(uint8_t pageNum);
void storeCalibrationCRC32(uint8_t calibrationPageNum, uint32_t calibrationCRC);
uint32_t readCalibrationCRC32(uint8_t calibrationPageNum);
uint16_t getEEPROMSize(void);
bool isEepromWritePending(void);
extern uint32_t deferEEPROMWritesUntil;
#define EEPROM_CONFIG1_MAP 3
#define EEPROM_CONFIG2_START 291
#define EEPROM_CONFIG2_END 419
#define EEPROM_CONFIG3_MAP 421
#define EEPROM_CONFIG4_START 709
#define EEPROM_CONFIG4_END 837
#define EEPROM_CONFIG5_MAP 839
#define EEPROM_CONFIG6_START 1127
#define EEPROM_CONFIG6_END 1255
#define EEPROM_CONFIG7_MAP1 1257
#define EEPROM_CONFIG7_MAP2 1339
#define EEPROM_CONFIG7_MAP3 1421
#define EEPROM_CONFIG7_END 1501
#define EEPROM_CONFIG8_MAP1 1503
#define EEPROM_CONFIG8_MAP2 1553
#define EEPROM_CONFIG8_MAP3 1603
#define EEPROM_CONFIG8_MAP4 1653
#define EEPROM_CONFIG9_START 1710
#define EEPROM_CONFIG9_END 1902
#define EEPROM_CONFIG10_START 1902
#define EEPROM_CONFIG10_END 2094
#define EEPROM_CONFIG11_MAP 2096
#define EEPROM_CONFIG11_END 2385
#define EEPROM_CONFIG12_MAP 2387
#define EEPROM_CONFIG12_MAP2 2469
#define EEPROM_CONFIG12_MAP3 2551
#define EEPROM_CONFIG12_END 2575
#define EEPROM_CONFIG13_START 2580
#define EEPROM_CONFIG13_END 2708
#define EEPROM_CONFIG14_MAP 2710
#define EEPROM_CONFIG14_END 2998
//This is OUT OF ORDER as Page 8 was expanded to add fuel trim tables 5-8. The EEPROM for them is simply added here so as not to impact existing tunes
#define EEPROM_CONFIG8_MAP5 3001
#define EEPROM_CONFIG8_MAP6 3051
#define EEPROM_CONFIG8_MAP7 3101
#define EEPROM_CONFIG8_MAP8 3151
//Page 15 added after OUT OF ORDER page 8
#define EEPROM_CONFIG15_MAP 3199
#define EEPROM_CONFIG15_START 3281
#define EEPROM_CONFIG15_END 3457
#define EEPROM_CALIBRATION_CLT_CRC 3674
#define EEPROM_CALIBRATION_IAT_CRC 3678
#define EEPROM_CALIBRATION_O2_CRC 3682
//These were the values used previously when all calibration tables were 512 long. They need to be retained so the update process (202005 -> 202008) can work
#define EEPROM_CALIBRATION_O2_OLD 2559
#define EEPROM_CALIBRATION_IAT_OLD 3071
#define EEPROM_CALIBRATION_CLT_OLD 3583
#define EEPROM_DEFER_DELAY MICROS_PER_SEC //1.0 second pause after large comms before writing to EEPROM
#endif // STORAGE_H