diff --git a/firmware/config/boards/microrusefi/!compile-mre.bat b/firmware/config/boards/microrusefi/!compile-mre.bat index 5b7fc7d147..9fa152962f 100644 --- a/firmware/config/boards/microrusefi/!compile-mre.bat +++ b/firmware/config/boards/microrusefi/!compile-mre.bat @@ -3,16 +3,8 @@ cd ../../.. set LDSCRIPT = config/boards/NUCLEO_F767/STM32F76xxI.ld -set PROJECT_BOARD=nucleo_f767 +set PROJECT_BOARD=microrusefi set PROJECT_CPU=ARCH_STM32F7 -set EXTRA_PARAMS=-DDUMMY ^ - -DSTM32F767xx ^ - -DEFI_USE_OSC=TRUE ^ - -DFIRMWARE_ID=\"microRusEfi\" ^ - -DEFI_COMMUNICATION_PIN=GPIOE_1 ^ - -DEFI_FATAL_ERROR_PIN=GPIOE_2 ^ - -DEFI_RUNNING_PIN=GPIOE_3 ^ - -DEFI_WARNING_PIN=GPIOE_4 call config/boards/common_make.bat diff --git a/firmware/config/boards/microrusefi/board.mk b/firmware/config/boards/microrusefi/board.mk new file mode 100644 index 0000000000..de74db978b --- /dev/null +++ b/firmware/config/boards/microrusefi/board.mk @@ -0,0 +1,11 @@ +# List of all the board related files. +BOARDSRC = $(CHIBIOS)/os/hal/boards/ST_NUCLEO144_F767ZI/board.c +BOARDSRC_CPP = $(PROJECT_DIR)/config/boards/microrusefi/board_configuration.cpp + +# Required include directories +BOARDINC = $(PROJECT_DIR)/config/boards/nucleo_f767 $(PROJECT_DIR)/config/stm32f7ems + +LDSCRIPT= $(PROJECT_DIR)/config/boards/nucleo_f767/STM32F76xxI.ld + +# Override DEFAULT_ENGINE_TYPE +DDEFS += -DDEFAULT_ENGINE_TYPE=MICRO_RUS_EFI -DSTM32F767xx -DEFI_USE_OSC=TRUE -DFIRMWARE_ID=\"microRusEfi\" diff --git a/firmware/config/boards/microrusefi/board_configuration.cpp b/firmware/config/boards/microrusefi/board_configuration.cpp new file mode 100644 index 0000000000..9789696b8d --- /dev/null +++ b/firmware/config/boards/microrusefi/board_configuration.cpp @@ -0,0 +1,172 @@ +/** + * @file boards/microrusefi/board_configuration.cpp + * + * @brief Configuration defaults for the microRusefi board + * + * @author Matthew Kennedy, (c) 2019 + */ + +#include "global.h" +#include "engine.h" +#include "engine_math.h" +#include "allsensors.h" +#include "fsio_impl.h" +#include "engine_configuration.h" + +EXTERN_ENGINE; + +static void setInjectorPins() +{ + boardConfiguration->injectionPins[0] = GPIOE_14; + boardConfiguration->injectionPins[1] = GPIOE_13; + boardConfiguration->injectionPins[2] = GPIOE_12; + boardConfiguration->injectionPins[3] = GPIOE_11; + + // Disable remainder + for (int i = 4; i < INJECTION_PIN_COUNT;i++) { + boardConfiguration->injectionPins[i] = GPIO_UNASSIGNED; + } + + boardConfiguration->injectionPinMode = OM_DEFAULT; +} + +static void setIgnitionPins() +{ + boardConfiguration->ignitionPins[0] = GPIOD_4; + boardConfiguration->ignitionPins[1] = GPIOD_3; + boardConfiguration->ignitionPins[2] = GPIOD_2; + boardConfiguration->ignitionPins[3] = GPIOD_1; + + // disable remainder + for (int i = 4; i < IGNITION_PIN_COUNT; i++) { + boardConfiguration->ignitionPins[i] = GPIO_UNASSIGNED; + } + + boardConfiguration->ignitionPinMode = OM_DEFAULT; +} + +static void setLedPins() +{ + engineConfiguration->fatalErrorPin = GPIOE_3; // d21 = red + engineConfiguration->communicationLedPin = GPIOE_2; // d23 = blue + engineConfiguration->runningLedPin = GPIOE_4; // d22 = green + boardConfiguration->triggerErrorPin = GPIOE_1; // d27 = orange +} + +static void setupVbatt() +{ + engineConfiguration->vbattDividerCoeff = 8.166666f; + engineConfiguration->vbattAdcChannel = EFI_ADC_11; + + // 1k high side/1.5k low side = 1.6667 ratio divider + engineConfiguration->analogInputDividerCoefficient = 2.5f / 1.5f; + + engineConfiguration->adcVcc = 3.29f; +} + +static void setupTle8888() +{ + // Enable spi3 + boardConfiguration->is_enabled_spi_3 = true; + + // Wire up spi3 + boardConfiguration->spi3mosiPin = GPIOB_5; + boardConfiguration->spi3misoPin = GPIOB_4; + boardConfiguration->spi3sckPin = GPIOB_3; + + // Chip select + engineConfiguration->tle8888_cs = GPIOD_5; + + // SPI device + engineConfiguration->tle8888spiDevice = SPI_DEVICE_3; +} + +static void setupEtb() +{ + // TLE9201 driver + // This chip has three control pins: + // DIR - sets direction of the motor + // PWM - pwm control (enable high, coast low) + // DIS - disables motor (enable low) + + // PWM pin + boardConfiguration->etb1.controlPin1 = GPIOC_7; + // DIR pin + boardConfiguration->etb1.directionPin1 = GPIOA_8; + + // Unused + boardConfiguration->etb1.controlPin2 = GPIO_UNASSIGNED; + boardConfiguration->etb1.directionPin2 = GPIO_UNASSIGNED; + + // we only have pwm/dir, no dira/dirb + engineConfiguration->etb1_use_two_wires = false; + + engineConfiguration->etbFreq = 800; +} + +static void setupDefaultSensorInputs() +{ + // trigger inputs + // tle8888 VR conditioner + boardConfiguration->triggerInputPins[0] = GPIOC_6; + boardConfiguration->triggerInputPins[1] = GPIO_UNASSIGNED; + boardConfiguration->triggerInputPins[2] = GPIO_UNASSIGNED; + // Direct hall-only cam input + engineConfiguration->camInputs[0] = GPIOA_5; + + // tps + engineConfiguration->tps1_1AdcChannel = EFI_ADC_13; + engineConfiguration->tps2_1AdcChannel = EFI_ADC_NONE; + + // clt = AN temp 1 + engineConfiguration->clt.adcChannel = EFI_ADC_0; + engineConfiguration->clt.config.bias_resistor = 2700; + + // iat = AN temp 2 + engineConfiguration->iat.adcChannel = EFI_ADC_1; + engineConfiguration->iat.config.bias_resistor = 2700; +} + +void setPinConfigurationOverrides(void) { +} + +void setSerialConfigurationOverrides(void) { + boardConfiguration->useSerialPort = false; + engineConfiguration->binarySerialTxPin = GPIO_UNASSIGNED; + engineConfiguration->binarySerialRxPin = GPIO_UNASSIGNED; + engineConfiguration->consoleSerialTxPin = GPIO_UNASSIGNED; + engineConfiguration->consoleSerialRxPin = GPIO_UNASSIGNED; +} + + +/** + * @brief Board-specific configuration code overrides. + * @todo Add your board-specific code, if any. + */ +void setBoardConfigurationOverrides(void) { + setInjectorPins(); + setIgnitionPins(); + setLedPins(); + setupVbatt(); + setupTle8888(); + setupEtb(); + + // "required" hardware is done - set some reasonable defaults + setupDefaultSensorInputs(); + + // Some sensible defaults for other options + setOperationMode(engineConfiguration, FOUR_STROKE_CRANK_SENSOR); + engineConfiguration->trigger.type = TT_TOOTHED_WHEEL_60_2; + engineConfiguration->useOnlyRisingEdgeForTrigger = true; + setAlgorithm(LM_SPEED_DENSITY PASS_CONFIG_PARAMETER_SUFFIX); + + engineConfiguration->specs.cylindersCount = 4; + engineConfiguration->specs.firingOrder = FO_1_3_4_2; + + engineConfiguration->ignitionMode = IM_INDIVIDUAL_COILS; // IM_WASTED_SPARK + engineConfiguration->crankingInjectionMode = IM_SIMULTANEOUS; + engineConfiguration->injectionMode = IM_SIMULTANEOUS;//IM_BATCH;// IM_SEQUENTIAL; +} + +void setAdcChannelOverrides(void) { +} diff --git a/firmware/controllers/algo/engine_configuration.cpp b/firmware/controllers/algo/engine_configuration.cpp index 95137ec920..45ba175ba5 100644 --- a/firmware/controllers/algo/engine_configuration.cpp +++ b/firmware/controllers/algo/engine_configuration.cpp @@ -843,8 +843,6 @@ static void setDefaultEngineConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE) { // todo: start using this for custom MAP engineConfiguration->mapHighValueVoltage = 5; - engineConfiguration->displayMode = DM_HD44780; - engineConfiguration->logFormat = LF_NATIVE; engineConfiguration->directSelfStimulation = false; @@ -869,6 +867,8 @@ static void setDefaultEngineConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE) { engineConfiguration->isEngineChartEnabled = true; engineConfiguration->useOnlyRisingEdgeForTrigger = false; + // Default this to on - if you want to diagnose, turn it off. + engineConfiguration->silentTriggerError = true; #if EFI_PROD_CODE engineConfiguration->engineChartSize = 300; @@ -909,7 +909,7 @@ static void setDefaultEngineConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE) { engineConfiguration->cj125isUaDivided = true; - engineConfiguration->isAlternatorControlEnabled = true; + engineConfiguration->isAlternatorControlEnabled = false; engineConfiguration->vehicleSpeedCoef = 1.0f; @@ -1111,6 +1111,8 @@ void resetConfigurationExt(Logging * logger, engine_type_e engineType DECLARE_EN setEtbTestConfiguration(PASS_CONFIG_PARAMETER_SIGNATURE); break; case MICRO_RUS_EFI: + // nothing to do - we do it all in setBoardConfigurationOverrides + break; case TLE8888_BENCH_ENGINE: setTle8888TestConfiguration(PASS_CONFIG_PARAMETER_SIGNATURE); break;