Skip to content

Commit 1bce507

Browse files
All eFuses Can Now be Enabled/Disabled (#194)
1 parent 8e2fc96 commit 1bce507

4 files changed

Lines changed: 61 additions & 24 deletions

File tree

Cerberus-2.0.ioc

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -536,11 +536,12 @@ PD2.Signal=GPIO_Output
536536
PD3.Locked=true
537537
PD4.Locked=true
538538
PD5.Locked=true
539-
PD6.GPIOParameters=GPIO_PuPd,GPIO_Label
539+
PD6.GPIOParameters=PinState,GPIO_PuPd,GPIO_Label
540540
PD6.GPIO_Label=EF_LV_EN
541541
PD6.GPIO_PuPd=GPIO_PULLUP
542542
PD6.Locked=true
543-
PD6.Signal=GPIO_Input
543+
PD6.PinState=GPIO_PIN_SET
544+
PD6.Signal=GPIO_Output
544545
PD7.GPIOParameters=GPIO_PuPd,GPIO_Label
545546
PD7.GPIO_Label=EF_LV_ER
546547
PD7.GPIO_PuPd=GPIO_PULLUP
@@ -624,11 +625,12 @@ PF15.GPIOParameters=GPIO_Label
624625
PF15.GPIO_Label=HVD_GPIO
625626
PF15.Locked=true
626627
PF15.Signal=GPIO_Input
627-
PF2.GPIOParameters=GPIO_PuPd,GPIO_Label
628+
PF2.GPIOParameters=PinState,GPIO_PuPd,GPIO_Label
628629
PF2.GPIO_Label=EF_BATTBOX_EN
629630
PF2.GPIO_PuPd=GPIO_PULLUP
630631
PF2.Locked=true
631-
PF2.Signal=GPIO_Input
632+
PF2.PinState=GPIO_PIN_SET
633+
PF2.Signal=GPIO_Output
632634
PF3.GPIOParameters=GPIO_PuPd,GPIO_Label
633635
PF3.GPIO_Label=EF_BATTBOX_ER
634636
PF3.GPIO_PuPd=GPIO_PULLUP
@@ -700,11 +702,12 @@ PG5.GPIO_Label=EF_RADFAN_ER
700702
PG5.GPIO_PuPd=GPIO_PULLUP
701703
PG5.Locked=true
702704
PG5.Signal=GPIO_Input
703-
PG6.GPIOParameters=GPIO_PuPd,GPIO_Label
705+
PG6.GPIOParameters=PinState,GPIO_PuPd,GPIO_Label
704706
PG6.GPIO_Label=EF_SHUTDOWN_EN
705707
PG6.GPIO_PuPd=GPIO_PULLUP
706708
PG6.Locked=true
707-
PG6.Signal=GPIO_Input
709+
PG6.PinState=GPIO_PIN_SET
710+
PG6.Signal=GPIO_Output
708711
PG7.GPIOParameters=GPIO_PuPd,GPIO_Label
709712
PG7.GPIO_Label=EF_SHUTDOWN_ER
710713
PG7.GPIO_PuPd=GPIO_PULLUP

Core/Src/main.c

Lines changed: 34 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -927,6 +927,9 @@ static void MX_GPIO_Init(void)
927927
/*Configure GPIO pin Output Level */
928928
HAL_GPIO_WritePin(GPIOE, RED_LED_Pin|GREEN_LED_Pin|PHY_RESET_Pin, GPIO_PIN_RESET);
929929

930+
/*Configure GPIO pin Output Level */
931+
HAL_GPIO_WritePin(EF_BATTBOX_EN_GPIO_Port, EF_BATTBOX_EN_Pin, GPIO_PIN_SET);
932+
930933
/*Configure GPIO pin Output Level */
931934
HAL_GPIO_WritePin(EF_MC_EN_GPIO_Port, EF_MC_EN_Pin, GPIO_PIN_RESET);
932935

@@ -937,11 +940,14 @@ static void MX_GPIO_Init(void)
937940
/*Configure GPIO pin Output Level */
938941
HAL_GPIO_WritePin(GPIOG, EF_RADFAN_EN_Pin|EF_SPARE_EN_Pin|WATCHDOG_Pin, GPIO_PIN_RESET);
939942

943+
/*Configure GPIO pin Output Level */
944+
HAL_GPIO_WritePin(GPIOG, EF_SHUTDOWN_EN_Pin|FAULT_MCU_Pin, GPIO_PIN_SET);
945+
940946
/*Configure GPIO pin Output Level */
941947
HAL_GPIO_WritePin(GPIOC, MUX_SEL1_Pin|MUX_SEL2_Pin|MUX_SEL3_Pin|MUX_SEL4_Pin, GPIO_PIN_RESET);
942948

943949
/*Configure GPIO pin Output Level */
944-
HAL_GPIO_WritePin(FAULT_MCU_GPIO_Port, FAULT_MCU_Pin, GPIO_PIN_SET);
950+
HAL_GPIO_WritePin(EF_LV_EN_GPIO_Port, EF_LV_EN_Pin, GPIO_PIN_SET);
945951

946952
/*Configure GPIO pin Output Level */
947953
HAL_GPIO_WritePin(IMU_CS_GPIO_Port, IMU_CS_Pin, GPIO_PIN_SET);
@@ -959,8 +965,15 @@ static void MX_GPIO_Init(void)
959965
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
960966
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
961967

962-
/*Configure GPIO pins : EF_BATTBOX_EN_Pin EF_BATTBOX_ER_Pin EF_MC_ER_Pin */
963-
GPIO_InitStruct.Pin = EF_BATTBOX_EN_Pin|EF_BATTBOX_ER_Pin|EF_MC_ER_Pin;
968+
/*Configure GPIO pin : EF_BATTBOX_EN_Pin */
969+
GPIO_InitStruct.Pin = EF_BATTBOX_EN_Pin;
970+
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
971+
GPIO_InitStruct.Pull = GPIO_PULLUP;
972+
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
973+
HAL_GPIO_Init(EF_BATTBOX_EN_GPIO_Port, &GPIO_InitStruct);
974+
975+
/*Configure GPIO pins : EF_BATTBOX_ER_Pin EF_MC_ER_Pin */
976+
GPIO_InitStruct.Pin = EF_BATTBOX_ER_Pin|EF_MC_ER_Pin;
964977
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
965978
GPIO_InitStruct.Pull = GPIO_PULLUP;
966979
HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
@@ -1008,9 +1021,9 @@ static void MX_GPIO_Init(void)
10081021
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
10091022

10101023
/*Configure GPIO pins : EF_BREAK_ER_Pin EF_FANBATT_ER_Pin EF_PUMP1_ER_Pin EF_PUMP2_ER_Pin
1011-
EF_DASH_ER_Pin EF_LV_EN_Pin EF_LV_ER_Pin */
1024+
EF_DASH_ER_Pin EF_LV_ER_Pin */
10121025
GPIO_InitStruct.Pin = EF_BREAK_ER_Pin|EF_FANBATT_ER_Pin|EF_PUMP1_ER_Pin|EF_PUMP2_ER_Pin
1013-
|EF_DASH_ER_Pin|EF_LV_EN_Pin|EF_LV_ER_Pin;
1026+
|EF_DASH_ER_Pin|EF_LV_ER_Pin;
10141027
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
10151028
GPIO_InitStruct.Pull = GPIO_PULLUP;
10161029
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
@@ -1028,12 +1041,19 @@ static void MX_GPIO_Init(void)
10281041
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
10291042
HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
10301043

1031-
/*Configure GPIO pins : EF_RADFAN_ER_Pin EF_SHUTDOWN_EN_Pin EF_SHUTDOWN_ER_Pin EF_SPARE_ER_Pin */
1032-
GPIO_InitStruct.Pin = EF_RADFAN_ER_Pin|EF_SHUTDOWN_EN_Pin|EF_SHUTDOWN_ER_Pin|EF_SPARE_ER_Pin;
1044+
/*Configure GPIO pins : EF_RADFAN_ER_Pin EF_SHUTDOWN_ER_Pin EF_SPARE_ER_Pin */
1045+
GPIO_InitStruct.Pin = EF_RADFAN_ER_Pin|EF_SHUTDOWN_ER_Pin|EF_SPARE_ER_Pin;
10331046
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
10341047
GPIO_InitStruct.Pull = GPIO_PULLUP;
10351048
HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
10361049

1050+
/*Configure GPIO pin : EF_SHUTDOWN_EN_Pin */
1051+
GPIO_InitStruct.Pin = EF_SHUTDOWN_EN_Pin;
1052+
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
1053+
GPIO_InitStruct.Pull = GPIO_PULLUP;
1054+
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
1055+
HAL_GPIO_Init(EF_SHUTDOWN_EN_GPIO_Port, &GPIO_InitStruct);
1056+
10371057
/*Configure GPIO pins : MUX_SEL1_Pin MUX_SEL2_Pin MUX_SEL3_Pin MUX_SEL4_Pin */
10381058
GPIO_InitStruct.Pin = MUX_SEL1_Pin|MUX_SEL2_Pin|MUX_SEL3_Pin|MUX_SEL4_Pin;
10391059
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
@@ -1047,6 +1067,13 @@ static void MX_GPIO_Init(void)
10471067
GPIO_InitStruct.Pull = GPIO_NOPULL;
10481068
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
10491069

1070+
/*Configure GPIO pin : EF_LV_EN_Pin */
1071+
GPIO_InitStruct.Pin = EF_LV_EN_Pin;
1072+
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
1073+
GPIO_InitStruct.Pull = GPIO_PULLUP;
1074+
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
1075+
HAL_GPIO_Init(EF_LV_EN_GPIO_Port, &GPIO_InitStruct);
1076+
10501077
/*Configure GPIO pin : IMU_CS_Pin */
10511078
GPIO_InitStruct.Pin = IMU_CS_Pin;
10521079
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

Core/Src/u_efuses.c

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -87,19 +87,11 @@ efuse_data_t efuse_getData(void) {
8787

8888
/* Enables an eFuse. */
8989
void efuse_enable(efuse_t efuse) {
90-
if(efuse == EFUSE_SHUTDOWN || efuse == EFUSE_BATTBOX || efuse == EFUSE_LV) {
91-
PRINTLN_WARNING("This eFuse is set up is a pulled-up GPIO_INPUT, so it's always enabled and calling efuse_enable() won't do anything (eFuse: %d).", efuse);
92-
return;
93-
}
9490
HAL_GPIO_WritePin(efuses[efuse].en_port, efuses[efuse].en_pin, GPIO_PIN_SET);
9591
}
9692

9793
/* Disables an eFuse. */
9894
void efuse_disable(efuse_t efuse) {
99-
if(efuse == EFUSE_SHUTDOWN || efuse == EFUSE_BATTBOX || efuse == EFUSE_LV) {
100-
PRINTLN_WARNING("This eFuse is set up is a pulled-up GPIO_INPUT, so it's always enabled and calling efuse_disable() won't do anything (eFuse: %d).", efuse);
101-
return;
102-
}
10395
HAL_GPIO_WritePin(efuses[efuse].en_port, efuses[efuse].en_pin, GPIO_PIN_RESET);
10496
}
10597

Core/Src/u_threads.c

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -533,11 +533,26 @@ void vEFuses(ULONG thread_input) {
533533
default: efuse_enable(EFUSE_BRAKE); break;
534534
}
535535

536-
/* Shutdown eFuse should never be enabled/disabled here. */
536+
/* Determine Shutdown eFuse state. */
537+
switch(data.control_state[EFUSE_SHUTDOWN]) {
538+
case EF_ON: efuse_enable(EFUSE_SHUTDOWN); break;
539+
case EF_OFF: efuse_disable(EFUSE_SHUTDOWN); break;
540+
default: efuse_enable(EFUSE_SHUTDOWN); break;
541+
}
537542

538-
/* LV eFuse should never be enabled/disabled here. */
543+
/* Determine LV eFuse state. */
544+
switch(data.control_state[EFUSE_LV]) {
545+
case EF_ON: efuse_enable(EFUSE_LV); break;
546+
case EF_OFF: efuse_disable(EFUSE_LV); break;
547+
default: efuse_enable(EFUSE_LV); break;
548+
}
539549

540-
/* Battbox eFuse should never be enabled/disabled here. */
550+
/* Determine Battbox eFuse state. */
551+
switch(data.control_state[EFUSE_BATTBOX]) {
552+
case EF_ON: efuse_enable(EFUSE_BATTBOX); break;
553+
case EF_OFF: efuse_disable(EFUSE_BATTBOX); break;
554+
default: efuse_enable(EFUSE_BATTBOX); break;
555+
}
541556

542557
/* Determine MC eFuse state. */
543558
switch(data.control_state[EFUSE_MC]) {

0 commit comments

Comments
 (0)