Forum: Mikrocontroller und Digitale Elektronik SBC TLE9471-3ES Status Information


von Chandler B. (chandler)


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?

von Harald K. (kirnbichler)


Lesenswert?

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”

von Chandler B. (chandler)


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.

von Harald K. (kirnbichler)


Lesenswert?

Schreib' mal statt 0x00 den Wert 0xFF. Ich nehme an, daß man beim 
Schreiben angeben kann, welche Bits gelöscht werden sollen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.