Releases: mazduino/mazduino-fw
Releases · mazduino/mazduino-fw
Release list
Nightly 2026-09-30
Automated nightly firmware build for Mazduino boards.
Breaking Changes
- VVT target tables enlarged from 8x8 to 16x16 on mazduino-compact, mazduino-core, mazduino-lite and mazduino-mini6ch, giving finer RPM and load resolution for cam targeting. This changes the tune layout, so existing tunes are not compatible — re-flash and re-enter the VVT tables after updating. mazduino-mega100 and mazduino-mega100-512 keep the 8x8 tables
- LTFT trim map now has its own axes (
ltftLoadBins/ltftRpmBins) instead of borrowing the VE table axes. Every board gains these two fields, so all boards need a matching firmware and INI; table dimensions are unchanged on existing boards, so tune values still carry over
Added
- mazduino-mini6ch: secondary TunerStudio channel on USART3 (PB10 = TXD3, PB11 = RXD3), for a Bluetooth module such as an HC-05. The firmware previously had no secondary channel at all — the whole thing is behind
#ifdef TS_SECONDARY_UxART_PORTand no Mazduino board defined it, so thebinarySerialpins in TunerStudio did nothing and the ECU never sent a byte to the module. Uses the ChibiOS Serial driver (SD3), the same way the reference f407-discovery board does; the UART driver would needHAL_USE_UART, which halconf.h only enables whenTS_PRIMARY_UxART_PORTis defined. Pin defaults are PB10/PB11 because rusEFI's own defaults, PC10/PC11, are the SD card's SPI3 pins on every Mazduino board. Baud followstunerStudioSerialSpeed(38400 by default), and the channel is started once at boot, so changing that value needs an ECU restart, not just a burn. Applies to mazduino-mini6ch-bigfuel too - BIGFUEL board variants:
mazduino-compact-bigfuel,mazduino-core-bigfuel,mazduino-lite-bigfuelandmazduino-mini6ch-bigfuel. Identical hardware and pinout to the board they are named after, with a 32x32 VE table and 32x32 ignition table (stock boards stay 16x16) for finer resolution on high-output builds. Tunes are not interchangeable between a board and its BIGFUEL variant - BIGFUEL variants trade the engine sniffer for the bigger tables: the persistent config lives in the 64KB CCM RAM and its leftovers feed the Lua heap, so 32x32 tables overflowed CCM by ~1.4KB. Disabling the engine sniffer frees its 5000-byte
WAVE_LOGGING_BUFFERfrom CCM. All other features are unchanged from the base board — the real-time trigger oscilloscope in TunerStudio is the only thing missing - Separate
LTFT_LOAD_COUNT/LTFT_RPM_COUNTsizing for the long-term fuel trim map, independent of the VE table. The learned trim map stays 16x16 even on BIGFUEL boards, saving 6KB of RAM versus following a 32x32 VE table, with no loss of tuning resolution. LTFT trims are now interpolated onto the VE table when applied, so the two grids no longer have to match - DFCO enable switch input (
coastingFuelCutSwitchPin): assign a pin to control DFCO via a physical switch; switch ON allows fuel cut per RPM/TPS/CLT parameters, switch OFF disables fuel cut entirely; leave unassigned for parameter-only control - Rotational Idle manual enable switch input (
rotationalIdleController.switchPin): when switch is ON, rotational idle is forced active regardless of automatic CLT/TPS conditions - Rotational Idle RPM window (
minRpm,maxRpm): configurable RPM range for rotational idle engagement; 0 = no limit; displayed in live data asrotIdleEngineTooSlow/rotIdleEngineTooFast - Fuel consumption output channels: trip-average L/100km and instantaneous L/hr, user-configurable via TunerStudio (Engine > Fuel Consumption); requires VSS, injection enabled, and injector flow set
- Predefined TunerStudio gauges for fuel consumption (
fuelConsumptionL100kmGauge,fuelConsumptionLitersPerHourGauge) under the Fueling category, so L/100km and L/hr are selectable from the right-click gauge picker (rusefi-coregauge_declarations.ini) fuelConsumptionEnabledbit andfuelDensity(g/L, default 750 petrol) added to engine configuration; calculation runs inTripOdometer::onSlowCallback()OUTCH_FuelConsumptionL100kmandOUTCH_FuelConsumptionLitersPerHouradded tooutput_channel_eenum for Lua accesscommon.mk: added$(PROJECT_DIR)/$(META_OUTPUT_ROOT_FOLDER)controllers/generatedtoALLINCso the unit test build finds board-specific generated headers whenMETA_OUTPUT_ROOT_FOLDERpoints outside the firmware tree- Nightly release workflow publishing per-board .bin, .srec, and .hex artifacts as GitHub Releases
- Docker-based build system (
build_boards.sh) using--platform linux/amd64for consistent builds on Apple Silicon and x86-64 - TunerStudio UI flags in
prepend.txtto hide ETB, traction control, boost, rotary, Harley-Davidson, torque model, and other features not applicable to each board variant - mazduino-mega100: STM32F407VGT6 (1MB) board with full feature set, dual pinout support (board04 and UA4C) selectable via TunerStudio board action
- mazduino-mega100-512: STM32F407VET6 (512KB) board with reduced feature set; firmware constrained to 384KB to keep tune storage sector (sector 7, 0x08060000) free
Changed
- CI (build-matrix): config push-back disabled on master (
push=false). Every board job in the matrix runs in parallel and each wouldgit pushregenerated configs to master, so all but the first failed with "fetch first"/non-fast-forward. mazduino commits generated files manually, so the CI push-back is unnecessary - CI (build-matrix): simulator build disabled on master (
sim=false). mazduino ships custom boards only —bundle.mkalready excludes the simulator from custom-board bundles — and the shared f407-discovery generated headers the simulator compiles against lack mazduino's added config fields (fuelDensity, DFCO switch, analog multi-switch), so the simulator cannot compile. This was previously masked because the oldmazduinobranch never triggered the simulator build - TunerStudio menu: Fuel Consumption moved from Advanced to Fuel menu (after DFCO entry)
- TunerStudio menu: Rotational Idle moved from Advanced to Idle menu
- TunerStudio dialog: Fuel Consumption dialog removes duplicate VSS input pin and Injector Flow fields (already configurable in their own dedicated menus)
_compile_unit_tests.shupdated to useboards/mazduino-lite/meta-info.envas the reference board (replacing deleted rootmeta-info.env)generated/controllers/generated/pre-generated headers regenerated to include CAN input/output feature structs and new enum values from the mazduino rusefi fork- mazduino-mega100 and mega100-512: status LED at PB7 enabled (
getCommsLedPin()andLED_CRITICAL_ERROR_BRAIN_PINboth assigned to PB7) - mazduino-compact: second idle solenoid field corrected to
secondSolenoidPin - mazduino-lite: knock disabled by leaving
EFI_SOFTWARE_KNOCKundefined (not set to FALSE) so#ifdefguards evaluate correctly - mazduino-mini6ch:
ts_show_traction_control trueenabled as ETB-capable board is the only variant that supports traction control - mazduino-mini6ch and mazduino-core: stepper idle valve exposed in TunerStudio — added
panel = idleStepperto theidleHwType(Idle Valve Hardware) dialog and theUse Stepperenable toggle (useStepperIdle) to theidlehwdialog in the generated INI, matching the official rusEFI layout; the Stepper option now appears alongside Solenoid with a working enable/disable control. No firmware rebuild required since the stepper config fields already exist at fixed offsets. Intentionally left hidden on mazduino-lite and mazduino-compact (hardware does not support stepper idle) - Dockerfile updated to handle both
ports.ubuntu.com(ARM64) andarchive.ubuntu.com(x86-64) Ubuntu mirror replacements for EOL Mantic release
Removed
- Root
meta-info.env(SHORT_BOARD_NAME=mazduino): generic board identifier removed; all builds now reference a named board variant
Fixed
- mazduino-mini6ch: firmware now runs on both STM32F407 (earlier boards) and STM32F427 (current boards). It was built as F427 only, which links RAM as 192KB and places the heap and thread stacks in SRAM3 — memory the F407 does not have — so an F407 board hard-faulted at boot and USB never enumerated. Built for the F407 again; on an F427 the chip is detected at runtime and its extra 64KB SRAM3 goes to the Lua heap. Applies to mazduino-mini6ch-bigfuel too
- mazduino-lite: onboard LPS25 barometric sensor was never configured, so
initBaro()had no pins to talk to and barometric correction silently fell back to a fixed value. Setlps25BaroSensorScl/Sdato PB10/PB11, matching the schematic (BARO_SCL/BARO_SDA) and mazduino-core. Existing tunes keep their stored values, so this takes effect on a config reset or a fresh tune - mazduino-mini6ch: PD14 pin conflict between the stepper driver enable (
stepperEnablePin, MCU-ENBL → DRV8825 EN via JP6 manual-enable jumper) and the critical-error LED. mini6ch never overrodeLED_CRITICAL_ERROR_BRAIN_PIN, so it inherited the rusEFI default of PD14 and claimed the pin before the stepper could use it. Moved the critical-error LED to the dedicated onboard PB4 LED (mini6ch has 3 LEDs — PB4, PB6, PB7 — with PB7 reserved for comms), freeing PD14 for stepper enable. Requires a firmware rebuild - Root
board_configuration.cpp: removed forward declaration ofcustomBoardTsActionwhich caused undefined reference linker error in CI unit test build EFI_EMBED_INI_MSD=FALSEon mega100-512: the embedded TunerStudio INI file was contributing approximately 155KB to the firmware binary; disabling it reduced firmware from 488KB to 271KBEFI_EMBED_INI_MSD=FALSEon all boards (mazduino-lite, mazduino-compact, mazduino-mini6ch, mazduino-mega100): CAN feature additions grew firmware beyond the 768KB linker budget; disabling INI embedding removes the 160KB ramdisk from flash. The TunerStudio INI is published as a GitHub Releases artifact insteadEFI_HPFP=FALSEon all boards: high-pressure fuel pump (GDI) control is not applicable to Mazda port-injec...
Nightly 2026-09-29
Automated nightly firmware build for Mazduino boards.
Breaking Changes
- VVT target tables enlarged from 8x8 to 16x16 on mazduino-compact, mazduino-core, mazduino-lite and mazduino-mini6ch, giving finer RPM and load resolution for cam targeting. This changes the tune layout, so existing tunes are not compatible — re-flash and re-enter the VVT tables after updating. mazduino-mega100 and mazduino-mega100-512 keep the 8x8 tables
- LTFT trim map now has its own axes (
ltftLoadBins/ltftRpmBins) instead of borrowing the VE table axes. Every board gains these two fields, so all boards need a matching firmware and INI; table dimensions are unchanged on existing boards, so tune values still carry over
Added
- mazduino-mini6ch: secondary TunerStudio channel on USART3 (PB10 = TXD3, PB11 = RXD3), for a Bluetooth module such as an HC-05. The firmware previously had no secondary channel at all — the whole thing is behind
#ifdef TS_SECONDARY_UxART_PORTand no Mazduino board defined it, so thebinarySerialpins in TunerStudio did nothing and the ECU never sent a byte to the module. Uses the ChibiOS Serial driver (SD3), the same way the reference f407-discovery board does; the UART driver would needHAL_USE_UART, which halconf.h only enables whenTS_PRIMARY_UxART_PORTis defined. Pin defaults are PB10/PB11 because rusEFI's own defaults, PC10/PC11, are the SD card's SPI3 pins on every Mazduino board. Baud followstunerStudioSerialSpeed(38400 by default), and the channel is started once at boot, so changing that value needs an ECU restart, not just a burn. Applies to mazduino-mini6ch-bigfuel too - BIGFUEL board variants:
mazduino-compact-bigfuel,mazduino-core-bigfuel,mazduino-lite-bigfuelandmazduino-mini6ch-bigfuel. Identical hardware and pinout to the board they are named after, with a 32x32 VE table and 32x32 ignition table (stock boards stay 16x16) for finer resolution on high-output builds. Tunes are not interchangeable between a board and its BIGFUEL variant - BIGFUEL variants trade the engine sniffer for the bigger tables: the persistent config lives in the 64KB CCM RAM and its leftovers feed the Lua heap, so 32x32 tables overflowed CCM by ~1.4KB. Disabling the engine sniffer frees its 5000-byte
WAVE_LOGGING_BUFFERfrom CCM. All other features are unchanged from the base board — the real-time trigger oscilloscope in TunerStudio is the only thing missing - Separate
LTFT_LOAD_COUNT/LTFT_RPM_COUNTsizing for the long-term fuel trim map, independent of the VE table. The learned trim map stays 16x16 even on BIGFUEL boards, saving 6KB of RAM versus following a 32x32 VE table, with no loss of tuning resolution. LTFT trims are now interpolated onto the VE table when applied, so the two grids no longer have to match - DFCO enable switch input (
coastingFuelCutSwitchPin): assign a pin to control DFCO via a physical switch; switch ON allows fuel cut per RPM/TPS/CLT parameters, switch OFF disables fuel cut entirely; leave unassigned for parameter-only control - Rotational Idle manual enable switch input (
rotationalIdleController.switchPin): when switch is ON, rotational idle is forced active regardless of automatic CLT/TPS conditions - Rotational Idle RPM window (
minRpm,maxRpm): configurable RPM range for rotational idle engagement; 0 = no limit; displayed in live data asrotIdleEngineTooSlow/rotIdleEngineTooFast - Fuel consumption output channels: trip-average L/100km and instantaneous L/hr, user-configurable via TunerStudio (Engine > Fuel Consumption); requires VSS, injection enabled, and injector flow set
- Predefined TunerStudio gauges for fuel consumption (
fuelConsumptionL100kmGauge,fuelConsumptionLitersPerHourGauge) under the Fueling category, so L/100km and L/hr are selectable from the right-click gauge picker (rusefi-coregauge_declarations.ini) fuelConsumptionEnabledbit andfuelDensity(g/L, default 750 petrol) added to engine configuration; calculation runs inTripOdometer::onSlowCallback()OUTCH_FuelConsumptionL100kmandOUTCH_FuelConsumptionLitersPerHouradded tooutput_channel_eenum for Lua accesscommon.mk: added$(PROJECT_DIR)/$(META_OUTPUT_ROOT_FOLDER)controllers/generatedtoALLINCso the unit test build finds board-specific generated headers whenMETA_OUTPUT_ROOT_FOLDERpoints outside the firmware tree- Nightly release workflow publishing per-board .bin, .srec, and .hex artifacts as GitHub Releases
- Docker-based build system (
build_boards.sh) using--platform linux/amd64for consistent builds on Apple Silicon and x86-64 - TunerStudio UI flags in
prepend.txtto hide ETB, traction control, boost, rotary, Harley-Davidson, torque model, and other features not applicable to each board variant - mazduino-mega100: STM32F407VGT6 (1MB) board with full feature set, dual pinout support (board04 and UA4C) selectable via TunerStudio board action
- mazduino-mega100-512: STM32F407VET6 (512KB) board with reduced feature set; firmware constrained to 384KB to keep tune storage sector (sector 7, 0x08060000) free
Changed
- CI (build-matrix): config push-back disabled on master (
push=false). Every board job in the matrix runs in parallel and each wouldgit pushregenerated configs to master, so all but the first failed with "fetch first"/non-fast-forward. mazduino commits generated files manually, so the CI push-back is unnecessary - CI (build-matrix): simulator build disabled on master (
sim=false). mazduino ships custom boards only —bundle.mkalready excludes the simulator from custom-board bundles — and the shared f407-discovery generated headers the simulator compiles against lack mazduino's added config fields (fuelDensity, DFCO switch, analog multi-switch), so the simulator cannot compile. This was previously masked because the oldmazduinobranch never triggered the simulator build - TunerStudio menu: Fuel Consumption moved from Advanced to Fuel menu (after DFCO entry)
- TunerStudio menu: Rotational Idle moved from Advanced to Idle menu
- TunerStudio dialog: Fuel Consumption dialog removes duplicate VSS input pin and Injector Flow fields (already configurable in their own dedicated menus)
_compile_unit_tests.shupdated to useboards/mazduino-lite/meta-info.envas the reference board (replacing deleted rootmeta-info.env)generated/controllers/generated/pre-generated headers regenerated to include CAN input/output feature structs and new enum values from the mazduino rusefi fork- mazduino-mega100 and mega100-512: status LED at PB7 enabled (
getCommsLedPin()andLED_CRITICAL_ERROR_BRAIN_PINboth assigned to PB7) - mazduino-compact: second idle solenoid field corrected to
secondSolenoidPin - mazduino-lite: knock disabled by leaving
EFI_SOFTWARE_KNOCKundefined (not set to FALSE) so#ifdefguards evaluate correctly - mazduino-mini6ch:
ts_show_traction_control trueenabled as ETB-capable board is the only variant that supports traction control - mazduino-mini6ch and mazduino-core: stepper idle valve exposed in TunerStudio — added
panel = idleStepperto theidleHwType(Idle Valve Hardware) dialog and theUse Stepperenable toggle (useStepperIdle) to theidlehwdialog in the generated INI, matching the official rusEFI layout; the Stepper option now appears alongside Solenoid with a working enable/disable control. No firmware rebuild required since the stepper config fields already exist at fixed offsets. Intentionally left hidden on mazduino-lite and mazduino-compact (hardware does not support stepper idle) - Dockerfile updated to handle both
ports.ubuntu.com(ARM64) andarchive.ubuntu.com(x86-64) Ubuntu mirror replacements for EOL Mantic release
Removed
- Root
meta-info.env(SHORT_BOARD_NAME=mazduino): generic board identifier removed; all builds now reference a named board variant
Fixed
- mazduino-mini6ch: firmware now runs on both STM32F407 (earlier boards) and STM32F427 (current boards). It was built as F427 only, which links RAM as 192KB and places the heap and thread stacks in SRAM3 — memory the F407 does not have — so an F407 board hard-faulted at boot and USB never enumerated. Built for the F407 again; on an F427 the chip is detected at runtime and its extra 64KB SRAM3 goes to the Lua heap. Applies to mazduino-mini6ch-bigfuel too
- mazduino-lite: onboard LPS25 barometric sensor was never configured, so
initBaro()had no pins to talk to and barometric correction silently fell back to a fixed value. Setlps25BaroSensorScl/Sdato PB10/PB11, matching the schematic (BARO_SCL/BARO_SDA) and mazduino-core. Existing tunes keep their stored values, so this takes effect on a config reset or a fresh tune - mazduino-mini6ch: PD14 pin conflict between the stepper driver enable (
stepperEnablePin, MCU-ENBL → DRV8825 EN via JP6 manual-enable jumper) and the critical-error LED. mini6ch never overrodeLED_CRITICAL_ERROR_BRAIN_PIN, so it inherited the rusEFI default of PD14 and claimed the pin before the stepper could use it. Moved the critical-error LED to the dedicated onboard PB4 LED (mini6ch has 3 LEDs — PB4, PB6, PB7 — with PB7 reserved for comms), freeing PD14 for stepper enable. Requires a firmware rebuild - Root
board_configuration.cpp: removed forward declaration ofcustomBoardTsActionwhich caused undefined reference linker error in CI unit test build EFI_EMBED_INI_MSD=FALSEon mega100-512: the embedded TunerStudio INI file was contributing approximately 155KB to the firmware binary; disabling it reduced firmware from 488KB to 271KBEFI_EMBED_INI_MSD=FALSEon all boards (mazduino-lite, mazduino-compact, mazduino-mini6ch, mazduino-mega100): CAN feature additions grew firmware beyond the 768KB linker budget; disabling INI embedding removes the 160KB ramdisk from flash. The TunerStudio INI is published as a GitHub Releases artifact insteadEFI_HPFP=FALSEon all boards: high-pressure fuel pump (GDI) control is not applicable to Mazda port-injec...
Nightly 2026-09-28
Automated nightly firmware build for Mazduino boards.
Breaking Changes
- VVT target tables enlarged from 8x8 to 16x16 on mazduino-compact, mazduino-core, mazduino-lite and mazduino-mini6ch, giving finer RPM and load resolution for cam targeting. This changes the tune layout, so existing tunes are not compatible — re-flash and re-enter the VVT tables after updating. mazduino-mega100 and mazduino-mega100-512 keep the 8x8 tables
- LTFT trim map now has its own axes (
ltftLoadBins/ltftRpmBins) instead of borrowing the VE table axes. Every board gains these two fields, so all boards need a matching firmware and INI; table dimensions are unchanged on existing boards, so tune values still carry over
Added
- mazduino-mini6ch: secondary TunerStudio channel on USART3 (PB10 = TXD3, PB11 = RXD3), for a Bluetooth module such as an HC-05. The firmware previously had no secondary channel at all — the whole thing is behind
#ifdef TS_SECONDARY_UxART_PORTand no Mazduino board defined it, so thebinarySerialpins in TunerStudio did nothing and the ECU never sent a byte to the module. Uses the ChibiOS Serial driver (SD3), the same way the reference f407-discovery board does; the UART driver would needHAL_USE_UART, which halconf.h only enables whenTS_PRIMARY_UxART_PORTis defined. Pin defaults are PB10/PB11 because rusEFI's own defaults, PC10/PC11, are the SD card's SPI3 pins on every Mazduino board. Baud followstunerStudioSerialSpeed(38400 by default), and the channel is started once at boot, so changing that value needs an ECU restart, not just a burn. Applies to mazduino-mini6ch-bigfuel too - BIGFUEL board variants:
mazduino-compact-bigfuel,mazduino-core-bigfuel,mazduino-lite-bigfuelandmazduino-mini6ch-bigfuel. Identical hardware and pinout to the board they are named after, with a 32x32 VE table and 32x32 ignition table (stock boards stay 16x16) for finer resolution on high-output builds. Tunes are not interchangeable between a board and its BIGFUEL variant - BIGFUEL variants trade the engine sniffer for the bigger tables: the persistent config lives in the 64KB CCM RAM and its leftovers feed the Lua heap, so 32x32 tables overflowed CCM by ~1.4KB. Disabling the engine sniffer frees its 5000-byte
WAVE_LOGGING_BUFFERfrom CCM. All other features are unchanged from the base board — the real-time trigger oscilloscope in TunerStudio is the only thing missing - Separate
LTFT_LOAD_COUNT/LTFT_RPM_COUNTsizing for the long-term fuel trim map, independent of the VE table. The learned trim map stays 16x16 even on BIGFUEL boards, saving 6KB of RAM versus following a 32x32 VE table, with no loss of tuning resolution. LTFT trims are now interpolated onto the VE table when applied, so the two grids no longer have to match - DFCO enable switch input (
coastingFuelCutSwitchPin): assign a pin to control DFCO via a physical switch; switch ON allows fuel cut per RPM/TPS/CLT parameters, switch OFF disables fuel cut entirely; leave unassigned for parameter-only control - Rotational Idle manual enable switch input (
rotationalIdleController.switchPin): when switch is ON, rotational idle is forced active regardless of automatic CLT/TPS conditions - Rotational Idle RPM window (
minRpm,maxRpm): configurable RPM range for rotational idle engagement; 0 = no limit; displayed in live data asrotIdleEngineTooSlow/rotIdleEngineTooFast - Fuel consumption output channels: trip-average L/100km and instantaneous L/hr, user-configurable via TunerStudio (Engine > Fuel Consumption); requires VSS, injection enabled, and injector flow set
- Predefined TunerStudio gauges for fuel consumption (
fuelConsumptionL100kmGauge,fuelConsumptionLitersPerHourGauge) under the Fueling category, so L/100km and L/hr are selectable from the right-click gauge picker (rusefi-coregauge_declarations.ini) fuelConsumptionEnabledbit andfuelDensity(g/L, default 750 petrol) added to engine configuration; calculation runs inTripOdometer::onSlowCallback()OUTCH_FuelConsumptionL100kmandOUTCH_FuelConsumptionLitersPerHouradded tooutput_channel_eenum for Lua accesscommon.mk: added$(PROJECT_DIR)/$(META_OUTPUT_ROOT_FOLDER)controllers/generatedtoALLINCso the unit test build finds board-specific generated headers whenMETA_OUTPUT_ROOT_FOLDERpoints outside the firmware tree- Nightly release workflow publishing per-board .bin, .srec, and .hex artifacts as GitHub Releases
- Docker-based build system (
build_boards.sh) using--platform linux/amd64for consistent builds on Apple Silicon and x86-64 - TunerStudio UI flags in
prepend.txtto hide ETB, traction control, boost, rotary, Harley-Davidson, torque model, and other features not applicable to each board variant - mazduino-mega100: STM32F407VGT6 (1MB) board with full feature set, dual pinout support (board04 and UA4C) selectable via TunerStudio board action
- mazduino-mega100-512: STM32F407VET6 (512KB) board with reduced feature set; firmware constrained to 384KB to keep tune storage sector (sector 7, 0x08060000) free
Changed
- CI (build-matrix): config push-back disabled on master (
push=false). Every board job in the matrix runs in parallel and each wouldgit pushregenerated configs to master, so all but the first failed with "fetch first"/non-fast-forward. mazduino commits generated files manually, so the CI push-back is unnecessary - CI (build-matrix): simulator build disabled on master (
sim=false). mazduino ships custom boards only —bundle.mkalready excludes the simulator from custom-board bundles — and the shared f407-discovery generated headers the simulator compiles against lack mazduino's added config fields (fuelDensity, DFCO switch, analog multi-switch), so the simulator cannot compile. This was previously masked because the oldmazduinobranch never triggered the simulator build - TunerStudio menu: Fuel Consumption moved from Advanced to Fuel menu (after DFCO entry)
- TunerStudio menu: Rotational Idle moved from Advanced to Idle menu
- TunerStudio dialog: Fuel Consumption dialog removes duplicate VSS input pin and Injector Flow fields (already configurable in their own dedicated menus)
_compile_unit_tests.shupdated to useboards/mazduino-lite/meta-info.envas the reference board (replacing deleted rootmeta-info.env)generated/controllers/generated/pre-generated headers regenerated to include CAN input/output feature structs and new enum values from the mazduino rusefi fork- mazduino-mega100 and mega100-512: status LED at PB7 enabled (
getCommsLedPin()andLED_CRITICAL_ERROR_BRAIN_PINboth assigned to PB7) - mazduino-compact: second idle solenoid field corrected to
secondSolenoidPin - mazduino-lite: knock disabled by leaving
EFI_SOFTWARE_KNOCKundefined (not set to FALSE) so#ifdefguards evaluate correctly - mazduino-mini6ch:
ts_show_traction_control trueenabled as ETB-capable board is the only variant that supports traction control - mazduino-mini6ch and mazduino-core: stepper idle valve exposed in TunerStudio — added
panel = idleStepperto theidleHwType(Idle Valve Hardware) dialog and theUse Stepperenable toggle (useStepperIdle) to theidlehwdialog in the generated INI, matching the official rusEFI layout; the Stepper option now appears alongside Solenoid with a working enable/disable control. No firmware rebuild required since the stepper config fields already exist at fixed offsets. Intentionally left hidden on mazduino-lite and mazduino-compact (hardware does not support stepper idle) - Dockerfile updated to handle both
ports.ubuntu.com(ARM64) andarchive.ubuntu.com(x86-64) Ubuntu mirror replacements for EOL Mantic release
Removed
- Root
meta-info.env(SHORT_BOARD_NAME=mazduino): generic board identifier removed; all builds now reference a named board variant
Fixed
- mazduino-mini6ch: firmware now runs on both STM32F407 (earlier boards) and STM32F427 (current boards). It was built as F427 only, which links RAM as 192KB and places the heap and thread stacks in SRAM3 — memory the F407 does not have — so an F407 board hard-faulted at boot and USB never enumerated. Built for the F407 again; on an F427 the chip is detected at runtime and its extra 64KB SRAM3 goes to the Lua heap. Applies to mazduino-mini6ch-bigfuel too
- mazduino-lite: onboard LPS25 barometric sensor was never configured, so
initBaro()had no pins to talk to and barometric correction silently fell back to a fixed value. Setlps25BaroSensorScl/Sdato PB10/PB11, matching the schematic (BARO_SCL/BARO_SDA) and mazduino-core. Existing tunes keep their stored values, so this takes effect on a config reset or a fresh tune - mazduino-mini6ch: PD14 pin conflict between the stepper driver enable (
stepperEnablePin, MCU-ENBL → DRV8825 EN via JP6 manual-enable jumper) and the critical-error LED. mini6ch never overrodeLED_CRITICAL_ERROR_BRAIN_PIN, so it inherited the rusEFI default of PD14 and claimed the pin before the stepper could use it. Moved the critical-error LED to the dedicated onboard PB4 LED (mini6ch has 3 LEDs — PB4, PB6, PB7 — with PB7 reserved for comms), freeing PD14 for stepper enable. Requires a firmware rebuild - Root
board_configuration.cpp: removed forward declaration ofcustomBoardTsActionwhich caused undefined reference linker error in CI unit test build EFI_EMBED_INI_MSD=FALSEon mega100-512: the embedded TunerStudio INI file was contributing approximately 155KB to the firmware binary; disabling it reduced firmware from 488KB to 271KBEFI_EMBED_INI_MSD=FALSEon all boards (mazduino-lite, mazduino-compact, mazduino-mini6ch, mazduino-mega100): CAN feature additions grew firmware beyond the 768KB linker budget; disabling INI embedding removes the 160KB ramdisk from flash. The TunerStudio INI is published as a GitHub Releases artifact insteadEFI_HPFP=FALSEon all boards: high-pressure fuel pump (GDI) control is not applicable to Mazda port-injec...
Nightly 2026-09-27
Automated nightly firmware build for Mazduino boards.
Breaking Changes
- VVT target tables enlarged from 8x8 to 16x16 on mazduino-compact, mazduino-core, mazduino-lite and mazduino-mini6ch, giving finer RPM and load resolution for cam targeting. This changes the tune layout, so existing tunes are not compatible — re-flash and re-enter the VVT tables after updating. mazduino-mega100 and mazduino-mega100-512 keep the 8x8 tables
- LTFT trim map now has its own axes (
ltftLoadBins/ltftRpmBins) instead of borrowing the VE table axes. Every board gains these two fields, so all boards need a matching firmware and INI; table dimensions are unchanged on existing boards, so tune values still carry over
Added
- mazduino-mini6ch: secondary TunerStudio channel on USART3 (PB10 = TXD3, PB11 = RXD3), for a Bluetooth module such as an HC-05. The firmware previously had no secondary channel at all — the whole thing is behind
#ifdef TS_SECONDARY_UxART_PORTand no Mazduino board defined it, so thebinarySerialpins in TunerStudio did nothing and the ECU never sent a byte to the module. Uses the ChibiOS Serial driver (SD3), the same way the reference f407-discovery board does; the UART driver would needHAL_USE_UART, which halconf.h only enables whenTS_PRIMARY_UxART_PORTis defined. Pin defaults are PB10/PB11 because rusEFI's own defaults, PC10/PC11, are the SD card's SPI3 pins on every Mazduino board. Baud followstunerStudioSerialSpeed(38400 by default), and the channel is started once at boot, so changing that value needs an ECU restart, not just a burn. Applies to mazduino-mini6ch-bigfuel too - BIGFUEL board variants:
mazduino-compact-bigfuel,mazduino-core-bigfuel,mazduino-lite-bigfuelandmazduino-mini6ch-bigfuel. Identical hardware and pinout to the board they are named after, with a 32x32 VE table and 32x32 ignition table (stock boards stay 16x16) for finer resolution on high-output builds. Tunes are not interchangeable between a board and its BIGFUEL variant - BIGFUEL variants trade the engine sniffer for the bigger tables: the persistent config lives in the 64KB CCM RAM and its leftovers feed the Lua heap, so 32x32 tables overflowed CCM by ~1.4KB. Disabling the engine sniffer frees its 5000-byte
WAVE_LOGGING_BUFFERfrom CCM. All other features are unchanged from the base board — the real-time trigger oscilloscope in TunerStudio is the only thing missing - Separate
LTFT_LOAD_COUNT/LTFT_RPM_COUNTsizing for the long-term fuel trim map, independent of the VE table. The learned trim map stays 16x16 even on BIGFUEL boards, saving 6KB of RAM versus following a 32x32 VE table, with no loss of tuning resolution. LTFT trims are now interpolated onto the VE table when applied, so the two grids no longer have to match - DFCO enable switch input (
coastingFuelCutSwitchPin): assign a pin to control DFCO via a physical switch; switch ON allows fuel cut per RPM/TPS/CLT parameters, switch OFF disables fuel cut entirely; leave unassigned for parameter-only control - Rotational Idle manual enable switch input (
rotationalIdleController.switchPin): when switch is ON, rotational idle is forced active regardless of automatic CLT/TPS conditions - Rotational Idle RPM window (
minRpm,maxRpm): configurable RPM range for rotational idle engagement; 0 = no limit; displayed in live data asrotIdleEngineTooSlow/rotIdleEngineTooFast - Fuel consumption output channels: trip-average L/100km and instantaneous L/hr, user-configurable via TunerStudio (Engine > Fuel Consumption); requires VSS, injection enabled, and injector flow set
- Predefined TunerStudio gauges for fuel consumption (
fuelConsumptionL100kmGauge,fuelConsumptionLitersPerHourGauge) under the Fueling category, so L/100km and L/hr are selectable from the right-click gauge picker (rusefi-coregauge_declarations.ini) fuelConsumptionEnabledbit andfuelDensity(g/L, default 750 petrol) added to engine configuration; calculation runs inTripOdometer::onSlowCallback()OUTCH_FuelConsumptionL100kmandOUTCH_FuelConsumptionLitersPerHouradded tooutput_channel_eenum for Lua accesscommon.mk: added$(PROJECT_DIR)/$(META_OUTPUT_ROOT_FOLDER)controllers/generatedtoALLINCso the unit test build finds board-specific generated headers whenMETA_OUTPUT_ROOT_FOLDERpoints outside the firmware tree- Nightly release workflow publishing per-board .bin, .srec, and .hex artifacts as GitHub Releases
- Docker-based build system (
build_boards.sh) using--platform linux/amd64for consistent builds on Apple Silicon and x86-64 - TunerStudio UI flags in
prepend.txtto hide ETB, traction control, boost, rotary, Harley-Davidson, torque model, and other features not applicable to each board variant - mazduino-mega100: STM32F407VGT6 (1MB) board with full feature set, dual pinout support (board04 and UA4C) selectable via TunerStudio board action
- mazduino-mega100-512: STM32F407VET6 (512KB) board with reduced feature set; firmware constrained to 384KB to keep tune storage sector (sector 7, 0x08060000) free
Changed
- CI (build-matrix): config push-back disabled on master (
push=false). Every board job in the matrix runs in parallel and each wouldgit pushregenerated configs to master, so all but the first failed with "fetch first"/non-fast-forward. mazduino commits generated files manually, so the CI push-back is unnecessary - CI (build-matrix): simulator build disabled on master (
sim=false). mazduino ships custom boards only —bundle.mkalready excludes the simulator from custom-board bundles — and the shared f407-discovery generated headers the simulator compiles against lack mazduino's added config fields (fuelDensity, DFCO switch, analog multi-switch), so the simulator cannot compile. This was previously masked because the oldmazduinobranch never triggered the simulator build - TunerStudio menu: Fuel Consumption moved from Advanced to Fuel menu (after DFCO entry)
- TunerStudio menu: Rotational Idle moved from Advanced to Idle menu
- TunerStudio dialog: Fuel Consumption dialog removes duplicate VSS input pin and Injector Flow fields (already configurable in their own dedicated menus)
_compile_unit_tests.shupdated to useboards/mazduino-lite/meta-info.envas the reference board (replacing deleted rootmeta-info.env)generated/controllers/generated/pre-generated headers regenerated to include CAN input/output feature structs and new enum values from the mazduino rusefi fork- mazduino-mega100 and mega100-512: status LED at PB7 enabled (
getCommsLedPin()andLED_CRITICAL_ERROR_BRAIN_PINboth assigned to PB7) - mazduino-compact: second idle solenoid field corrected to
secondSolenoidPin - mazduino-lite: knock disabled by leaving
EFI_SOFTWARE_KNOCKundefined (not set to FALSE) so#ifdefguards evaluate correctly - mazduino-mini6ch:
ts_show_traction_control trueenabled as ETB-capable board is the only variant that supports traction control - mazduino-mini6ch and mazduino-core: stepper idle valve exposed in TunerStudio — added
panel = idleStepperto theidleHwType(Idle Valve Hardware) dialog and theUse Stepperenable toggle (useStepperIdle) to theidlehwdialog in the generated INI, matching the official rusEFI layout; the Stepper option now appears alongside Solenoid with a working enable/disable control. No firmware rebuild required since the stepper config fields already exist at fixed offsets. Intentionally left hidden on mazduino-lite and mazduino-compact (hardware does not support stepper idle) - Dockerfile updated to handle both
ports.ubuntu.com(ARM64) andarchive.ubuntu.com(x86-64) Ubuntu mirror replacements for EOL Mantic release
Removed
- Root
meta-info.env(SHORT_BOARD_NAME=mazduino): generic board identifier removed; all builds now reference a named board variant
Fixed
- mazduino-mini6ch: firmware now runs on both STM32F407 (earlier boards) and STM32F427 (current boards). It was built as F427 only, which links RAM as 192KB and places the heap and thread stacks in SRAM3 — memory the F407 does not have — so an F407 board hard-faulted at boot and USB never enumerated. Built for the F407 again; on an F427 the chip is detected at runtime and its extra 64KB SRAM3 goes to the Lua heap. Applies to mazduino-mini6ch-bigfuel too
- mazduino-lite: onboard LPS25 barometric sensor was never configured, so
initBaro()had no pins to talk to and barometric correction silently fell back to a fixed value. Setlps25BaroSensorScl/Sdato PB10/PB11, matching the schematic (BARO_SCL/BARO_SDA) and mazduino-core. Existing tunes keep their stored values, so this takes effect on a config reset or a fresh tune - mazduino-mini6ch: PD14 pin conflict between the stepper driver enable (
stepperEnablePin, MCU-ENBL → DRV8825 EN via JP6 manual-enable jumper) and the critical-error LED. mini6ch never overrodeLED_CRITICAL_ERROR_BRAIN_PIN, so it inherited the rusEFI default of PD14 and claimed the pin before the stepper could use it. Moved the critical-error LED to the dedicated onboard PB4 LED (mini6ch has 3 LEDs — PB4, PB6, PB7 — with PB7 reserved for comms), freeing PD14 for stepper enable. Requires a firmware rebuild - Root
board_configuration.cpp: removed forward declaration ofcustomBoardTsActionwhich caused undefined reference linker error in CI unit test build EFI_EMBED_INI_MSD=FALSEon mega100-512: the embedded TunerStudio INI file was contributing approximately 155KB to the firmware binary; disabling it reduced firmware from 488KB to 271KBEFI_EMBED_INI_MSD=FALSEon all boards (mazduino-lite, mazduino-compact, mazduino-mini6ch, mazduino-mega100): CAN feature additions grew firmware beyond the 768KB linker budget; disabling INI embedding removes the 160KB ramdisk from flash. The TunerStudio INI is published as a GitHub Releases artifact insteadEFI_HPFP=FALSEon all boards: high-pressure fuel pump (GDI) control is not applicable to Mazda port-injec...
Nightly 2026-09-26
Automated nightly firmware build for Mazduino boards.
Breaking Changes
- VVT target tables enlarged from 8x8 to 16x16 on mazduino-compact, mazduino-core, mazduino-lite and mazduino-mini6ch, giving finer RPM and load resolution for cam targeting. This changes the tune layout, so existing tunes are not compatible — re-flash and re-enter the VVT tables after updating. mazduino-mega100 and mazduino-mega100-512 keep the 8x8 tables
- LTFT trim map now has its own axes (
ltftLoadBins/ltftRpmBins) instead of borrowing the VE table axes. Every board gains these two fields, so all boards need a matching firmware and INI; table dimensions are unchanged on existing boards, so tune values still carry over
Added
- mazduino-mini6ch: secondary TunerStudio channel on USART3 (PB10 = TXD3, PB11 = RXD3), for a Bluetooth module such as an HC-05. The firmware previously had no secondary channel at all — the whole thing is behind
#ifdef TS_SECONDARY_UxART_PORTand no Mazduino board defined it, so thebinarySerialpins in TunerStudio did nothing and the ECU never sent a byte to the module. Uses the ChibiOS Serial driver (SD3), the same way the reference f407-discovery board does; the UART driver would needHAL_USE_UART, which halconf.h only enables whenTS_PRIMARY_UxART_PORTis defined. Pin defaults are PB10/PB11 because rusEFI's own defaults, PC10/PC11, are the SD card's SPI3 pins on every Mazduino board. Baud followstunerStudioSerialSpeed(38400 by default), and the channel is started once at boot, so changing that value needs an ECU restart, not just a burn. Applies to mazduino-mini6ch-bigfuel too - BIGFUEL board variants:
mazduino-compact-bigfuel,mazduino-core-bigfuel,mazduino-lite-bigfuelandmazduino-mini6ch-bigfuel. Identical hardware and pinout to the board they are named after, with a 32x32 VE table and 32x32 ignition table (stock boards stay 16x16) for finer resolution on high-output builds. Tunes are not interchangeable between a board and its BIGFUEL variant - BIGFUEL variants trade the engine sniffer for the bigger tables: the persistent config lives in the 64KB CCM RAM and its leftovers feed the Lua heap, so 32x32 tables overflowed CCM by ~1.4KB. Disabling the engine sniffer frees its 5000-byte
WAVE_LOGGING_BUFFERfrom CCM. All other features are unchanged from the base board — the real-time trigger oscilloscope in TunerStudio is the only thing missing - Separate
LTFT_LOAD_COUNT/LTFT_RPM_COUNTsizing for the long-term fuel trim map, independent of the VE table. The learned trim map stays 16x16 even on BIGFUEL boards, saving 6KB of RAM versus following a 32x32 VE table, with no loss of tuning resolution. LTFT trims are now interpolated onto the VE table when applied, so the two grids no longer have to match - DFCO enable switch input (
coastingFuelCutSwitchPin): assign a pin to control DFCO via a physical switch; switch ON allows fuel cut per RPM/TPS/CLT parameters, switch OFF disables fuel cut entirely; leave unassigned for parameter-only control - Rotational Idle manual enable switch input (
rotationalIdleController.switchPin): when switch is ON, rotational idle is forced active regardless of automatic CLT/TPS conditions - Rotational Idle RPM window (
minRpm,maxRpm): configurable RPM range for rotational idle engagement; 0 = no limit; displayed in live data asrotIdleEngineTooSlow/rotIdleEngineTooFast - Fuel consumption output channels: trip-average L/100km and instantaneous L/hr, user-configurable via TunerStudio (Engine > Fuel Consumption); requires VSS, injection enabled, and injector flow set
- Predefined TunerStudio gauges for fuel consumption (
fuelConsumptionL100kmGauge,fuelConsumptionLitersPerHourGauge) under the Fueling category, so L/100km and L/hr are selectable from the right-click gauge picker (rusefi-coregauge_declarations.ini) fuelConsumptionEnabledbit andfuelDensity(g/L, default 750 petrol) added to engine configuration; calculation runs inTripOdometer::onSlowCallback()OUTCH_FuelConsumptionL100kmandOUTCH_FuelConsumptionLitersPerHouradded tooutput_channel_eenum for Lua accesscommon.mk: added$(PROJECT_DIR)/$(META_OUTPUT_ROOT_FOLDER)controllers/generatedtoALLINCso the unit test build finds board-specific generated headers whenMETA_OUTPUT_ROOT_FOLDERpoints outside the firmware tree- Nightly release workflow publishing per-board .bin, .srec, and .hex artifacts as GitHub Releases
- Docker-based build system (
build_boards.sh) using--platform linux/amd64for consistent builds on Apple Silicon and x86-64 - TunerStudio UI flags in
prepend.txtto hide ETB, traction control, boost, rotary, Harley-Davidson, torque model, and other features not applicable to each board variant - mazduino-mega100: STM32F407VGT6 (1MB) board with full feature set, dual pinout support (board04 and UA4C) selectable via TunerStudio board action
- mazduino-mega100-512: STM32F407VET6 (512KB) board with reduced feature set; firmware constrained to 384KB to keep tune storage sector (sector 7, 0x08060000) free
Changed
- CI (build-matrix): config push-back disabled on master (
push=false). Every board job in the matrix runs in parallel and each wouldgit pushregenerated configs to master, so all but the first failed with "fetch first"/non-fast-forward. mazduino commits generated files manually, so the CI push-back is unnecessary - CI (build-matrix): simulator build disabled on master (
sim=false). mazduino ships custom boards only —bundle.mkalready excludes the simulator from custom-board bundles — and the shared f407-discovery generated headers the simulator compiles against lack mazduino's added config fields (fuelDensity, DFCO switch, analog multi-switch), so the simulator cannot compile. This was previously masked because the oldmazduinobranch never triggered the simulator build - TunerStudio menu: Fuel Consumption moved from Advanced to Fuel menu (after DFCO entry)
- TunerStudio menu: Rotational Idle moved from Advanced to Idle menu
- TunerStudio dialog: Fuel Consumption dialog removes duplicate VSS input pin and Injector Flow fields (already configurable in their own dedicated menus)
_compile_unit_tests.shupdated to useboards/mazduino-lite/meta-info.envas the reference board (replacing deleted rootmeta-info.env)generated/controllers/generated/pre-generated headers regenerated to include CAN input/output feature structs and new enum values from the mazduino rusefi fork- mazduino-mega100 and mega100-512: status LED at PB7 enabled (
getCommsLedPin()andLED_CRITICAL_ERROR_BRAIN_PINboth assigned to PB7) - mazduino-compact: second idle solenoid field corrected to
secondSolenoidPin - mazduino-lite: knock disabled by leaving
EFI_SOFTWARE_KNOCKundefined (not set to FALSE) so#ifdefguards evaluate correctly - mazduino-mini6ch:
ts_show_traction_control trueenabled as ETB-capable board is the only variant that supports traction control - mazduino-mini6ch and mazduino-core: stepper idle valve exposed in TunerStudio — added
panel = idleStepperto theidleHwType(Idle Valve Hardware) dialog and theUse Stepperenable toggle (useStepperIdle) to theidlehwdialog in the generated INI, matching the official rusEFI layout; the Stepper option now appears alongside Solenoid with a working enable/disable control. No firmware rebuild required since the stepper config fields already exist at fixed offsets. Intentionally left hidden on mazduino-lite and mazduino-compact (hardware does not support stepper idle) - Dockerfile updated to handle both
ports.ubuntu.com(ARM64) andarchive.ubuntu.com(x86-64) Ubuntu mirror replacements for EOL Mantic release
Removed
- Root
meta-info.env(SHORT_BOARD_NAME=mazduino): generic board identifier removed; all builds now reference a named board variant
Fixed
- mazduino-mini6ch: firmware now runs on both STM32F407 (earlier boards) and STM32F427 (current boards). It was built as F427 only, which links RAM as 192KB and places the heap and thread stacks in SRAM3 — memory the F407 does not have — so an F407 board hard-faulted at boot and USB never enumerated. Built for the F407 again; on an F427 the chip is detected at runtime and its extra 64KB SRAM3 goes to the Lua heap. Applies to mazduino-mini6ch-bigfuel too
- mazduino-lite: onboard LPS25 barometric sensor was never configured, so
initBaro()had no pins to talk to and barometric correction silently fell back to a fixed value. Setlps25BaroSensorScl/Sdato PB10/PB11, matching the schematic (BARO_SCL/BARO_SDA) and mazduino-core. Existing tunes keep their stored values, so this takes effect on a config reset or a fresh tune - mazduino-mini6ch: PD14 pin conflict between the stepper driver enable (
stepperEnablePin, MCU-ENBL → DRV8825 EN via JP6 manual-enable jumper) and the critical-error LED. mini6ch never overrodeLED_CRITICAL_ERROR_BRAIN_PIN, so it inherited the rusEFI default of PD14 and claimed the pin before the stepper could use it. Moved the critical-error LED to the dedicated onboard PB4 LED (mini6ch has 3 LEDs — PB4, PB6, PB7 — with PB7 reserved for comms), freeing PD14 for stepper enable. Requires a firmware rebuild - Root
board_configuration.cpp: removed forward declaration ofcustomBoardTsActionwhich caused undefined reference linker error in CI unit test build EFI_EMBED_INI_MSD=FALSEon mega100-512: the embedded TunerStudio INI file was contributing approximately 155KB to the firmware binary; disabling it reduced firmware from 488KB to 271KBEFI_EMBED_INI_MSD=FALSEon all boards (mazduino-lite, mazduino-compact, mazduino-mini6ch, mazduino-mega100): CAN feature additions grew firmware beyond the 768KB linker budget; disabling INI embedding removes the 160KB ramdisk from flash. The TunerStudio INI is published as a GitHub Releases artifact insteadEFI_HPFP=FALSEon all boards: high-pressure fuel pump (GDI) control is not applicable to Mazda port-injec...
Nightly 2026-09-25
Automated nightly firmware build for Mazduino boards.
Breaking Changes
- VVT target tables enlarged from 8x8 to 16x16 on mazduino-compact, mazduino-core, mazduino-lite and mazduino-mini6ch, giving finer RPM and load resolution for cam targeting. This changes the tune layout, so existing tunes are not compatible — re-flash and re-enter the VVT tables after updating. mazduino-mega100 and mazduino-mega100-512 keep the 8x8 tables
- LTFT trim map now has its own axes (
ltftLoadBins/ltftRpmBins) instead of borrowing the VE table axes. Every board gains these two fields, so all boards need a matching firmware and INI; table dimensions are unchanged on existing boards, so tune values still carry over
Added
- mazduino-mini6ch: secondary TunerStudio channel on USART3 (PB10 = TXD3, PB11 = RXD3), for a Bluetooth module such as an HC-05. The firmware previously had no secondary channel at all — the whole thing is behind
#ifdef TS_SECONDARY_UxART_PORTand no Mazduino board defined it, so thebinarySerialpins in TunerStudio did nothing and the ECU never sent a byte to the module. Uses the ChibiOS Serial driver (SD3), the same way the reference f407-discovery board does; the UART driver would needHAL_USE_UART, which halconf.h only enables whenTS_PRIMARY_UxART_PORTis defined. Pin defaults are PB10/PB11 because rusEFI's own defaults, PC10/PC11, are the SD card's SPI3 pins on every Mazduino board. Baud followstunerStudioSerialSpeed(38400 by default), and the channel is started once at boot, so changing that value needs an ECU restart, not just a burn. Applies to mazduino-mini6ch-bigfuel too - BIGFUEL board variants:
mazduino-compact-bigfuel,mazduino-core-bigfuel,mazduino-lite-bigfuelandmazduino-mini6ch-bigfuel. Identical hardware and pinout to the board they are named after, with a 32x32 VE table and 32x32 ignition table (stock boards stay 16x16) for finer resolution on high-output builds. Tunes are not interchangeable between a board and its BIGFUEL variant - BIGFUEL variants trade the engine sniffer for the bigger tables: the persistent config lives in the 64KB CCM RAM and its leftovers feed the Lua heap, so 32x32 tables overflowed CCM by ~1.4KB. Disabling the engine sniffer frees its 5000-byte
WAVE_LOGGING_BUFFERfrom CCM. All other features are unchanged from the base board — the real-time trigger oscilloscope in TunerStudio is the only thing missing - Separate
LTFT_LOAD_COUNT/LTFT_RPM_COUNTsizing for the long-term fuel trim map, independent of the VE table. The learned trim map stays 16x16 even on BIGFUEL boards, saving 6KB of RAM versus following a 32x32 VE table, with no loss of tuning resolution. LTFT trims are now interpolated onto the VE table when applied, so the two grids no longer have to match - DFCO enable switch input (
coastingFuelCutSwitchPin): assign a pin to control DFCO via a physical switch; switch ON allows fuel cut per RPM/TPS/CLT parameters, switch OFF disables fuel cut entirely; leave unassigned for parameter-only control - Rotational Idle manual enable switch input (
rotationalIdleController.switchPin): when switch is ON, rotational idle is forced active regardless of automatic CLT/TPS conditions - Rotational Idle RPM window (
minRpm,maxRpm): configurable RPM range for rotational idle engagement; 0 = no limit; displayed in live data asrotIdleEngineTooSlow/rotIdleEngineTooFast - Fuel consumption output channels: trip-average L/100km and instantaneous L/hr, user-configurable via TunerStudio (Engine > Fuel Consumption); requires VSS, injection enabled, and injector flow set
- Predefined TunerStudio gauges for fuel consumption (
fuelConsumptionL100kmGauge,fuelConsumptionLitersPerHourGauge) under the Fueling category, so L/100km and L/hr are selectable from the right-click gauge picker (rusefi-coregauge_declarations.ini) fuelConsumptionEnabledbit andfuelDensity(g/L, default 750 petrol) added to engine configuration; calculation runs inTripOdometer::onSlowCallback()OUTCH_FuelConsumptionL100kmandOUTCH_FuelConsumptionLitersPerHouradded tooutput_channel_eenum for Lua accesscommon.mk: added$(PROJECT_DIR)/$(META_OUTPUT_ROOT_FOLDER)controllers/generatedtoALLINCso the unit test build finds board-specific generated headers whenMETA_OUTPUT_ROOT_FOLDERpoints outside the firmware tree- Nightly release workflow publishing per-board .bin, .srec, and .hex artifacts as GitHub Releases
- Docker-based build system (
build_boards.sh) using--platform linux/amd64for consistent builds on Apple Silicon and x86-64 - TunerStudio UI flags in
prepend.txtto hide ETB, traction control, boost, rotary, Harley-Davidson, torque model, and other features not applicable to each board variant - mazduino-mega100: STM32F407VGT6 (1MB) board with full feature set, dual pinout support (board04 and UA4C) selectable via TunerStudio board action
- mazduino-mega100-512: STM32F407VET6 (512KB) board with reduced feature set; firmware constrained to 384KB to keep tune storage sector (sector 7, 0x08060000) free
Changed
- CI (build-matrix): config push-back disabled on master (
push=false). Every board job in the matrix runs in parallel and each wouldgit pushregenerated configs to master, so all but the first failed with "fetch first"/non-fast-forward. mazduino commits generated files manually, so the CI push-back is unnecessary - CI (build-matrix): simulator build disabled on master (
sim=false). mazduino ships custom boards only —bundle.mkalready excludes the simulator from custom-board bundles — and the shared f407-discovery generated headers the simulator compiles against lack mazduino's added config fields (fuelDensity, DFCO switch, analog multi-switch), so the simulator cannot compile. This was previously masked because the oldmazduinobranch never triggered the simulator build - TunerStudio menu: Fuel Consumption moved from Advanced to Fuel menu (after DFCO entry)
- TunerStudio menu: Rotational Idle moved from Advanced to Idle menu
- TunerStudio dialog: Fuel Consumption dialog removes duplicate VSS input pin and Injector Flow fields (already configurable in their own dedicated menus)
_compile_unit_tests.shupdated to useboards/mazduino-lite/meta-info.envas the reference board (replacing deleted rootmeta-info.env)generated/controllers/generated/pre-generated headers regenerated to include CAN input/output feature structs and new enum values from the mazduino rusefi fork- mazduino-mega100 and mega100-512: status LED at PB7 enabled (
getCommsLedPin()andLED_CRITICAL_ERROR_BRAIN_PINboth assigned to PB7) - mazduino-compact: second idle solenoid field corrected to
secondSolenoidPin - mazduino-lite: knock disabled by leaving
EFI_SOFTWARE_KNOCKundefined (not set to FALSE) so#ifdefguards evaluate correctly - mazduino-mini6ch:
ts_show_traction_control trueenabled as ETB-capable board is the only variant that supports traction control - mazduino-mini6ch and mazduino-core: stepper idle valve exposed in TunerStudio — added
panel = idleStepperto theidleHwType(Idle Valve Hardware) dialog and theUse Stepperenable toggle (useStepperIdle) to theidlehwdialog in the generated INI, matching the official rusEFI layout; the Stepper option now appears alongside Solenoid with a working enable/disable control. No firmware rebuild required since the stepper config fields already exist at fixed offsets. Intentionally left hidden on mazduino-lite and mazduino-compact (hardware does not support stepper idle) - Dockerfile updated to handle both
ports.ubuntu.com(ARM64) andarchive.ubuntu.com(x86-64) Ubuntu mirror replacements for EOL Mantic release
Removed
- Root
meta-info.env(SHORT_BOARD_NAME=mazduino): generic board identifier removed; all builds now reference a named board variant
Fixed
- mazduino-mini6ch: firmware now runs on both STM32F407 (earlier boards) and STM32F427 (current boards). It was built as F427 only, which links RAM as 192KB and places the heap and thread stacks in SRAM3 — memory the F407 does not have — so an F407 board hard-faulted at boot and USB never enumerated. Built for the F407 again; on an F427 the chip is detected at runtime and its extra 64KB SRAM3 goes to the Lua heap. Applies to mazduino-mini6ch-bigfuel too
- mazduino-lite: onboard LPS25 barometric sensor was never configured, so
initBaro()had no pins to talk to and barometric correction silently fell back to a fixed value. Setlps25BaroSensorScl/Sdato PB10/PB11, matching the schematic (BARO_SCL/BARO_SDA) and mazduino-core. Existing tunes keep their stored values, so this takes effect on a config reset or a fresh tune - mazduino-mini6ch: PD14 pin conflict between the stepper driver enable (
stepperEnablePin, MCU-ENBL → DRV8825 EN via JP6 manual-enable jumper) and the critical-error LED. mini6ch never overrodeLED_CRITICAL_ERROR_BRAIN_PIN, so it inherited the rusEFI default of PD14 and claimed the pin before the stepper could use it. Moved the critical-error LED to the dedicated onboard PB4 LED (mini6ch has 3 LEDs — PB4, PB6, PB7 — with PB7 reserved for comms), freeing PD14 for stepper enable. Requires a firmware rebuild - Root
board_configuration.cpp: removed forward declaration ofcustomBoardTsActionwhich caused undefined reference linker error in CI unit test build EFI_EMBED_INI_MSD=FALSEon mega100-512: the embedded TunerStudio INI file was contributing approximately 155KB to the firmware binary; disabling it reduced firmware from 488KB to 271KBEFI_EMBED_INI_MSD=FALSEon all boards (mazduino-lite, mazduino-compact, mazduino-mini6ch, mazduino-mega100): CAN feature additions grew firmware beyond the 768KB linker budget; disabling INI embedding removes the 160KB ramdisk from flash. The TunerStudio INI is published as a GitHub Releases artifact insteadEFI_HPFP=FALSEon all boards: high-pressure fuel pump (GDI) control is not applicable to Mazda port-injec...
Nightly 2026-09-24
Automated nightly firmware build for Mazduino boards.
Breaking Changes
- VVT target tables enlarged from 8x8 to 16x16 on mazduino-compact, mazduino-core, mazduino-lite and mazduino-mini6ch, giving finer RPM and load resolution for cam targeting. This changes the tune layout, so existing tunes are not compatible — re-flash and re-enter the VVT tables after updating. mazduino-mega100 and mazduino-mega100-512 keep the 8x8 tables
- LTFT trim map now has its own axes (
ltftLoadBins/ltftRpmBins) instead of borrowing the VE table axes. Every board gains these two fields, so all boards need a matching firmware and INI; table dimensions are unchanged on existing boards, so tune values still carry over
Added
- mazduino-mini6ch: secondary TunerStudio channel on USART3 (PB10 = TXD3, PB11 = RXD3), for a Bluetooth module such as an HC-05. The firmware previously had no secondary channel at all — the whole thing is behind
#ifdef TS_SECONDARY_UxART_PORTand no Mazduino board defined it, so thebinarySerialpins in TunerStudio did nothing and the ECU never sent a byte to the module. Uses the ChibiOS Serial driver (SD3), the same way the reference f407-discovery board does; the UART driver would needHAL_USE_UART, which halconf.h only enables whenTS_PRIMARY_UxART_PORTis defined. Pin defaults are PB10/PB11 because rusEFI's own defaults, PC10/PC11, are the SD card's SPI3 pins on every Mazduino board. Baud followstunerStudioSerialSpeed(38400 by default), and the channel is started once at boot, so changing that value needs an ECU restart, not just a burn. Applies to mazduino-mini6ch-bigfuel too - BIGFUEL board variants:
mazduino-compact-bigfuel,mazduino-core-bigfuel,mazduino-lite-bigfuelandmazduino-mini6ch-bigfuel. Identical hardware and pinout to the board they are named after, with a 32x32 VE table and 32x32 ignition table (stock boards stay 16x16) for finer resolution on high-output builds. Tunes are not interchangeable between a board and its BIGFUEL variant - BIGFUEL variants trade the engine sniffer for the bigger tables: the persistent config lives in the 64KB CCM RAM and its leftovers feed the Lua heap, so 32x32 tables overflowed CCM by ~1.4KB. Disabling the engine sniffer frees its 5000-byte
WAVE_LOGGING_BUFFERfrom CCM. All other features are unchanged from the base board — the real-time trigger oscilloscope in TunerStudio is the only thing missing - Separate
LTFT_LOAD_COUNT/LTFT_RPM_COUNTsizing for the long-term fuel trim map, independent of the VE table. The learned trim map stays 16x16 even on BIGFUEL boards, saving 6KB of RAM versus following a 32x32 VE table, with no loss of tuning resolution. LTFT trims are now interpolated onto the VE table when applied, so the two grids no longer have to match - DFCO enable switch input (
coastingFuelCutSwitchPin): assign a pin to control DFCO via a physical switch; switch ON allows fuel cut per RPM/TPS/CLT parameters, switch OFF disables fuel cut entirely; leave unassigned for parameter-only control - Rotational Idle manual enable switch input (
rotationalIdleController.switchPin): when switch is ON, rotational idle is forced active regardless of automatic CLT/TPS conditions - Rotational Idle RPM window (
minRpm,maxRpm): configurable RPM range for rotational idle engagement; 0 = no limit; displayed in live data asrotIdleEngineTooSlow/rotIdleEngineTooFast - Fuel consumption output channels: trip-average L/100km and instantaneous L/hr, user-configurable via TunerStudio (Engine > Fuel Consumption); requires VSS, injection enabled, and injector flow set
- Predefined TunerStudio gauges for fuel consumption (
fuelConsumptionL100kmGauge,fuelConsumptionLitersPerHourGauge) under the Fueling category, so L/100km and L/hr are selectable from the right-click gauge picker (rusefi-coregauge_declarations.ini) fuelConsumptionEnabledbit andfuelDensity(g/L, default 750 petrol) added to engine configuration; calculation runs inTripOdometer::onSlowCallback()OUTCH_FuelConsumptionL100kmandOUTCH_FuelConsumptionLitersPerHouradded tooutput_channel_eenum for Lua accesscommon.mk: added$(PROJECT_DIR)/$(META_OUTPUT_ROOT_FOLDER)controllers/generatedtoALLINCso the unit test build finds board-specific generated headers whenMETA_OUTPUT_ROOT_FOLDERpoints outside the firmware tree- Nightly release workflow publishing per-board .bin, .srec, and .hex artifacts as GitHub Releases
- Docker-based build system (
build_boards.sh) using--platform linux/amd64for consistent builds on Apple Silicon and x86-64 - TunerStudio UI flags in
prepend.txtto hide ETB, traction control, boost, rotary, Harley-Davidson, torque model, and other features not applicable to each board variant - mazduino-mega100: STM32F407VGT6 (1MB) board with full feature set, dual pinout support (board04 and UA4C) selectable via TunerStudio board action
- mazduino-mega100-512: STM32F407VET6 (512KB) board with reduced feature set; firmware constrained to 384KB to keep tune storage sector (sector 7, 0x08060000) free
Changed
- CI (build-matrix): config push-back disabled on master (
push=false). Every board job in the matrix runs in parallel and each wouldgit pushregenerated configs to master, so all but the first failed with "fetch first"/non-fast-forward. mazduino commits generated files manually, so the CI push-back is unnecessary - CI (build-matrix): simulator build disabled on master (
sim=false). mazduino ships custom boards only —bundle.mkalready excludes the simulator from custom-board bundles — and the shared f407-discovery generated headers the simulator compiles against lack mazduino's added config fields (fuelDensity, DFCO switch, analog multi-switch), so the simulator cannot compile. This was previously masked because the oldmazduinobranch never triggered the simulator build - TunerStudio menu: Fuel Consumption moved from Advanced to Fuel menu (after DFCO entry)
- TunerStudio menu: Rotational Idle moved from Advanced to Idle menu
- TunerStudio dialog: Fuel Consumption dialog removes duplicate VSS input pin and Injector Flow fields (already configurable in their own dedicated menus)
_compile_unit_tests.shupdated to useboards/mazduino-lite/meta-info.envas the reference board (replacing deleted rootmeta-info.env)generated/controllers/generated/pre-generated headers regenerated to include CAN input/output feature structs and new enum values from the mazduino rusefi fork- mazduino-mega100 and mega100-512: status LED at PB7 enabled (
getCommsLedPin()andLED_CRITICAL_ERROR_BRAIN_PINboth assigned to PB7) - mazduino-compact: second idle solenoid field corrected to
secondSolenoidPin - mazduino-lite: knock disabled by leaving
EFI_SOFTWARE_KNOCKundefined (not set to FALSE) so#ifdefguards evaluate correctly - mazduino-mini6ch:
ts_show_traction_control trueenabled as ETB-capable board is the only variant that supports traction control - mazduino-mini6ch and mazduino-core: stepper idle valve exposed in TunerStudio — added
panel = idleStepperto theidleHwType(Idle Valve Hardware) dialog and theUse Stepperenable toggle (useStepperIdle) to theidlehwdialog in the generated INI, matching the official rusEFI layout; the Stepper option now appears alongside Solenoid with a working enable/disable control. No firmware rebuild required since the stepper config fields already exist at fixed offsets. Intentionally left hidden on mazduino-lite and mazduino-compact (hardware does not support stepper idle) - Dockerfile updated to handle both
ports.ubuntu.com(ARM64) andarchive.ubuntu.com(x86-64) Ubuntu mirror replacements for EOL Mantic release
Removed
- Root
meta-info.env(SHORT_BOARD_NAME=mazduino): generic board identifier removed; all builds now reference a named board variant
Fixed
- mazduino-mini6ch: firmware now runs on both STM32F407 (earlier boards) and STM32F427 (current boards). It was built as F427 only, which links RAM as 192KB and places the heap and thread stacks in SRAM3 — memory the F407 does not have — so an F407 board hard-faulted at boot and USB never enumerated. Built for the F407 again; on an F427 the chip is detected at runtime and its extra 64KB SRAM3 goes to the Lua heap. Applies to mazduino-mini6ch-bigfuel too
- mazduino-lite: onboard LPS25 barometric sensor was never configured, so
initBaro()had no pins to talk to and barometric correction silently fell back to a fixed value. Setlps25BaroSensorScl/Sdato PB10/PB11, matching the schematic (BARO_SCL/BARO_SDA) and mazduino-core. Existing tunes keep their stored values, so this takes effect on a config reset or a fresh tune - mazduino-mini6ch: PD14 pin conflict between the stepper driver enable (
stepperEnablePin, MCU-ENBL → DRV8825 EN via JP6 manual-enable jumper) and the critical-error LED. mini6ch never overrodeLED_CRITICAL_ERROR_BRAIN_PIN, so it inherited the rusEFI default of PD14 and claimed the pin before the stepper could use it. Moved the critical-error LED to the dedicated onboard PB4 LED (mini6ch has 3 LEDs — PB4, PB6, PB7 — with PB7 reserved for comms), freeing PD14 for stepper enable. Requires a firmware rebuild - Root
board_configuration.cpp: removed forward declaration ofcustomBoardTsActionwhich caused undefined reference linker error in CI unit test build EFI_EMBED_INI_MSD=FALSEon mega100-512: the embedded TunerStudio INI file was contributing approximately 155KB to the firmware binary; disabling it reduced firmware from 488KB to 271KBEFI_EMBED_INI_MSD=FALSEon all boards (mazduino-lite, mazduino-compact, mazduino-mini6ch, mazduino-mega100): CAN feature additions grew firmware beyond the 768KB linker budget; disabling INI embedding removes the 160KB ramdisk from flash. The TunerStudio INI is published as a GitHub Releases artifact insteadEFI_HPFP=FALSEon all boards: high-pressure fuel pump (GDI) control is not applicable to Mazda port-injec...
Nightly 2026-09-23
Automated nightly firmware build for Mazduino boards.
Breaking Changes
- VVT target tables enlarged from 8x8 to 16x16 on mazduino-compact, mazduino-core, mazduino-lite and mazduino-mini6ch, giving finer RPM and load resolution for cam targeting. This changes the tune layout, so existing tunes are not compatible — re-flash and re-enter the VVT tables after updating. mazduino-mega100 and mazduino-mega100-512 keep the 8x8 tables
- LTFT trim map now has its own axes (
ltftLoadBins/ltftRpmBins) instead of borrowing the VE table axes. Every board gains these two fields, so all boards need a matching firmware and INI; table dimensions are unchanged on existing boards, so tune values still carry over
Added
- BIGFUEL board variants:
mazduino-compact-bigfuel,mazduino-core-bigfuel,mazduino-lite-bigfuelandmazduino-mini6ch-bigfuel. Identical hardware and pinout to the board they are named after, with a 32x32 VE table and 32x32 ignition table (stock boards stay 16x16) for finer resolution on high-output builds. Tunes are not interchangeable between a board and its BIGFUEL variant - BIGFUEL variants trade the engine sniffer for the bigger tables: the persistent config lives in the 64KB CCM RAM and its leftovers feed the Lua heap, so 32x32 tables overflowed CCM by ~1.4KB. Disabling the engine sniffer frees its 5000-byte
WAVE_LOGGING_BUFFERfrom CCM. All other features are unchanged from the base board — the real-time trigger oscilloscope in TunerStudio is the only thing missing - Separate
LTFT_LOAD_COUNT/LTFT_RPM_COUNTsizing for the long-term fuel trim map, independent of the VE table. The learned trim map stays 16x16 even on BIGFUEL boards, saving 6KB of RAM versus following a 32x32 VE table, with no loss of tuning resolution. LTFT trims are now interpolated onto the VE table when applied, so the two grids no longer have to match - DFCO enable switch input (
coastingFuelCutSwitchPin): assign a pin to control DFCO via a physical switch; switch ON allows fuel cut per RPM/TPS/CLT parameters, switch OFF disables fuel cut entirely; leave unassigned for parameter-only control - Rotational Idle manual enable switch input (
rotationalIdleController.switchPin): when switch is ON, rotational idle is forced active regardless of automatic CLT/TPS conditions - Rotational Idle RPM window (
minRpm,maxRpm): configurable RPM range for rotational idle engagement; 0 = no limit; displayed in live data asrotIdleEngineTooSlow/rotIdleEngineTooFast - Fuel consumption output channels: trip-average L/100km and instantaneous L/hr, user-configurable via TunerStudio (Engine > Fuel Consumption); requires VSS, injection enabled, and injector flow set
- Predefined TunerStudio gauges for fuel consumption (
fuelConsumptionL100kmGauge,fuelConsumptionLitersPerHourGauge) under the Fueling category, so L/100km and L/hr are selectable from the right-click gauge picker (rusefi-coregauge_declarations.ini) fuelConsumptionEnabledbit andfuelDensity(g/L, default 750 petrol) added to engine configuration; calculation runs inTripOdometer::onSlowCallback()OUTCH_FuelConsumptionL100kmandOUTCH_FuelConsumptionLitersPerHouradded tooutput_channel_eenum for Lua accesscommon.mk: added$(PROJECT_DIR)/$(META_OUTPUT_ROOT_FOLDER)controllers/generatedtoALLINCso the unit test build finds board-specific generated headers whenMETA_OUTPUT_ROOT_FOLDERpoints outside the firmware tree- Nightly release workflow publishing per-board .bin, .srec, and .hex artifacts as GitHub Releases
- Docker-based build system (
build_boards.sh) using--platform linux/amd64for consistent builds on Apple Silicon and x86-64 - TunerStudio UI flags in
prepend.txtto hide ETB, traction control, boost, rotary, Harley-Davidson, torque model, and other features not applicable to each board variant - mazduino-mega100: STM32F407VGT6 (1MB) board with full feature set, dual pinout support (board04 and UA4C) selectable via TunerStudio board action
- mazduino-mega100-512: STM32F407VET6 (512KB) board with reduced feature set; firmware constrained to 384KB to keep tune storage sector (sector 7, 0x08060000) free
Changed
- CI (build-matrix): config push-back disabled on master (
push=false). Every board job in the matrix runs in parallel and each wouldgit pushregenerated configs to master, so all but the first failed with "fetch first"/non-fast-forward. mazduino commits generated files manually, so the CI push-back is unnecessary - CI (build-matrix): simulator build disabled on master (
sim=false). mazduino ships custom boards only —bundle.mkalready excludes the simulator from custom-board bundles — and the shared f407-discovery generated headers the simulator compiles against lack mazduino's added config fields (fuelDensity, DFCO switch, analog multi-switch), so the simulator cannot compile. This was previously masked because the oldmazduinobranch never triggered the simulator build - TunerStudio menu: Fuel Consumption moved from Advanced to Fuel menu (after DFCO entry)
- TunerStudio menu: Rotational Idle moved from Advanced to Idle menu
- TunerStudio dialog: Fuel Consumption dialog removes duplicate VSS input pin and Injector Flow fields (already configurable in their own dedicated menus)
_compile_unit_tests.shupdated to useboards/mazduino-lite/meta-info.envas the reference board (replacing deleted rootmeta-info.env)generated/controllers/generated/pre-generated headers regenerated to include CAN input/output feature structs and new enum values from the mazduino rusefi fork- mazduino-mega100 and mega100-512: status LED at PB7 enabled (
getCommsLedPin()andLED_CRITICAL_ERROR_BRAIN_PINboth assigned to PB7) - mazduino-compact: second idle solenoid field corrected to
secondSolenoidPin - mazduino-lite: knock disabled by leaving
EFI_SOFTWARE_KNOCKundefined (not set to FALSE) so#ifdefguards evaluate correctly - mazduino-mini6ch:
ts_show_traction_control trueenabled as ETB-capable board is the only variant that supports traction control - mazduino-mini6ch and mazduino-core: stepper idle valve exposed in TunerStudio — added
panel = idleStepperto theidleHwType(Idle Valve Hardware) dialog and theUse Stepperenable toggle (useStepperIdle) to theidlehwdialog in the generated INI, matching the official rusEFI layout; the Stepper option now appears alongside Solenoid with a working enable/disable control. No firmware rebuild required since the stepper config fields already exist at fixed offsets. Intentionally left hidden on mazduino-lite and mazduino-compact (hardware does not support stepper idle) - Dockerfile updated to handle both
ports.ubuntu.com(ARM64) andarchive.ubuntu.com(x86-64) Ubuntu mirror replacements for EOL Mantic release
Removed
- Root
meta-info.env(SHORT_BOARD_NAME=mazduino): generic board identifier removed; all builds now reference a named board variant
Fixed
- mazduino-mini6ch: firmware now runs on both STM32F407 (earlier boards) and STM32F427 (current boards). It was built as F427 only, which links RAM as 192KB and places the heap and thread stacks in SRAM3 — memory the F407 does not have — so an F407 board hard-faulted at boot and USB never enumerated. Built for the F407 again; on an F427 the chip is detected at runtime and its extra 64KB SRAM3 goes to the Lua heap. Applies to mazduino-mini6ch-bigfuel too
- mazduino-lite: onboard LPS25 barometric sensor was never configured, so
initBaro()had no pins to talk to and barometric correction silently fell back to a fixed value. Setlps25BaroSensorScl/Sdato PB10/PB11, matching the schematic (BARO_SCL/BARO_SDA) and mazduino-core. Existing tunes keep their stored values, so this takes effect on a config reset or a fresh tune - mazduino-mini6ch: PD14 pin conflict between the stepper driver enable (
stepperEnablePin, MCU-ENBL → DRV8825 EN via JP6 manual-enable jumper) and the critical-error LED. mini6ch never overrodeLED_CRITICAL_ERROR_BRAIN_PIN, so it inherited the rusEFI default of PD14 and claimed the pin before the stepper could use it. Moved the critical-error LED to the dedicated onboard PB4 LED (mini6ch has 3 LEDs — PB4, PB6, PB7 — with PB7 reserved for comms), freeing PD14 for stepper enable. Requires a firmware rebuild - Root
board_configuration.cpp: removed forward declaration ofcustomBoardTsActionwhich caused undefined reference linker error in CI unit test build EFI_EMBED_INI_MSD=FALSEon mega100-512: the embedded TunerStudio INI file was contributing approximately 155KB to the firmware binary; disabling it reduced firmware from 488KB to 271KBEFI_EMBED_INI_MSD=FALSEon all boards (mazduino-lite, mazduino-compact, mazduino-mini6ch, mazduino-mega100): CAN feature additions grew firmware beyond the 768KB linker budget; disabling INI embedding removes the 160KB ramdisk from flash. The TunerStudio INI is published as a GitHub Releases artifact insteadEFI_HPFP=FALSEon all boards: high-pressure fuel pump (GDI) control is not applicable to Mazda port-injection hardware; disabling it removes unused codeboard_unit_tests.mk: addedBOARDINCpointing togenerated/controllers/generated/so the unit test build can findrusefi_generated_mazduino.h(previously the compiler could not find this file because the unit test Makefile does not includerusefi.mkwhich is what adds that path for firmware builds)
Boards included
- mazduino-compact (STM32F407VGT6, knock enabled)
- mazduino-lite (STM32F407VGT6, no knock)
- mazduino-mini6ch (STM32F427VGT6, ETB + traction control)
- mazduino-core (STM32F427ZGT6, Proteus F4 pinout, dual ETB + traction control)
- mazduino-mega100 (STM32F407VGT6, 1MB, full features, USB + CAN)
- mazduino-mega100-512 (STM32F407VET6, 512KB, reduced feature set)
Bundle contents
Each .zip contains:
rusefi_console.jar- rusEFI desktop application (requires Java 11+)rusefi_<board>.ini- TunerStudio definition fi...
Nightly 2026-09-22
Automated nightly firmware build for Mazduino boards.
Breaking Changes
- VVT target tables enlarged from 8x8 to 16x16 on mazduino-compact, mazduino-core, mazduino-lite and mazduino-mini6ch, giving finer RPM and load resolution for cam targeting. This changes the tune layout, so existing tunes are not compatible — re-flash and re-enter the VVT tables after updating. mazduino-mega100 and mazduino-mega100-512 keep the 8x8 tables
- LTFT trim map now has its own axes (
ltftLoadBins/ltftRpmBins) instead of borrowing the VE table axes. Every board gains these two fields, so all boards need a matching firmware and INI; table dimensions are unchanged on existing boards, so tune values still carry over
Added
- BIGFUEL board variants:
mazduino-compact-bigfuel,mazduino-core-bigfuel,mazduino-lite-bigfuelandmazduino-mini6ch-bigfuel. Identical hardware and pinout to the board they are named after, with a 32x32 VE table and 32x32 ignition table (stock boards stay 16x16) for finer resolution on high-output builds. Tunes are not interchangeable between a board and its BIGFUEL variant - BIGFUEL variants trade the engine sniffer for the bigger tables: the persistent config lives in the 64KB CCM RAM and its leftovers feed the Lua heap, so 32x32 tables overflowed CCM by ~1.4KB. Disabling the engine sniffer frees its 5000-byte
WAVE_LOGGING_BUFFERfrom CCM. All other features are unchanged from the base board — the real-time trigger oscilloscope in TunerStudio is the only thing missing - Separate
LTFT_LOAD_COUNT/LTFT_RPM_COUNTsizing for the long-term fuel trim map, independent of the VE table. The learned trim map stays 16x16 even on BIGFUEL boards, saving 6KB of RAM versus following a 32x32 VE table, with no loss of tuning resolution. LTFT trims are now interpolated onto the VE table when applied, so the two grids no longer have to match - DFCO enable switch input (
coastingFuelCutSwitchPin): assign a pin to control DFCO via a physical switch; switch ON allows fuel cut per RPM/TPS/CLT parameters, switch OFF disables fuel cut entirely; leave unassigned for parameter-only control - Rotational Idle manual enable switch input (
rotationalIdleController.switchPin): when switch is ON, rotational idle is forced active regardless of automatic CLT/TPS conditions - Rotational Idle RPM window (
minRpm,maxRpm): configurable RPM range for rotational idle engagement; 0 = no limit; displayed in live data asrotIdleEngineTooSlow/rotIdleEngineTooFast - Fuel consumption output channels: trip-average L/100km and instantaneous L/hr, user-configurable via TunerStudio (Engine > Fuel Consumption); requires VSS, injection enabled, and injector flow set
- Predefined TunerStudio gauges for fuel consumption (
fuelConsumptionL100kmGauge,fuelConsumptionLitersPerHourGauge) under the Fueling category, so L/100km and L/hr are selectable from the right-click gauge picker (rusefi-coregauge_declarations.ini) fuelConsumptionEnabledbit andfuelDensity(g/L, default 750 petrol) added to engine configuration; calculation runs inTripOdometer::onSlowCallback()OUTCH_FuelConsumptionL100kmandOUTCH_FuelConsumptionLitersPerHouradded tooutput_channel_eenum for Lua accesscommon.mk: added$(PROJECT_DIR)/$(META_OUTPUT_ROOT_FOLDER)controllers/generatedtoALLINCso the unit test build finds board-specific generated headers whenMETA_OUTPUT_ROOT_FOLDERpoints outside the firmware tree- Nightly release workflow publishing per-board .bin, .srec, and .hex artifacts as GitHub Releases
- Docker-based build system (
build_boards.sh) using--platform linux/amd64for consistent builds on Apple Silicon and x86-64 - TunerStudio UI flags in
prepend.txtto hide ETB, traction control, boost, rotary, Harley-Davidson, torque model, and other features not applicable to each board variant - mazduino-mega100: STM32F407VGT6 (1MB) board with full feature set, dual pinout support (board04 and UA4C) selectable via TunerStudio board action
- mazduino-mega100-512: STM32F407VET6 (512KB) board with reduced feature set; firmware constrained to 384KB to keep tune storage sector (sector 7, 0x08060000) free
Changed
- CI (build-matrix): config push-back disabled on master (
push=false). Every board job in the matrix runs in parallel and each wouldgit pushregenerated configs to master, so all but the first failed with "fetch first"/non-fast-forward. mazduino commits generated files manually, so the CI push-back is unnecessary - CI (build-matrix): simulator build disabled on master (
sim=false). mazduino ships custom boards only —bundle.mkalready excludes the simulator from custom-board bundles — and the shared f407-discovery generated headers the simulator compiles against lack mazduino's added config fields (fuelDensity, DFCO switch, analog multi-switch), so the simulator cannot compile. This was previously masked because the oldmazduinobranch never triggered the simulator build - TunerStudio menu: Fuel Consumption moved from Advanced to Fuel menu (after DFCO entry)
- TunerStudio menu: Rotational Idle moved from Advanced to Idle menu
- TunerStudio dialog: Fuel Consumption dialog removes duplicate VSS input pin and Injector Flow fields (already configurable in their own dedicated menus)
_compile_unit_tests.shupdated to useboards/mazduino-lite/meta-info.envas the reference board (replacing deleted rootmeta-info.env)generated/controllers/generated/pre-generated headers regenerated to include CAN input/output feature structs and new enum values from the mazduino rusefi fork- mazduino-mega100 and mega100-512: status LED at PB7 enabled (
getCommsLedPin()andLED_CRITICAL_ERROR_BRAIN_PINboth assigned to PB7) - mazduino-compact: second idle solenoid field corrected to
secondSolenoidPin - mazduino-lite: knock disabled by leaving
EFI_SOFTWARE_KNOCKundefined (not set to FALSE) so#ifdefguards evaluate correctly - mazduino-mini6ch:
ts_show_traction_control trueenabled as ETB-capable board is the only variant that supports traction control - mazduino-mini6ch and mazduino-core: stepper idle valve exposed in TunerStudio — added
panel = idleStepperto theidleHwType(Idle Valve Hardware) dialog and theUse Stepperenable toggle (useStepperIdle) to theidlehwdialog in the generated INI, matching the official rusEFI layout; the Stepper option now appears alongside Solenoid with a working enable/disable control. No firmware rebuild required since the stepper config fields already exist at fixed offsets. Intentionally left hidden on mazduino-lite and mazduino-compact (hardware does not support stepper idle) - Dockerfile updated to handle both
ports.ubuntu.com(ARM64) andarchive.ubuntu.com(x86-64) Ubuntu mirror replacements for EOL Mantic release
Removed
- Root
meta-info.env(SHORT_BOARD_NAME=mazduino): generic board identifier removed; all builds now reference a named board variant
Fixed
- mazduino-mini6ch: firmware now runs on both STM32F407 (earlier boards) and STM32F427 (current boards). It was built as F427 only, which links RAM as 192KB and places the heap and thread stacks in SRAM3 — memory the F407 does not have — so an F407 board hard-faulted at boot and USB never enumerated. Built for the F407 again; on an F427 the chip is detected at runtime and its extra 64KB SRAM3 goes to the Lua heap. Applies to mazduino-mini6ch-bigfuel too
- mazduino-lite: onboard LPS25 barometric sensor was never configured, so
initBaro()had no pins to talk to and barometric correction silently fell back to a fixed value. Setlps25BaroSensorScl/Sdato PB10/PB11, matching the schematic (BARO_SCL/BARO_SDA) and mazduino-core. Existing tunes keep their stored values, so this takes effect on a config reset or a fresh tune - mazduino-mini6ch: PD14 pin conflict between the stepper driver enable (
stepperEnablePin, MCU-ENBL → DRV8825 EN via JP6 manual-enable jumper) and the critical-error LED. mini6ch never overrodeLED_CRITICAL_ERROR_BRAIN_PIN, so it inherited the rusEFI default of PD14 and claimed the pin before the stepper could use it. Moved the critical-error LED to the dedicated onboard PB4 LED (mini6ch has 3 LEDs — PB4, PB6, PB7 — with PB7 reserved for comms), freeing PD14 for stepper enable. Requires a firmware rebuild - Root
board_configuration.cpp: removed forward declaration ofcustomBoardTsActionwhich caused undefined reference linker error in CI unit test build EFI_EMBED_INI_MSD=FALSEon mega100-512: the embedded TunerStudio INI file was contributing approximately 155KB to the firmware binary; disabling it reduced firmware from 488KB to 271KBEFI_EMBED_INI_MSD=FALSEon all boards (mazduino-lite, mazduino-compact, mazduino-mini6ch, mazduino-mega100): CAN feature additions grew firmware beyond the 768KB linker budget; disabling INI embedding removes the 160KB ramdisk from flash. The TunerStudio INI is published as a GitHub Releases artifact insteadEFI_HPFP=FALSEon all boards: high-pressure fuel pump (GDI) control is not applicable to Mazda port-injection hardware; disabling it removes unused codeboard_unit_tests.mk: addedBOARDINCpointing togenerated/controllers/generated/so the unit test build can findrusefi_generated_mazduino.h(previously the compiler could not find this file because the unit test Makefile does not includerusefi.mkwhich is what adds that path for firmware builds)
Boards included
- mazduino-compact (STM32F407VGT6, knock enabled)
- mazduino-lite (STM32F407VGT6, no knock)
- mazduino-mini6ch (STM32F427VGT6, ETB + traction control)
- mazduino-core (STM32F427ZGT6, Proteus F4 pinout, dual ETB + traction control)
- mazduino-mega100 (STM32F407VGT6, 1MB, full features, USB + CAN)
- mazduino-mega100-512 (STM32F407VET6, 512KB, reduced feature set)
Bundle contents
Each .zip contains:
rusefi_console.jar- rusEFI desktop application (requires Java 11+)rusefi_<board>.ini- TunerStudio definition fi...
Nightly 2026-09-21
Automated nightly firmware build for Mazduino boards.
Breaking Changes
- VVT target tables enlarged from 8x8 to 16x16 on mazduino-compact, mazduino-core, mazduino-lite and mazduino-mini6ch, giving finer RPM and load resolution for cam targeting. This changes the tune layout, so existing tunes are not compatible — re-flash and re-enter the VVT tables after updating. mazduino-mega100 and mazduino-mega100-512 keep the 8x8 tables
- LTFT trim map now has its own axes (
ltftLoadBins/ltftRpmBins) instead of borrowing the VE table axes. Every board gains these two fields, so all boards need a matching firmware and INI; table dimensions are unchanged on existing boards, so tune values still carry over
Added
- BIGFUEL board variants:
mazduino-compact-bigfuel,mazduino-core-bigfuel,mazduino-lite-bigfuelandmazduino-mini6ch-bigfuel. Identical hardware and pinout to the board they are named after, with a 32x32 VE table and 32x32 ignition table (stock boards stay 16x16) for finer resolution on high-output builds. Tunes are not interchangeable between a board and its BIGFUEL variant - BIGFUEL variants trade the engine sniffer for the bigger tables: the persistent config lives in the 64KB CCM RAM and its leftovers feed the Lua heap, so 32x32 tables overflowed CCM by ~1.4KB. Disabling the engine sniffer frees its 5000-byte
WAVE_LOGGING_BUFFERfrom CCM. All other features are unchanged from the base board — the real-time trigger oscilloscope in TunerStudio is the only thing missing - Separate
LTFT_LOAD_COUNT/LTFT_RPM_COUNTsizing for the long-term fuel trim map, independent of the VE table. The learned trim map stays 16x16 even on BIGFUEL boards, saving 6KB of RAM versus following a 32x32 VE table, with no loss of tuning resolution. LTFT trims are now interpolated onto the VE table when applied, so the two grids no longer have to match - DFCO enable switch input (
coastingFuelCutSwitchPin): assign a pin to control DFCO via a physical switch; switch ON allows fuel cut per RPM/TPS/CLT parameters, switch OFF disables fuel cut entirely; leave unassigned for parameter-only control - Rotational Idle manual enable switch input (
rotationalIdleController.switchPin): when switch is ON, rotational idle is forced active regardless of automatic CLT/TPS conditions - Rotational Idle RPM window (
minRpm,maxRpm): configurable RPM range for rotational idle engagement; 0 = no limit; displayed in live data asrotIdleEngineTooSlow/rotIdleEngineTooFast - Fuel consumption output channels: trip-average L/100km and instantaneous L/hr, user-configurable via TunerStudio (Engine > Fuel Consumption); requires VSS, injection enabled, and injector flow set
- Predefined TunerStudio gauges for fuel consumption (
fuelConsumptionL100kmGauge,fuelConsumptionLitersPerHourGauge) under the Fueling category, so L/100km and L/hr are selectable from the right-click gauge picker (rusefi-coregauge_declarations.ini) fuelConsumptionEnabledbit andfuelDensity(g/L, default 750 petrol) added to engine configuration; calculation runs inTripOdometer::onSlowCallback()OUTCH_FuelConsumptionL100kmandOUTCH_FuelConsumptionLitersPerHouradded tooutput_channel_eenum for Lua accesscommon.mk: added$(PROJECT_DIR)/$(META_OUTPUT_ROOT_FOLDER)controllers/generatedtoALLINCso the unit test build finds board-specific generated headers whenMETA_OUTPUT_ROOT_FOLDERpoints outside the firmware tree- Nightly release workflow publishing per-board .bin, .srec, and .hex artifacts as GitHub Releases
- Docker-based build system (
build_boards.sh) using--platform linux/amd64for consistent builds on Apple Silicon and x86-64 - TunerStudio UI flags in
prepend.txtto hide ETB, traction control, boost, rotary, Harley-Davidson, torque model, and other features not applicable to each board variant - mazduino-mega100: STM32F407VGT6 (1MB) board with full feature set, dual pinout support (board04 and UA4C) selectable via TunerStudio board action
- mazduino-mega100-512: STM32F407VET6 (512KB) board with reduced feature set; firmware constrained to 384KB to keep tune storage sector (sector 7, 0x08060000) free
Changed
- CI (build-matrix): config push-back disabled on master (
push=false). Every board job in the matrix runs in parallel and each wouldgit pushregenerated configs to master, so all but the first failed with "fetch first"/non-fast-forward. mazduino commits generated files manually, so the CI push-back is unnecessary - CI (build-matrix): simulator build disabled on master (
sim=false). mazduino ships custom boards only —bundle.mkalready excludes the simulator from custom-board bundles — and the shared f407-discovery generated headers the simulator compiles against lack mazduino's added config fields (fuelDensity, DFCO switch, analog multi-switch), so the simulator cannot compile. This was previously masked because the oldmazduinobranch never triggered the simulator build - TunerStudio menu: Fuel Consumption moved from Advanced to Fuel menu (after DFCO entry)
- TunerStudio menu: Rotational Idle moved from Advanced to Idle menu
- TunerStudio dialog: Fuel Consumption dialog removes duplicate VSS input pin and Injector Flow fields (already configurable in their own dedicated menus)
_compile_unit_tests.shupdated to useboards/mazduino-lite/meta-info.envas the reference board (replacing deleted rootmeta-info.env)generated/controllers/generated/pre-generated headers regenerated to include CAN input/output feature structs and new enum values from the mazduino rusefi fork- mazduino-mega100 and mega100-512: status LED at PB7 enabled (
getCommsLedPin()andLED_CRITICAL_ERROR_BRAIN_PINboth assigned to PB7) - mazduino-compact: second idle solenoid field corrected to
secondSolenoidPin - mazduino-lite: knock disabled by leaving
EFI_SOFTWARE_KNOCKundefined (not set to FALSE) so#ifdefguards evaluate correctly - mazduino-mini6ch:
ts_show_traction_control trueenabled as ETB-capable board is the only variant that supports traction control - mazduino-mini6ch and mazduino-core: stepper idle valve exposed in TunerStudio — added
panel = idleStepperto theidleHwType(Idle Valve Hardware) dialog and theUse Stepperenable toggle (useStepperIdle) to theidlehwdialog in the generated INI, matching the official rusEFI layout; the Stepper option now appears alongside Solenoid with a working enable/disable control. No firmware rebuild required since the stepper config fields already exist at fixed offsets. Intentionally left hidden on mazduino-lite and mazduino-compact (hardware does not support stepper idle) - Dockerfile updated to handle both
ports.ubuntu.com(ARM64) andarchive.ubuntu.com(x86-64) Ubuntu mirror replacements for EOL Mantic release
Removed
- Root
meta-info.env(SHORT_BOARD_NAME=mazduino): generic board identifier removed; all builds now reference a named board variant
Fixed
- mazduino-lite: onboard LPS25 barometric sensor was never configured, so
initBaro()had no pins to talk to and barometric correction silently fell back to a fixed value. Setlps25BaroSensorScl/Sdato PB10/PB11, matching the schematic (BARO_SCL/BARO_SDA) and mazduino-core. Existing tunes keep their stored values, so this takes effect on a config reset or a fresh tune - mazduino-mini6ch: PD14 pin conflict between the stepper driver enable (
stepperEnablePin, MCU-ENBL → DRV8825 EN via JP6 manual-enable jumper) and the critical-error LED. mini6ch never overrodeLED_CRITICAL_ERROR_BRAIN_PIN, so it inherited the rusEFI default of PD14 and claimed the pin before the stepper could use it. Moved the critical-error LED to the dedicated onboard PB4 LED (mini6ch has 3 LEDs — PB4, PB6, PB7 — with PB7 reserved for comms), freeing PD14 for stepper enable. Requires a firmware rebuild - Root
board_configuration.cpp: removed forward declaration ofcustomBoardTsActionwhich caused undefined reference linker error in CI unit test build EFI_EMBED_INI_MSD=FALSEon mega100-512: the embedded TunerStudio INI file was contributing approximately 155KB to the firmware binary; disabling it reduced firmware from 488KB to 271KBEFI_EMBED_INI_MSD=FALSEon all boards (mazduino-lite, mazduino-compact, mazduino-mini6ch, mazduino-mega100): CAN feature additions grew firmware beyond the 768KB linker budget; disabling INI embedding removes the 160KB ramdisk from flash. The TunerStudio INI is published as a GitHub Releases artifact insteadEFI_HPFP=FALSEon all boards: high-pressure fuel pump (GDI) control is not applicable to Mazda port-injection hardware; disabling it removes unused codeboard_unit_tests.mk: addedBOARDINCpointing togenerated/controllers/generated/so the unit test build can findrusefi_generated_mazduino.h(previously the compiler could not find this file because the unit test Makefile does not includerusefi.mkwhich is what adds that path for firmware builds)
Boards included
- mazduino-compact (STM32F407VGT6, knock enabled)
- mazduino-lite (STM32F407VGT6, no knock)
- mazduino-mini6ch (STM32F427VGT6, ETB + traction control)
- mazduino-core (STM32F427ZGT6, Proteus F4 pinout, dual ETB + traction control)
- mazduino-mega100 (STM32F407VGT6, 1MB, full features, USB + CAN)
- mazduino-mega100-512 (STM32F407VET6, 512KB, reduced feature set)
Bundle contents
Each .zip contains:
rusefi_console.jar- rusEFI desktop application (requires Java 11+)rusefi_<board>.ini- TunerStudio definition filerusefi.bin- firmware binary (flash via ST-Link or DFU)- Flash scripts (
flash_dfu.sh,flash_stlink.sh)
Flashing
- ST-Link / SWD: run
flash_stlink.shor use STM32CubeProgrammer withrusefi.bin - USB DFU: hold BOOT0, then run
flash_dfu.sh
TunerStudio
Launch rusefi_console.jar or open TunerStudio and point it to the .ini file for your board.