diff --git a/.changesets/archive/v6.1.2/fix-fault-during-faultcontroller-start.md b/.changesets/archive/v6.1.2/fix-fault-during-faultcontroller-start.md new file mode 100644 index 000000000..20b486020 --- /dev/null +++ b/.changesets/archive/v6.1.2/fix-fault-during-faultcontroller-start.md @@ -0,0 +1,2 @@ +release: patch +summary: Fix faults caused in state machine start causing non-initialized state machine diff --git a/.changesets/archive/v6.1.2/fix-spi-clock.md b/.changesets/archive/v6.1.2/fix-spi-clock.md new file mode 100644 index 000000000..3b49bc7a3 --- /dev/null +++ b/.changesets/archive/v6.1.2/fix-spi-clock.md @@ -0,0 +1,2 @@ +release: patch +summary: Fix some clock problems in spi 4 and 5 diff --git a/.changesets/archive/v6.1.3/spi45-hsi-clock-source.md b/.changesets/archive/v6.1.3/spi45-hsi-clock-source.md new file mode 100644 index 000000000..55af86996 --- /dev/null +++ b/.changesets/archive/v6.1.3/spi45-hsi-clock-source.md @@ -0,0 +1,5 @@ +release: patch +summary: Drive SPI4 and SPI5 from HSI for stable 2 MHz BMS transfers + +SPI4 and SPI5 now use the 64 MHz HSI peripheral clock source instead of PCLK2, +allowing a 2 MHz request to select the /32 SPI prescaler deterministically. diff --git a/.changesets/fix-hardfault-warning.md b/.changesets/fix-hardfault-warning.md new file mode 100644 index 000000000..7f25091ea --- /dev/null +++ b/.changesets/fix-hardfault-warning.md @@ -0,0 +1,2 @@ +release: patch +summary: Fix a warning about symbols in HardfaultTrace (doesn't change any behaviour) diff --git a/CHANGELOG.md b/CHANGELOG.md index b2e71f000..8582dc5dc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,21 @@ The revived semantic-versioning baseline starts at `v5.0.0`. Historical releases that predate this file remain available in Git tags such as `v1.0.0`, `v3.0.0`, `v4.0.0-beta`, and `h10`. +## v6.1.3 - 2026-06-02 + +### Fixes + +- Drive SPI4 and SPI5 from HSI for stable 2 MHz BMS transfers + SPI4 and SPI5 now use the 64 MHz HSI peripheral clock source instead of PCLK2, + allowing a 2 MHz request to select the /32 SPI prescaler deterministically. + +## v6.1.2 - 2026-05-29 + +### Fixes + +- Fix faults caused in state machine start causing non-initialized state machine +- Fix some clock problems in spi 4 and 5 + ## v6.1.1 - 2026-05-11 ### Fixes diff --git a/Inc/HALAL/HardFault/HardfaultTrace.h b/Inc/HALAL/HardFault/HardfaultTrace.h index 5fe2d7c40..22021cbfc 100644 --- a/Inc/HALAL/HardFault/HardfaultTrace.h +++ b/Inc/HALAL/HardFault/HardfaultTrace.h @@ -9,8 +9,8 @@ #ifdef __cplusplus extern "C" { #endif -extern uint32_t _metadata; -extern uint32_t _hf_log; +extern uint8_t _metadata[]; +extern uint8_t _hf_log[]; #ifdef __cplusplus } #endif diff --git a/Inc/HALAL/Models/SPI/SPI2.hpp b/Inc/HALAL/Models/SPI/SPI2.hpp index ce84c092d..55c145b60 100644 --- a/Inc/HALAL/Models/SPI/SPI2.hpp +++ b/Inc/HALAL/Models/SPI/SPI2.hpp @@ -1371,7 +1371,7 @@ struct SPIDomain { spi_number = 3; } else if (peripheral == SPIPeripheral::spi4) { PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_SPI4; - PeriphClkInitStruct.Spi45ClockSelection = RCC_SPI45CLKSOURCE_PLL2; + PeriphClkInitStruct.Spi45ClockSelection = RCC_SPI45CLKSOURCE_HSI; if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) { PANIC("Unable to configure SPI4 clock"); } @@ -1379,7 +1379,7 @@ struct SPIDomain { spi_number = 4; } else if (peripheral == SPIPeripheral::spi5) { PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_SPI5; - PeriphClkInitStruct.Spi45ClockSelection = RCC_SPI45CLKSOURCE_PLL2; + PeriphClkInitStruct.Spi45ClockSelection = RCC_SPI45CLKSOURCE_HSI; if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) { PANIC("Unable to configure SPI5 clock"); } diff --git a/Inc/MockedDrivers/stm32h7xx_hal_mock.h b/Inc/MockedDrivers/stm32h7xx_hal_mock.h index 42b635226..12bca88d1 100644 --- a/Inc/MockedDrivers/stm32h7xx_hal_mock.h +++ b/Inc/MockedDrivers/stm32h7xx_hal_mock.h @@ -62,6 +62,7 @@ typedef struct { } RCC_TypeDef; extern RCC_TypeDef* RCC; extern uint32_t SystemCoreClock; +#define HSI_VALUE 64000000U #define RCC_D1CFGR_HPRE_Msk (0xFU << 0U) #define RCC_D2CFGR_D2PPRE1_Pos 4U @@ -595,6 +596,8 @@ typedef struct { #define RCC_SPI123CLKSOURCE_PLL 0x00000001U #define RCC_SPI45CLKSOURCE_PLL2 0x00000002U +#define RCC_SPI45CLKSOURCE_PCLK2 0x00000003U +#define RCC_SPI45CLKSOURCE_HSI 0x00000004U #define RCC_SPI6CLKSOURCE_PLL2 0x00000002U typedef struct TIM_TypeDef TIM_TypeDef; @@ -945,7 +948,9 @@ static inline HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeD return HAL_OK; } static inline uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) { - (void)PeriphClk; + if (PeriphClk == RCC_PERIPHCLK_SPI45) { + return HSI_VALUE; + } return SystemCoreClock; } static inline HAL_StatusTypeDef HAL_DMA_Init(DMA_HandleTypeDef* hdma) { diff --git a/Src/HALAL/HardFault/HardfaultTrace.c b/Src/HALAL/HardFault/HardfaultTrace.c index 0aa1d7c18..01f9c3e78 100644 --- a/Src/HALAL/HardFault/HardfaultTrace.c +++ b/Src/HALAL/HardFault/HardfaultTrace.c @@ -18,7 +18,7 @@ extern GPIO_TypeDef* ports_hard_fault[]; extern uint16_t pins_hard_fault[]; extern uint8_t hard_fault_leds_count; -extern uint32_t _hf_log; +extern uint8_t _hf_log[]; static void LED_Blink(); static void LED_init(void); diff --git a/Src/HALAL/Models/HALconfig/Halconfig.cpp b/Src/HALAL/Models/HALconfig/Halconfig.cpp index f7b2a7073..aa1d334b2 100644 --- a/Src/HALAL/Models/HALconfig/Halconfig.cpp +++ b/Src/HALAL/Models/HALconfig/Halconfig.cpp @@ -19,7 +19,10 @@ void HALconfig::system_clock() { __HAL_RCC_PLL_PLLSOURCE_CONFIG(RCC_PLLSOURCE_HSE); - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI | RCC_OSCILLATORTYPE_HSE; + RCC_OscInitStruct.OscillatorType = + RCC_OSCILLATORTYPE_HSI | RCC_OSCILLATORTYPE_LSI | RCC_OSCILLATORTYPE_HSE; + RCC_OscInitStruct.HSIState = RCC_HSI_DIV1; + RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; RCC_OscInitStruct.LSIState = RCC_LSI_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; diff --git a/Src/ST-LIB_HIGH/Protections/FaultController.cpp b/Src/ST-LIB_HIGH/Protections/FaultController.cpp index f068c2b2f..336c48c1b 100644 --- a/Src/ST-LIB_HIGH/Protections/FaultController.cpp +++ b/Src/ST-LIB_HIGH/Protections/FaultController.cpp @@ -149,8 +149,10 @@ void FaultController::start() { return; } - runtime_storage.start(global_machine); + // Set runtime_started before calling start so that faults caused by start don't trigger a + // rebuild of the state machine runtime_started = true; + runtime_storage.start(global_machine); if (faulted) { Diagnostics::Hub::flush_urgent(); diff --git a/VERSION b/VERSION index f3b5af39e..88d06f108 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -6.1.1 +6.1.3