Kondensatorlade-ähnliches Signal auf der MOSI-Leitung des SPI-Ports

Ich verwende Texas Instruments Tiva C Launchpad, um mit Micro-SD- und Micro-SDHC-Karten zu kommunizieren. Das Entwicklungsboard verwendet den TM4C123GH6PM- Chip und ich verwende das FatFS-Beispiel von TI RTOS für das Launchpad, um auf die Karte zuzugreifen. Im Beispiel wurde Port SSI2 für die SPI-Kommunikation verwendet. Der SSI2-Port ist mit den Pins von Port B verbunden. Der Port ist über Jumperdrähte mit einem Micro-SD-Kartenadapter verbunden, der auf einem Steckbrett positioniert ist.

Hier ist die Pinbelegung des Adapters:

GND – zur Masse des Launchpads
+3,3 V – von der Reglerkarte des Launchpads
– nicht verbunden
DATA2 – nicht verbunden
Chip Select – verbunden mit SSI2
MOSI – verbunden mit SSI2
Clock – verbunden mit SSI2
MISO – verbunden mit SSI2
DATA1 – nicht verbunden

Um das FAT-Beispiel zum Laufen zu bringen, musste ich einige Änderungen daran vornehmen, da es offensichtlich nicht getestet wurde.

In der Datei EK_TM4C123GXL.c habe ich folgende Änderungen vorgenommen:

const SDSPITiva_HWAttrs sdspiTivaHWattrs[EK_TM4C123GXL_SDSPICOUNT] = {
    {
        SSI2_BASE,          /* SPI base address */

        GPIO_PORTB_BASE,    /* The GPIO port used for the SPI pins */
        GPIO_PIN_4,         /* SCK */
        GPIO_PIN_6,         /* MISO */
        GPIO_PIN_7,         /* MOSI */

        GPIO_PORTB_BASE,    /* Chip select port, in TI's example was PORTA_BASE */
        GPIO_PIN_5,         /* Chip select pin */

        GPIO_PORTB_BASE,    /* GPIO TX port */
        GPIO_PIN_7,         /* GPIO TX pin */
    }
};

Und

Void EK_TM4C123GXL_initSDSPI(Void)
{
    /* Enable the peripherals used by the SD Card */
    SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI2);

    /* Configure pad settings */
//This was original TI's code
//    GPIOPadConfigSet(GPIO_PORTB_BASE,
//            GPIO_PIN_4 | GPIO_PIN_7,
//            GPIO_STRENGTH_4MA, GPIO_PIN_TYPE_STD);
//
//    GPIOPadConfigSet(GPIO_PORTB_BASE,
//            GPIO_PIN_6,
//            GPIO_STRENGTH_4MA, GPIO_PIN_TYPE_STD_WPU);
//
//    GPIOPadConfigSet(GPIO_PORTB_BASE,
//            GPIO_PIN_5,
//            GPIO_STRENGTH_4MA, GPIO_PIN_TYPE_STD);//Used to be PORTA_Base, but this didn't work
    GPIOPinTypeSSI(GPIO_PORTB_BASE, GPIO_PIN_4 | GPIO_PIN_5 |
                                        GPIO_PIN_6 | GPIO_PIN_7);//Copied from SPI-loopback example

    GPIOPinConfigure(GPIO_PB4_SSI2CLK);
    GPIOPinConfigure(GPIO_PB5_SSI2FSS);//added
    GPIOPinConfigure(GPIO_PB6_SSI2RX);
    GPIOPinConfigure(GPIO_PB7_SSI2TX);



    /*
     * These GPIOs are connected to PB6 and PB7 and need to be brought into a
     * GPIO input state so they don't interfere with SPI communications.
     */
    GPIOPinTypeGPIOInput(GPIO_PORTD_BASE, GPIO_PIN_0);
    GPIOPinTypeGPIOInput(GPIO_PORTD_BASE, GPIO_PIN_1);

    SDSPI_init();
}

Danach gelang es dem Code, eine Datei korrekt auf die Karte zu schreiben.

Jetzt kommt die eigentliche Frage selbst:

