Synchronisieren von SPI-Ports für höhere Datenrate

Ich entwerfe ein neues Board, das den NXP LPC4330 (Cortex M4-Mikrocontroller) mit einem XESS Xula2 FPGA-Entwicklungsboard verwendet. In diesem Design verfügt der Xula 2 über begrenzte E/A-Pins, da er so konzipiert ist, dass er in einen DIP-40-Formfaktor passt. Die primäre Form der Kommunikation zwischen dem Mikro und dem FPGA erfolgt über SPI.

Ich möchte, dass der Bus eine ziemlich hohe Geschwindigkeit hat, in der Größenordnung von 80 bis 100 Mbps. Es könnte ausreichen, einen einzelnen SPI-Port mit 80 MHz zu betreiben, aber da der Haupttakt auf dem FPGA nur mit 120 MHz läuft (und die SPI-Schnittstelle antreibt), bin ich mir nicht sicher, ob der SPI bei einem solchen funktionieren würde hohe Datenrate. Der LPC4330 hat mehrere SPI-Ports, und eine Idee, die ich habe, ist, 2 SPI-Ports zu verwenden, damit jeder mit einer langsameren Bitrate laufen kann. Es gibt viel Platz auf dem Spartan 6 FPGA, aber ich habe nicht die E/A-Pins auf der Entwicklungsplatine, um 2 Sätze von allen 3 MOSI/MISO/SCK (plus einen einzelnen CS) zu haben.

Daher frage ich mich, ob es möglich ist, die Ports auf dem LPC so zu synchronisieren, dass sie sich eine SPI-Uhr teilen. Die schnelle Kommunikation muss nur in eine Richtung erfolgen, also müsste ich nur den MISO-Pin verdoppeln (das Mikro muss schnell vom FPGA lesen, nicht umgekehrt). Es scheint keinen speziellen Modus zum Synchronisieren der SPI-Ports zu geben, aber ich gehe davon aus, dass sie sich aufgrund der Taktarchitektur des Mikros in derselben Taktdomäne befinden würden.

Mir ist klar, dass es auf dem NXP auch ein Multiport-SPIFI (Spi-Flash-Speicherschnittstelle) gibt. Hat jemand Erfahrung damit, einen Block auf dem FPGA zu erstellen, der im Grunde einen SPI-Flash emuliert?

Also meine Fragen sind a) Glaubst du, das wird funktionieren? und b) gibt es einen besseren Weg, dies zu tun?

Denken Sie daran, dass "Maximale Datenbitrate ein Achtel der peripheren Taktrate." ( UM10503 , Kapitel 42.3) - 204 MHz/8 = 25,5 MHz

Antworten (3)

Verwenden Sie SGPIO.

Es enthält 16 Schieberegister mit je 32 Bit und ist sehr flexibel in seinen Möglichkeiten. Sie können bis zu 8 Register verketten oder bis zu 8 Ein- oder Ausgänge parallel betreiben.

Eigentlich sieht dies nach der besten Option aus. Vielen Dank dafür, ich wusste nicht, wofür SGPIO steht und wusste nicht, dass das Mikro diese Funktion hat.
Es ist großartig. Ich verwende es, um Daten von einem AD7367-ADC mit maximaler Rate zu lesen, der eine SPI-ähnliche Schnittstelle mit zwei Datenbits parallel hat. Was SGPIO betrifft, gefällt mir besonders, dass Sie Signalwellenformen frei definieren können, indem Sie Daten in die Schieberegister laden und sich dann in Schritten von 5 ns bewegen, indem Sie die Taktzähler vorab laden. Es fühlt sich an wie Bit-Banging bei 200 MHz.

Es ist möglich, einen der SPI-Ports Ihres Mikrocontrollers als Master und einen oder mehrere andere Ports als Slaves zu programmieren. Dies würde wahrscheinlich physische Drähte erfordern, die die Taktpins für die SPI-Ports miteinander verbinden. SPI-Slave-Implementierungen haben manchmal skurrile Timing-Einschränkungen und Verhaltensweisen, aber es sollte wahrscheinlich möglich sein, dass ein SPI-Slave jede Geschwindigkeit bewältigen kann, die der SPI-Master erzeugen könnte, wenn beide Geräte von derselben Quelluhr laufen. Wenn Sie DMA verwenden, stellen Sie sicher, dass der SPI-Slave eine höhere Priorität als der SPI-Master hat. Andernfalls könnte der Master versuchen, Daten auszutakten, bevor der Slave damit fertig ist, wenn es genügend Buskonflikte gibt, um einen Slave-Schreibvorgang zu verzögern, aber keinen Master-Schreibvorgang.

Ich werde wahrscheinlich mit dem SGPIO gehen, da ich keine Jumper-Pins auf der Platine brauche, aber ich würde wahrscheinlich mit diesem gehen, wenn der Chip kein SGPIO hätte (was ich nicht wusste, bis starblue es erwähnt hatte ). Danke!

Ich habe gerade die Spezifikationen des LPC4330 gelesen und es scheint Quad-SPI zu unterstützen. Dies ist eine Variante von SPI, die Takt, Auswahl und 4 bidirektionale Datenleitungen verwendet, um 4 Bytes pro Zyklus zu übertragen.

Dies kann das sein, was Sie brauchen.

Ich habe mir das Quad-SPI angesehen, aber es scheint nur mit dem SPIFI (spi flash interface) funktionieren zu wollen. Soweit ich das beurteilen kann, scheint es den SPI-Flash direkt in den Adressraum des Mikros abbilden zu wollen, sodass ich einen tatsächlichen seriellen Flash-Chip im FPGA emulieren müsste (alle Opcodes und Befehle). Es scheint einen Modus zu geben, um dem SPI tatsächliche Befehle zu erteilen, aber das Softwarehandbuch ist irgendwie vage darüber, wie man tatsächlich in den Befehlsmodus gelangt ...