Skip to content

Commit 46598f0

Browse files
committed
add mega100
1 parent 3827a0a commit 46598f0

16 files changed

Lines changed: 53898 additions & 0 deletions
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
ifneq ($(PROJECT_CPU),simulator)
2+
BOARDCPPSRC += \
3+
$(BOARD_DIR)/board_configuration.cpp \
4+
5+
endif
6+
7+
DDEFS += -DEFI_WIDEBAND_FIRMWARE_UPDATE=FALSE
8+
DDEFS += -DRAM_UNUSED_SIZE=100
9+
10+
# STM32F407VET6: 512KB flash
11+
DDEFS += -DMIN_FLASH_SIZE=512
12+
USE_OPT += -Wl,--defsym=EFI_FLASH_SIZE=512k
13+
14+
# Assign critical LED to a non-existent pin (board has no LEDs)
15+
DDEFS += -DLED_CRITICAL_ERROR_BRAIN_PIN=Gpio::I15
16+
17+
# EFI_USB_SERIAL=FALSE, EFI_LUA=FALSE, EFI_ELECTRONIC_THROTTLE_BODY=FALSE set in efifeatures.h
18+
# HAL_USE_USB derives FALSE automatically from EFI_USB_SERIAL
19+
20+
# Disable SD card/FAT to save flash
21+
DDEFS += -DEFI_FILE_LOGGING=FALSE
22+
USE_FATFS = no
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
/**
2+
* @file board_configuration.cpp
3+
* Mazduino Mega100-512 (STM32F407VET6 - 512KB flash)
4+
* Arduino Mega socket form factor
5+
* Reference: https://github.com/rusefi/fw-custom-mega100-f4
6+
*
7+
* Uses board_04 pinout (INJ: B15/B14/B12/B13, IGN: E2/E3/C13/E7).
8+
* Runtime pinout switching disabled to reduce flash usage.
9+
* No USB, no SD card, no Lua (EFI_LUA=FALSE in board.mk).
10+
*/
11+
12+
#include "pch.h"
13+
#include "board_overrides.h"
14+
15+
Gpio getCommsLedPin() { return Gpio::Unassigned; }
16+
Gpio getRunningLedPin() { return Gpio::Unassigned; }
17+
Gpio getWarningLedPin() { return Gpio::Unassigned; }
18+
19+
static void customBoardDefaultConfiguration() {
20+
// Trigger inputs
21+
engineConfiguration->triggerInputPins[0] = Gpio::D3; // CKP
22+
engineConfiguration->triggerInputPins[1] = Gpio::Unassigned;
23+
24+
// Analog sensors - ADC1
25+
// PA3 (EFI_ADC_3) reserved for knock via ADC3
26+
engineConfiguration->map.sensor.hwChannel = EFI_ADC_0; // PA0
27+
engineConfiguration->afr.hwChannel = EFI_ADC_1; // PA1
28+
engineConfiguration->vbattAdcChannel = EFI_ADC_2; // PA2
29+
engineConfiguration->tps1_1AdcChannel = EFI_ADC_6; // PA6
30+
engineConfiguration->clt.adcChannel = EFI_ADC_4; // PA4
31+
engineConfiguration->iat.adcChannel = EFI_ADC_5; // PA5
32+
33+
engineConfiguration->analogInputDividerCoefficient = 1.47f;
34+
engineConfiguration->adcVcc = 3.3f;
35+
engineConfiguration->clt.config.bias_resistor = 2490;
36+
engineConfiguration->iat.config.bias_resistor = 2490;
37+
38+
// Injectors - 4 channel (board_04 pinout)
39+
engineConfiguration->injectionPins[0] = Gpio::B15;
40+
engineConfiguration->injectionPins[1] = Gpio::B14;
41+
engineConfiguration->injectionPins[2] = Gpio::B12;
42+
engineConfiguration->injectionPins[3] = Gpio::B13;
43+
44+
// Ignition - 4 channel (board_04 pinout)
45+
engineConfiguration->ignitionPins[0] = Gpio::E2;
46+
engineConfiguration->ignitionPins[1] = Gpio::E3;
47+
engineConfiguration->ignitionPins[2] = Gpio::C13;
48+
engineConfiguration->ignitionPins[3] = Gpio::E7;
49+
50+
// Aux outputs
51+
engineConfiguration->fuelPumpPin = Gpio::C8;
52+
engineConfiguration->mainRelayPin = Gpio::E8;
53+
engineConfiguration->idle.solenoidPin = Gpio::D9;
54+
engineConfiguration->fanPin = Gpio::A15;
55+
engineConfiguration->tachOutputPin = Gpio::C9;
56+
engineConfiguration->acSwitch = Gpio::B0;
57+
engineConfiguration->acRelayPin = Gpio::C7;
58+
engineConfiguration->vehicleSpeedSensorInputPin = Gpio::D7;
59+
engineConfiguration->clutchDownPin = Gpio::E13;
60+
engineConfiguration->clutchDownPinMode = PI_INVERTED_PULLUP;
61+
62+
// CAN
63+
engineConfiguration->canTxPin = Gpio::D1;
64+
engineConfiguration->canRxPin = Gpio::D0;
65+
66+
// No SD card (EFI_FILE_LOGGING=FALSE, USE_FATFS=no in board.mk)
67+
}
68+
69+
void setup_custom_board_overrides() {
70+
custom_board_DefaultConfiguration = customBoardDefaultConfiguration;
71+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/**
2+
* @file efifeatures.h
3+
* Mazduino Mega100-512 (STM32F407VET6 - 512KB flash)
4+
* Feature overrides to fit in 512KB flash.
5+
*/
6+
7+
#pragma once
8+
9+
#include "../../ext/rusefi/firmware/config/stm32f4ems/efifeatures.h"
10+
11+
/* No USB */
12+
#undef EFI_USB_SERIAL
13+
#define EFI_USB_SERIAL FALSE
14+
15+
/* No Lua */
16+
#undef EFI_LUA
17+
#define EFI_LUA FALSE
18+
19+
/* No SD card storage */
20+
#undef EFI_STORAGE_SD
21+
#define EFI_STORAGE_SD FALSE
22+
23+
/* No Electronic Throttle Body */
24+
#undef EFI_ELECTRONIC_THROTTLE_BODY
25+
#define EFI_ELECTRONIC_THROTTLE_BODY FALSE
26+
27+
/* No software knock (saves ~50KB flash) - leave undefined so #ifdef checks are FALSE */
28+
#undef EFI_SOFTWARE_KNOCK
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
/**
2+
* @file knock_config.h
3+
* Knock is disabled on Mazduino Mega100-512 (EFI_SOFTWARE_KNOCK=FALSE in efifeatures.h).
4+
* This file is intentionally empty.
5+
*/
6+
7+
#pragma once
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
SHORT_BOARD_NAME=mazduino-mega100-512
2+
PROJECT_CPU=ARCH_STM32F4
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#define MAIN_HELP_URL "https://wiki.mazduino.com/"
2+
3+
! 512KB flash variant: ETB, knock, TCU, EGT disabled
4+
#define ts_show_etb false
5+
#define ts_show_etb_pins false
6+
#define ts_show_traction_control false
7+
#define ts_show_tcu false
8+
#define ts_show_software_knock false
9+
#define ts_show_injectionPinMode true
10+
#define ts_show_output_diag true
11+
#define ts_show_gdi false
12+
#define ts_show_k_line false
13+
#define ts_show_hip9011 false
14+
#define show_tcu_gauges false
15+
#define MAX_TPS_PPS_DISCREPANCY 10
16+
17+
! board has zero LEDs
18+
#define ts_show_status_leds false

boards/mazduino-mega100/board.mk

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
ifneq ($(PROJECT_CPU),simulator)
2+
BOARDCPPSRC += \
3+
$(BOARD_DIR)/board_configuration.cpp \
4+
5+
endif
6+
7+
DDEFS += -DEFI_WIDEBAND_FIRMWARE_UPDATE=FALSE
8+
DDEFS += -DRAM_UNUSED_SIZE=100
9+
DDEFS += -DSTM32_ADC_USE_ADC3=TRUE
10+
DDEFS += -DEFI_SOFTWARE_KNOCK=TRUE -DSTM32_ADC_USE_ADC3=TRUE
11+
DDEFS += -DKNOCK_SPECTROGRAM=TRUE
12+
13+
# Assign critical LED to a non-existent pin (board has no LEDs)
14+
DDEFS += -DLED_CRITICAL_ERROR_BRAIN_PIN=Gpio::I15
15+
16+
# Reduce Lua RAM usage
17+
DDEFS += -DWITH_LUA_CONSUMPTION=FALSE
18+
DDEFS += -DWITH_LUA_PID=FALSE
19+
DDEFS += -DWITH_LUA_STOP_ENGINE=FALSE
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
/**
2+
* @file board_configuration.cpp
3+
* Mazduino Mega100 (STM32F407VGT6 - 1MB flash)
4+
* Arduino Mega socket form factor
5+
* Reference: https://github.com/rusefi/fw-custom-mega100-f4
6+
*
7+
* Two pinout variants selectable via TunerStudio board action:
8+
* Index 0: board_04 - legacy wiring (INJ: B15/B14/B12/B13, IGN: E2/E3/C13/E7)
9+
* Index 1: ua4c - UA4C wiring (INJ: B15/D8/D9/D10, IGN: E15/E4/D13/E5)
10+
*/
11+
12+
#include "pch.h"
13+
#include "board_overrides.h"
14+
#include "flash_main.h"
15+
#include "tunerstudio.h"
16+
17+
Gpio getCommsLedPin() { return Gpio::Unassigned; }
18+
Gpio getRunningLedPin() { return Gpio::Unassigned; }
19+
Gpio getWarningLedPin() { return Gpio::Unassigned; }
20+
21+
static void setPinout_board04() {
22+
engineConfiguration->injectionPins[0] = Gpio::B15;
23+
engineConfiguration->injectionPins[1] = Gpio::B14;
24+
engineConfiguration->injectionPins[2] = Gpio::B12;
25+
engineConfiguration->injectionPins[3] = Gpio::B13;
26+
27+
engineConfiguration->ignitionPins[0] = Gpio::E2;
28+
engineConfiguration->ignitionPins[1] = Gpio::E3;
29+
engineConfiguration->ignitionPins[2] = Gpio::C13;
30+
engineConfiguration->ignitionPins[3] = Gpio::E7;
31+
}
32+
33+
static void setPinout_ua4c() {
34+
engineConfiguration->injectionPins[0] = Gpio::B15;
35+
engineConfiguration->injectionPins[1] = Gpio::D8;
36+
engineConfiguration->injectionPins[2] = Gpio::D9;
37+
engineConfiguration->injectionPins[3] = Gpio::D10;
38+
39+
engineConfiguration->ignitionPins[0] = Gpio::E15;
40+
engineConfiguration->ignitionPins[1] = Gpio::E4;
41+
engineConfiguration->ignitionPins[2] = Gpio::D13;
42+
engineConfiguration->ignitionPins[3] = Gpio::E5;
43+
}
44+
45+
void customBoardTsAction(uint16_t subSystem, uint16_t index) {
46+
if (subSystem != (uint16_t)TS_BOARD_ACTION) {
47+
return;
48+
}
49+
if (index == 0) {
50+
setPinout_board04();
51+
} else if (index == 1) {
52+
setPinout_ua4c();
53+
}
54+
writeToFlashNow();
55+
onApplyPreset();
56+
}
57+
58+
static void customBoardDefaultConfiguration() {
59+
// Trigger inputs
60+
engineConfiguration->triggerInputPins[0] = Gpio::D3; // CKP
61+
engineConfiguration->triggerInputPins[1] = Gpio::Unassigned;
62+
63+
// Analog sensors - ADC1
64+
// PA3 (EFI_ADC_3) reserved for knock via ADC3
65+
engineConfiguration->map.sensor.hwChannel = EFI_ADC_0; // PA0
66+
engineConfiguration->afr.hwChannel = EFI_ADC_1; // PA1
67+
engineConfiguration->vbattAdcChannel = EFI_ADC_2; // PA2
68+
engineConfiguration->tps1_1AdcChannel = EFI_ADC_6; // PA6
69+
engineConfiguration->clt.adcChannel = EFI_ADC_4; // PA4
70+
engineConfiguration->iat.adcChannel = EFI_ADC_5; // PA5
71+
72+
engineConfiguration->analogInputDividerCoefficient = 1.47f;
73+
engineConfiguration->adcVcc = 3.3f;
74+
engineConfiguration->clt.config.bias_resistor = 2490;
75+
engineConfiguration->iat.config.bias_resistor = 2490;
76+
77+
// Default to board_04 pinout
78+
setPinout_board04();
79+
80+
// Aux outputs
81+
engineConfiguration->fuelPumpPin = Gpio::C8;
82+
engineConfiguration->mainRelayPin = Gpio::E8;
83+
engineConfiguration->idle.solenoidPin = Gpio::D9;
84+
engineConfiguration->fanPin = Gpio::A15;
85+
engineConfiguration->tachOutputPin = Gpio::C9;
86+
engineConfiguration->acSwitch = Gpio::B0;
87+
engineConfiguration->acRelayPin = Gpio::C7;
88+
engineConfiguration->vehicleSpeedSensorInputPin = Gpio::D7;
89+
engineConfiguration->clutchDownPin = Gpio::E13;
90+
engineConfiguration->clutchDownPinMode = PI_INVERTED_PULLUP;
91+
92+
// CAN
93+
engineConfiguration->canTxPin = Gpio::D1;
94+
engineConfiguration->canRxPin = Gpio::D0;
95+
96+
// SD card - SPI3
97+
engineConfiguration->is_enabled_spi_3 = true;
98+
engineConfiguration->spi3mosiPin = Gpio::C12;
99+
engineConfiguration->spi3misoPin = Gpio::C11;
100+
engineConfiguration->spi3sckPin = Gpio::C10;
101+
engineConfiguration->isSdCardEnabled = true;
102+
engineConfiguration->sdCardSpiDevice = SPI_DEVICE_3;
103+
engineConfiguration->sdCardCsPin = Gpio::D2;
104+
}
105+
106+
void setup_custom_board_overrides() {
107+
custom_board_DefaultConfiguration = customBoardDefaultConfiguration;
108+
custom_board_ts_command = customBoardTsAction;
109+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/**
2+
* @file knock_config.h
3+
*/
4+
5+
#pragma once
6+
7+
// Knock is on ADC3
8+
#define KNOCK_ADC ADCD3
9+
10+
// knock 1 - pin PA3
11+
#define KNOCK_ADC_CH1 ADC_CHANNEL_IN3
12+
#define KNOCK_PIN_CH1 Gpio::A3
13+
14+
// Sample rate & time
15+
#define KNOCK_SAMPLE_TIME ADC_SAMPLE_84
16+
#define KNOCK_SAMPLE_RATE (STM32_PCLK2 / (4 * (84 + 12)))
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
SHORT_BOARD_NAME=mazduino-mega100
2+
PROJECT_CPU=ARCH_STM32F4

0 commit comments

Comments
 (0)