hardware guy found that the R1004 lead to this error, but this error should not be checked, because the secondary hall spindle is not used.
2019/4/15-13:00 b_HallcomShortGnd = lb_SetError
use debugger for the board without R1004, it ran into
Dia_HandleErrorsSensorHallSecondary,
if (FALSE != b_DIAGNOSTIC_HANDLE_STATUS( ID_SPINDLE2_HALLCOM_SHORT_GND ) )
{
lps_ErrorResultField->b_HallcomShortGnd = lb_SetError;
}
2019/4/15-13:20 //lps_ErrorResultField->b_HallcomShortGnd
comment //lps_ErrorResultField->b_HallcomShortGnd = lb_SetError;
and then found invalid position from diagnosis-last interrupt reason read
14:20 u16_MagicNumber is 0
in SensorPosition_Init
lb_IsStoredPositionValid = Spo_IsStoredTailgatePositionValid(aps_Inst);
and in Spo_IsStoredTailgatePositionValid:
if (C_SPO_POSITION_MAGIC_NUMBER == aps_Inst->ps_StoredPositionValues->u16_MagicNumber)
was not meeted.
i watch value of aps_Inst->ps_StoredPositionValues->u16_MagicNumber is 0.
18:18 b_MinUBatInputOK and b_Hall... different in new/old board
in SensorHall.c
in SenserHall_Diagnostic()
this if condition was not meeted in the board with R1004, but meeted in the old board
if( (FALSE != aps_ReqPorts->b_MinUBatInputOK ) &&
(FALSE != aps_ReqPorts->b_HallSupplyStable ) &&
(FALSE != aps_ReqPorts->b_HallSignalStable ) )
{
watched the 3 variable are all TRUE for Primary and Secondary for old board
but when R1004 is removed, only b_MinUBatInputOK is TRUE, the other 2 are FALSE
2019/4/16-9:30 b_MinUBatInputOK
b_MinUBatInputOK direct assigner is SensorHall_ReadRequiredPorts
2019/4/16-10:30
sequence of SensorHall_ReadRequiredPorts being called:
runSensorHall_CycleCall()-->runSensorHall_Inst_CycleCall(Secondary)-->SensorHall_ReadRequiredPorts()
13:58 b_MinUBatInputOK
b_MinUBatInputOK track should be checked before b_HallSupplyStable
in SensorHall_ReadRequiredPorts():
aps_RequiredPorts->b_MinUBatInputOK = ( (FALSE == l_Env_ErrorFlags.s_Bits.b_MinUBatUndershot ) ||
(FALSE == l_Env_ErrorFlags.s_Bits.b_MinUBatBackupUndershot) )
? TRUE : FALSE;
15:36 b_MinUBatInputOK are both TRUE
watch from SensorHall_ReadRequiredPorts()
b_MinUBatInputOK are both TRUE for primary and secondary Hall Sensor
( b_MinUBatUndershot and b_MinUBatBackupUndershot are assigned
in Environment.c
in Env_DetermineUBatUnderVoltageErrorFlags() )
b_HallSupplyStable
11:29 b_UHallStable, b_UHallRangeValid and b_HallSupplyStable
b_HallSupplyStable is determined by b_UHallRangeValid
aps_RequiredPorts->b_HallSupplyStable = ( (FALSE != ms_SensorHallConfigVar.b_UHallRangeValid) &&
(FALSE == ms_SensorHallConfigVar.b_UHallSwitchedOffByShortToGnd [ae_Instance]) )
? TRUE : FALSE;
b_UHallRangeValid is determined by b_UHallStable
in SensorHall_ReadRequiredPorts:
if (FALSE != l_Pmg_StableFlags.s_Bits.b_UHallStable)
{
ms_SensorHallConfigVar.b_UHallRangeValid = TRUE;
}
13:10 b_UHallStable be assigned in Pmg_UpdateHCOMStableFlag
b_UHallRangeValid is assigned from b_UHallStable
in PowerManager_cfg.c
Pmg_UpdateHCOMStableFlag()
/* Hall Supply A and B shall behavior in the same way, not working independantly*/
aps_ProvidedPorts->u_StableFlags.s_Bits.b_UHallStable = FALSE;
this comment seems this code was wrote only for the old board.
13:40 b_UHallStable be assigned in Pmg_UpdateHCOMStableFlag
a little more deduction without experience today :)
found how b_UHallStable becomes FALSE:
runPowerManager_CycleCall()-->Pmg_EvaluateFlagsAndSetFlagsAndOutputs()-->Pmg_SetOutputsAndStableFlags()-->Pmg_UpdateHCOMStableFlag()
...s_Bits.b_UHallStable = FALSE.
16:16 b_HallSupplyB is 0
watched:
aps_ProvidedPorts->u_StateOfControlledOutputs.s_Bits.b_HallSupplyB
is 0 when R1004 is removed.
in Pmg_UpdateHCOMStableFlag():
if( (FALSE != aps_ProvidedPorts->u_StateOfControlledOutputs.s_Bits.b_HallSupplyA)
&& (FALSE != aps_ProvidedPorts->u_StateOfControlledOutputs.s_Bits.b_HallSupplyB) )
{
SCI_Call_Bsw_SetDigitalOutput(E_BSW_DO_SUP_HCOM_A, TRUE);
SCI_Call_Bsw_SetDigitalOutput(E_BSW_DO_SUP_HCOM_B, TRUE);
SCI_Timer_Load(C_S_PMG_TIMER.e_HallStable, as_Par.u16_UHallStableDelayTime);
}
else
{
SCI_Call_Bsw_SetDigitalOutput(E_BSW_DO_SUP_HCOM_A, FALSE);
SCI_Call_Bsw_SetDigitalOutput(E_BSW_DO_SUP_HCOM_B, FALSE);
aps_ProvidedPorts->u_StableFlags.s_Bits.b_UHallStable = FALSE;
}
16:30
try code:
SensorHall_ReadRequiredPorts()
aps_RequiredPorts->b_HallSupplyStable =
Pmg_UpdateHCOMStableFlag()
aps_ProvidedPorts->u_StableFlags.s_Bits.b_UHallStable =
result: left spindle hall supply short to gnd
b_MinUBatInputOK, b_HallSupplyStable and b_HallSignalStable are all TRUE for both Primary and Secondary.
18:27
watch in SensorHall_Diagnostic
aps_ReqPorts->u16_HallSupplyVoltage is 0 for both Primary and Secondary
18:28
make it run OK when comment
//SensorHall_Diagnostic (aps_Inst, aps_ReqPorts);
so that it will diagnostic none.
Question:
why diagnosis cannot get the right hall voltage?
19:20
in Sci_loHwAbMapping.cfg:
DIGITAL_OUTPUT_CFG ( E_BSW_DO_SUP_HCOM_A , BSWIF_DO_SBC_SUP_HCOM_GROUP_A )
in Bswif.c
{BSWIF_DO_SBC_SUP_HCOM_GROUP_A, SBC_DO_OUT1 },
One Day Later
2019/4/18--10:15
reality, only //SensorHall_Diagnostic control the error
todo:
why there is error?