I2C-Slave zieht SCL herunter, während er nichts tut

Ich habe eine MCU (Texas Instruments tm4c123gh6pm), in der ich ein I2C-Slave-Gerät konfiguriert habe. Ich habe 3,3 V von dem MCU-Pin genommen, der sie liefert, und sie mit zwei 4,7-kOhm-Widerständen verbunden (um die Pull-ups zu machen). Ich habe es auch mit 2 1,5-V-Batterien in Reihe versucht.

Wenn ich eine der beiden oben genannten Leitungen mit dem Slave-SDA verbinde, bleibt es hoch (gut), aber aus irgendeinem Grund geht es, sobald ich SCL mit dem anderen Pull-up-Res. verbinde, auf niedrig (auf 0,8 V oder so). ). Aus irgendeinem Grund zieht die SCL des Slaves die Leitung herunter, während sie nichts tut (ich habe sie nicht einmal mit dem Master verbunden).

Warum passiert das?

So initialisiere ich den I2C-Slave:

static void I2C1_Init(void) {
    SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C1);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);

    GPIOPinConfigure(GPIO_PA6_I2C1SCL);
    GPIOPinConfigure(GPIO_PA7_I2C1SDA);

    GPIOPinTypeI2CSCL(GPIO_PORTA_BASE, GPIO_PIN_6);
    GPIOPinTypeI2C(GPIO_PORTA_BASE, GPIO_PIN_7);

    I2CSlaveEnable(I2C1_BASE);
    I2CSlaveInit(I2C1_BASE, I2C_SLAVE_ADDRESS);
}

WICHTIGE BEARBEITUNG

Die Pull-up-Widerstände liefere ich von einem externen Netzteil, dessen Masse ich mit dem GND-Pin der MCU verbinde. Die MCU wird über einen USB-Anschluss von einem Laptop mit Strom versorgt. Ich habe festgestellt, dass das obige Problem nicht auftritt, wenn ich diese beiden Gründe nicht verbinde, aber soweit ich verstehe, muss ich sie verbinden, oder?

Antworten (2)

Der SCL-Pin wird als Master initialisiert, um Push-Pull zu sein, da die SCL-Pins in Wirklichkeit ein internes Pull-System haben. Versuchen Sie es mit GPIOPinTypeI2C (GPIO_PORTA_BASE, GPIO_PIN_6); ohne die SCL , die den OD-Typ aufrufen soll. Es könnte sein, dass es in der Slave-Konfiguration Probleme gibt. Tatsächlich ist es nicht der am besten dokumentierte Teil, wenn es als I2C-Slave verwendet wird, und ich werde das Vorhandensein von Fehlern im IC nicht ausschließen.

Ich habe es ausprobiert und komme auf das gleiche Ergebnis.

Ich habe es mit einem anderen I2C-Modul versucht. Ich habe I2C1 (Pins PA6 und PA7) verwendet und jetzt verwende ich I2C2 (Pins PE4 und PE5). Alles funktioniert gut, es scheint, dass meine MCU beschädigt oder fehlerhaft ist.

Wenn dies Ihr Problem gelöst hat, "akzeptieren" Sie bitte Ihre eigene Antwort, damit andere keine Zeit damit verschwenden, Ihre Frage zu lesen.