diff --git a/STM32F303xC.ld b/STM32F303xC.ld index 179d3be..76c838b 100644 --- a/STM32F303xC.ld +++ b/STM32F303xC.ld @@ -19,14 +19,14 @@ */ MEMORY { - flash0 : org = 0x08000000, len = 236k + flash0 : org = 0x08000000, len = 240k flash1 : org = 0x00000000, len = 0 flash2 : org = 0x00000000, len = 0 flash3 : org = 0x00000000, len = 0 flash4 : org = 0x00000000, len = 0 flash5 : org = 0x00000000, len = 0 flash6 : org = 0x00000000, len = 0 - flash7 : org = 0x0803B000, len = 20k + flash7 : org = 0x0803C000, len = 16k ram0 : org = 0x20000000, len = 40k ram1 : org = 0x00000000, len = 0 ram2 : org = 0x00000000, len = 0 diff --git a/flash.c b/flash.c index 419530b..bc4117b 100644 --- a/flash.c +++ b/flash.c @@ -78,6 +78,7 @@ checksum(const void *start, size_t len) return value; } + int config_save(void) { @@ -85,6 +86,7 @@ config_save(void) uint16_t *dst = (uint16_t*)SAVE_CONFIG_ADDR; int count = sizeof(config_t) / sizeof(uint16_t); + config.magic = CONFIG_MAGIC; config.checksum = checksum(&config, sizeof config - sizeof config.checksum); @@ -92,6 +94,9 @@ config_save(void) /* erase flash pages */ flash_erase_page((uint32_t)dst); +#if SAVE_CONFIG_SIZE > FLASH_PAGESIZE // two flash pages + flash_erase_page(((uint32_t)dst) + FLASH_PAGESIZE); +#endif /* write to flash */ while (count-- > 0) { @@ -156,6 +161,7 @@ caldata_save(uint16_t id) flash_program_half_word((uint32_t)dst, *src++); dst++; } +#if 0 // Flash stored trace to flash count = sizeof(stored_t) / sizeof(uint16_t); src = (uint16_t*)&stored_t[0]; @@ -163,7 +169,7 @@ caldata_save(uint16_t id) flash_program_half_word((uint32_t)dst, *src++); dst++; } - +#endif /* after saving data, make active configuration points to flash */ // active_props = (setting_t*)saveareas[id]; // lastsaveid = id; @@ -220,9 +226,11 @@ caldata_recall(uint16_t id) /* duplicated saved data onto sram to be able to modify marker/trace */ memcpy(dst, src, sizeof(setting_t)); +#if 0 // Restore stored trace src = &(src[1]); memcpy(stored_t, src, sizeof(stored_t)); +#endif update_min_max_freq(); update_frequencies(); set_scale(setting.scale); diff --git a/nanovna.h b/nanovna.h index 9b2627a..c8ce30a 100644 --- a/nanovna.h +++ b/nanovna.h @@ -212,15 +212,21 @@ typedef uint32_t freq_t; #define CORRECTION_LOW_ULTRA 2 #define CORRECTION_LNA_ULTRA 3 #ifdef DIRECT_CORRECTION - #define CORRECTION_DIRECT 4 - #define CORRECTION_LNA_DIRECT 5 - #define CORRECTION_LOW_OUT 6 - #define CORRECTION_HIGH 7 - #define CORRECTION_SIZE 8 + #define CORRECTION_DIRECT 4 + #define CORRECTION_LNA_DIRECT 5 + #define CORRECTION_LOW_OUT 6 + #define CORRECTION_LOW_OUT_DIRECT 7 + #define CORRECTION_LOW_OUT_ADF 8 + #define CORRECTION_LOW_OUT_MIXER 9 + #define CORRECTION_HIGH 10 + #define CORRECTION_SIZE 11 #else - #define CORRECTION_LOW_OUT 4 - #define CORRECTION_HIGH 5 - #define CORRECTION_SIZE 6 + #define CORRECTION_LOW_OUT 4 + #define CORRECTION_LOW_OUT_DIRECT 5 + #define CORRECTION_LOW_OUT_ADF 6 + #define CORRECTION_LOW_OUT_MIXER 7 + #define CORRECTION_HIGH 8 + #define CORRECTION_SIZE 9 #endif #endif typedef float measurement_t[TRACES_MAX][POINTS_COUNT]; @@ -1239,23 +1245,33 @@ extern int linear_averaging; // config save area (flash7 addr) #ifdef TINYSA3 #define SAVE_CONFIG_ADDR 0x0801D000 +#define SAVE_CONFIG_SIZE FLASH_PAGESIZE +#define FLASH_END 0x08020000 #endif #ifdef TINYSA4 -#define SAVE_CONFIG_ADDR 0x0803A800 +#define SAVE_CONFIG_ADDR 0x0803C000 +#define SAVE_CONFIG_SIZE FLASH_PAGESIZE*2 +#define FLASH_END 0x08040000 #endif -#define SAVE_CONFIG_SIZE 0x00000800 +typedef char assert_config[sizeof(config_t)> SAVE_CONFIG_SIZE ? -1 : 1]; // Check config size + // setting_t save area (save area + config size) #define SAVE_PROP_CONFIG_ADDR (SAVE_CONFIG_ADDR + SAVE_CONFIG_SIZE) + #ifdef TINYSA4 -#define SAVE_PROP_CONFIG_SIZE 0x00001000 +#define SAVE_PROP_CONFIG_SIZE 0x00000800 #else #define SAVE_PROP_CONFIG_SIZE 0x00000800 #endif + +typedef char assert_setting[sizeof(setting_t)> SAVE_PROP_CONFIG_SIZE ? -1 : 1]; // Check setting size + // Should include all save slots #define SAVE_CONFIG_AREA_SIZE (SAVE_CONFIG_SIZE + SAVEAREA_MAX * SAVE_PROP_CONFIG_SIZE) +typedef char assert_flash[ SAVE_CONFIG_ADDR + SAVE_CONFIG_AREA_SIZE >= FLASH_END ? -1 : 1]; #else #define SAVEAREA_MAX 4