SBC TLE9471-3ES Status Information

OP #7971519
Lesenswert?

Hallo, ich habe3 einen TLE9471-3ES ( https://www.infineon.com/assets/row/public/documents/10/49/infineon-tle9471-3es-datasheet-en.pdf )und versuche diesen in Betrieb zu nehmen. Hierbei habe ich ein Verständnisproblem. Wenn ich jetzt über SPI den SystemStatus auslese, bekomme ich den Wert 0x0C (0b1100)

Laut dem Datenblatt Kapitel 13.3 SPI Programming und der Tabelle 34 Status Information Field, sind die Register: DEV_STAT (Device Status) und BUS_STAT (Bus Failuire Status)

Wenn ich jetzt DEV_STAT auslese, bekomme ich den Wert 0x49 zurück. Bedeutet: Device Status before Restart Mode:

  • 01B , Restart due to failure (WD fail, TSD2, VCC1_UV, trial to access SLEEP MODE without any wake source activated); also after a wake-up from Fail-Safe Mode

Number of WD-Failure Events

  • 10B , 2x WD Fail, FO activation - Config 1 / 3 / 4 selected

Activation of Fail Output FO

  • 1B , Failure occurred

Wenn ich das Register jetzt aber clearen möchte (also 0x00 schreiben) gehen die Fehler nicht weg, sondern bleiben. Wie kann ich die Fehler löschen?

OP #7971580
Lesenswert?

Harald K. schrieb:

Chandler B. schrieb:

Wenn ich das Register jetzt aber clearen möchte

13.6 SPI Status Information Registers (S. 152)

... Clearing a register is done byte wise by setting the SPI bit 7 to “1”

Das habe ich gemacht

1
errCode = SBC_Write_Reg(SBC_DEV_STAT, 0x00, &retVal_u16);
2

3

4
SBC_ErrorCode SBC_Write_Reg(uint8_t SBC_Reg, uint8_t SBC_Val, uint16_t * returnval) {
5
    SBC_ErrorCode errCode;
6
    uint16_t returndata = SBC_SPI_TRANSFER16(SBC_Write_Bit | SBC_Reg, SBC_Val);
7
    if(returnval != NULL) {
8
        *returnval = returndata;
9
    }
10

11
    errCode.SBC_Register = SBC_Reg;
12
    errCode.flippedBitsMask = ((uint8_t)SBC_Read_Command(SBC_Reg)) ^ SBC_Val;
13
    errCode.expectedValue = SBC_Val;
14
}
15

16
uint16_t SBC_Read_Command(uint8_t SBC_Reg) {
17
    /* Read and return data - Bit[15:8] = Status Information Field - Bit [7:0] Register data */
18
    return  SBC_SPI_TRANSFER16(SBC_Read_Mask & SBC_Reg, 0x00U);
19
}
20

21

22
uint16_t SBC_SPI_TRANSFER16(uint8_t Upper, uint8_t Lower) {
23

24
    uint16_t LPSPI1_16bits_read = 0;
25
    //uint16_t tx_16bits = ((uint16_t)Upper<<8 | (uint16_t)Lower);
26
    uint16_t tx_16bits = ((uint16_t)Lower<<8 | (uint16_t)Upper);
27
    LPSPI1_transmit_16bits(tx_16bits);              /* Transmit half word (16 bits) on LPSPI1 */
28
    LPSPI1_16bits_read = LPSPI1_receive_16bits();   /* Receive half word on LSPI1 */
29
}

returndata in SBC_Write_Reg gibt mir auch schon 0x490C zurück. Hier hätte ich eigentlich 0x0008 oder 0x0808 erwartet. bei 0x0008 sind alle Bits in DEV_STAT gelöscht und 0x08 ist das restliche Status. Bei 0x0808 ist WD_FAIL in DEV_STAT noch gesetzt. dies löscht der SBC aber automatisch.

flippedBitsMask ist auf 0x0C. Dies müsste ja auch 0x00 sein, wenn alles richtig reingeschrieben worden ist.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren