Verwenden des Logikanalysators für SPI

Ich begann mein Projekt der Schnittstelle MicroSD Cardmit PIC32MX795F512L. Um damit zu beginnen, habe ich zuerst ein Programm zum Testen erstellt, SPI protocolin dem ich einen Loopback-Test durch Kurzschließen der SDO& SDI-Leitung durchgeführt habe. Es funktionierte gut. Dann ging ich weiter und schrieb ein gutes Programm für die Schnittstellenkarte, aber ich konnte die Karte nicht einmal initialisieren. Also habe ich überlegt, einige Tools wie Saleae Logic und MicroSD Sniffer zu kaufen . Da dies das erste Mal ist, dass ich den Analysator verwende, müssen wir meiner Meinung nach, wenn wir unser Programm starten, gleichzeitig mit der Erfassung der Daten im Analysator beginnen.

Mit diesem Verständnis habe ich Folgendes getestet UART:

while(1)
{
  putsUART1("Hello");
  DelayMs(500);
}

Ich habe dies im Analysator erfasst und alles war in Ordnung. Jetzt habe ich daran gedacht, das SPI-Loopback-Testprogramm zu erfassen, aber ich sehe einige zufällige Daten im Analysator. Nachfolgend der Code dafür:

void initSPI(void)
{
SPI1BRG = 71; 
SPI1CONbits.MSTEN = 1; //MasterEnable
SPI1CONbits.CKE = 1;  //CKE on. CKP OFF
SPI1CONbits.ON = 1;  //SPI Module ON
}

unsigned char writeSPI(unsigned int b)
{

    SPI1BUF=b; // write to buffer for TX
    while( !SPI1STATbits.SPIRBF); // wait transfer complete
    return(SPI1BUF);

}

und in der Hauptfunktion initSPIsende ich nach dem Aufruf von während (1) Daten an den SPI-Kanal:

while(1)
{
 x = writeSPI(0x12);
}

Ich sende 0x12. Im Analysator MOSI(SDO)sollte dieser Wert also angezeigt werden, aber es werden einige zufällige Werte angezeigt. Ich habe die Pins richtig angeschlossen und die SPI-Einstellungen im Analysator entsprechen meinen Einstellungen im Code. Ich erfasse die Daten für 1secund Geschwindigkeit bei 24MS/s. Außerdem möchte ich wissen, wie ich überprüfen kann, mit welcher Frequenz das SPI-Protokoll ausgeführt wird.? Irgendeine Hilfe.!

Hier ist das Bild des AnalyseergebnissesBild des Analyseergebnisses

und Analysatoreinstellungen für SPIAnalysatoreinstellungen für SPI

Nun, ein bisschen Jagd, ich habe herausgefunden, wie man die Frequenz überprüft

Antworten (1)

Denken Sie daran, dass ein Logikanalysator nichts anderes als ein schnell getakteter Komparator ist. Was machen Komparatoren? Sie vergleichen eine Spannung! Mit Referenzspannung. Dies wird dann getaktet und bei dem Takt wurde der Kanal gemessen, ob er hoch oder niedriger als die Referenzspannung war.

Sie müssen also zwei Dinge anpassen. Die Uhr und die Referenzspannung.

  1. Uhr - Woher wissen Sie, dass Ihre Uhr schnell genug geht? Sampling schneller, wenn du mehr und mehr "Kanten" siehst, dann weißt du, dass du schneller laufen musst. Dies gilt für ein ungetaktetes Signal, für ein getaktetes Signal wie spi ist es noch einfacher. Da Sie wissen, dass die Daten in Gruppen kommen (normalerweise 8 Bits gleichzeitig), müssen Sie nur 8 ansteigende Flanken und 8 abfallende Flanken finden. Wenn es so aussieht, als ob die Flanken schlecht abgetastet werden (dh es gibt nur 5 oder weniger Samples zwischen Takten), sollten Sie die Abtastgeschwindigkeit erhöhen, damit Sie mehr Samples pro Takt erhalten.

  2. Referenzspannung - Sie müssen die Referenzspannung auf den richtigen Pegel einstellen. Überprüfen Sie Ihre Logikpegel , wenn es 5 V cmos sind, stellen Sie es auf 2 V ein. 3,3 V TTL = 1,25 V (oder so ungefähr).

Ein Vorbehalt dabei ist, dass alle Logikanalysatoren begrenzten Speicher haben (mit Ausnahme der neuen 3000-Serie von Tektronix und Keysight, 20 MB Speicher werden Ihnen viel Zeit verschaffen, wie fast unendlich). Daher können Sie normalerweise nicht mit der schnellsten Geschwindigkeit sampeln, da es einen Kompromiss zwischen der Sampling-Geschwindigkeit und der Dauer Ihrer gesamten Samples gibt.

Ich denke, Uhr und Spannung sind beide korrekt. Die Spannung an den Pins beträgt 3,3 und ich sehe die richtigen 8 Takte im Analysator mit einer genauen Frequenz von 250 kHz. Aber immer noch zeigt MOSI nicht die richtigen Daten an. Wenn ich 0x05 sende, zeigt es 0xB0 oder einen anderen Wert, aber nicht 0x05. Übersehe ich etwas.?
Wenn Sie nicht das sehen, was Sie erwarten, liegt möglicherweise ein Problem mit Ihren digitalen Leitungen oder Ihrer Software vor. Wenn es Ihre Software ist, kann ich Ihnen da nicht helfen, ich bin allergisch gegen Software und ich denke auch, dass es gut ist, wenn die Leute dort selbst debuggen, damit sie lernen können. Wenn Sie sich Sorgen um die digitalen Leitungen machen, würde ich ein Oszilloskop besorgen und prüfen, ob Sie saubere, knusprige Wellenformen und kein Klingeln oder langsame Übergänge erhalten. Sie haben Zeitspezifikationen, die Sie auf Ihrem Sende- und Empfangs-IC erfüllen müssen. Sie haben jeweils Übergangspegel, an denen sie einen Ein- oder Aus-Zustand erkennen.