Während ich die Kommunikation zwischen dem Mikrocontroller und der SD-Karte untersuchte, bemerkte ich, dass es am MOSI-Pin eine Wellenform gibt, die mich an eine Kondensatorladung erinnert.

MOSI-Leitung wird aufgeladen, MISO-Leitung hoch

Der rote Kanal ist MOSI und der gelbe Kanal ist MISO.

Zuerst dachte ich, dass es die MISO-Leitung sein könnte, die die parasitäre Kapazität zwischen den MISO- und MOSI-Pins auf der Entwicklungsplatine auflädt, da diese beiden Pins nebeneinander liegen. Nach weiterem Nachforschen kam ich zu dem Schluss, dass dies nicht die Hauptursache des Phänomens ist.

MOSI-Leitung wird aufgeladen, MISO-Leitung niedrig

Hier können wir sehen, dass auf der MOSI-Leitung noch etwas Ladevorgang stattfindet, obwohl die MISO-Leitung im Moment niedrig ist.

Auf dem SD-Kartenadapter selbst befindet sich die Taktleitung zwischen den MOSI- und MISO-Leitungen, daher dachte ich, dass dies das Problem verursachen könnte, aber während das MOSI aufgeladen wird, ist die Taktleitung ebenfalls niedrig.

[MOSI-Leitung wird aufgeladen, Uhr in Gelb, 1

Rot ist die MOSI-Linie, Gelb ist die Uhr.

Hier ist eine Aufnahme des kleineren "Dreiecks" und der Uhrlinie:

MOSI-Leitung wird aufgeladen, Uhr in Gelb, 2

Während all dies wird die Chip-Select-Leitung niedrig gehalten, sodass sie den Master-Out-Pin nicht laden kann.

Also irgendwelche Ideen, was diese Art von Verhalten verursachen könnte?

Ist es möglich, dass Sie die MOSI-Leitung versehentlich auf einen Open-Collector-Ausgang oder auf einen Eingang mit schwachem Pullup ändern?
@Joe Hass Ich bin mir nicht sicher, dies ist mein erstes "richtiges" Projekt mit diesem Mikro und ich habe die hier verwendeten Bibliotheken immer noch nicht verdaut. An der Oberfläche sieht es nicht so aus, aber bis ich den Quellcode durchforste, kann ich es nicht mit Sicherheit sagen. Das Mikro hat die Möglichkeit, Ausgänge auf Open Collector zu setzen.
Zeigen Sie all Ihr Code-Zeug, weil Sie glauben, dass es sich auf Ihren Code beziehen könnte?
@ Andy alias Nun ja. Vielleicht wäre es etwas genauer zu sagen, dass ich nicht sagen kann, dass das Stück Code, das ich verwende, nichts damit zu tun hat. Im Moment sehe ich nicht, wie der von mir gepostete Code den gezeigten Effekt erzeugen könnte, aber ich bin mit der Toolchain noch nicht vertraut genug, um zu sagen, dass der Fehler nicht im Code liegt. Eigentlich vermute ich, dass es irgendwo in einer der aufgerufenen Funktionen liegt, da der Mikrocontroller zwar schwache Pull-up-Widerstände als Feature hat, aber sie sollten während des gesamten Vorgangs deaktiviert werden, soweit ich verstehe, wie die Dinge funktionieren.
Wenn es möglich ist, programmieren Sie die Pull-Ups möglicherweise auf regelmäßigere Werte wie 10k oder setzen Sie einfach einen externen 10k-Widerstand ein. Es sieht aus wie eine Kappenladung, und bei einem bekannten Widerstand mit niedrigem Wert würde die Ladekurve die Leitungskapazität angeben und eine bessere Erklärung liefern.
@Andy aka Ja, es wäre nützlich, einen ungefähren Wert der Kapazität zu erhalten und dann zu versuchen, diesen mit den Werten der Pullup-Widerstände zu vergleichen. Damit kann ich feststellen, ob sie die Ursache sind. Ich füge das der Liste der zu versuchenden Dinge hinzu.

Antworten (1)

Sieht so aus, als ob Ihre MOSI-Leitung manchmal Z-festgelegt ist und ein schwacher Pull-up auf dieser Leitung sie auflädt. Dies ist keine leitungsübergreifende Interferenz.