diff --git a/fw/Core/Inc/config.h b/fw/Core/Inc/config.h index bb357d8..a8c7ace 100644 --- a/fw/Core/Inc/config.h +++ b/fw/Core/Inc/config.h @@ -56,6 +56,8 @@ config_read(&config); #define CONFIG_DEFAULT_SCD4x_T_OFFSET 0 #define CONFIG_DEFAULT_BAUDRATE_INDEX 0 +#define CONFIG_SERIAL_NUMBER_1_LENGTH 2 +#define CONFIG_SERIAL_NUMBER_2_LENGTH 2 #define CONFIG_MODBUS_ADDR_LENGTH 2 #define CONFIG_BAUDRATE_INDEX_LENGTH 2 #define CONFIG_LED_ON_LENGTH 2 @@ -76,7 +78,9 @@ config_read(&config); #define EEPROM_ADDR_START ((uint32_t)0x08080000) #define EEPROM_ADDR_END ((uint32_t)0x080803FF) -#define CONFIG_EEPROM_ADDR_MODBUS_ADDR EEPROM_ADDR_START +#define CONFIG_EEPROM_ADDR_SERIAL_NUMBER_1 (EEPROM_ADDR_START) +#define CONFIG_EEPROM_ADDR_SERIAL_NUMBER_2 (CONFIG_EEPROM_ADDR_SERIAL_NUMBER_1 + CONFIG_SERIAL_NUMBER_1_LENGTH) +#define CONFIG_EEPROM_ADDR_MODBUS_ADDR (CONFIG_EEPROM_ADDR_SERIAL_NUMBER_2 + CONFIG_SERIAL_NUMBER_2_LENGTH) #define CONFIG_EEPROM_ADDR_BAUDRATE_INDEX (CONFIG_EEPROM_ADDR_MODBUS_ADDR + CONFIG_MODBUS_ADDR_LENGTH) #define CONFIG_EEPROM_ADDR_LED_ON (CONFIG_EEPROM_ADDR_BAUDRATE_INDEX + CONFIG_BAUDRATE_INDEX_LENGTH) #define CONFIG_EEPROM_ADDR_LED_BRIGHTNESS (CONFIG_EEPROM_ADDR_LED_ON + CONFIG_LED_ON_LENGTH) @@ -85,6 +89,7 @@ config_read(&config); #define CONFIG_EEPROM_ADDR_LED_ALERT2 (CONFIG_EEPROM_ADDR_LED_ALERT1 + CONFIG_LED_ALERT1_LENGTH) #define CONFIG_EEPROM_ADDR_SCD4x_T_OFFSET (CONFIG_EEPROM_ADDR_LED_ALERT2 + CONFIG_LED_ALERT2_LENGTH) + #define CONFIG_EEPROM_ADDR_VENDOR_NAME (CONFIG_EEPROM_ADDR_SCD4x_T_OFFSET + CONFIG_SCD4x_T_OFFSET_LENGTH) #define CONFIG_EEPROM_ADDR_PRODUCT_CODE (CONFIG_EEPROM_ADDR_VENDOR_NAME + VENDOR_NAME_LENGTH) #define CONFIG_EEPROM_ADDR_PRODUCT_NAME (CONFIG_EEPROM_ADDR_PRODUCT_CODE + PRODUCT_CODE_LENGTH) @@ -133,6 +138,10 @@ typedef struct /* MODBUS CONFIG */ uint16_t modbus_addr; uint32_t baudrate_index; + + /* SERIAL NUMBER */ + uint16_t serial_number_1; + uint16_t serial_number_2; } config_t; diff --git a/fw/Core/Src/config.c b/fw/Core/Src/config.c index 08f6112..5a4b86a 100644 --- a/fw/Core/Src/config.c +++ b/fw/Core/Src/config.c @@ -42,6 +42,8 @@ static int8_t eeprom_program_word(uint32_t addr, uint32_t ee_data); int8_t config_read(config_t *config) { + config->serial_number_1 = *(uint16_t *) (CONFIG_EEPROM_ADDR_SERIAL_NUMBER_1); + config->serial_number_2 = *(uint16_t *) (CONFIG_EEPROM_ADDR_SERIAL_NUMBER_2); config->modbus_addr = *(uint16_t *) (CONFIG_EEPROM_ADDR_MODBUS_ADDR); config->baudrate_index = *(uint16_t *) (CONFIG_EEPROM_ADDR_BAUDRATE_INDEX); config->led_on = *(uint16_t *) (CONFIG_EEPROM_ADDR_LED_ON); @@ -60,7 +62,9 @@ int8_t config_read(config_t *config) if ((config->modbus_addr == EEPROM_EMPTY_BYTE) || (config->led_co2_alert_limit1 == EEPROM_EMPTY_BYTE) || (config->led_co2_alert_limit2 == EEPROM_EMPTY_BYTE) || - (config->led_brightness == EEPROM_EMPTY_BYTE)) + (config->led_brightness == EEPROM_EMPTY_BYTE) || + (config->serial_number_1 == EEPROM_EMPTY_BYTE) || + (config->serial_number_2 == EEPROM_EMPTY_BYTE)) { return CONFIG_ERROR; } @@ -77,11 +81,24 @@ int8_t config_write(config_t *config) /* Reset the ERASE and DATA bits in the FLASH_PECR register to disable any residual erase */ FLASH->PECR = FLASH->PECR & ~(FLASH_PECR_ERASE | FLASH_PECR_DATA); + /* Write SERIAL NUMBER 1 */ + if (eeprom_program_halfword(CONFIG_EEPROM_ADDR_SERIAL_NUMBER_1, config->serial_number_1) != EEPROM_OK) + { + return EEPROM_WRITE_ERROR; + } + + /* Write SERIAL NUMBER 2 */ + if (eeprom_program_halfword(CONFIG_EEPROM_ADDR_SERIAL_NUMBER_2, config->serial_number_2) != EEPROM_OK) + { + return EEPROM_WRITE_ERROR; + } + /* Write MODBUS ADDRESS */ if (eeprom_program_halfword(CONFIG_EEPROM_ADDR_MODBUS_ADDR, config->modbus_addr) != EEPROM_OK) { return EEPROM_WRITE_ERROR; } + /* Write BAUDRATE */ if (eeprom_program_halfword(CONFIG_EEPROM_ADDR_BAUDRATE_INDEX, config->baudrate_index) != EEPROM_OK) {