Ich versuche, einen PIC18F4520 über das SPI-Protokoll an einen 25LC640 anzuschließen. Ich verwende die eingebaute MSSP-Hardware des PIC. Der PIC18F4520 ist der einzige Master am Bus. Ich lese 16 Byte Daten 32 Mal pro Sekunde aus dem EEPROM. Ich habe die folgenden Punkte doppelt überprüft:
Ich habe die Signale auf einem Oszilloskop überprüft und alles sieht gut aus. Ich habe versucht, eine BusBee zu verwenden, um die Daten aus dem EEPROM zu protokollieren, und in 99% der Fälle ist es korrekt. Hin und wieder gibt es eine Reihe von Anfragen, bei denen die MOSI (SDO)-Leitung nicht die richtige EEPROM-Leseanweisung zu enthalten scheint, was dazu führt, dass die Daten, die in das Mikro getaktet werden, ungültig sind. Dies geschieht, obwohl ich jedes Mal dieselbe Leseanweisung in den SSPBUF schreibe. Was kann bei einem SPI-Bus noch schief gehen?
In der Vergangenheit habe ich festgestellt, dass einige der PIC-Datenblätter die SPI-CPOL- und CPHA-Register nicht korrekt anzeigen. Es gab einige Probleme, dass beim Betrachten der Ausgabe auf einem Oszilloskop zwei der vier Kombinationen anders als erwartet waren . Überprüfen Sie also noch einmal, ob Sie tatsächlich die erwartete Wellenform aus Ihrem PIC erhalten und ob die Wellenform mit dem übereinstimmt, was auf dem EEPROM benötigt wird.
Ich bin auch auf einige A/D-Wandler gestoßen, die zeitweise funktionierten, als ich falsche SPI-Einstellungen auf einem HC12 hatte, mich dazu brachten, es herauszufinden, war eines meiner ersten Projekte als professioneller Ingenieur, schließlich habe ich es geschafft. Aber ich schweife ab. Daher ist es möglich, dass bei Verwendung des SPI-Busses zeitweise Probleme auftreten, wenn CPOL/CPHA falsch eingestellt ist. Da es sich schließlich um ein Schieberegister handelt, kann das letzte Bit eines Zeichens vom ersten des nächsten Zeichens gelesen werden. Diese Art von Problem wird möglicherweise auch nicht sofort bemerkt.
Stellen Sie also sicher, dass Sie die richtigen Einstellungen an einem Oszilloskop haben, und verlassen Sie sich nicht darauf, nur die Register des PIC einzustellen.
Wenn Sie einen Schaltplan haben, posten Sie ihn, auch alle Informationen darüber, wie Sie die Signalleitungen behandeln. Bei 1-MHz-Übertragungsleitungseffekten können Effekte ins Spiel kommen. Sie haben erwähnt, dass Sie das Signal erfasst haben und alles gut aussah, aber haben Sie die Anstiegs- / Abfallzeiten, Reflexionen und das Klingeln überprüft? Sind Ihre Signalleitungen terminiert und impedanzgesteuert? Wie lang sind sie?
Andere zufällige Dinge könnten sein:
Ich hatte ähnliche zeitweilige Fehler und fand heraus, dass es ein Fehler im Code war. Es hatte nichts mit SPI zu tun, aber von Zeit zu Zeit wurde der Chip zurückgesetzt und dies führte dazu, dass Müll in den On-Chip-Speicher geschrieben wurde. Stellen Sie sicher, dass Ihr Code stabil ist. Eine Möglichkeit, dies zu tun, wäre beim Zurücksetzen, dass Sie eine Taste drücken müssen, damit es nicht automatisch neu gestartet wird.
Kevin Vermeer
mjh2007