right spindle supply short to gnd

时间:2022-05-12 20:01:49

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?