Forum: FPGA, VHDL & Co. SPI multimaster mit EP4CE6C22C8N, XMega 192A3 und M25P16


von Kai L. (klaute) Benutzerseite


Lesenswert?

Hallo zusammen,

ich arbeite gerade an einer Schaltung und würde gerne einen Serial Flash 
(M25P16), welcher per SPI an einen FPGA (Altera EP4CE6C22C8N) 
angeschlossen ist, zusätzlich mittels einem XMega 192A3 auslesen und 
beschreiben können.
MSEL0/1/2 ist dabei auf 3,3V GND 3,3V geschaltet (AS standard POR).

Jetzt habe ich aktuell MISO/MOSI/SCK/NCS per Löt-Jumper jeweils einzeln 
für den XMega und den FPGA trennbar gestaltet, so dass ich "umstellen" 
kann. Eine komfortable Lösung ist das jedoch nicht.0

Da ich den Flash aber gerne im laufenden Betrieb, vom AVR aus, bedienen 
würde stellt sich mir die Frage ob dies überhaupt möglich ist.
Ich habe diverse Steuerleitungen des FPGA (NCS, NSTATUS, CONF_DONE, 
NCONFIG) bereits mit meinem AVR verbunden um hier ggfls. eingreifen zu 
können.

Dem Datenblatt der FPGA-Familie, dem Altera Cyclone Handbuch und dem 
CycloneIV Pin Connection Guideline kann ich so erst mal nicht (ist für 
mich nicht offensichtlich) entnehmen ob ich den FPGA in einen Zustand 
bringen kann, in dem ich von meinem AVR aus auf den Flash zugreifen 
können würde.

Vielleicht hat jemand von Euch ja Erfahrung oder eine Idee dazu...

Vielen Dank!

Kai

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Kai Lauterbach schrieb:
> einen FPGA
Der Array oder das Array?

> ob ich den FPGA in einen Zustand bringen kann, in dem ich von meinem
> AVR aus auf den Flash zugreifen können würde.
Hast du Zugriff auf das Design im FPGA? Dann könntest du einfach per 
Steuersignal die Leitungen hochohmig schalten und das FPGA könnte 
tortzdem "weiterlaufen"...

Wenn nicht:
1
To begin configuration, nCONFIG and nSTATUS must be at a logic high level.
2
You can delay configuration by holding the nCONFIG low.
Aus http://www.altera.com/literature/hb/cfg/cfg_cf51001.pdf
Aber beachten: während der Konfiguration sind die IO-Pins hochohmig. 
Auch die, die du nicht brauchst...

: Bearbeitet durch Moderator
von Kai L. (klaute) Benutzerseite


Lesenswert?

Vielen Dank für die schnelle Antwort!

Da ich Zugriff auf das Design im FPGA habe, habe ich nun Deinen 
Vorschlag getestet.

Die Leitungen MISO/MOSI/SCK und NCS habe ich hochohmig geschaltet. 
Leider meckert der Build-Prozess dabei, dass eine doppelte Verwendung 
der Pins nicht möglich ist.

In den "Device and pin options", welche in den projektspezifischen 
Einstellungen unter "Device" zu finden sind, kann man jedoch die 
Funktionalität für diverse Pins anpassen. Unter anderem auch die 
DATA0-/DATA1-/DCLK- und NCSO-Leitungen.

Hier sind in meinem Design bereits alle Pins, bis auf DCLK, auf "input 
tri-state" gestellt.

Bei der DCLK-Leitung ist jedoch "programming" konfiguriert und ein 
Hinweis dazu angegeben, dass man diese Einstellung nur auf der gerade 
genannten Einstellung oder "compiler specific" stellen sollte. Sofern 
der FPGA-Chip im "AS"-Modus arbeitet (siehe erste Nachricht).

Da ich nun aber mit meine SCK-Leitung - des AVR - auch am Flash benötige 
ist hier die Frage dies damit ein K.O.-Kriterium ist für mein Vorhaben. 
Schließlich möchte ich den DCLK-Pin des FPGA weder elektrisch 
"zerstören" noch mir die Möglichkeit nehmen per JTAG weiterhin auf den 
FPGA-Chip zugreifen zu können.

Wenn ich die Dokumentation zum Thema der dual-purpose-pins korrekt 
verstanden habe muss ich mich wohl für eine Variante entscheiden, oder 
siehst du das anders?

Vielen Dank!

Kai

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Kai Lauterbach schrieb:
> Leider meckert der Build-Prozess dabei, dass eine doppelte Verwendung
> der Pins nicht möglich ist.
Ja, wie denn doppelt?

Kai Lauterbach schrieb:
> ich arbeite gerade an einer Schaltung und würde gerne einen Serial Flash
> (M25P16), welcher per SPI an einen FPGA (Altera EP4CE6C22C8N)
> angeschlossen ist .. auslesen und beschreiben ...
Ist das dein Config-Flash?

von Kai L. (klaute) Benutzerseite


Lesenswert?

Lothar Miller schrieb:
> Ja, wie denn doppelt?

Wenn ich mich nicht irre war es der folgende Fehler, und das für jeden 
der verwendeten Konfigurations-Pins einzeln:

Error (176310): Can't place multiple pins assigned to pin location 
<pin_number> (<pin_name>)

Verwendet hatte ich diese zuvor in meinem Design nicht.
Wenn notwendig werde ich später noch eine weitere Antwort mit der 
exakten Fehlermeldung und einem Beispiel meines Designs posten.

