Ignore:
Timestamp:
Sep 11, 2025, 4:17:09 PM (7 weeks ago)
Author:
f.jahn
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/fw_g473rct/SES/src/eeprom.c

    r27 r28  
    1 //https://controllerstech.com/eeprom-and-stm32/
     1// https://controllerstech.com/eeprom-and-stm32/
     2#include <string.h>
    23
    34#include "eeprom.h"
     
    1112// Define the I2C
    1213extern I2C_HandleTypeDef hi2c3;
    13 #define EEPROM_I2C &hi2c3
     14#define EEPROM_I2C                      &hi2c3
    1415
    1516// EEPROM ADDRESS (8bits)
    16 #define EEPROM_ADDR 0xA0
     17#define EEPROM_ADDR                     0xA0
    1718
    1819// Define the Page Size and number of pages
    19 #define PAGE_SIZE 64     // in Bytes
    20 #define PAGE_NUM  4096    // number of pages
     20#define PAGE_SIZE                       64              // in Bytes
     21#define PAGE_NUM                        4096    // number of pages
    2122       
    2223       
     
    103104  uint16_t        cefW;
    104105  int16_t         batteryEmptyDetectionMode;           
     106  uint16_t        auxOutputMode;
     107  uint16_t        auxOutputSetpointOn;
     108  uint16_t        auxOutputSetpointOff;
     109  uint16_t        auxOutputInverted;   
    105110
    106111} eeprom_data_t;
     
    138143
    139144
    140 
    141 
    142 
    143145// Data to store reated defines
    144 //#define SIZEOF_DEFAULT_EEPROM_DATA              (sizeof(eeprom_new_data_t))
    145 #define SIZEOF_CHANGED_EEPROM_DATA                (sizeof(eeprom_data_t))
    146 #define SIZEOF_DEVICE_INFO                        (sizeof(device_info_t))
    147 #define SIZEOF_EEPROM_STATE                       (sizeof(eeprom_state_t))
    148 
    149 #define SIZE_OF_DATA_TO_STORE                     (SIZEOF_CHANGED_EEPROM_DATA + SIZEOF_DEVICE_INFO + SIZEOF_EEPROM_STATE)
     146//#define SIZEOF_DEFAULT_EEPROM_DATA                            (sizeof(eeprom_new_data_t))
     147//#define SIZEOF_CHANGED_EEPROM_DATA                (sizeof(eeprom_data_t))
     148//#define SIZEOF_DEVICE_INFO                        (sizeof(device_info_t))
     149//#define SIZEOF_EEPROM_STATE                       (sizeof(eeprom_state_t))
     150
     151//#define SIZE_OF_DATA_TO_STORE                     (SIZEOF_CHANGED_EEPROM_DATA + SIZEOF_DEVICE_INFO + SIZEOF_EEPROM_STATE)
    150152
    151153
    152154// Adress related defines
    153155#define EEPROM_ADRESS_FIRST_START_ID              (0)
    154 #define FIRST_START_ID                            (0xFF)
     156#define FIRST_START_ID                            (0xFF)  // See datasheet (Chapter "Initial delivery state")
    155157#define CONFIG_ID                                                                 (01)    // Increment by 1 to make compartible update, more than 1 - incompartible
    156158#if CONFIG_ID == FIRST_START_ID
     
    166168
    167169
    168 
    169 // muss modulo 8 noch hinzufügen wg 8 byte alignement
    170 static uint8_t eepromData[SIZE_OF_DATA_TO_STORE];
     170static eeprom_stored_data_t eepromData;
    171171
    172172
     
    261261        /* cefW         */                                                                                                                      90,                             // 90% cef for Wh calculations
    262262        /* Battery Empty Detection Mode*/                                                                               1,                              // Auto, from BMS
    263        
    264 
     263        /* AUX MODE */                                                                                                                  AUX_MODE_HEATER,// Heizung
     264        /* AUX SETPOINT ON */                                                                                                   13600,                  // Erkennung Ladegerät ab 13,6V
     265        /* AUX SETPOINT OFF */                                                                                                  100,                    // Batterie Entladung wird erkannt bei -100mA
     266        /* AUX Inverted */                                                                                                              0,                              // Nicht invertiert
    265267};
    266268
     
    281283  uint8_t firstStartCatcher;
    282284
    283   EEPROM_Read(0,EEPROM_ADRESS_FIRST_START_ID, &firstStartCatcher, 1);
    284 
     285  EEPROM_Read(0, EEPROM_ADRESS_FIRST_START_ID, &firstStartCatcher, 1);
    285286
    286287  if (firstStartCatcher == FIRST_START_ID)
     
    306307HAL_StatusTypeDef EEPROM_fullRestore(sys_data_t* data)
    307308{
    308   eeprom_stored_data_t* dataToStore;
    309309  printf("EEPROM FULL RESTORE!\n");
    310310
    311311  /**************** LESE_DEFAULT_WERTE ************************/
    312312
    313   dataToStore = (eeprom_stored_data_t*) eepromData;
    314 
    315   // Schnittstellenparameter
    316   dataToStore->changedData.baudrate                                                                                                     = defaultEepromData.baudrate;
    317   dataToStore->changedData.parityMode                                                                                           = defaultEepromData.parityMode;
    318   dataToStore->changedData.stopBits                                                                                                     = defaultEepromData.stopBits;
    319   dataToStore->changedData.slave_adress                                                                                         = defaultEepromData.slave_adress;
    320 
    321   // Offset und Gain
    322   dataToStore->changedData.batteryCurrentOffsetRefTemperatureShunt                                      = defaultEepromData.batteryCurrentOffsetRefTemperatureShunt;
    323   dataToStore->changedData.batteryCurrentOffsetRefTemperatureChip                                       = defaultEepromData.batteryCurrentOffsetRefTemperatureChip;
    324   dataToStore->changedData.batteryCurrentGainRefTempShunt                                                       = defaultEepromData.batteryCurrentGainRefTempShunt;
    325   dataToStore->changedData.batteryCurrentGainRefTempChip                                                        = defaultEepromData.batteryCurrentGainRefTempChip;
    326   dataToStore->changedData.batteryCurrentOffsetTemperatureCalibrationTemperature        = defaultEepromData.batteryCurrentOffsetTemperatureCalibrationTemperature;
    327   dataToStore->changedData.batteryCurrentGainTemperatureCalibrationShuntTemperature     = defaultEepromData.batteryCurrentGainTemperatureCalibrationShuntTemperature;
    328   dataToStore->changedData.batteryCurrentGainTemperatureCalibrationChipTemperature      = defaultEepromData.batteryCurrentGainTemperatureCalibrationChipTemperature;
    329   dataToStore->changedData.batteryCurrentOffsetRefshuntVoltage                                          = defaultEepromData.batteryCurrentOffsetRefshuntVoltage;
    330   dataToStore->changedData.batteryCurrentOffsetCommonModeCalibrationVoltage                     = defaultEepromData.batteryCurrentOffsetCommonModeCalibrationVoltage;
    331   dataToStore->changedData.batteryCurrentOffsetCommonModeCompensationFactor                     = defaultEepromData.batteryCurrentOffsetCommonModeCompensationFactor;
    332   dataToStore->changedData.batteryCurrentOffsetTemperatureCompensationFactor            = defaultEepromData.batteryCurrentOffsetTemperatureCompensationFactor;
    333   dataToStore->changedData.batteryCurrentGainRefCurrent                                                         = defaultEepromData.batteryCurrentGainRefCurrent;
    334   dataToStore->changedData.batteryCurrentGainTemperatureCompensationShuntFactor         = defaultEepromData.batteryCurrentGainTemperatureCompensationShuntFactor;
    335   dataToStore->changedData.batteryCurrentGainTemperatureCompensationChipFactor          = defaultEepromData.batteryCurrentGainTemperatureCompensationChipFactor;
    336 
    337   dataToStore->changedData.currentOffset                                                                                        = defaultEepromData.currentOffset;
    338   dataToStore->changedData.currentGain                                                                                          = defaultEepromData.currentGain;
    339 
    340   dataToStore->changedData.currentOffsetFast                                                                            = defaultEepromData.currentOffsetFast;
    341   dataToStore->changedData.currentGainFast                                                                                      = defaultEepromData.currentGainFast;
    342 
    343   // AH Counter Parameter
    344   dataToStore->changedData.cef                                                                                                          = defaultEepromData.cef;
    345   dataToStore->changedData.peukert                                                                                                      = defaultEepromData.peukert;
    346   dataToStore->changedData.cellCapacity                                                                                         = defaultEepromData.cellCapacity;
    347   dataToStore->changedData.cellEnergy                                                                                           = defaultEepromData.cellEnergy;
    348   dataToStore->changedData.iBatFull                                                                                                     = defaultEepromData.iBatFull;
    349   dataToStore->changedData.tBatFull                                                                                                     = defaultEepromData.tBatFull;
    350   dataToStore->changedData.uBatFull                                                                                                     = defaultEepromData.uBatFull;
    351   dataToStore->changedData.uBatEmpty                                                                                            = defaultEepromData.uBatEmpty;
    352   dataToStore->changedData.socCalcMode                                                                                          = defaultEepromData.socCalcMode;
    353   dataToStore->changedData.cellRatedDischargeTime                                                                       = defaultEepromData.cellRatedDischargeTime;
    354 
    355   // Schaltausgänge
    356   dataToStore->changedData.lvpStart                                                                                                     = defaultEepromData.lvpStart;
    357   dataToStore->changedData.lvpStop                                                                                                      = defaultEepromData.lvpStop;
    358   dataToStore->changedData.ovpStart                                                                                                     = defaultEepromData.ovpStart;
    359   dataToStore->changedData.ovpStop                                                                                                      = defaultEepromData.ovpStop;
    360   dataToStore->changedData.loadCurrentLimit                                                                                     = defaultEepromData.loadCurrentLimit;
    361   dataToStore->changedData.chargeCurrentLimit                                                                           = defaultEepromData.chargeCurrentLimit;
    362   dataToStore->changedData.chargeStopHighTemperatureStart                                                       = defaultEepromData.chargeStopHighTemperatureStart;
    363   dataToStore->changedData.chargeStopHighTemperatureStop                                                        = defaultEepromData.chargeStopHighTemperatureStop;
    364   dataToStore->changedData.chargeStopLowTemperatureStart                                                        = defaultEepromData.chargeStopLowTemperatureStart;
    365   dataToStore->changedData.chargeStopLowTemperatureStop                                                         = defaultEepromData.chargeStopLowTemperatureStop;
    366   dataToStore->changedData.dischargeStopHighTemperatureStart                                            = defaultEepromData.dischargeStopHighTemperatureStart;
    367   dataToStore->changedData.dischargeStopHighTemperatureStop                                                     = defaultEepromData.dischargeStopHighTemperatureStop;
    368   dataToStore->changedData.dischargeStopLowTemperatureStart                                                     = defaultEepromData.dischargeStopLowTemperatureStart;
    369   dataToStore->changedData.dischargeStopLowTemperatureStop                                                      = defaultEepromData.dischargeStopLowTemperatureStop;
    370 
    371   dataToStore->changedData.uBatEmptyCompStartTemp                                                                       = defaultEepromData.uBatEmptyCompStartTemp;
    372   dataToStore->changedData.uBatEmptyCompStopTemp                                                                        = defaultEepromData.uBatEmptyCompStopTemp;
    373   dataToStore->changedData.uBatEmptyCompStopVolt                                                                        = defaultEepromData.uBatEmptyCompStopVolt;
    374 
    375   dataToStore->changedData.extraDischargeStrom_mA                                                                       = defaultEepromData.extraDischargeStrom_mA;
    376   dataToStore->changedData.cefW                                                                                                         = defaultEepromData.cefW;
    377   dataToStore->changedData.batteryEmptyDetectionMode                                                            = defaultEepromData.batteryEmptyDetectionMode;
    378  
    379 
     313  memcpy(&eepromData.changedData, &defaultEepromData, sizeof(eeprom_data_t));
    380314 
    381315  // Eeprom Status Infos
    382   dataToStore->eepromState.writeCounter++;
    383   dataToStore->eepromState.structureSize = sizeof(eeprom_stored_data_t);
    384   dataToStore->eepromState.revisionInfo = 0;
    385   dataToStore->eepromState.firstStartId = CONFIG_ID;
    386 
    387 
    388   /****************EEPROM Speichern********************/
    389 
    390   EEPROM_Write(0, 0, (uint8_t*)eepromData, SIZE_OF_DATA_TO_STORE);
    391 
    392 
    393 
    394 
     316  eepromData.eepromState.writeCounter++;
     317  eepromData.eepromState.structureSize = sizeof(eeprom_stored_data_t);
     318  eepromData.eepromState.revisionInfo = 0;
     319  eepromData.eepromState.firstStartId = CONFIG_ID;
     320
     321  /**************** EEPROM Speichern ********************/
     322
     323  EEPROM_Write(0, 0, (uint8_t*)&eepromData, sizeof(eeprom_stored_data_t));
    395324
    396325  /**************** AUSLESEN_UND_PRÜFEN ********************/
    397326
    398327  return EEPROM_readConfig(data);
    399 
    400 
    401 
    402 }
    403 
     328}
     329
     330//------------------------------------------------------------------------------
    404331
    405332//Werkeinstellung ohne Kalibrierwert Überschreibung
     
    407334{
    408335  printf("EEPROM FACTORY RESTORE/UPDATE!\n");
    409 
    410336 
    411  
    412   eeprom_stored_data_t* dataToStore = (eeprom_stored_data_t*)eepromData;
    413 
    414   EEPROM_readConfig(data);                                                                                                              // Restoring calibration data
     337  //eeprom_stored_data_t* dataToStore = &eepromData;
     338
     339  EEPROM_readConfig(data);                                                                                                                      // Restoring calibration data
    415340
    416341  // Offset und Gain
    417342 
    418   dataToStore->changedData.batteryCurrentOffsetRefTemperatureShunt                                      = data->s.parameter.batteryCurrentOffsetRefTemperatureShunt;
    419   dataToStore->changedData.batteryCurrentOffsetRefTemperatureChip                                       = data->s.parameter.batteryCurrentOffsetRefTemperatureChip;
    420   dataToStore->changedData.batteryCurrentOffsetRefshuntVoltage                                          = data->s.parameter.batteryCurrentOffsetRefshuntVoltage;
    421   dataToStore->changedData.batteryCurrentOffsetCommonModeCalibrationVoltage                     = data->s.parameter.batteryCurrentOffsetCommonModeCalibrationVoltage;
    422   dataToStore->changedData.batteryCurrentOffsetCommonModeCompensationFactor                     = data->s.parameter.batteryCurrentOffsetCommonModeCompensationFactor;
    423   dataToStore->changedData.batteryCurrentOffsetTemperatureCalibrationTemperature        = data->s.parameter.batteryCurrentOffsetTemperatureCalibrationTemperature;
    424   dataToStore->changedData.batteryCurrentOffsetTemperatureCompensationFactor            = data->s.parameter.batteryCurrentOffsetTemperatureCompensationFactor;
    425   dataToStore->changedData.currentOffset                                                                                        = data->s.parameter.batteryCurrentOffset;
    426   dataToStore->changedData.currentGain                                                                                          = data->s.parameter.batteryCurrentGainCorrectionFaktor;
    427   dataToStore->changedData.currentOffsetFast                                                                            = data->s.parameter.batteryCurrentOffsetFast;
    428   dataToStore->changedData.currentGainFast                                                                                      = data->s.parameter.batteryCurrentGainCorrectionFaktorFast;
     343  eepromData.changedData.batteryCurrentOffsetRefTemperatureShunt                                        = data->s.parameter.batteryCurrentOffsetRefTemperatureShunt;
     344  eepromData.changedData.batteryCurrentOffsetRefTemperatureChip                                         = data->s.parameter.batteryCurrentOffsetRefTemperatureChip;
     345  eepromData.changedData.batteryCurrentOffsetRefshuntVoltage                                            = data->s.parameter.batteryCurrentOffsetRefshuntVoltage;
     346  eepromData.changedData.batteryCurrentOffsetCommonModeCalibrationVoltage                       = data->s.parameter.batteryCurrentOffsetCommonModeCalibrationVoltage;
     347  eepromData.changedData.batteryCurrentOffsetCommonModeCompensationFactor                       = data->s.parameter.batteryCurrentOffsetCommonModeCompensationFactor;
     348  eepromData.changedData.batteryCurrentOffsetTemperatureCalibrationTemperature          = data->s.parameter.batteryCurrentOffsetTemperatureCalibrationTemperature;
     349  eepromData.changedData.batteryCurrentOffsetTemperatureCompensationFactor                      = data->s.parameter.batteryCurrentOffsetTemperatureCompensationFactor;
     350  eepromData.changedData.currentOffset                                                                                          = data->s.parameter.batteryCurrentOffset;
     351  eepromData.changedData.currentGain                                                                                            = data->s.parameter.batteryCurrentGainCorrectionFaktor;
     352  eepromData.changedData.currentOffsetFast                                                                                      = data->s.parameter.batteryCurrentOffsetFast;
     353  eepromData.changedData.currentGainFast                                                                                        = data->s.parameter.batteryCurrentGainCorrectionFaktorFast;
    429354 
    430   dataToStore->changedData.batteryCurrentGainRefTempShunt                                                       = data->s.parameter.batteryCurrentGainRefTempShunt;
    431   dataToStore->changedData.batteryCurrentGainRefTempChip                                                        = data->s.parameter.batteryCurrentGainRefTempChip;
    432   dataToStore->changedData.batteryCurrentGainRefCurrent                                                         = data->s.parameter.batteryCurrentGainRefCurrent;
    433   dataToStore->changedData.batteryCurrentGainTemperatureCalibrationShuntTemperature     = data->s.parameter.batteryCurrentGainTemperatureCalibrationShuntTemperature;
    434   dataToStore->changedData.batteryCurrentGainTemperatureCompensationShuntFactor         = data->s.parameter.batteryCurrentGainTemperatureCompensationShuntFactor;
    435   dataToStore->changedData.batteryCurrentGainTemperatureCalibrationChipTemperature      = data->s.parameter.batteryCurrentGainTemperatureCalibrationChipTemperature;
    436   dataToStore->changedData.batteryCurrentGainTemperatureCompensationChipFactor          = data->s.parameter.batteryCurrentGainTemperatureCompensationChipFactor;
     355  eepromData.changedData.batteryCurrentGainRefTempShunt                                                         = data->s.parameter.batteryCurrentGainRefTempShunt;
     356  eepromData.changedData.batteryCurrentGainRefTempChip                                                          = data->s.parameter.batteryCurrentGainRefTempChip;
     357  eepromData.changedData.batteryCurrentGainRefCurrent                                                           = data->s.parameter.batteryCurrentGainRefCurrent;
     358  eepromData.changedData.batteryCurrentGainTemperatureCalibrationShuntTemperature       = data->s.parameter.batteryCurrentGainTemperatureCalibrationShuntTemperature;
     359  eepromData.changedData.batteryCurrentGainTemperatureCompensationShuntFactor           = data->s.parameter.batteryCurrentGainTemperatureCompensationShuntFactor;
     360  eepromData.changedData.batteryCurrentGainTemperatureCalibrationChipTemperature        = data->s.parameter.batteryCurrentGainTemperatureCalibrationChipTemperature;
     361  eepromData.changedData.batteryCurrentGainTemperatureCompensationChipFactor            = data->s.parameter.batteryCurrentGainTemperatureCompensationChipFactor;
    437362
    438363  // Schnittstellenparameter
    439   dataToStore->changedData.baudrate                                                                                                     = defaultEepromData.baudrate;
    440   dataToStore->changedData.parityMode                                                                                           = defaultEepromData.parityMode;
    441   dataToStore->changedData.stopBits                                                                                                     = defaultEepromData.stopBits;
    442   dataToStore->changedData.slave_adress                                                                                         = defaultEepromData.slave_adress;
    443   dataToStore->changedData.ibn_day                                                                                                      = defaultEepromData.ibn_day;
    444   dataToStore->changedData.ibn_month                                                                                            = defaultEepromData.ibn_month;
    445   dataToStore->changedData.ibn_year                                                                                                     = defaultEepromData.ibn_year;
    446   dataToStore->changedData.user_id                                                                                                      = defaultEepromData.user_id;
     364  eepromData.changedData.baudrate                                                                                                       = defaultEepromData.baudrate;
     365  eepromData.changedData.parityMode                                                                                                     = defaultEepromData.parityMode;
     366  eepromData.changedData.stopBits                                                                                                       = defaultEepromData.stopBits;
     367  eepromData.changedData.slave_adress                                                                                           = defaultEepromData.slave_adress;
     368  eepromData.changedData.ibn_day                                                                                                        = defaultEepromData.ibn_day;
     369  eepromData.changedData.ibn_month                                                                                                      = defaultEepromData.ibn_month;
     370  eepromData.changedData.ibn_year                                                                                                       = defaultEepromData.ibn_year;
     371  eepromData.changedData.user_id                                                                                                        = defaultEepromData.user_id;
    447372
    448373  //Ah counter
    449   dataToStore->changedData.cef                                                                                                          = defaultEepromData.cef;
    450   dataToStore->changedData.cellCapacity                                                                                         = defaultEepromData.cellCapacity;
    451   dataToStore->changedData.cellEnergy                                                                                           = defaultEepromData.cellEnergy;
    452   dataToStore->changedData.iBatFull                                                                                                     = defaultEepromData.iBatFull;
    453   dataToStore->changedData.peukert                                                                                                      = defaultEepromData.peukert;
    454   dataToStore->changedData.tBatFull                                                                                                     = defaultEepromData.tBatFull;
    455   dataToStore->changedData.uBatFull                                                                                                     = defaultEepromData.uBatFull;
    456   dataToStore->changedData.uBatEmpty                                                                                            = defaultEepromData.uBatEmpty;
    457   dataToStore->changedData.socCalcMode                                                                                          = defaultEepromData.socCalcMode;
    458   dataToStore->changedData.cellRatedDischargeTime                                                                       = defaultEepromData.cellRatedDischargeTime;
     374  eepromData.changedData.cef                                                                                                            = defaultEepromData.cef;
     375  eepromData.changedData.cellCapacity                                                                                           = defaultEepromData.cellCapacity;
     376  eepromData.changedData.cellEnergy                                                                                                     = defaultEepromData.cellEnergy;
     377  eepromData.changedData.iBatFull                                                                                                       = defaultEepromData.iBatFull;
     378  eepromData.changedData.peukert                                                                                                        = defaultEepromData.peukert;
     379  eepromData.changedData.tBatFull                                                                                                       = defaultEepromData.tBatFull;
     380  eepromData.changedData.uBatFull                                                                                                       = defaultEepromData.uBatFull;
     381  eepromData.changedData.uBatEmpty                                                                                                      = defaultEepromData.uBatEmpty;
     382  eepromData.changedData.socCalcMode                                                                                            = defaultEepromData.socCalcMode;
     383  eepromData.changedData.cellRatedDischargeTime                                                                         = defaultEepromData.cellRatedDischargeTime;
    459384
    460385  // Schaltausgänge
    461   dataToStore->changedData.lvpStart                                                                                                     = defaultEepromData.lvpStart;
    462   dataToStore->changedData.lvpStop                                                                                                      = defaultEepromData.lvpStop;
    463   dataToStore->changedData.ovpStart                                                                                                     = defaultEepromData.ovpStart;
    464   dataToStore->changedData.ovpStop                                                                                                      = defaultEepromData.ovpStop;
    465   dataToStore->changedData.loadCurrentLimit                                                                                     = defaultEepromData.loadCurrentLimit;
    466   dataToStore->changedData.chargeCurrentLimit                                                                           = defaultEepromData.chargeCurrentLimit;
    467   dataToStore->changedData.chargeStopHighTemperatureStart                                                       = defaultEepromData.chargeStopHighTemperatureStart;
    468   dataToStore->changedData.chargeStopHighTemperatureStop                                                        = defaultEepromData.chargeStopHighTemperatureStop;
    469   dataToStore->changedData.chargeStopLowTemperatureStart                                                        = defaultEepromData.chargeStopLowTemperatureStart;
    470   dataToStore->changedData.chargeStopLowTemperatureStop                                                         = defaultEepromData.chargeStopLowTemperatureStop;
    471   dataToStore->changedData.dischargeStopHighTemperatureStart                                            = defaultEepromData.dischargeStopHighTemperatureStart;
    472   dataToStore->changedData.dischargeStopHighTemperatureStop                                                     = defaultEepromData.dischargeStopHighTemperatureStop;
    473   dataToStore->changedData.dischargeStopLowTemperatureStart                                                     = defaultEepromData.dischargeStopLowTemperatureStart;
    474   dataToStore->changedData.dischargeStopLowTemperatureStop                                                      = defaultEepromData.dischargeStopLowTemperatureStop;
    475 
    476   dataToStore->changedData.uBatEmptyCompStartTemp                                                                       = defaultEepromData.uBatEmptyCompStartTemp;
    477   dataToStore->changedData.uBatEmptyCompStopTemp                                                                        = defaultEepromData.uBatEmptyCompStopTemp;
    478   dataToStore->changedData.uBatEmptyCompStopVolt                                                                        = defaultEepromData.uBatEmptyCompStopVolt;
    479 
    480   dataToStore->changedData.extraDischargeStrom_mA                                                                       = defaultEepromData.extraDischargeStrom_mA;
    481   dataToStore->changedData.cefW                                                                                                         = defaultEepromData.cefW;
    482   dataToStore->changedData.batteryEmptyDetectionMode                                                            = defaultEepromData.batteryEmptyDetectionMode;
     386  eepromData.changedData.lvpStart                                                                                                       = defaultEepromData.lvpStart;
     387  eepromData.changedData.lvpStop                                                                                                        = defaultEepromData.lvpStop;
     388  eepromData.changedData.ovpStart                                                                                                       = defaultEepromData.ovpStart;
     389  eepromData.changedData.ovpStop                                                                                                        = defaultEepromData.ovpStop;
     390  eepromData.changedData.loadCurrentLimit                                                                                       = defaultEepromData.loadCurrentLimit;
     391  eepromData.changedData.chargeCurrentLimit                                                                                     = defaultEepromData.chargeCurrentLimit;
     392  eepromData.changedData.chargeStopHighTemperatureStart                                                         = defaultEepromData.chargeStopHighTemperatureStart;
     393  eepromData.changedData.chargeStopHighTemperatureStop                                                          = defaultEepromData.chargeStopHighTemperatureStop;
     394  eepromData.changedData.chargeStopLowTemperatureStart                                                          = defaultEepromData.chargeStopLowTemperatureStart;
     395  eepromData.changedData.chargeStopLowTemperatureStop                                                           = defaultEepromData.chargeStopLowTemperatureStop;
     396  eepromData.changedData.dischargeStopHighTemperatureStart                                                      = defaultEepromData.dischargeStopHighTemperatureStart;
     397  eepromData.changedData.dischargeStopHighTemperatureStop                                                       = defaultEepromData.dischargeStopHighTemperatureStop;
     398  eepromData.changedData.dischargeStopLowTemperatureStart                                                       = defaultEepromData.dischargeStopLowTemperatureStart;
     399  eepromData.changedData.dischargeStopLowTemperatureStop                                                        = defaultEepromData.dischargeStopLowTemperatureStop;
     400
     401  eepromData.changedData.uBatEmptyCompStartTemp                                                                         = defaultEepromData.uBatEmptyCompStartTemp;
     402  eepromData.changedData.uBatEmptyCompStopTemp                                                                          = defaultEepromData.uBatEmptyCompStopTemp;
     403  eepromData.changedData.uBatEmptyCompStopVolt                                                                          = defaultEepromData.uBatEmptyCompStopVolt;
     404
     405  eepromData.changedData.extraDischargeStrom_mA                                                                         = defaultEepromData.extraDischargeStrom_mA;
     406  eepromData.changedData.cefW                                                                                                           = defaultEepromData.cefW;
     407  eepromData.changedData.batteryEmptyDetectionMode                                                                      = defaultEepromData.batteryEmptyDetectionMode;
     408  eepromData.changedData.auxOutputMode                                                                                          = defaultEepromData.auxOutputMode;
     409  eepromData.changedData.auxOutputSetpointOn                                                                            = defaultEepromData.auxOutputSetpointOn;
     410  eepromData.changedData.auxOutputSetpointOff                                                                           = defaultEepromData.auxOutputSetpointOff;
     411  eepromData.changedData.auxOutputInverted                                                                                      = defaultEepromData.auxOutputInverted;
    483412 
    484413
    485 
    486  
    487 
    488   dataToStore->eepromState.writeCounter   = dataToStore->eepromState.writeCounter++;
    489   dataToStore->eepromState.structureSize  = sizeof(eeprom_stored_data_t);
    490   dataToStore->eepromState.revisionInfo   = 0;
    491   dataToStore->eepromState.firstStartId = CONFIG_ID;
    492 
    493   dataToStore->deviceInfo.deviceInfoWritten     = 1;
    494   dataToStore->deviceInfo.SN                            = data->s.parameter.sn;
    495 
    496   EEPROM_Write(0,0, (uint8_t*)dataToStore, SIZE_OF_DATA_TO_STORE);
    497 
    498  
     414  eepromData.eepromState.writeCounter           = eepromData.eepromState.writeCounter++;
     415  eepromData.eepromState.structureSize          = sizeof(eeprom_stored_data_t);
     416  eepromData.eepromState.revisionInfo           = 0;
     417  eepromData.eepromState.firstStartId           = CONFIG_ID;
     418
     419  eepromData.deviceInfo.deviceInfoWritten       = 1;
     420  eepromData.deviceInfo.SN                                      = data->s.parameter.sn;
     421
     422  EEPROM_Write(0,0, (uint8_t*)&eepromData, sizeof(eeprom_stored_data_t));
     423
    499424  return EEPROM_readConfig(data);
    500425}
     
    505430  /****************LESE_WERTE_AUS_SYSDATA*********************/
    506431  printf("EEPROM STORE CONFIG!\n");
    507   dataToStore = (eeprom_stored_data_t*) eepromData;
     432  dataToStore = (eeprom_stored_data_t*)&eepromData;
    508433
    509434  // Schnittstellenparameter
     
    578503  dataToStore->changedData.batteryEmptyDetectionMode = data->s.parameter.batteryEmptyDetectionMode;
    579504
     505  dataToStore->changedData.auxOutputMode        = data->s.parameter.auxOutputMode;
     506  dataToStore->changedData.auxOutputSetpointOn = data->s.parameter.auxOutputSetpointOn;
     507  dataToStore->changedData.auxOutputSetpointOff = data->s.parameter.auxOutputSetpointOff;
     508  dataToStore->changedData.auxOutputInverted    = data->s.parameter.auxOutputInverted;
     509
    580510  // Eeprom Status Infos
    581511  dataToStore->eepromState.writeCounter++;
     
    591521
    592522
    593   EEPROM_Write(0,0, (uint8_t*)dataToStore, SIZE_OF_DATA_TO_STORE);
     523  EEPROM_Write(0,0, (uint8_t*)dataToStore, sizeof(eeprom_stored_data_t));
    594524
    595525  return EEPROM_readConfig(data);
     
    605535
    606536
    607   EEPROM_Read(0, 0, (uint8_t*)eepromData,  sizeof(eepromData));
    608 
    609 
    610   dataToStore = (eeprom_stored_data_t*)eepromData;
     537  EEPROM_Read(0, 0, (uint8_t*)&eepromData,  sizeof(eepromData));
     538
     539
     540  dataToStore = (eeprom_stored_data_t*)&eepromData;
    611541
    612542  // Schnittstellenparameter
     
    680610  data->s.parameter.cefW                                                                                                                = dataToStore->changedData.cefW;
    681611  data->s.parameter.batteryEmptyDetectionMode                                                                   = dataToStore->changedData.batteryEmptyDetectionMode;
     612
     613  data->s.parameter.auxOutputMode                                                                                               = dataToStore->changedData.auxOutputMode;
     614  data->s.parameter.auxOutputSetpointOn                                                                                 = dataToStore->changedData.auxOutputSetpointOn;
     615  data->s.parameter.auxOutputSetpointOff                                                                                = dataToStore->changedData.auxOutputSetpointOff;
     616  data->s.parameter.auxOutputInverted                                                                                   = dataToStore->changedData.auxOutputInverted;
     617
    682618       
    683 
    684619
    685620  //  Geräteinformation
     
    719654}
    720655
     656//-----------------------------------------------------------------------------
    721657
    722658void EEPROM_Read (uint16_t page, uint16_t offset, uint8_t *data, uint16_t size)
     
    735671                uint16_t MemAddress = startPage<<paddrposition | offset;
    736672                uint16_t bytesremaining = bytestowrite(size, offset);
    737                 HAL_I2C_Mem_Read(EEPROM_I2C, EEPROM_ADDR, MemAddress, 2, &data[pos], bytesremaining, 1000);
     673                HAL_StatusTypeDef res = HAL_I2C_Mem_Read(EEPROM_I2C, EEPROM_ADDR, MemAddress, 2, &data[pos], bytesremaining, 1000);
     674#ifdef DEBUG
     675                //printf("MemAddress = 0x%04X, data ptr = 0x%08X, bytes_remaining = %u, res = %u\n", MemAddress, (uint32_t)&data[pos], bytesremaining, res);
     676#endif
    738677                startPage += 1;
    739678                offset=0;
     
    741680                pos += bytesremaining;
    742681        }
    743 
    744 }
    745 
     682}
     683
     684//-----------------------------------------------------------------------------
    746685
    747686void EEPROM_Write (uint16_t page, uint16_t offset, uint8_t *data, uint16_t size)
    748687{
    749 
    750688        // Find out the number of bit, where the page addressing starts
    751689        int paddrposition = PADDRPOSITION;
     
    768706                uint16_t bytesremaining = bytestowrite(size, offset);  // calculate the remaining bytes to be written
    769707
    770                 HAL_I2C_Mem_Write(EEPROM_I2C, EEPROM_ADDR, MemAddress, 2, &data[pos], bytesremaining, 1000);  // write the data to the EEPROM
     708                HAL_StatusTypeDef res = HAL_I2C_Mem_Write(EEPROM_I2C, EEPROM_ADDR, MemAddress, 2, &data[pos], bytesremaining, 1000);  // write the data to the EEPROM
     709#ifdef DEBUG
     710                //printf("MemAddress = 0x%04X, data ptr = 0x%08X, bytes_remaining = %u, res = %u\n", MemAddress, (uint32_t)&data[pos], bytesremaining, res);
     711#endif
    771712                startPage += 1;  // increment the page, so that a new page address can be selected for further write
    772713                offset=0;   // since we will be writing to a new page, so offset will be 0
Note: See TracChangeset for help on using the changeset viewer.