From 76be24ea45ccebc578f141d67274af1c6c86160d Mon Sep 17 00:00:00 2001 From: etsells Date: Mon, 9 Mar 2026 20:14:10 -0700 Subject: [PATCH 01/10] checkpoint --- app/rev3/Makefile | 10 +++++-- app/rev3/hardware_validation.c | 52 ++++++++++++++++++++++++++++++++++ app/rev3/main.c | 6 ++-- app/rev3/main.h | 7 ++++- 4 files changed, 70 insertions(+), 5 deletions(-) create mode 100644 app/rev3/hardware_validation.c diff --git a/app/rev3/Makefile b/app/rev3/Makefile index 74b92a24..04fabd9f 100644 --- a/app/rev3/Makefile +++ b/app/rev3/Makefile @@ -20,10 +20,11 @@ TARGET = STM32H733VGTx # building variables ###################################### # debug build? -DEBUG = 1 +DEBUG ?= 1 # optimization OPT = -Og - +# run validation? +VALIDATION ?= 0 ####################################### # paths @@ -164,6 +165,11 @@ ifeq ($(DEBUG), 1) CFLAGS += -g -gdwarf-2 endif +ifeq ($(VALIDATION), 1) +C_SOURCES += hardware_validation.c +CFLAGS += -DDO_HARDWARE_VALIDATION +endif + # Generate dependency information CFLAGS += -MMD -MP -MF"$(@:%.o=%.d)" diff --git a/app/rev3/hardware_validation.c b/app/rev3/hardware_validation.c new file mode 100644 index 00000000..3af990ef --- /dev/null +++ b/app/rev3/hardware_validation.c @@ -0,0 +1,52 @@ +/** + ****************************************************************************** + * @file : hardware_validation.c + * @brief : Routines to validate components on the FC. + ****************************************************************************** + * @attention + * + * Copyright (c) 2026 Sun Devil Rocketry. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is covered under the + * BSD-3-Clause. + * + * https://opensource.org/license/bsd-3-clause + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +#include "usb_device.h" +#include "led.h" + +/* Global Variables ----------------------------------------------------------*/ + + + +/* Private function prototypes -----------------------------------------------*/ + + + +/* Procedures ----------------------------------------------------------------*/ + +void run_hardware_validation + ( + void + ) +{ +/* LED */ +led_set_color(LED_WHITE); +HAL_Delay(1000); +led_set_color(LED_RED); +HAL_Delay(1000); +led_set_color(LED_BLUE); +HAL_Delay(1000); +led_set_color(LED_GREEN); +HAL_Delay(1000); + + +} /* run_hardware_validation */ \ No newline at end of file diff --git a/app/rev3/main.c b/app/rev3/main.c index 983e9904..539ec852 100644 --- a/app/rev3/main.c +++ b/app/rev3/main.c @@ -78,7 +78,6 @@ static void MX_USART3_UART_Init(void); /* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ - /* USER CODE END 0 */ /** @@ -125,8 +124,11 @@ int main(void) MX_SPI4_Init(); MX_USART3_UART_Init(); MX_USB_DEVICE_Init(); + /* USER CODE BEGIN 2 */ - + #ifdef DO_HARDWARE_VALIDATION + run_hardware_validation(); + #endif /* USER CODE END 2 */ /* Infinite loop */ diff --git a/app/rev3/main.h b/app/rev3/main.h index f9c59f73..b2e2c569 100644 --- a/app/rev3/main.h +++ b/app/rev3/main.h @@ -53,7 +53,12 @@ extern "C" { void Error_Handler(void); /* USER CODE BEGIN EFP */ - +#ifdef DO_HARDWARE_VALIDATION +void run_hardware_validation + ( + void + ); +#endif /* USER CODE END EFP */ /* Private defines -----------------------------------------------------------*/ From 3f6e0abae41b63ce9e1bbf977c6ca68a70c3eca5 Mon Sep 17 00:00:00 2001 From: ETSsound <147210601+ETSsound@users.noreply.github.com> Date: Thu, 12 Mar 2026 18:06:02 -0700 Subject: [PATCH 02/10] Add flash driver and rev 3 pin defs to build --- app/rev3/Makefile | 4 ++++ app/rev3/main.h | 1 + 2 files changed, 5 insertions(+) diff --git a/app/rev3/Makefile b/app/rev3/Makefile index 04fabd9f..ee1917e1 100644 --- a/app/rev3/Makefile +++ b/app/rev3/Makefile @@ -43,6 +43,7 @@ DRIVER_DIR = ../../driver # C sources C_SOURCES = \ main.c \ +$(DRIVER_DIR)/flash/MX25L51245GZ2I-08G.c \ $(INIT_DIR)/config/Src/stm32h7xx_it.c \ $(INIT_DIR)/config/Src/stm32h7xx_hal_msp.c \ $(DRIVER_DIR)/usb/USB_DEVICE/App/usb_device.c \ @@ -136,6 +137,7 @@ AS_DEFS = C_DEFS = \ -DUSE_PWR_LDO_SUPPLY \ -DUSE_HAL_DRIVER \ +-DA0010 \ -DSTM32H733xx @@ -145,6 +147,8 @@ AS_INCLUDES = # C includes C_INCLUDES = \ -I. \ +-I$(LIB_DIR) \ +-I$(DRIVER_DIR)/flash \ -I$(DRIVER_DIR)/usb/USB_DEVICE/App \ -I$(DRIVER_DIR)/usb/USB_DEVICE/Target \ -I$(INIT_DIR)/config/Inc \ diff --git a/app/rev3/main.h b/app/rev3/main.h index b2e2c569..86498f83 100644 --- a/app/rev3/main.h +++ b/app/rev3/main.h @@ -28,6 +28,7 @@ extern "C" { /* Includes ------------------------------------------------------------------*/ #include "stm32h7xx_hal.h" +#include "sdr_pin_defines_A0010.h" /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ From 96bb98cdfef29f62ab723b0aed62f7b6913060ad Mon Sep 17 00:00:00 2001 From: ETSound Date: Tue, 5 May 2026 12:45:40 -0700 Subject: [PATCH 03/10] Add flash driver to build system --- app/rev3/Makefile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/rev3/Makefile b/app/rev3/Makefile index 4e9de9c3..6527ede1 100644 --- a/app/rev3/Makefile +++ b/app/rev3/Makefile @@ -52,6 +52,7 @@ $(DRIVER_DIR)/usb/USB_DEVICE/App/usbd_desc.c \ $(DRIVER_DIR)/usb/USB_DEVICE/App/usbd_cdc_if.c \ $(DRIVER_DIR)/usb/USB_DEVICE/Target/usbd_conf.c \ $(DRIVER_DIR)/usb/usb.c \ +$(DRIVER_DIR)/flash/MX25L51245GZ2I-08G.c \ $(LIB_DIR)/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pcd.c \ $(LIB_DIR)/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pcd_ex.c \ $(LIB_DIR)/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_usb.c \ @@ -153,6 +154,7 @@ C_INCLUDES = \ -I$(MOD_DIR)/error_sdr \ -I$(MOD_DIR)/math_sdr \ -I$(DRIVER_DIR)/led \ +-I$(DRIVER_DIR)/flash \ -I$(DRIVER_DIR)/usb/USB_DEVICE/App \ -I$(DRIVER_DIR)/usb/USB_DEVICE/Target \ -I$(INIT_DIR)/config/Inc \ From 4faf9ae808d0a20df8610be8ca933be541c8a364 Mon Sep 17 00:00:00 2001 From: ETSound Date: Tue, 5 May 2026 12:58:50 -0700 Subject: [PATCH 04/10] Pull up driver (CI) --- driver | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/driver b/driver index b9ea32f9..5fa30566 160000 --- a/driver +++ b/driver @@ -1 +1 @@ -Subproject commit b9ea32f981191e7533b32ee10bb9ee5b14df6feb +Subproject commit 5fa3056657ebad17f813df8174ab0938107601fa From 713979df525905ad346cea5232735c465dc7d7d4 Mon Sep 17 00:00:00 2001 From: ETSound Date: Sat, 23 May 2026 13:40:59 -0700 Subject: [PATCH 05/10] Add a validation routine for rev 3 flash --- app/rev3/hardware_validation.c | 85 ++++++++++++++++++++++++++++++++++ app/rev3/main.c | 11 ++++- 2 files changed, 95 insertions(+), 1 deletion(-) diff --git a/app/rev3/hardware_validation.c b/app/rev3/hardware_validation.c index 3af990ef..4f1f097e 100644 --- a/app/rev3/hardware_validation.c +++ b/app/rev3/hardware_validation.c @@ -22,6 +22,8 @@ #include "main.h" #include "usb_device.h" #include "led.h" +#include "flash.h" +#include "error_sdr.h" /* Global Variables ----------------------------------------------------------*/ @@ -33,6 +35,86 @@ /* Procedures ----------------------------------------------------------------*/ +static void flash_validation_routine + ( + void + ) +{ +/* Flash */ +// Begin Performance Timer +volatile uint32_t start_time = HAL_GetTick(); + +// Init +HFLASH_BUFFER flash_handle; +memset(&flash_handle, 0, sizeof(HFLASH_BUFFER)); +FLASH_STATUS flash_status = flash_init(&flash_handle); +uint8_t flash_buf[FLASH_PAGE_SIZE]; +memset(flash_buf, 0, FLASH_PAGE_SIZE); +flash_handle.pbuffer = flash_buf; + +assert_fail_fast( flash_status == FLASH_OK, ERROR_FLASH_INIT_ERROR ); + +// Set up HW validation routine +flash_status = flash_erase(&flash_handle); + +assert_fail_fast( flash_status == FLASH_OK, ERROR_FLASH_CMD_ERROR ); + +// Run write sequence (once per page) +flash_buf[0] = 127; +for(uint32_t i = 0; i < FLASH_MAX_ADDR; i+=FLASH_PAGE_SIZE) { + flash_handle.address = i; + flash_status = flash_write(&flash_handle); + assert_fail_fast( flash_status == FLASH_OK, ERROR_FLASH_CMD_ERROR ); +} + +// Run read sequence and verify (once per page) +memset(flash_buf, 0, FLASH_PAGE_SIZE); +for(uint32_t i = 0; i < FLASH_MAX_ADDR; i+=FLASH_PAGE_SIZE) { + flash_handle.address = i; + flash_status = flash_read(&flash_handle, 2); + assert_fail_fast( flash_status == FLASH_OK, ERROR_FLASH_CMD_ERROR ); + assert_fail_fast( flash_buf[0] == 127, ERROR_FLASH_CMD_ERROR ); + assert_fail_fast( flash_buf[1] == 0xFF, ERROR_FLASH_CMD_ERROR ); +} + +// Test Block Erasures +// 4K +flash_status = flash_block_erase(0, FLASH_BLOCK_4K); +assert_fail_fast( flash_status == FLASH_OK, ERROR_FLASH_CMD_ERROR ); +for(uint32_t i = 0; i < 0x1000 - 1; i+=FLASH_PAGE_SIZE) { + flash_handle.address = i; + flash_status = flash_read(&flash_handle, 2); + assert_fail_fast( flash_status == FLASH_OK, ERROR_FLASH_CMD_ERROR ); + assert_fail_fast( flash_buf[0] == 0xFF, ERROR_FLASH_CMD_ERROR ); +} + +// 32K +flash_status = flash_block_erase(0, FLASH_BLOCK_32K); +assert_fail_fast( flash_status == FLASH_OK, ERROR_FLASH_CMD_ERROR ); +for(uint32_t i = 0; i < 0x8000 - 1; i+=FLASH_PAGE_SIZE) { + flash_handle.address = i; + flash_status = flash_read(&flash_handle, 2); + assert_fail_fast( flash_status == FLASH_OK, ERROR_FLASH_CMD_ERROR ); + assert_fail_fast( flash_buf[0] == 0xFF, ERROR_FLASH_CMD_ERROR ); +} + +// 64K +flash_status = flash_block_erase(0, FLASH_BLOCK_64K); +assert_fail_fast( flash_status == FLASH_OK, ERROR_FLASH_CMD_ERROR ); +for(uint32_t i = 0; i < 0x10000 - 1; i+=FLASH_PAGE_SIZE) { + flash_handle.address = i; + flash_status = flash_read(&flash_handle, 2); + assert_fail_fast( flash_status == FLASH_OK, ERROR_FLASH_CMD_ERROR ); + assert_fail_fast( flash_buf[0] == 0xFF, ERROR_FLASH_CMD_ERROR ); +} + +// End Performance Timer +volatile uint32_t tdelta = HAL_GetTick() - start_time; +(void)tdelta; // suppress unused + +} /* flash_validation_routine */ + + void run_hardware_validation ( void @@ -48,5 +130,8 @@ HAL_Delay(1000); led_set_color(LED_GREEN); HAL_Delay(1000); +/* flash */ +flash_validation_routine(); + } /* run_hardware_validation */ \ No newline at end of file diff --git a/app/rev3/main.c b/app/rev3/main.c index 539ec852..370c2ddd 100644 --- a/app/rev3/main.c +++ b/app/rev3/main.c @@ -22,7 +22,7 @@ /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ - +#include "flash.h" /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ @@ -126,8 +126,17 @@ int main(void) MX_USB_DEVICE_Init(); /* USER CODE BEGIN 2 */ + /* Initialize all peripherals within this guard */ + #ifndef DO_HARDWARE_VALIDATION + /* Flash */ + HFLASH_BUFFER flash_handle; + memset(&flash_handle, 0, sizeof(HFLASH_BUFFER)); + FLASH_STATUS flash_status = flash_init(&flash_handle); + #endif + #ifdef DO_HARDWARE_VALIDATION run_hardware_validation(); + while (1); #endif /* USER CODE END 2 */ From 8dba67358ec8124a791213ef2fa1e09ae292ad14 Mon Sep 17 00:00:00 2001 From: ETSound Date: Sat, 23 May 2026 13:44:01 -0700 Subject: [PATCH 06/10] change the guard pattern --- app/rev3/main.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/app/rev3/main.c b/app/rev3/main.c index 370c2ddd..50068386 100644 --- a/app/rev3/main.c +++ b/app/rev3/main.c @@ -126,18 +126,15 @@ int main(void) MX_USB_DEVICE_Init(); /* USER CODE BEGIN 2 */ - /* Initialize all peripherals within this guard */ - #ifndef DO_HARDWARE_VALIDATION - /* Flash */ - HFLASH_BUFFER flash_handle; - memset(&flash_handle, 0, sizeof(HFLASH_BUFFER)); - FLASH_STATUS flash_status = flash_init(&flash_handle); - #endif - #ifdef DO_HARDWARE_VALIDATION run_hardware_validation(); while (1); #endif + + /* Flash */ + HFLASH_BUFFER flash_handle; + memset(&flash_handle, 0, sizeof(HFLASH_BUFFER)); + FLASH_STATUS flash_status = flash_init(&flash_handle); /* USER CODE END 2 */ /* Infinite loop */ From d89974418d9a8a42a0b47a50252a02cf757334c8 Mon Sep 17 00:00:00 2001 From: ETSound Date: Sat, 23 May 2026 14:10:23 -0700 Subject: [PATCH 07/10] Add test cases for assert macros --- test/app/rev2/error_int/Makefile | 9 +++- test/app/rev2/error_int/test_error_int.c | 59 +++++++++++++++++++++++- 2 files changed, 66 insertions(+), 2 deletions(-) diff --git a/test/app/rev2/error_int/Makefile b/test/app/rev2/error_int/Makefile index e50e5cf5..3a7553db 100644 --- a/test/app/rev2/error_int/Makefile +++ b/test/app/rev2/error_int/Makefile @@ -15,7 +15,7 @@ TARGET = error_int ################################################################ # Debug build? -DEBUG = 1 +DEBUG ?= 0 # Optimization OPT = -Og @@ -112,6 +112,13 @@ C_DEFS = \ -DUSE_CALLBACK_TABLE \ -DUNIT_TEST +# Add debug/release flags +ifeq ($(DEBUG), 1); then + C_DEFS += -DDEBUG +else + C_DEFS += -DRELBLD +endif + CFLAGS = $(C_INCLUDES) $(C_DEFS) $(OPT) -Wall -g # Disable some warnings diff --git a/test/app/rev2/error_int/test_error_int.c b/test/app/rev2/error_int/test_error_int.c index f34039de..09115c9b 100644 --- a/test/app/rev2/error_int/test_error_int.c +++ b/test/app/rev2/error_int/test_error_int.c @@ -294,6 +294,62 @@ TEST_ASSERT_FALSE( "Robustness: Test that attempting to get a message from an em } /* test_warning_messages */ +/******************************************************************************* +* * +* PROCEDURE: * +* test_assert_constructs * +* * +* DESCRIPTION: * +* Test the assert macros (no coverage provided). * +* * +*******************************************************************************/ +void test_assert_constructs + ( + void + ) +{ +/*------------------------------------------------------------------------------ + Case 1: Assert Fail +------------------------------------------------------------------------------*/ +default_error_handler.error_callback = TEST_CALLBACK_dflt_handler; // can't be reset +default_handler_hit = false; +assert_fail_fast( 1 == 0, ERROR_COMMON_CLOCK_CONFIG_ERROR ); +TEST_ASSERT_EQ_UINT( "Test whether the default handler was hit.", default_handler_hit, true ); + +/*------------------------------------------------------------------------------ + Case 2: Assert Pass +------------------------------------------------------------------------------*/ +default_handler_hit = false; +assert_fail_fast( 1 == 1, ERROR_COMMON_CLOCK_CONFIG_ERROR ); +TEST_ASSERT_EQ_UINT( "Test whether the default handler was hit.", default_handler_hit, false ); + +/*------------------------------------------------------------------------------ + Case 3: Debug Assert in Release Mode +------------------------------------------------------------------------------*/ +#ifndef DEBUG +default_handler_hit = false; +debug_assert( 0 == 1, ERROR_COMMON_CLOCK_CONFIG_ERROR ); +TEST_ASSERT_EQ_UINT( "Test whether the default handler was hit.", default_handler_hit, false ); +#else + +/*------------------------------------------------------------------------------ + Case 4: Debug Assert Fail in Debug Mode +------------------------------------------------------------------------------*/ +default_handler_hit = false; +debug_assert( 0 == 1, ERROR_COMMON_CLOCK_CONFIG_ERROR ); +TEST_ASSERT_EQ_UINT( "Test whether the default handler was hit.", default_handler_hit, true ); + +/*------------------------------------------------------------------------------ + Case 5: Debug Assert Pass in Debug Mode +------------------------------------------------------------------------------*/ +default_handler_hit = false; +debug_assert( 1 == 1, ERROR_COMMON_CLOCK_CONFIG_ERROR ); +TEST_ASSERT_EQ_UINT( "Test whether the default handler was hit.", default_handler_hit, false ); +#endif + +} /* test_assert_constructs */ + + /******************************************************************************* * * * PROCEDURE: * @@ -317,7 +373,8 @@ unit_test tests[] = { "error_fail_fast: I2C (IMU and Baro) initialization callbacks.", test_i2c_init_errors }, { "error_fail_fast: Test callback table miss.", test_callback_table_miss }, /* ensure you're done with the default handler! cannot reset. */ { "Test log-severity messages.", test_log_messages }, - { "Test warning-severity messages.", test_warning_messages } + { "Test warning-severity messages.", test_warning_messages }, + { "Test assertion macros.", test_assert_constructs } }; /*------------------------------------------------------------------------------ From 19ae58ac6430ba2356ae0a92972c4e71bb7e2caf Mon Sep 17 00:00:00 2001 From: ETSound Date: Sat, 23 May 2026 14:11:57 -0700 Subject: [PATCH 08/10] Pull up mod for CI passage --- mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mod b/mod index 67bde0d3..fe006df4 160000 --- a/mod +++ b/mod @@ -1 +1 @@ -Subproject commit 67bde0d3bcabcceb64a0ef528dc261f751cc446f +Subproject commit fe006df4092c995f0192a7b391e1fc3cf2513b4d From 6a4fa9ac05057ed7048e86a3fd6422d140b0f885 Mon Sep 17 00:00:00 2001 From: ETSound Date: Sat, 23 May 2026 14:21:23 -0700 Subject: [PATCH 09/10] Pull up mod --- mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mod b/mod index fe006df4..1e904bb2 160000 --- a/mod +++ b/mod @@ -1 +1 @@ -Subproject commit fe006df4092c995f0192a7b391e1fc3cf2513b4d +Subproject commit 1e904bb257750c47b09303a95f6b9ad4e6a7e5e1 From b4f6a289c19c5e20a0b30d591c060a478cf062db Mon Sep 17 00:00:00 2001 From: ETSound Date: Mon, 1 Jun 2026 18:56:37 -0700 Subject: [PATCH 10/10] Addressing formatting issues --- app/rev3/hardware_validation.c | 38 +++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/app/rev3/hardware_validation.c b/app/rev3/hardware_validation.c index 4f1f097e..96a35a2e 100644 --- a/app/rev3/hardware_validation.c +++ b/app/rev3/hardware_validation.c @@ -61,7 +61,7 @@ assert_fail_fast( flash_status == FLASH_OK, ERROR_FLASH_CMD_ERROR ); // Run write sequence (once per page) flash_buf[0] = 127; -for(uint32_t i = 0; i < FLASH_MAX_ADDR; i+=FLASH_PAGE_SIZE) { +for ( uint32_t i = 0; i < FLASH_MAX_ADDR; i+=FLASH_PAGE_SIZE ) { flash_handle.address = i; flash_status = flash_write(&flash_handle); assert_fail_fast( flash_status == FLASH_OK, ERROR_FLASH_CMD_ERROR ); @@ -69,7 +69,7 @@ for(uint32_t i = 0; i < FLASH_MAX_ADDR; i+=FLASH_PAGE_SIZE) { // Run read sequence and verify (once per page) memset(flash_buf, 0, FLASH_PAGE_SIZE); -for(uint32_t i = 0; i < FLASH_MAX_ADDR; i+=FLASH_PAGE_SIZE) { +for ( uint32_t i = 0; i < FLASH_MAX_ADDR; i+=FLASH_PAGE_SIZE ) { flash_handle.address = i; flash_status = flash_read(&flash_handle, 2); assert_fail_fast( flash_status == FLASH_OK, ERROR_FLASH_CMD_ERROR ); @@ -81,31 +81,31 @@ for(uint32_t i = 0; i < FLASH_MAX_ADDR; i+=FLASH_PAGE_SIZE) { // 4K flash_status = flash_block_erase(0, FLASH_BLOCK_4K); assert_fail_fast( flash_status == FLASH_OK, ERROR_FLASH_CMD_ERROR ); -for(uint32_t i = 0; i < 0x1000 - 1; i+=FLASH_PAGE_SIZE) { - flash_handle.address = i; - flash_status = flash_read(&flash_handle, 2); - assert_fail_fast( flash_status == FLASH_OK, ERROR_FLASH_CMD_ERROR ); - assert_fail_fast( flash_buf[0] == 0xFF, ERROR_FLASH_CMD_ERROR ); +for ( uint32_t i = 0; i < 0x1000 - 1; i+=FLASH_PAGE_SIZE ) { + flash_handle.address = i; + flash_status = flash_read(&flash_handle, 2); + assert_fail_fast( flash_status == FLASH_OK, ERROR_FLASH_CMD_ERROR ); + assert_fail_fast( flash_buf[0] == 0xFF, ERROR_FLASH_CMD_ERROR ); } // 32K flash_status = flash_block_erase(0, FLASH_BLOCK_32K); assert_fail_fast( flash_status == FLASH_OK, ERROR_FLASH_CMD_ERROR ); -for(uint32_t i = 0; i < 0x8000 - 1; i+=FLASH_PAGE_SIZE) { - flash_handle.address = i; - flash_status = flash_read(&flash_handle, 2); - assert_fail_fast( flash_status == FLASH_OK, ERROR_FLASH_CMD_ERROR ); - assert_fail_fast( flash_buf[0] == 0xFF, ERROR_FLASH_CMD_ERROR ); +for (uint32_t i = 0; i < 0x8000 - 1; i+=FLASH_PAGE_SIZE ) { + flash_handle.address = i; + flash_status = flash_read(&flash_handle, 2); + assert_fail_fast( flash_status == FLASH_OK, ERROR_FLASH_CMD_ERROR ); + assert_fail_fast( flash_buf[0] == 0xFF, ERROR_FLASH_CMD_ERROR ); } // 64K flash_status = flash_block_erase(0, FLASH_BLOCK_64K); assert_fail_fast( flash_status == FLASH_OK, ERROR_FLASH_CMD_ERROR ); -for(uint32_t i = 0; i < 0x10000 - 1; i+=FLASH_PAGE_SIZE) { - flash_handle.address = i; - flash_status = flash_read(&flash_handle, 2); - assert_fail_fast( flash_status == FLASH_OK, ERROR_FLASH_CMD_ERROR ); - assert_fail_fast( flash_buf[0] == 0xFF, ERROR_FLASH_CMD_ERROR ); +for ( uint32_t i = 0; i < 0x10000 - 1; i+=FLASH_PAGE_SIZE ) { + flash_handle.address = i; + flash_status = flash_read(&flash_handle, 2); + assert_fail_fast( flash_status == FLASH_OK, ERROR_FLASH_CMD_ERROR ); + assert_fail_fast( flash_buf[0] == 0xFF, ERROR_FLASH_CMD_ERROR ); } // End Performance Timer @@ -133,5 +133,9 @@ HAL_Delay(1000); /* flash */ flash_validation_routine(); +led_set_color(LED_WHITE); +//buzzer_num_beeps(/*2 beeps when buzzer is implemented to signal the end*/); +led_set_color(LED_GREEN); + } /* run_hardware_validation */ \ No newline at end of file