changed EEPROM-Stuff and added DTC if EE-Ver changed

This commit is contained in:
Marcel Peterkau 2022-05-02 20:29:17 +02:00
parent c3e71d4759
commit 2b5039b8ab
4 changed files with 39 additions and 51 deletions

View File

@ -38,7 +38,7 @@ uint32_t Process_CAN_WheelSpeed()
return milimeters_to_add; return milimeters_to_add;
} }
MaintainDTC(DTC_NO_CAN_SIGNAL, (millis() > lastRecTimestamp + 10000)); MaintainDTC(DTC_NO_CAN_SIGNAL, (millis() > lastRecTimestamp + 10000 ? true : false));
return 0; return 0;
} }

View File

@ -1,28 +1,36 @@
#include "config.h" #include "config.h"
#if PCB_REVISION >= 12
I2C_eeprom ee(0x50, EEPROM_SIZE_BYTES); I2C_eeprom ee(0x50, EEPROM_SIZE_BYTES);
#endif
LubeConfig_t LubeConfig; LubeConfig_t LubeConfig;
persistenceData_t PersistenceData; persistenceData_t PersistenceData;
uint16_t eePersistenceMarker = 0; uint16_t eePersistenceMarker = 0;
uint16_t eeVersion = 0; // inc const uint16_t eeVersion = 1; // inc
boolean eeAvailable = false; boolean eeAvailable = false;
const uint16_t startofLubeConfig = 16; const uint16_t startofLubeConfig = 16;
const uint16_t startofPersistence = 16 + sizeof(LubeConfig) + (sizeof(LubeConfig) % 16); const uint16_t startofPersistence = 16 + sizeof(LubeConfig) + (sizeof(LubeConfig) % 16);
#if PCB_REVISION >= 12 boolean checkEEPROMavailable();
void InitEEPROM() void InitEEPROM()
{ {
ee.begin(); ee.begin();
if (!ee.isConnected()) if (!checkEEPROMavailable())
{ {
MaintainDTC(DTC_NO_EEPROM_FOUND, true); globals.systemStatus = sysStat_Error;
return;
}
GetConfig_EEPROM();
if (LubeConfig.EEPROM_Version != eeVersion)
{
FormatConfig_EEPROM();
globals.systemStatus = sysStat_Error;
MaintainDTC(DTC_EEPROM_VERSION_BAD, true);
return;
} }
} }
#endif
void EEPROM_Process() void EEPROM_Process()
{ {
@ -55,29 +63,18 @@ void StoreConfig_EEPROM()
{ {
LubeConfig.checksum = 0; LubeConfig.checksum = 0;
LubeConfig.checksum = Checksum_EEPROM((uint8_t *)&LubeConfig, sizeof(LubeConfig)); LubeConfig.checksum = Checksum_EEPROM((uint8_t *)&LubeConfig, sizeof(LubeConfig));
#if PCB_REVISION >= 12 if (!checkEEPROMavailable())
if (!ee.isConnected())
return; return;
ee.updateBlock(startofLubeConfig, (uint8_t *)&LubeConfig, sizeof(LubeConfig)); ee.updateBlock(startofLubeConfig, (uint8_t *)&LubeConfig, sizeof(LubeConfig));
#else
EEPROM.begin(512);
EEPROM.put(startofLubeConfig, LubeConfig);
EEPROM.commit();
EEPROM.end();
#endif
} }
void GetConfig_EEPROM() void GetConfig_EEPROM()
{ {
#if PCB_REVISION >= 12 if (!checkEEPROMavailable())
if (!ee.isConnected())
return; return;
ee.readBlock(startofLubeConfig, (uint8_t *)&LubeConfig, sizeof(LubeConfig)); ee.readBlock(startofLubeConfig, (uint8_t *)&LubeConfig, sizeof(LubeConfig));
#else
EEPROM.begin(512);
EEPROM.get(startofLubeConfig, LubeConfig);
EEPROM.end();
#endif
uint32_t checksum = LubeConfig.checksum; uint32_t checksum = LubeConfig.checksum;
LubeConfig.checksum = 0; LubeConfig.checksum = 0;
@ -105,34 +102,19 @@ void StorePersistence_EEPROM()
PersistenceData.checksum = 0; PersistenceData.checksum = 0;
PersistenceData.checksum = Checksum_EEPROM((uint8_t *)&PersistenceData, sizeof(PersistenceData)); PersistenceData.checksum = Checksum_EEPROM((uint8_t *)&PersistenceData, sizeof(PersistenceData));
#if PCB_REVISION >= 12 if (!checkEEPROMavailable())
if (!ee.isConnected())
return; return;
ee.updateBlock(getPersistanceAddress(), (uint8_t *)&PersistenceData, sizeof(PersistenceData)); ee.updateBlock(getPersistanceAddress(), (uint8_t *)&PersistenceData, sizeof(PersistenceData));
#else
EEPROM.put(getPersistanceAddress(), PersistenceData);
EEPROM.commit();
EEPROM.end();
#endif
} }
void GetPersistence_EEPROM() void GetPersistence_EEPROM()
{ {
#if PCB_REVISION >= 12 if (!checkEEPROMavailable())
if (!ee.isConnected())
return; return;
eePersistenceMarker = (ee.readByte(0) << 8) | ee.readByte(1);
#else
EEPROM.begin(512);
EEPROM.get(0, eePersistenceMarker);
#endif
#if PCB_REVISION >= 12 eePersistenceMarker = (ee.readByte(0) << 8) | ee.readByte(1);
ee.readBlock(getPersistanceAddress(), (uint8_t *)&PersistenceData, sizeof(PersistenceData)); ee.readBlock(getPersistanceAddress(), (uint8_t *)&PersistenceData, sizeof(PersistenceData));
#else
EEPROM.get(getPersistanceAddress(), PersistenceData);
EEPROM.end();
#endif
uint32_t checksum = PersistenceData.checksum; uint32_t checksum = PersistenceData.checksum;
PersistenceData.checksum = 0; PersistenceData.checksum = 0;
@ -165,15 +147,11 @@ void MovePersistencePage_EEPROM(boolean reset)
eePersistenceMarker = reset ? sizeof(PersistenceData) : eePersistenceMarker + sizeof(PersistenceData); eePersistenceMarker = reset ? sizeof(PersistenceData) : eePersistenceMarker + sizeof(PersistenceData);
PersistenceData.writeCycleCounter = 0; PersistenceData.writeCycleCounter = 0;
#if PCB_REVISION >= 12 if (!checkEEPROMavailable())
if (!ee.isConnected())
return; return;
ee.updateByte(0, (uint8_t)(eePersistenceMarker >> 8)); ee.updateByte(0, (uint8_t)(eePersistenceMarker >> 8));
ee.updateByte(1, (uint8_t)(eePersistenceMarker & 0xFF)); ee.updateByte(1, (uint8_t)(eePersistenceMarker & 0xFF));
#else
EEPROM.begin(512);
EEPROM.put(0, eePersistenceMarker);
#endif
} }
uint32_t Checksum_EEPROM(uint8_t const *data, size_t len) uint32_t Checksum_EEPROM(uint8_t const *data, size_t len)
@ -199,7 +177,7 @@ void dumpEEPROM(uint16_t memoryAddress, uint16_t length)
{ {
#define BLOCK_TO_LENGTH 16 #define BLOCK_TO_LENGTH 16
if (!ee.isConnected()) if (!checkEEPROMavailable())
return; return;
char ascii_buf[BLOCK_TO_LENGTH + 1]; char ascii_buf[BLOCK_TO_LENGTH + 1];
@ -228,3 +206,13 @@ void dumpEEPROM(uint16_t memoryAddress, uint16_t length)
} }
Serial.println(); Serial.println();
} }
boolean checkEEPROMavailable()
{
if (!ee.isConnected())
{
MaintainDTC(DTC_NO_EEPROM_FOUND, true);
return false;
}
return true;
}

