www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Spartan3E bootet weder aus SPI Flash noch aus Platform Flash

Autor: Andreas N. (poolspieler)
Datum:

Hallo,
ich habe mir ein Custom Board für einen XC3S500E-FG320 aufgebaut.
Im Prinzip funktioniert es schon ganz gut - aber leider nur, wenn ich es
über JTAG Flashe.
Ich bringe weder das Platform Flash (XCF04S) noch das SPI Flash (M25P80)
zum laufen. Das Board ist stark an das Design des Spartan3E Starter Kits
angelehnt.
Die MODE-Pins sind korrekt belegt:
000 für XCF04S
100 für SPI
für HSWAP habe ich sowohl einen Pullup, als auch einen Pulldown
ausprobiert - keine Änderung (Pulldown bzw. offen steht im
Referenzdesign...)
VS0-VS2-Pins sind auf 111 über Pullups gelegt
Bei beiden Bausteinen kann ich während des Power-ups an den Clock- und
Datenpins Signale erkennen. Dauern um die 5ms - dann ist Ruhe. Die
DONE-LED bleibt aus :-(
Wenn ich nach dem Powerup kurz auf die PROG-Taste drücke, dann kommt ein
kontinuierlicher Rechteck auf dem Clock-Signal - bis ich das Board
stromlos mache...

Programmieren kann ich beide Bausteine über IMPACT und das USB-II Cable.
Ich kann die Bausteine auch auslesen (READBACK) und erhalte sinnvolle
Daten.
Jetzt bin ich am Ende - und hoffe, dass mir hier jemand helfen kann!!!

Beste Grüße,
Andreas
Autor: hp-freund (Gast)
Datum:

Vielleicht hilft das:

http://www.edaboard.com/ftopic266981.html

vorletzter Beitrag.
Autor: Andreas N. (poolspieler)
Datum:

Hallo hp-freund,
vielen Dank für Deine Antwort.
Den Link kannte ich leider schon. Bei Meinem Design liegt der CS-Pin des
XCF04S über einen Jumper auf GND. Mit einem Oszi habe ich mir auch schon
die Signale angeschaut. Wie gesagt, die Pegel sehen eigentlich gut aus.
Keine Störungen auf den Signalen zu erkennen.
Ich habe heute mal in die Richtung "falsche Konfiguration" gesucht:
Stichwort CCLK --> habe auch im bitgen.ut auf CCLK umgestellt - ohne
Erfolg. Was aber auch zu Erwarten war, weil das ja IMPACT autmatisch
macht (machen sollte...).

FRAGE:
Kann es evtl. am Powerup liegen?
In welcher Reihenfolge müssen die Spannungen CORE, AUX und IO kommen?
--> habe schon diverse Datenblätter gewälzt - aber keine richtige
Antwort gefunden. Anscheinend gibt es wohl Probleme, wenn +3,3V am
Schluss kommt...???

Ich hoffe, mir kann jemand helfen :-(((

Gruß,
Andreas
Autor: Andreas N. (poolspieler)
Datum:

Hallo nochmal,
ich bin langsam (mal wieder) am verzweifeln :-(
Ich habe nun nochmal mit dem XCF04S herumprobiert (auch wenn ich
eigentlich langfristig mit dem SPI-Flash arbeiten muss...)
Auf der D0-Leitung sehe ich, dass sowohl nach dem PowerUp, als auch nach
der Betätigung des PROGB-Buttons für ca. 4 Sekunden daten kommen. Die
Daten scheinen auch mit dem, was ich hineinprogrammiert habe
übereinzustimmen - habe mir mal die MCS-Datei angesehen. Sie ist etwa
halb voll - und es kommen auch 50% Daten, dann nur noch 0xFF...
Seltsamerweise kommt CCLK ewig mit 1,25 MHz - auch nach dem die Daten zu
Ende sind...
DONE wir natürlich nicht HIGH :-((

--> Kann mir irgendjemand weiter helfen? Ist der Fehler in der Hardware,
oder in der Software zu suchen? Ich habe mir schon ein Starterkit
bestellt - nur um dieses Problem einzukreisen (werde es aber erst
nächste Woche erhalten...)

Beste Grüße,

Andreas
Autor: Lothar Miller (lkmiller) Benutzerseite
Datum:

> DONE wir natürlich nicht HIGH :-((
Schon mal in den Optionen von "Generate Programming File" (Rechtsklick)
mit dem Häckchen bei "Drive DONE pin high" herumprobiert?
Autor: Iulius (Gast)
Datum:

>> habe mir mal die MCS-Datei angesehen. Sie ist etwa
halb voll - und es kommen auch 50% Daten, dann nur noch 0xFF...


ich würde mal sagen du hast eine zu kleine Flash Größe ausgewählt und
flasht nur die Hälfte des Bitfiles.

Regel Nummer 1 : wenn du du mit Impact das MCS nicht genau so auslesen
kannst wie du es reingeschrieben hast, dann kann es gar nicht
funktionieren.

Einzige Ausnahme : wenn der Flash größer ist als das Bitfile kommt
danach noch Müll, den kann man ignorieren.

Aber wenn du etwa 1mb nur korrekt ausliest und danach nur FFs kommen und
die original mcs 2mb groß ist, dann ist auf jeden Fall etwas falsch
gelaufen.


Habe mich selbst ne ganze Zeit mit dem MCS rumgeschlagen, deswegen gilt
bei mir immer : MCS auslesen und mit DIV-Tool mit der alten Vergleichen.
Sollte ein Unterschied vor dem End of file (Befehl "01" im original mcs)
auftreten, dann ist der Flash vorgang definitiv gescheitert und ein
konfigurieren aus dem Flash ist nicht möglich.
Autor: Andreas N. (poolspieler)
Datum:

Hallo,
danke nochmal für Eure Antworten!

@Lothar: Diese Option habe ich auch schon ausprobiert - hat keine
Veränderung gebracht.

@Iulius:
Die Flashgröße ist schon OK. Das sind 4M Platz. Benötigt wird etwas über
2M. Der Flash ist zu 53% beschrieben. Ich bin mir sehr sicher, dass im
Flash die selben Daten stehen, wie in der MCS-Datei. Habe sowohl ein
Verify (gab keinen Fehler!) über JTAG gemacht, als auch die Daten über
Readback ausgelesen und verglichen:
:10543000040000000400000004000000040000005C
:10544000040000000400000004000000040000004C
:105450000C000180000000A00C000580000000008E
:105460000C0000800000FAEA0C000180000000B08F
:10547000040000000400000004000000040000001C <-- bis hier hin alles das selbe
--> ab jetzt kommen die 0xFF
:10548000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C
:10549000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C
:1054A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C
:1054B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC
:1054C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC
:1054D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC

--> Und das abschliessende EndOfFile (Du meintest wahrscheinlich Befehl 0x00 - oder?)
:00000001FF
--> Man könnte natürlich darüber nachdenken, ob das EOF VOR den ganzen 0xFFs kommen müßte...???
--> Und genau das sehe ich auch auf dem Oszilloskop.
1,84 Sekunden sich ändernder Datenstrom
1,56 Sekunden sich nicht ändernder Datenstrom (0xFF)

Ich habe irgendwie den bösen Eindruck, dass mein FPGA defekt ist. Ich
werde mal eine weitere Leiterplatte bestücken und ausprobieren. Ich
kanns mir zwar nicht vorstellen, aber das ist jetzt die einizige
Möglichkeit, die es noch auszuschließen gilt...

Für weitere Vorschläge bin ich aber trotzdem dankbar!

Beste Grüße,

Andreas
Autor: Andreas N. (poolspieler)
Datum:

Hallo,
das war es wohl auch nicht :-(
Die neue Leiterplatte geht auch nicht. OK, jetzt könnte man noch über
einen FPGA-Serienfehler nachdenken - das halte ich aber dann schon sehr
weit hergeholt...

Hat noch jemand Ideen?
Kann jemand evtl. ein bei Ihm funktionierendes bit- UND mcs-File posten?
--> Es geht natürlich um keine Funktion, sondern nur darum das FPGA zu
flashen...

Beste Grüße,

Andreas

p.s.:
@Iulius: Du hattest natürlich Recht mit dem INTEL-Befehl 0x01... ;-)
Autor: Iulius (Gast)
Datum:

Naja, sowas hatte ich auch schon.

Teilweise waren mehrere Zeilen mit FFs gefüllt (flash hat nichts
geschrieben), teilweise waren nur ein paar Bits nicht geschrieben, aber
weil beim Auslesen eine Checksumme oder CRC gebildet wird bricht das
FPGA ab.

Das geht soweit das es sich trotz nur 1 bit Fehler irgentwo im
ausgelesenen MCS nicht vollständig konfiguriert und somit nicht
"startet"


Deswegen lese ich zur Verifikation grundsätzlich das komplette MSC
wieder aus und checke es bis zum "01" (automatisiert mittlerweile
versteht sich)

Das verify von ISE hab ich noch nie probiert, kann bei gelegenheit mal
testen ob das anspringt wenn ein Fehler vorliegt.


Wie auch immer, ich bleibe dabei : stimmt es bis zum 01 nicht, dann
kannst du auf dem Board ewig suchen und messen, es kann nicht
funktionieren.
Autor: Andreas N. (poolspieler)
Datum:
Angehängte Dateien:

Hallo Iulius,
ich habe mal die MCS-Files angehängt.
Ich denke, dass der DIFF in Ordnung ist - oder?

Gruß,

Andreas
Autor: Andreas N. (poolspieler)
Datum:

Nach fast 4 Tagen Suche (entspricht ca. 45 Stunden!!!) habe ich den
Fehler gefunden:
Es muss sowohl die Clock, als auch die Datenleitung mit jeweils 2 100Ohm
Widerständen gegen 3,3V und GND terminiert werden. zusätzlich noch den
Reihenwiderstand - und schon geht es. Unterm Strich hattest Du Recht
Iulius! Wahrscheinlich hat das eine oder andere Bit am Anfang oder am
Ende der Datenübertragung nicht gestimmt - folgich falsches CRC und kein
"start"

Ich trinke jetzt erstmal ein Siegesbier!!! ;-)

Beste Grüße und danke für Eure Hilfe!

Andreas
Autor: Lothar Miller (lkmiller) Benutzerseite
Datum:

> Es muss sowohl die Clock, als auch die Datenleitung mit jeweils 2 100Ohm
> Widerständen gegen 3,3V und GND terminiert werden.
Das sieht mir aber nach Problemen beim Layout aus...  :-/
Das hättest du aber am Oszi sehen können/müssen (Über- und
Unterschwinger). Meine konfigurieren alle ohne irgendwelche
Terminierung.
Autor: Andreas N. (poolspieler)
Datum:

Hallo Lothar,
ich habe mal einen Spartan3 aufgebaut. Der ist damals auch ohne
Terminierung gelaufen. Da war aber auch nur ein Flash dran.
Hier sind ja zwei dran (M25P80 und XCF04S). Die CCLK-Leitung ist ca. 6cm
lang - ging leider nicht anders... Es mag sein, dass man auch ohne diese
Terminierung auskommen kann, wenn die Leitungen kürzer geführt werden.
Xilinx schreibt im Dokument ug332.pdf folgendes:
The best signal integrity is ensured by following these basic PCB guidelines:
• Route the CCLK signal as a 50 Ω controlled-impedance transmission line.
• Route the CCLK signal without any branching. Do not use a “star” topology.
• Keep stubs, if required, shorter than 12.5 mm (0.5 inches).
• Terminate the end of the CCLK transmission line.
Im Schaltplan des Spartan3E-Starterkits findet man diese Terminierung
auch (ist aber sehr gut versteckt...)

Die Über-/Unterschwinger habe ich schon gesehen. Da sie aber kleiner
100mV waren (ich kann es leider nicht mehr nachmessen...) habe ich denen
erstmal keine große Bedeutung zugeordnet. Weil ja (meiner Meinung nach)
keine High/Lowpegel davon betroffen waren.

Beste Grüße,
Andreas
Autor: Lothar Miller (lkmiller) Benutzerseite
Datum:

> Terminate the end of the CCLK transmission line
Da klingelt was, da muss ich mal nochmal nachsehen...

Three minutes later...
Richtig, am S3 habe ich auch die Terminierung.
Das Design ohne Abschlusswiderstände war noch beim Spartan 2   :-o


Da fällt mir noch was auf:
> gegen 3,3V und GND
Kann dein FPGA noch 3.3V am Programmierinterface ab?
Aus dem DS099:
A 3.3V-tolerant configuration interface simply requires add-
ing a few external resistors as described in detail in 
"The 3.3V Configuration of Spartan-3 FPGAs" (XAPP453).
Autor: Andreas N. (poolspieler)
Datum:

Hallo,
nur nebenbei:
Ich habe gerade mal die configuration rate auf 25MHz gestellt -
funktioniert immernoch bestens --> werde ich aber im Zielprojekt
natürlich nicht verwenden (Weichei...).

Wegen 3,3V:
Um JTAG mit 3,3V nutzen zu können, braucht man Serienwiderstände (siehe
Datenblatt).
Meine Flashbausteine laufen auch mit 3,3V --> Bank2 wird ebenfalls mit
3,3V gespeist. Ich habe mich hier strikt an Datenblätter und vor allem
die Vorlage des Starterkits gehalten. Hoffe ich ;-)

Gruß,

Andreas

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net