Lothar Miller schrieb:
> Ist das dein Config-Flash?

Korrekt,das ist mein Config-Flash. Sorry, diese Info hatte ich in meiner 
ersten Frage unterschlagen... ;)

von Roger S. (edge)


Lesenswert?

Da du in deinem Design das EPCS 'manuell verdrahtest' also ueber 
toplevel und Pin Assignment, dann solltest du die entsprechenden Pins in 
den Device Options -> 'Dual-Purpose Pins' auf 'Use as regular I/O' 
setzen.

Falls dein AVR auf das FLASH zugreifen muss wenn das FPGA noch nicht 
konfiguriert ist (was wohl der Sinn der Sache ist) solltest du nCE des 
FPGA auf high und nCONFIG auf low halten. Nur dann ist der AS bus 
tri-stated.

Cheers, Roger

von Kai L. (klaute) Benutzerseite


Angehängte Dateien:

Lesenswert?

Zunächst danke nochmal für die Hilfe und die Antworten!

Roger Steiner schrieb:
> Falls dein AVR auf das FLASH zugreifen muss wenn das FPGA noch nicht
> konfiguriert ist (was wohl der Sinn der Sache ist) solltest du nCE des
> FPGA auf high und nCONFIG auf low halten. Nur dann ist der AS bus
> tri-stated.

Ich habe genau dies nun ausprobiert. Also nCE auf High gesetzt und 
nConfig auf LOW gehalten. Darauf hin konfiguriere ich die 
SPi-Schnittstelle per SPI driver von ATmel - App. Note: AVR1309; Rev. 
764.

Leider ist kein Zugriff per SPI möglich.

Im Anhang habe ich meine Spannungs-Messungen abgebildet. Es wurde 
während den Messungen keine Daten (versucht) übertragen.

Hat noch jemand ein Idee dazu? Ich bin mir an dieser Stelle nicht sicher 
ob es sich um ein elektrisches oder software-Problem handelt.

Ich werde versuchen in den kommenden Tagen mit einem Oszi die Pins zu 
messen.

von Roger S. (edge)


Lesenswert?

Ich wuerde in einem leeren design ein Signal-Tap auf die EPCS pins 
plazieren und aufzeichnen was der uC denn so auf dem SPI bus treibt.

Cheers, Roger

von Kai L. (klaute) Benutzerseite


Lesenswert?

Ich habe mir das ganze mit einem Oszi angesehen und der AVR ist an 
dieser Stelle offenbar das Problem. Ich werde berichten sobald dieser 
unter Kontrolle ist...

Danke für die vielen Anregungen und Tipps!

von Kai L. (klaute) Benutzerseite


Lesenswert?

Mit einer "manuellen" implementierung von SPI funktioniert der Zugriff 
vom AVR auf den SPI Flash des FPGA einwandfrei!

Das SPI-"Modul" in meinem XMega scheint "defekt" zu sein, denn mit 
diesem ist keinerlei Aktivität auf MOSI oder SCK zu messen.
Ich habe drei verschiedene Implementierungen ausprobiert siehe 
http://www.avrfreaks.net/forum/xmega-spi-code-problem-0.

Danke für die Hilfe!!!

von Duke Scarring (Gast)


Lesenswert?

Kai Lauterbach schrieb:
> Das SPI-"Modul" in meinem XMega scheint "defekt" zu sein, denn mit
> diesem ist keinerlei Aktivität auf MOSI oder SCK zu messen.
Wenn dem so wäre, hätte Atmel ein echtes Problem. Möglicherweise wurde 
bei der Konfiguration der SPI-Peripherie etwas übersehen.

> Mit einer "manuellen" implementierung von SPI funktioniert der Zugriff
> vom AVR auf den SPI Flash des FPGA einwandfrei!
Wenn Dir die Geschwindigkeit ausreicht, ist das eine zufriedenstellende 
Lösung.

Duke

von Kai L. (klaute) Benutzerseite


Lesenswert?

Naja zufriedenstellend ist etwas anderes,

aber es ist so wenigsten der Beweis,  dass die elektrische Verbindung 
korrekt ist.
Damit ist das Ziel auf dieser Seite erreicht!

Vielen Dank nochmals für die Unterstützung!

Wenn ich nicht von Beginn an den spi driver von Atmel zur Kommunikation 
verwendet hätte,
dann wäre ich mittlerweile der Meinung das es an meiner Implementierung 
liegt.
Ich habe jedoch noch 2 weitere Implementierung testen können,  welche 
auch die SPI Peripherie verwendet, und keine davon lieferte ein anderes 
Ergebnis.

von Duke Scarring (Gast)


Lesenswert?

Kai Lauterbach schrieb:
> Ich habe jedoch noch 2 weitere Implementierung testen können,  welche
> auch die SPI Peripherie verwendet, und keine davon lieferte ein anderes
> Ergebnis.
Ich habe mit den Xmegas noch nicht zu tun gehabt. Aber die weiteren 
Implementierungen (aus dem verlinken Forumsbeitrag?) haben ja bei 
anderen höchstwahrscheinlich auch funktioniert.

Vielleicht muß das SPI-Modul aus dem Powerdown geholt werden?
Oder der Multiplexer, der die Pinzuordnung bestimmt ist noch nicht 
richtig konfiguriert?
Evtl. spielt auch die DMA/Event-Konfiguration mit rein?

Duke

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.