View File

@ -69,6 +69,7 @@ typedef struct
typedef struct typedef struct
{ {
uint8_t EEPROM_Version = 0;
uint32_t DistancePerLube_Default = 8000; uint32_t DistancePerLube_Default = 8000;
uint32_t DistancePerLube_Rain = 4000; uint32_t DistancePerLube_Rain = 4000;
uint32_t tankCapacity_ml = 320; uint32_t tankCapacity_ml = 320;
@ -88,9 +89,7 @@ typedef struct
uint32_t checksum = 0; uint32_t checksum = 0;
} LubeConfig_t; } LubeConfig_t;
#if PCB_REVISION >= 12
void InitEEPROM(); void InitEEPROM();
#endif
void EEPROM_Process(); void EEPROM_Process();
void StoreConfig_EEPROM(); void StoreConfig_EEPROM();
void GetConfig_EEPROM(); void GetConfig_EEPROM();

View File

@ -12,6 +12,7 @@ typedef enum DTCNums_e
DTC_NO_EEPROM_FOUND, DTC_NO_EEPROM_FOUND,
DTC_EEPROM_CFG_BAD, DTC_EEPROM_CFG_BAD,
DTC_EEPROM_PDS_BAD, DTC_EEPROM_PDS_BAD,
DTC_EEPROM_VERSION_BAD,
DTC_CAN_TRANSCEIVER_FAILED, DTC_CAN_TRANSCEIVER_FAILED,
DTC_NO_CAN_SIGNAL, DTC_NO_CAN_SIGNAL,
DTC_LAST_DTC DTC_LAST_DTC