www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Spartan 3A über FTDI USB IC flashen


Autor: Johann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo @ all FPGA-User,

ich möchte ein neues Spartan 3A Board bauen. Auf dem Board soll auch ein 
FTDI FT2232H High Speed USB Chip verbaut werden. Nun habe ich gelesen, 
das man mit Hilfe des FTDI USB Chips eine JTAG oder SPI Interface bauen 
kann. Somit kann auch ein FPGA oder ein externer Firmwarebaustein 
beschrieben werden.

Bis jetzt habe ich vor einen Spartan 3A (XC3S400A) zu verwenden  Dieser 
benötigt einen 1,9MBit Flash Baustein, in dem die Firmware gespeichert 
werden kann. Ich habe gelesen das sich ATMEL Serial Flash Speicher 
hierzu gut eignen soll.

Ich habe das Model "AT45DB021D" mit 2 MBit gewählt
http://www.atmel.com/dyn/products/product_card.asp...

Diese Speicher ist sehr gut verfügbar und zudem auch noch sehr günstig 
(1€)


Jedoch habe ich noch keine genaue Vorstellung wie dies gehen soll und 
wie ich die Beschaltung aussehen soll.


Zudem welches Programm kann man für den übertragen der Firmware 
benutzen?


Es wäre schön wenn einige mal ihre Erfahungen posten könnten wie man 
dies am besten umsetzt.

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also zunächst mal lassen sich die per SPI angeschlossenen Flashes über 
Impact mit indirekter Programmierung über den JTAG Anschluss 
beschreiben. Dazu lädt impact einen kleinen Core in den FPGA, der die 
Übersetzung zwischen JTAG und SPI macht.
Außerdem kann man den auch per SPI Direct Programming mit dem USB 
Platform Cable von Xilinx direkt beschreiben. Die zugehörigen 
Schaltungen findest du im Configuration User Guide.
Über den FT2232H gehts natürlich auch, musst dir aber dann selbst eine 
Softare schreiben, die entweder SPI für die direkte Progarmmierung oder 
aber JTAG für die indirekte Programmierung macht.
Der Charme der SPI-Flash Lösung ist neben dem Preis, dass du den Flash 
aus der FPGA Firmware heraus direkt beschreiben kannst. Es muss also im 
Idealfall nur einmal das Bitfile per JTAG drauf und dann kannst du 
Firmware-Update über dein Design machen. Die Pins sind nach der 
Konfiguration des FPGA normale I/Os, also der Flash steht dir dann 
komplett zur Verfügung. Wenn das Gerät sowieso ein 
Kommunikationsinterface hat, ist das sehr sinnvoll.

Autor: Matthias G. (mgottke)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es wäre zu überlegen, ob man nicht gleich einen etwas größeren Flash (4 
oder 8 MBit) nimmt. Dann kann man ein Multi-Boot-System bauen, also 
mehrere Konfigurationen des FPGAs ablegen. Und man kann Daten darauf 
speichern im freien Bereich.

Allerdings würde ich Dir dann empfehlen auf den STM-Speicher zu 
wechseln. Das laden des Designs nach dem Power-Up erfolgt im Continuous 
Read des Flash ab Adresse 0. Da gibt es zwischen den Atmel und STM-Typen 
keinen Unterschied. Allerdings sind die Atmel im Default im 264 Byte 
Page Mode. Daher ist die Adressierung im SPI-Protokoll anders aufgebaut. 
9-Bit für die Auswahl der Bytes und dann erst die Bits für die Auswahl 
der Pages. Das hat zur Folge, dass Impact mit der indirekten 
Programmierung (hier wird ein Continious Write aus dem FPGA heraus 
gemacht) die Adressierung fasch aufbaut und Die Daten an einer anderen 
Adresse ablegt. Das muss dann auch beim Starten eines zweiten Boots bei 
der Adressgenerierung beachtet werden.

Bei Xilinx findet man dazu aber leider nichts (zumindest noch vor 2 
Jahren). Das habe ich mir mühselig erkämpfen müssen in dem ich den 
Bitstream des SPI mit dem Oszi analysiert habe bevor ich auf das Problem 
gestoßen bin.

Autor: Johann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast Du denn ein Beispiel für einen STM Speicher?

Wie kann der FPGA zwischen mehreren Firmwareversion in einem externen 
beim booten auswählen?

Muß man da einen eigenen Bootloader schreiben?

Autor: Dose (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich nutze zum programmieren des Spartan 3AN700 bereits den FTDI-Chip.

Die Programmiersoftware ist xc3sprog:

http://sourceforge.net/projects/xc3sprog/

Läuft richtig super.

Autor: Matthias G. (mgottke)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Johann schrieb:
> Muß man da einen eigenen Bootloader schreiben?

Gibts bereits von mir. Siehe Anhang.

Für den Atmel-PROM habe ich zur Adressgenerierung folgende Kommentar in 
mein VHDL mit eingebaut.
-- Adressberechnung für die Startadresse des PROMs bei AT45DBxx:
-- Bei der Bitstream-Generierung wird das Startbyte angegeben. Das ist z.B.  0x010000 (64k-Byte-Adresse).
-- Der FPGA schickt als erstes zu dem Konfigurationsprom den Befehl 0xE8. Dies bedeutet "Continuous Array Read".
-- Gefolgt von 3 Byte Startadresse. Dieser wird aber nicht als Byte-Adresse vom PROM interpretiert, sondern wie folgt:
--
--         Bits    7    6    5    4    3    2    1    0
-- Adressbyte 1:   x    x    x    x   PA10 PA9  PA8  PA7
-- Adressbyte 2:  PA6  PA5  PA4  PA3  PA2  PA1  PA0  BA8
-- Adressbyte 3:  BA7  BA6  BA5  BA4  BA3  BA2  BA1  BA0
--
-- PA ist dabei die Page-Adresse á 264 Bytes und BA die Byte-Adresse innerhalb dieser Page. Um also von dieser Page
-- Starten zu können, muss man die Adresse auf dieses Format umrechnen: 
-- PA = ganzzahliger Anteil von 0x010000/264
-- BA = rest von 0x010000/264 multipliziert mit 264
-- => PA = 248 (11-Bit-Binär 00011111000)
-- => BA = 64  ( 9-Bit-Binär   001000000)
-- => Startadresse an picoboot: 00011111000001000000 = 0x01F040

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du nur den FPGA konfigurieren willst, und keinen µC da drin 
implementiert ist, brauchst du keinen Bootloader. Zunächst mal holt sich 
der FPGA selbst das BitFile aus dem Flash, wenn die 3 Mode Pins 
entsprechend gesetzt sind. Die MultiBoot Spezialitäten sind im Config 
User Guide beschrieben. Sollte man vielleicht als Anfänger nicht gleich 
alles auf einmal implementieren.

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
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
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 bestätigst du, die Nutzungsbedingungen anzuerkennen.