diff --git a/firmware/config/boards/subaru_eg33/board_configuration.cpp b/firmware/config/boards/subaru_eg33/board_configuration.cpp index 3aba8b6dbd..8ad849b786 100644 --- a/firmware/config/boards/subaru_eg33/board_configuration.cpp +++ b/firmware/config/boards/subaru_eg33/board_configuration.cpp @@ -89,16 +89,18 @@ void setBoardDefaultConfiguration(void) { engineConfiguration->injectionPins[4 - 1] = MC33810_1_OUT_1; engineConfiguration->injectionPins[5 - 1] = MC33810_0_OUT_2; engineConfiguration->injectionPins[6 - 1] = MC33810_1_OUT_2; + /* Additional, not used for EG33 */ engineConfiguration->injectionPins[7 - 1] = MC33810_0_OUT_3; engineConfiguration->injectionPins[8 - 1] = MC33810_1_OUT_3; /* Ignition */ - engineConfiguration->ignitionPins[1 - 1] = MC33810_0_GD_0; + engineConfiguration->ignitionPins[1 - 1] = MC33810_1_GD_3; engineConfiguration->ignitionPins[2 - 1] = MC33810_1_GD_2; engineConfiguration->ignitionPins[3 - 1] = MC33810_0_GD_1; - engineConfiguration->ignitionPins[4 - 1] = MC33810_1_GD_3; + engineConfiguration->ignitionPins[4 - 1] = MC33810_0_GD_0; engineConfiguration->ignitionPins[5 - 1] = MC33810_0_GD_3; engineConfiguration->ignitionPins[6 - 1] = MC33810_1_GD_1; + /* Additional, not used for EG33 */ engineConfiguration->ignitionPins[7 - 1] = MC33810_0_GD_2; engineConfiguration->ignitionPins[8 - 1] = MC33810_1_GD_0; //engineConfiguration->ignitionPinMode = OM_INVERTED; @@ -139,9 +141,15 @@ void setBoardDefaultConfiguration(void) { engineConfiguration->fuelPumpPin = TLE6240_PIN_5; engineConfiguration->fuelPumpPinMode = OM_DEFAULT; - /* self shutdown? */ - engineConfiguration->mainRelayPin = GPIOH_7; - engineConfiguration->mainRelayPinMode = OM_DEFAULT; + /* Self shutdown ouput: + * High level on this pin will keep Main Relay enabled in any position of ignition key + * This cause inability to stop engine by key. + * From other side main relay is powered from key position "IGN" OR this output (through diodes) + * So ECU does not need to drive this signal. + * The only puprose of this output is to keep ECU powered to finish some stuff before power off itself + * To support this we need to sense ING input from key switch */ + //engineConfiguration->mainRelayPin = GPIOH_7; + //engineConfiguration->mainRelayPinMode = OM_DEFAULT; /* spi driven - TLE6240 - OUT1, OUT2 */ engineConfiguration->fanPin = TLE6240_PIN_1; diff --git a/firmware/config/boards/subaru_eg33/connectors/D-B62.yaml b/firmware/config/boards/subaru_eg33/connectors/D-B62.yaml index 4a378feb5b..84eb10d840 100644 --- a/firmware/config/boards/subaru_eg33/connectors/D-B62.yaml +++ b/firmware/config/boards/subaru_eg33/connectors/D-B62.yaml @@ -47,29 +47,29 @@ pins: - pin: 7 id: MC33810_0_GD_0 class: outputs - function: Ignition 1 - ts_name: D07 - Ignition 1 + function: Ignition 4 + ts_name: D07 - Ignition Cyl 4 type: ign - pin: 8 id: MC33810_1_GD_2 class: outputs function: Ignition 2 - ts_name: D08 - Ignition 2 + ts_name: D08 - Ignition Cyl 2 type: ign - pin: 9 id: MC33810_0_GD_1 class: outputs function: Ignition 3 - ts_name: D09 - Ignition 3 + ts_name: D09 - Ignition Cyl 3 type: ign - pin: 10 id: MC33810_1_GD_3 class: outputs - function: Ignition 4 - ts_name: D10 - Ignition 4 + function: Ignition 1 + ts_name: D10 - Ignition Cyl 1 type: ign - pin: 11 @@ -105,7 +105,7 @@ pins: id: MC33810_1_GD_1 class: outputs function: Ignition 6 - ts_name: D10 - Ignition 6 + ts_name: D16 - Ignition Cyl 6 type: ign - pin: 17 @@ -140,7 +140,7 @@ pins: id: MC33810_0_GD_3 class: outputs function: Ignition 5 - ts_name: D21 - Ignition 5 + ts_name: D21 - Ignition Cyl 5 type: ign - pin: 22 diff --git a/firmware/config/boards/subaru_eg33/make.sh b/firmware/config/boards/subaru_eg33/make.sh index 632778f674..a511cc1253 100755 --- a/firmware/config/boards/subaru_eg33/make.sh +++ b/firmware/config/boards/subaru_eg33/make.sh @@ -8,7 +8,4 @@ export DEFAULT_ENGINE_TYPE="-DDEFAULT_ENGINE_TYPE=SUBARUEG33_DEFAULTS" #export DEBUG_LEVEL_OPT="-O0" #export USE_BOOTLOADER=yes -#bash config/boards/common_make.sh - -#CROSS_COMPILE=../../toolchain/gcc-arm-none-eabi-8-2018-q4-major/bin/arm-none-eabi- make $* -CROSS_COMPILE=../../toolchain/gcc-arm-none-eabi-9-2019-q4-major/bin/arm-none-eabi- make $* \ No newline at end of file +bash ../common_make.sh diff --git a/firmware/controllers/trigger/decoders/trigger_subaru.cpp b/firmware/controllers/trigger/decoders/trigger_subaru.cpp index aad2cae23a..ded24e66fb 100644 --- a/firmware/controllers/trigger/decoders/trigger_subaru.cpp +++ b/firmware/controllers/trigger/decoders/trigger_subaru.cpp @@ -132,8 +132,6 @@ void initializeSubaru7_6(TriggerWaveform *s) { void initializeSubaru_SVX(TriggerWaveform *s) { int n; - /* crank 2 falling happens between crank #1 fallings */ - float crank_2_offset = 15.0; float cam_offset = 15.0; /* we should use only falling edges */ float width = 5.0; @@ -151,6 +149,11 @@ void initializeSubaru_SVX(TriggerWaveform *s) { //#define SVX_CRANK_2 T_CHANNEL_3 #define SVX_CAM T_PRIMARY +#ifdef SVX_CRANK_2 + /* crank 2 falling happens between crank #1 fallings */ + float crank_2_offset = 15.0; +#endif + s->initialize(FOUR_STROKE_CAM_SENSOR); /****** 0 *****/ @@ -160,9 +163,11 @@ void initializeSubaru_SVX(TriggerWaveform *s) { n = 1; s->addEvent720(CRANK_1_RISE(n), SVX_CRANK_1, TV_RISE); s->addEvent720(CRANK_1_FALL(n), SVX_CRANK_1, TV_FALL); - /* crank #2 - one 1/1 */ -// s->addEvent720(CRANK_1_RISE(n) + crank_2_offset, SVX_CRANK_2, TV_RISE); -// s->addEvent720(CRANK_1_FALL(n) + crank_2_offset, SVX_CRANK_2, TV_FALL); + #ifdef SVX_CRANK_2 + /* crank #2 - one 1/1 */ + s->addEvent720(CRANK_1_RISE(n) + crank_2_offset, SVX_CRANK_2, TV_RISE); + s->addEvent720(CRANK_1_FALL(n) + crank_2_offset, SVX_CRANK_2, TV_FALL); + #endif n = 2; s->addEvent720(CRANK_1_RISE(n), SVX_CRANK_1, TV_RISE); s->addEvent720(CRANK_1_FALL(n), SVX_CRANK_1, TV_FALL); @@ -173,43 +178,53 @@ void initializeSubaru_SVX(TriggerWaveform *s) { n = 4; s->addEvent720(CRANK_1_RISE(n), SVX_CRANK_1, TV_RISE); s->addEvent720(CRANK_1_FALL(n), SVX_CRANK_1, TV_FALL); - /* cam - one */ - s->addEvent720(CRANK_1_RISE(n) + cam_offset, SVX_CAM, TV_RISE); - s->addEvent720(CRANK_1_FALL(n) + cam_offset, SVX_CAM, TV_FALL); + /* cam - one */ + s->addEvent720(CRANK_1_RISE(n) + cam_offset, SVX_CAM, TV_RISE); + s->addEvent720(CRANK_1_FALL(n) + cam_offset, SVX_CAM, TV_FALL); n = 5; s->addEvent720(CRANK_1_RISE(n), SVX_CRANK_1, TV_RISE); s->addEvent720(CRANK_1_FALL(n), SVX_CRANK_1, TV_FALL); - /* crank #2 - three - 1/3 */ -// s->addEvent720(CRANK_1_RISE(n) + crank_2_offset, SVX_CRANK_2, TV_RISE); -// s->addEvent720(CRANK_1_FALL(n) + crank_2_offset, SVX_CRANK_2, TV_FALL); + #ifdef SVX_CRANK_2 + /* crank #2 - three - 1/3 */ + s->addEvent720(CRANK_1_RISE(n) + crank_2_offset, SVX_CRANK_2, TV_RISE); + s->addEvent720(CRANK_1_FALL(n) + crank_2_offset, SVX_CRANK_2, TV_FALL); + #endif n = 6; s->addEvent720(CRANK_1_RISE(n), SVX_CRANK_1, TV_RISE); s->addEvent720(CRANK_1_FALL(n), SVX_CRANK_1, TV_FALL); - /* crank #2 - three - 2/3 */ -// s->addEvent720(CRANK_1_RISE(n) + crank_2_offset, SVX_CRANK_2, TV_RISE); -// s->addEvent720(CRANK_1_FALL(n) + crank_2_offset, SVX_CRANK_2, TV_FALL); + #ifdef SVX_CRANK_2 + /* crank #2 - three - 2/3 */ + s->addEvent720(CRANK_1_RISE(n) + crank_2_offset, SVX_CRANK_2, TV_RISE); + s->addEvent720(CRANK_1_FALL(n) + crank_2_offset, SVX_CRANK_2, TV_FALL); + #endif n = 7; s->addEvent720(CRANK_1_RISE(n), SVX_CRANK_1, TV_RISE); s->addEvent720(CRANK_1_FALL(n), SVX_CRANK_1, TV_FALL); /* +10 - TDC #6 */ - /* crank #2 - three - 3/3 */ -// s->addEvent720(CRANK_1_RISE(n) + crank_2_offset, SVX_CRANK_2, TV_RISE); -// s->addEvent720(CRANK_1_FALL(n) + crank_2_offset, SVX_CRANK_2, TV_FALL); + #ifdef SVX_CRANK_2 + /* crank #2 - three - 3/3 */ + s->addEvent720(CRANK_1_RISE(n) + crank_2_offset, SVX_CRANK_2, TV_RISE); + s->addEvent720(CRANK_1_FALL(n) + crank_2_offset, SVX_CRANK_2, TV_FALL); + #endif n = 8; s->addEvent720(CRANK_1_RISE(n), SVX_CRANK_1, TV_RISE); s->addEvent720(CRANK_1_FALL(n), SVX_CRANK_1, TV_FALL); n = 9; s->addEvent720(CRANK_1_RISE(n), SVX_CRANK_1, TV_RISE); s->addEvent720(CRANK_1_FALL(n), SVX_CRANK_1, TV_FALL); - /* crank #2 - two - 1/2 */ -// s->addEvent720(CRANK_1_RISE(n) + crank_2_offset, SVX_CRANK_2, TV_RISE); -// s->addEvent720(CRANK_1_FALL(n) + crank_2_offset, SVX_CRANK_2, TV_FALL); + #ifdef SVX_CRANK_2 + /* crank #2 - two - 1/2 */ + s->addEvent720(CRANK_1_RISE(n) + crank_2_offset, SVX_CRANK_2, TV_RISE); + s->addEvent720(CRANK_1_FALL(n) + crank_2_offset, SVX_CRANK_2, TV_FALL); + #endif n = 10; s->addEvent720(CRANK_1_RISE(n), SVX_CRANK_1, TV_RISE); s->addEvent720(CRANK_1_FALL(n), SVX_CRANK_1, TV_FALL); - /* crank #2 - two - 2/2 */ -// s->addEvent720(CRANK_1_RISE(n) + crank_2_offset, SVX_CRANK_2, TV_RISE); -// s->addEvent720(CRANK_1_FALL(n) + crank_2_offset, SVX_CRANK_2, TV_FALL); + #ifdef SVX_CRANK_2 + /* crank #2 - two - 2/2 */ + s->addEvent720(CRANK_1_RISE(n) + crank_2_offset, SVX_CRANK_2, TV_RISE); + s->addEvent720(CRANK_1_FALL(n) + crank_2_offset, SVX_CRANK_2, TV_FALL); + #endif n = 11; s->addEvent720(CRANK_1_RISE(n), SVX_CRANK_1, TV_RISE); s->addEvent720(CRANK_1_FALL(n), SVX_CRANK_1, TV_FALL); @@ -222,9 +237,11 @@ void initializeSubaru_SVX(TriggerWaveform *s) { n = 13; s->addEvent720(CRANK_1_RISE(n), SVX_CRANK_1, TV_RISE); s->addEvent720(CRANK_1_FALL(n), SVX_CRANK_1, TV_FALL); - /* crank #2 - one - 1/1 */ -// s->addEvent720(CRANK_1_RISE(n) + crank_2_offset, SVX_CRANK_2, TV_RISE); -// s->addEvent720(CRANK_1_FALL(n) + crank_2_offset, SVX_CRANK_2, TV_FALL); + #ifdef SVX_CRANK_2 + /* crank #2 - one - 1/1 */ + s->addEvent720(CRANK_1_RISE(n) + crank_2_offset, SVX_CRANK_2, TV_RISE); + s->addEvent720(CRANK_1_FALL(n) + crank_2_offset, SVX_CRANK_2, TV_FALL); + #endif n = 14; s->addEvent720(CRANK_1_RISE(n), SVX_CRANK_1, TV_RISE); s->addEvent720(CRANK_1_FALL(n), SVX_CRANK_1, TV_FALL); @@ -238,46 +255,53 @@ void initializeSubaru_SVX(TriggerWaveform *s) { n = 17; s->addEvent720(CRANK_1_RISE(n), SVX_CRANK_1, TV_RISE); s->addEvent720(CRANK_1_FALL(n), SVX_CRANK_1, TV_FALL); - /* crank #2 - three - 1/3 */ -// s->addEvent720(CRANK_1_RISE(n) + crank_2_offset, SVX_CRANK_2, TV_RISE); -// s->addEvent720(CRANK_1_FALL(n) + crank_2_offset, SVX_CRANK_2, TV_FALL); + #ifdef SVX_CRANK_2 + /* crank #2 - three - 1/3 */ + s->addEvent720(CRANK_1_RISE(n) + crank_2_offset, SVX_CRANK_2, TV_RISE); + s->addEvent720(CRANK_1_FALL(n) + crank_2_offset, SVX_CRANK_2, TV_FALL); + #endif n = 18; s->addEvent720(CRANK_1_RISE(n), SVX_CRANK_1, TV_RISE); s->addEvent720(CRANK_1_FALL(n), SVX_CRANK_1, TV_FALL); - /* crank #2 - three - 2/3 */ -// s->addEvent720(CRANK_1_RISE(n) + crank_2_offset, SVX_CRANK_2, TV_RISE); -// s->addEvent720(CRANK_1_FALL(n) + crank_2_offset, SVX_CRANK_2, TV_FALL); + #ifdef SVX_CRANK_2 + /* crank #2 - three - 2/3 */ + s->addEvent720(CRANK_1_RISE(n) + crank_2_offset, SVX_CRANK_2, TV_RISE); + s->addEvent720(CRANK_1_FALL(n) + crank_2_offset, SVX_CRANK_2, TV_FALL); + #endif n = 19; s->addEvent720(CRANK_1_RISE(n), SVX_CRANK_1, TV_RISE); s->addEvent720(CRANK_1_FALL(n), SVX_CRANK_1, TV_FALL); /* +10 - TDC #5 */ - /* crank #2 - three - 3/3 */ -// s->addEvent720(CRANK_1_RISE(n) + crank_2_offset, SVX_CRANK_2, TV_RISE); -// s->addEvent720(CRANK_1_FALL(n) + crank_2_offset, SVX_CRANK_2, TV_FALL); + #ifdef SVX_CRANK_2 + /* crank #2 - three - 3/3 */ + s->addEvent720(CRANK_1_RISE(n) + crank_2_offset, SVX_CRANK_2, TV_RISE); + s->addEvent720(CRANK_1_FALL(n) + crank_2_offset, SVX_CRANK_2, TV_FALL); + #endif n = 20; s->addEvent720(CRANK_1_RISE(n), SVX_CRANK_1, TV_RISE); s->addEvent720(CRANK_1_FALL(n), SVX_CRANK_1, TV_FALL); n = 21; s->addEvent720(CRANK_1_RISE(n), SVX_CRANK_1, TV_RISE); s->addEvent720(CRANK_1_FALL(n), SVX_CRANK_1, TV_FALL); - /* crank #2 - two - 1/2 */ -// s->addEvent720(CRANK_1_RISE(n) + crank_2_offset, SVX_CRANK_2, TV_RISE); -// s->addEvent720(CRANK_1_FALL(n) + crank_2_offset, SVX_CRANK_2, TV_FALL); + #ifdef SVX_CRANK_2 + /* crank #2 - two - 1/2 */ + s->addEvent720(CRANK_1_RISE(n) + crank_2_offset, SVX_CRANK_2, TV_RISE); + s->addEvent720(CRANK_1_FALL(n) + crank_2_offset, SVX_CRANK_2, TV_FALL); + #endif n = 22; s->addEvent720(CRANK_1_RISE(n), SVX_CRANK_1, TV_RISE); s->addEvent720(CRANK_1_FALL(n), SVX_CRANK_1, TV_FALL); - /* crank #2 - two - 2/2 */ -// s->addEvent720(CRANK_1_RISE(n) + crank_2_offset, SVX_CRANK_2, TV_RISE); -// s->addEvent720(CRANK_1_FALL(n) + crank_2_offset, SVX_CRANK_2, TV_FALL); + #ifdef SVX_CRANK_2 + /* crank #2 - two - 2/2 */ + s->addEvent720(CRANK_1_RISE(n) + crank_2_offset, SVX_CRANK_2, TV_RISE); + s->addEvent720(CRANK_1_FALL(n) + crank_2_offset, SVX_CRANK_2, TV_FALL); + #endif n = 23; s->addEvent720(CRANK_1_RISE(n), SVX_CRANK_1, TV_RISE); s->addEvent720(CRANK_1_FALL(n), SVX_CRANK_1, TV_FALL); /* +10 - TDC #4 */ /****** 720 *****/ -// s->setTriggerSynchronizationGap2(4.9, 9); -// s->setTriggerSynchronizationGap3(1, 0.6, 1.25); - s->isSynchronizationNeeded = false; s->useOnlyPrimaryForSync = true;