From 6e3efed09c2c2868bc7b15c9fa8f973b32ebb69b Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Wed, 19 Oct 2022 21:59:39 -0700 Subject: [PATCH] more f429 business (#4679) * 429 boots and LEDs work * oops missed a comma * enable on f767 too, since it should be the same board * why not just completely duplicate it * script should not be fancy * script should not be fancy * correct pins * h743 while we're at it --- .vscode/tasks.json | 48 +++++++++++++++++++ firmware/config/boards/nucleo_f429/board.mk | 3 +- .../nucleo_f429/board_configuration.cpp | 25 ++++++++++ .../nucleo_f429/compile_stm32f429_nucleo.sh | 14 ------ .../config/boards/nucleo_f429/prepend.txt | 0 firmware/config/boards/nucleo_f767/board.mk | 11 +++-- .../nucleo_f767/board_configuration.cpp | 47 ------------------ .../nucleo_f767/compile_stm32f767_nucleo.sh | 3 -- .../nucleo_f767/compile_stm32f767_osc.sh | 7 +-- firmware/config/boards/nucleo_h743/board.mk | 13 ++--- .../nucleo_h743/board_configuration.cpp | 24 ++++++++++ .../nucleo_h743/compile_stm32h743_nucleo.sh | 12 ----- firmware/console/ethernet_console.cpp | 17 ------- firmware/hw_layer/drivers/gpio/l9779.cpp | 5 +- firmware/hw_layer/drivers/gpio/tle8888.cpp | 5 +- .../hw_layer/ports/stm32/osc_detector.cpp | 2 +- firmware/main.cpp | 5 ++ firmware/rusefi.h | 2 + 18 files changed, 125 insertions(+), 118 deletions(-) delete mode 100644 firmware/config/boards/nucleo_f429/prepend.txt delete mode 100644 firmware/config/boards/nucleo_f767/board_configuration.cpp diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 2aac2bb1f5..465feef646 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -67,6 +67,38 @@ "isDefault": true } }, + { + "label": "Build Firmware (Nucleo F429)", + "type": "shell", + "command": "make -j12 PROJECT_BOARD=nucleo_f429", + "windows": { + "command": "wsl bash -lc 'make -j12 PROJECT_BOARD=nucleo_f429'" + }, + "options": { + "cwd": "${workspaceRoot}/firmware" + }, + "problemMatcher": [], + "group": { + "kind": "build", + "isDefault": true + } + }, + { + "label": "Build Firmware (Nucleo H743)", + "type": "shell", + "command": "make -j12 PROJECT_BOARD=nucleo_h743 PROJECT_CPU=ARCH_STM32H7", + "windows": { + "command": "wsl bash -lc 'make -j12 PROJECT_BOARD=nucleo_h743 PROJECT_CPU=ARCH_STM32H7'" + }, + "options": { + "cwd": "${workspaceRoot}/firmware" + }, + "problemMatcher": [], + "group": { + "kind": "build", + "isDefault": true + } + }, { "label": "Build Firmware (Atlas H7)", "type": "shell", @@ -99,6 +131,22 @@ "isDefault": true } }, + { + "label": "Build Firmware (nissan 121)", + "type": "shell", + "command": "make -j16 PROJECT_BOARD=hellen/hellen121nissan", + "windows": { + "command": "wsl bash -lc 'make -j12 PROJECT_BOARD=hellen/hellen121nissan'" + }, + "options": { + "cwd": "${workspaceRoot}/firmware" + }, + "problemMatcher": [], + "group": { + "kind": "build", + "isDefault": true + } + }, { "label": "Build Firmware (microRusEfi F4)", "type": "shell", diff --git a/firmware/config/boards/nucleo_f429/board.mk b/firmware/config/boards/nucleo_f429/board.mk index bca9bb6528..2b79733fde 100644 --- a/firmware/config/boards/nucleo_f429/board.mk +++ b/firmware/config/boards/nucleo_f429/board.mk @@ -2,7 +2,7 @@ BOARDCPPSRC = $(PROJECT_DIR)/config/boards/nucleo_f429/board_configuration.cpp BOARDINC = $(PROJECT_DIR)/config/boards/nucleo_f429 -DDEFS += -DEFI_FILE_LOGGING=FALSE +DDEFS += -DLED_CRITICAL_ERROR_BRAIN_PIN=Gpio::B14 # Enable ethernet LWIP = yes @@ -12,3 +12,4 @@ DDEFS += -DEFI_ETHERNET=TRUE IS_STM32F429 = yes DDEFS += -DFIRMWARE_ID=\"nucleo_f429\" +DDEFS += -DDEFAULT_ENGINE_TYPE=MINIMAL_PINS diff --git a/firmware/config/boards/nucleo_f429/board_configuration.cpp b/firmware/config/boards/nucleo_f429/board_configuration.cpp index e69de29bb2..2ed9252bed 100644 --- a/firmware/config/boards/nucleo_f429/board_configuration.cpp +++ b/firmware/config/boards/nucleo_f429/board_configuration.cpp @@ -0,0 +1,25 @@ +#include "pch.h" + +void setBoardConfigOverrides() { + // PB14 is error LED, configured in board.mk + engineConfiguration->communicationLedPin = Gpio::B7; + engineConfiguration->runningLedPin = Gpio::B0; + + // Board only has 3 LEDs + engineConfiguration->warningLedPin = Gpio::Unassigned; +} + +void preHalInit() { + efiSetPadMode("Ethernet", Gpio::A1, PAL_MODE_ALTERNATE(0xb)); + efiSetPadMode("Ethernet", Gpio::A2, PAL_MODE_ALTERNATE(0xb)); + efiSetPadMode("Ethernet", Gpio::A7, PAL_MODE_ALTERNATE(0xb)); + + efiSetPadMode("Ethernet", Gpio::B13, PAL_MODE_ALTERNATE(0xb)); + + efiSetPadMode("Ethernet", Gpio::C1, PAL_MODE_ALTERNATE(0xb)); + efiSetPadMode("Ethernet", Gpio::C4, PAL_MODE_ALTERNATE(0xb)); + efiSetPadMode("Ethernet", Gpio::C5, PAL_MODE_ALTERNATE(0xb)); + + efiSetPadMode("Ethernet", Gpio::G11, PAL_MODE_ALTERNATE(0xb)); + efiSetPadMode("Ethernet", Gpio::G13, PAL_MODE_ALTERNATE(0xb)); +} diff --git a/firmware/config/boards/nucleo_f429/compile_stm32f429_nucleo.sh b/firmware/config/boards/nucleo_f429/compile_stm32f429_nucleo.sh index bb140b69ee..a0c73c9fcb 100755 --- a/firmware/config/boards/nucleo_f429/compile_stm32f429_nucleo.sh +++ b/firmware/config/boards/nucleo_f429/compile_stm32f429_nucleo.sh @@ -5,18 +5,4 @@ SCRIPT_NAME="compile_nucleo_f429.sh" echo "Entering $SCRIPT_NAME" -# Nucleo boards use MCO signal from St-Link and NOT oscillator - these need STM32_HSE_BYPASS - -export USE_FATFS=no - -export EXTRA_PARAMS="-DDUMMY \ - -DEFI_INJECTOR_PIN3=Gpio::Unassigned \ - -DSTM32_HSE_BYPASS=TRUE \ - \ - -DEFI_COMMUNICATION_PIN=Gpio::B7 \ - -DLED_CRITICAL_ERROR_BRAIN_PIN=Gpio::B14 \ - -DEFI_ENABLE_ASSERTS=FALSE \ - -DCH_DBG_ENABLE_CHECKS=FALSE -DCH_DBG_ENABLE_ASSERTS=FALSE -DCH_DBG_ENABLE_STACK_CHECK=FALSE -DCH_DBG_FILL_THREADS=FALSE -DCH_DBG_THREADS_PROFILING=FALSE" -export DEBUG_LEVEL_OPT="-O2" - bash ../common_make.sh nucleo_f429 ARCH_STM32F4 diff --git a/firmware/config/boards/nucleo_f429/prepend.txt b/firmware/config/boards/nucleo_f429/prepend.txt deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/firmware/config/boards/nucleo_f767/board.mk b/firmware/config/boards/nucleo_f767/board.mk index ed43ea7ebb..cea9ecbd18 100644 --- a/firmware/config/boards/nucleo_f767/board.mk +++ b/firmware/config/boards/nucleo_f767/board.mk @@ -1,11 +1,16 @@ # List of all the board related files. -BOARDCPPSRC = $(PROJECT_DIR)/config/boards/nucleo_f767/board_configuration.cpp + +# F429 and F767 Nucleo are indeed the same board with a different chip fitted - so recycle the F429 config +BOARDCPPSRC = $(PROJECT_DIR)/config/boards/nucleo_f429/board_configuration.cpp # reducing flash consumption for EFI_ETHERNET to fit DDEFS += -DEFI_FILE_LOGGING=FALSE -DEFI_ALTERNATOR_CONTROL=FALSE -DEFI_LOGIC_ANALYZER=FALSE -DEFI_ENABLE_ASSERTS=FALSE +DDEFS += -DLED_CRITICAL_ERROR_BRAIN_PIN=Gpio::B14 + +# Enable ethernet LWIP = yes DDEFS += -DEFI_ETHERNET=TRUE -DDEFS += -DSTM32F767xx - +DDEFS += -DFIRMWARE_ID=\"nucleo_f767\" +DDEFS += -DDEFAULT_ENGINE_TYPE=MINIMAL_PINS diff --git a/firmware/config/boards/nucleo_f767/board_configuration.cpp b/firmware/config/boards/nucleo_f767/board_configuration.cpp deleted file mode 100644 index dbdc1176f4..0000000000 --- a/firmware/config/boards/nucleo_f767/board_configuration.cpp +++ /dev/null @@ -1,47 +0,0 @@ -/** - * @file boards/NUCLEO_F767/board_configuration.cpp - * - * @brief In this file we can override engine_configuration.cpp. - * - * @author andreika, (c) 2018 - */ - -#include "pch.h" - -// Warning! This is a test config! - -#undef SERIAL_SPEED -#define SERIAL_SPEED 115200 - -/** - * @brief Board-specific configuration defaults. - * @todo Add your board-specific code, if any. - */ -void setBoardDefaultConfiguration() { - engineConfiguration->binarySerialTxPin = Gpio::D8; - engineConfiguration->binarySerialRxPin = Gpio::D9; - engineConfiguration->tunerStudioSerialSpeed = SERIAL_SPEED; - engineConfiguration->uartConsoleSerialSpeed = SERIAL_SPEED; - - engineConfiguration->runningLedPin = Gpio::B0; //green LED - engineConfiguration->warningLedPin = Gpio::Unassigned; -#if 0 - engineConfiguration->vbattAdcChannel = EFI_ADC_13; - engineConfiguration->adcVcc = ADC_VCC; -#endif - engineConfiguration->baroSensor.hwChannel = EFI_ADC_NONE; - engineConfiguration->throttlePedalPositionAdcChannel = EFI_ADC_NONE; - - // not used - for (int i = 0; i < DIGIPOT_COUNT ; i++) { - engineConfiguration->digitalPotentiometerChipSelect[i] = Gpio::Unassigned; - } - engineConfiguration->triggerSimulatorPins[1] = Gpio::Unassigned; - engineConfiguration->triggerSimulatorPinModes[1] = OM_DEFAULT; - engineConfiguration->vehicleSpeedSensorInputPin = Gpio::Unassigned; - - ///////////////////////////////////////////////////////// - engineConfiguration->is_enabled_spi_1 = false; - engineConfiguration->is_enabled_spi_2 = false; - engineConfiguration->is_enabled_spi_3 = false; -} diff --git a/firmware/config/boards/nucleo_f767/compile_stm32f767_nucleo.sh b/firmware/config/boards/nucleo_f767/compile_stm32f767_nucleo.sh index a5bb708f6c..c818a173fd 100755 --- a/firmware/config/boards/nucleo_f767/compile_stm32f767_nucleo.sh +++ b/firmware/config/boards/nucleo_f767/compile_stm32f767_nucleo.sh @@ -12,9 +12,6 @@ export USE_FATFS=no export EXTRA_PARAMS="-DDUMMY -DSTM32F767xx \ -DEFI_INJECTOR_PIN3=Gpio::Unassigned \ -DSTM32_HSE_BYPASS=TRUE \ - -DFIRMWARE_ID=\\\"nucleo767\\\" \ - -DEFI_COMMUNICATION_PIN=Gpio::B7 \ - -DLED_CRITICAL_ERROR_BRAIN_PIN=Gpio::B14 \ -DEFI_ENABLE_ASSERTS=FALSE \ -DCH_DBG_ENABLE_CHECKS=FALSE -DCH_DBG_ENABLE_ASSERTS=FALSE -DCH_DBG_ENABLE_STACK_CHECK=FALSE -DCH_DBG_FILL_THREADS=FALSE -DCH_DBG_THREADS_PROFILING=FALSE" export DEBUG_LEVEL_OPT="-O2" diff --git a/firmware/config/boards/nucleo_f767/compile_stm32f767_osc.sh b/firmware/config/boards/nucleo_f767/compile_stm32f767_osc.sh index 9cdd40bdea..7a074442f4 100755 --- a/firmware/config/boards/nucleo_f767/compile_stm32f767_osc.sh +++ b/firmware/config/boards/nucleo_f767/compile_stm32f767_osc.sh @@ -2,12 +2,7 @@ # STM32F767 version of the firmware for F767ZI chip NOT on Nucleo board, with a real oscilattor -export EXTRA_PARAMS="-DDUMMY -DSTM32F767xx \ - -DEFI_INJECTOR_PIN3=Gpio::Unassigned \ - -DFIRMWARE_ID=\\\"board767\\\" \ - -DEFI_COMMUNICATION_PIN=Gpio::B7 \ - -DLED_CRITICAL_ERROR_BRAIN_PIN=Gpio::B14 \ - -DEFI_ENABLE_ASSERTS=FALSE \ +export EXTRA_PARAMS="-DDUMMY -DEFI_ENABLE_ASSERTS=FALSE \ -DCH_DBG_ENABLE_CHECKS=FALSE -DCH_DBG_ENABLE_ASSERTS=FALSE -DCH_DBG_ENABLE_STACK_CHECK=FALSE -DCH_DBG_FILL_THREADS=FALSE -DCH_DBG_THREADS_PROFILING=FALSE" # Do not forget to comment out following line if looking to debug! diff --git a/firmware/config/boards/nucleo_h743/board.mk b/firmware/config/boards/nucleo_h743/board.mk index ba655ba6dc..4030a5d343 100644 --- a/firmware/config/boards/nucleo_h743/board.mk +++ b/firmware/config/boards/nucleo_h743/board.mk @@ -1,15 +1,12 @@ # List of all the board related files. -DDEFS = -DTS_NO_PRIMARY=0 \ - -DTS_PRIMARY_PORT=SD3 \ - -DEFI_CONSOLE_TX_BRAIN_PIN=Gpio::D8 \ - -DEFI_CONSOLE_RX_BRAIN_PIN=Gpio::D9 \ +BOARDCPPSRC = $(PROJECT_DIR)/config/boards/nucleo_h743/board_configuration.cpp -DDEFS += -DEFI_FILE_LOGGING=FALSE +DDEFS += -DLED_CRITICAL_ERROR_BRAIN_PIN=Gpio::B14 +# Enable ethernet LWIP = yes DDEFS += -DEFI_ETHERNET=TRUE -# Shared variables -ALLCPPSRC += $(PROJECT_DIR)/config/boards/nucleo_h743/board_configuration.cpp - +DDEFS += -DFIRMWARE_ID=\"nucleo_h743\" +DDEFS += -DDEFAULT_ENGINE_TYPE=MINIMAL_PINS diff --git a/firmware/config/boards/nucleo_h743/board_configuration.cpp b/firmware/config/boards/nucleo_h743/board_configuration.cpp index 1d9f38c57d..653f3eb499 100644 --- a/firmware/config/boards/nucleo_h743/board_configuration.cpp +++ b/firmware/config/boards/nucleo_h743/board_configuration.cpp @@ -1 +1,25 @@ #include "pch.h" + +void setBoardConfigOverrides() { + // PB14 is error LED, configured in board.mk + engineConfiguration->communicationLedPin = Gpio::E1; + engineConfiguration->runningLedPin = Gpio::B0; + + // Board only has 3 LEDs + engineConfiguration->warningLedPin = Gpio::Unassigned; +} + +void preHalInit() { + efiSetPadMode("Ethernet", Gpio::A1, PAL_MODE_ALTERNATE(0xb)); + efiSetPadMode("Ethernet", Gpio::A2, PAL_MODE_ALTERNATE(0xb)); + efiSetPadMode("Ethernet", Gpio::A7, PAL_MODE_ALTERNATE(0xb)); + + efiSetPadMode("Ethernet", Gpio::B13, PAL_MODE_ALTERNATE(0xb)); + + efiSetPadMode("Ethernet", Gpio::C1, PAL_MODE_ALTERNATE(0xb)); + efiSetPadMode("Ethernet", Gpio::C4, PAL_MODE_ALTERNATE(0xb)); + efiSetPadMode("Ethernet", Gpio::C5, PAL_MODE_ALTERNATE(0xb)); + + efiSetPadMode("Ethernet", Gpio::G11, PAL_MODE_ALTERNATE(0xb)); + efiSetPadMode("Ethernet", Gpio::G13, PAL_MODE_ALTERNATE(0xb)); +} diff --git a/firmware/config/boards/nucleo_h743/compile_stm32h743_nucleo.sh b/firmware/config/boards/nucleo_h743/compile_stm32h743_nucleo.sh index 6ece54e31d..a33904c60b 100755 --- a/firmware/config/boards/nucleo_h743/compile_stm32h743_nucleo.sh +++ b/firmware/config/boards/nucleo_h743/compile_stm32h743_nucleo.sh @@ -5,16 +5,4 @@ SCRIPT_NAME="compile_nucleo_h743.sh" echo "Entering $SCRIPT_NAME" -# Nucleo boards use MCO signal from St-Link and NOT oscillator - these need STM32_HSE_BYPASS - -export USE_FATFS=no - -export EXTRA_PARAMS="-DDUMMY \ - -DEFI_INJECTOR_PIN3=Gpio::Unassigned \ - -DSTM32_HSE_BYPASS=TRUE \ - -DFIRMWARE_ID=\\\"nucleoH743\\\" \ - -DEFI_COMMUNICATION_PIN=Gpio::B7 \ - -DLED_CRITICAL_ERROR_BRAIN_PIN=Gpio::B14" -export DEBUG_LEVEL_OPT="-O2" - bash ../common_make.sh nucleo_h743 ARCH_STM32H7 diff --git a/firmware/console/ethernet_console.cpp b/firmware/console/ethernet_console.cpp index 2c7c2870b9..377f80e904 100644 --- a/firmware/console/ethernet_console.cpp +++ b/firmware/console/ethernet_console.cpp @@ -81,23 +81,6 @@ struct EthernetThread : public TunerstudioThread { static EthernetThread ethernetConsole; void startEthernetConsole() { -#ifndef STM32H7 - // TODO: why does this break H7? I thought the pins were the same? - efiSetPadMode("ETH_RMII_REF_CLK", Gpio::A1, PAL_MODE_ALTERNATE(0xb)); - efiSetPadMode("ETH_MDIO", Gpio::A2, PAL_MODE_ALTERNATE(0xb)); - efiSetPadMode("ETH_RMII_CRS_DV", Gpio::A7, PAL_MODE_ALTERNATE(0xb)); - - efiSetPadMode("ETH_MDC", Gpio::C1, PAL_MODE_ALTERNATE(0xb)); - efiSetPadMode("ETH_RMII_RXD0", Gpio::C4, PAL_MODE_ALTERNATE(0xb)); - efiSetPadMode("ETH_RMII_RXD1", Gpio::C5, PAL_MODE_ALTERNATE(0xb)); - - efiSetPadMode("ETH_RMII_RXD1", Gpio::D5, PAL_MODE_ALTERNATE(0xb)); - - efiSetPadMode("ETH_RMII_TX_EN", Gpio::G11, PAL_MODE_ALTERNATE(0xb)); - efiSetPadMode("ETH_RMII_TXD0", Gpio::G13, PAL_MODE_ALTERNATE(0xb)); - efiSetPadMode("ETH_RMII_TXD1", Gpio::G14, PAL_MODE_ALTERNATE(0xb)); -#endif // STM32H7 - ethernetConsole.start(); } diff --git a/firmware/hw_layer/drivers/gpio/l9779.cpp b/firmware/hw_layer/drivers/gpio/l9779.cpp index 2aee2728c2..fe2cf5782b 100644 --- a/firmware/hw_layer/drivers/gpio/l9779.cpp +++ b/firmware/hw_layer/drivers/gpio/l9779.cpp @@ -295,8 +295,7 @@ int L9779::spi_rw(uint16_t tx, uint16_t *rx_ptr) */ int L9779::spi_rw_array(const uint16_t *tx, uint16_t *rx, int n) { - int ret; - uint16_t rxdata; + int ret = 0; SPIDriver *spi = cfg->spi_bus; if (n <= 0) { @@ -312,7 +311,7 @@ int L9779::spi_rw_array(const uint16_t *tx, uint16_t *rx, int n) /* Slave Select assertion. */ spiSelect(spi); /* data transfer */ - rxdata = spiPolledExchange(spi, tx[i]); + uint16_t rxdata = spiPolledExchange(spi, tx[i]); if (rx) rx[i] = rxdata; diff --git a/firmware/hw_layer/drivers/gpio/tle8888.cpp b/firmware/hw_layer/drivers/gpio/tle8888.cpp index c87b497dee..8f8dbd7570 100644 --- a/firmware/hw_layer/drivers/gpio/tle8888.cpp +++ b/firmware/hw_layer/drivers/gpio/tle8888.cpp @@ -388,8 +388,7 @@ int Tle8888::spi_rw(uint16_t tx, uint16_t *rx_ptr) */ int Tle8888::spi_rw_array(const uint16_t *tx, uint16_t *rx, int n) { - int ret; - uint16_t rxdata; + int ret = 0; SPIDriver *spi = cfg->spi_bus; if (n <= 0) { @@ -413,7 +412,7 @@ int Tle8888::spi_rw_array(const uint16_t *tx, uint16_t *rx, int n) /* Slave Select assertion. */ spiSelect(spi); /* data transfer */ - rxdata = spiPolledExchange(spi, tx[i]); + uint16_t rxdata = spiPolledExchange(spi, tx[i]); if (rx) rx[i] = rxdata; diff --git a/firmware/hw_layer/ports/stm32/osc_detector.cpp b/firmware/hw_layer/ports/stm32/osc_detector.cpp index 398e6e7c09..592ccf0d34 100644 --- a/firmware/hw_layer/ports/stm32/osc_detector.cpp +++ b/firmware/hw_layer/ports/stm32/osc_detector.cpp @@ -40,7 +40,7 @@ static uint32_t getTimerCounts(size_t count) { getOneCapture(); uint32_t firstCapture = getOneCapture(); - uint32_t lastCapture; + uint32_t lastCapture = 0; for (size_t i = 0; i < count; i++) { diff --git a/firmware/main.cpp b/firmware/main.cpp index 2d07f7814a..e477ef9821 100644 --- a/firmware/main.cpp +++ b/firmware/main.cpp @@ -13,6 +13,9 @@ #include "mpu_util.h" int main(void) { + // Maybe your board needs to do something special before HAL init + preHalInit(); + /* * ChibiOS/RT initialization */ @@ -28,3 +31,5 @@ int main(void) { return 0; } +// Weak linked default implementation (not necessarily required for all boards) +__attribute__((weak)) void preHalInit() { } diff --git a/firmware/rusefi.h b/firmware/rusefi.h index 9f12590f75..0f036d4ff4 100644 --- a/firmware/rusefi.h +++ b/firmware/rusefi.h @@ -9,3 +9,5 @@ __NO_RETURN void runRusEfi(); __NO_RETURN void rebootNow(); + +void preHalInit();