diff options
| author | Shlomo Hecht <shlomo@twine-s.com> | 2020-02-06 15:22:42 +0200 |
|---|---|---|
| committer | Shlomo Hecht <shlomo@twine-s.com> | 2020-02-06 15:22:42 +0200 |
| commit | 33c0ce2e46a6fca8b48396f8aab1150197af20f3 (patch) | |
| tree | 7a1c4d218d89b5ec612b2b4cad5cc70aa4a05d79 /Software/Embedded_SW/Embedded | |
| parent | cbd8aeea982ba5541d19d13c441711d872dae316 (diff) | |
| download | Tango-33c0ce2e46a6fca8b48396f8aab1150197af20f3.tar.gz Tango-33c0ce2e46a6fca8b48396f8aab1150197af20f3.zip | |
read and handle version update (from MCU EEPROM)
Diffstat (limited to 'Software/Embedded_SW/Embedded')
4 files changed, 43 insertions, 1 deletions
diff --git a/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c index c3a74efa9..7d9c5e02f 100644 --- a/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c +++ b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c @@ -10,6 +10,7 @@ #include "MCU_E2Prom.h" #include "driverlib/eeprom.h" #include "drivers/I2C_Communication/ADC_MUX/ADC_MUX.h" +#include "Common/SW_Info/SW_Info.h" uint32_t E2Prom_Data[MAX_EEPROM_STORAGE] = {0,0,0,0,0,0}; uint32_t MCU_E2PromProgram(int Address,uint32_t Data) @@ -134,6 +135,29 @@ float MCU_E2PromDryerBacklashRead() return Data; } +uint32_t MCU_E2PromEmbeddedVersionProgram(void) +{ + uint16_t size; + uint32_t Data; + size= sizeof(TangoVersion_t); + if (size>4) + { + Report("MCU_E2PromEmbeddedVersionProgram length error",__FILE__,__LINE__,size,RpWarning,(int)0,0); + return ERROR; + } + memcpy((uint8_t*)&Data,&_gTangoVersion,size); + EEPROMProgram((uint32_t *)&Data, EMBEDDED_VERSION_ADDR*4, 4); + return OK; +} +uint32_t MCU_E2PromEmbeddedVersionRead() +{ + uint32_t Data; + EEPROMRead((uint32_t *)&Data,EMBEDDED_VERSION_ADDR*4, 4); + + Report("MCU_E2PromEmbeddedVersionRead length ",__FILE__,__LINE__,EMBEDDED_VERSION_ADDR*4,RpWarning,(int)(Data),0); + + return Data; +} //Each word may not be subject to more than a specific number of programming cycles before an //erase cycle is required. In other words, for any given word, FlashProgram can only be called diff --git a/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h index 5cab24587..39c892e0a 100644 --- a/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h +++ b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h @@ -34,6 +34,7 @@ typedef enum { EEPROM_STORAGE_SERIAL_NUM, EEPROM_STORAGE_MAC_ADDR, EEPROM_STORAGE_DRYER_BACKLASH, + EEPROM_STORAGE_EMBEDDED_VERSION, MAX_EEPROM_STORAGE }EEPROM_STORAGE_USAGE_ENUM; #define MAX_SERIAL_NUM_LEN 20 @@ -41,6 +42,7 @@ typedef enum { #define SERIAL_NUM_ADDR EEPROM_STORAGE_SERIAL_NUM*4 #define MAC_ADDR_ADDR (SERIAL_NUM_ADDR + MAX_SERIAL_NUM_LEN) #define DRYER_BACKLASH_ADDR (MAC_ADDR_ADDR + MAX_MAC_ADDR_LEN) +#define EMBEDDED_VERSION_ADDR (DRYER_BACKLASH_ADDR+1) uint32_t MCU_E2PromProgram(int Address,uint32_t Data); uint32_t MCU_E2PromRead(int Address,uint32_t *Data); @@ -52,6 +54,8 @@ uint32_t MCU_E2PromSerialNumProgram(char *Data); uint32_t MCU_E2PromSerialNumRead(char* *Data); uint32_t MCU_E2PromDryerBacklashProgram(char *Data); float MCU_E2PromDryerBacklashRead(void); +uint32_t MCU_E2PromEmbeddedVersionProgram(void); +uint32_t MCU_E2PromEmbeddedVersionRead(); extern char Serial[21]; diff --git a/Software/Embedded_SW/Embedded/Main.c b/Software/Embedded_SW/Embedded/Main.c index 9469f9b97..d0ebb8274 100644 --- a/Software/Embedded_SW/Embedded/Main.c +++ b/Software/Embedded_SW/Embedded/Main.c @@ -47,6 +47,8 @@ #include "Drivers/USBStick_FileSys/USBstick.h" #include "Drivers/USBStick_FileSys/USBMSCHFatFs.h" */ +#include "Common/SW_Info/SW_Info.h" + #include "Modules/Control/control.h" #include "Modules/Control/MillisecTask.h" #include "Modules/Heaters/Heaters_ex.h" @@ -233,7 +235,19 @@ int main(void) //FlashInit(); #ifndef EVALUATION_BOARD + TangoVersion_t Version; + uint32_t Data; + MCU_E2PromInit(); + Data = MCU_E2PromEmbeddedVersionRead(); + memcpy (&Version,&Data,4); + if (memcmp(&Version,&_gTangoVersion,4)) + { + LOG_ERROR(Version.m_minor,"Version change, do stuff"); + FlashInit(); + MCU_E2PromEmbeddedVersionProgram(); + } + #endif #ifdef EVALUATION_BOARD Init_EVB(); diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c index a9b539690..6542af287 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c @@ -707,7 +707,7 @@ uint32_t MillisecLowLoop(uint32_t tick) char Lenstr[160]; static int Counter = 0; MachineUpdateResponseFunc(); - KeepAliveOneSecondCall(); + //KeepAliveOneSecondCall(); TemperatureListString(Lenstr); ReportWithPackageFilter(ThreadFilter,Lenstr,__FILE__,__LINE__,(int)Counter++,RpWarning,(int) msec_millisecondCounter,0); |
