Hallo,
um mich in die Thematik FPGA einzuarbeiten, habe ich mir ein recht
betagtes Spartan-3 Starter Board besorgt. (das hier:
http://www.digilentinc.com/Products/Detail.cfm?NavPath=2,400,799&Prod=S3BOARD)
Dazu gehört nur ein Programmier-Adapter für den Parallel-Port, welchen
mein Computer leider nicht aufweist. Deshalb versuche ich nun, mit Hilfe
eines FT2232D basierenden USB-Adapter das Bit-File auf den FPGA zu
bringen. (Dieser Adapter:
http://www.ixbat.de//files/admin/projekte/openocd/610000043A.pdf)
Als Software zum Download möchte ich xc3sprog in der compilierten
Windows-Version verwenden (http://xc3sprog.sourceforge.net/), welches ja
sowohl mit dem FTDI-Chip als auch dem FPGA zurecht kommen soll.
Mein Problem ist nun, dass xc3sprog einen falschen IDCODE liest und kein
Programmieren möglich ist. Ich bekomme, wenn ich 'detect JTAG chain'
auswähle, folgende Meldung:
1
> xc3sprog.exe -c ftdi -j
2
Release $Rev: 401 $
3
Free software: If you cContribute nothing, expect nothing!
4
Please provide feedback on success/failure/enhancement requests!
5
Check Sourceforge SVN for updates!
6
Cannot find device having IDCODE=00082043
7
JTAG loc.: 0 IDCODE: 0x00082043 not found in 'built-in device list'.
8
JTAG loc.: 1 IDCODE: 0xf5045093 Desc: XCF02S IR length: 8
Der Flash-Baustein wird korrekt erkannt, der FPGA hingegen nicht.
Eigentlich sollte der verwendete XC3S200 einen IDCODE 01414093 haben.
Hat jemand eine Idee, was ich falsch mache?
Grüße,
Kai
Wie ist der FTDI Baustein angekoppelt? Fliegend oder stabil ueber dafuer
vorgesehene Kabel und Steckverbinder?
Der Fehler ist typisch fuer Wackelkontakte in der JTAG Kette. Versuche
mal mit der -T0 Option einen dauertest der Kette zu fahren und mit einem
Oszi den Fehler zu finden. Vielleicht hilft auch nur Wackeln an den
Kontakten.
Vielleicht ein Engineering Sample ?
Was steht denn auf dem Chip selbst ?
Ich habe auf die Schnelle nur ein Dokument fuer Spartan 6 gefunden,
aber vielleicht hilft es weiter:
http://www.xilinx.com/support/answers/37579.htm
Andere Alternative: Hast du schon mal den Xilinx Support kontaktiert ?
Koennen die den IDCODE einem Chip zuordnen ?
Hallo,
der FTDI ist, wie ich finde, recht sicher angeschlossen. Ich habe
einzelne Leitungen mit Crimp-Kontakten verwendet, die sitzen auch fest.
(siehe Foto) Einen Wackelkontakt würde ich daher ziemlich sicher
ausschließen.
Der IDCODE ändert sich auch nie. Er ist bei jedem Auslesen 0x00082043.
Der Dauertest hat auch keine neuen Erkenntnisse gebracht.
Zum Engineering Sample: auf dem Chip ist kein ES vermerkt. Und es wäre
ja auch recht seltsam, auf so nem kommerziellen Starter Board was
außergewöhnliches einzusetzen.
Muss ich irgendwas bei den Jumpern auf dem Board beachten? Die
Mode-Jumper sind alle gesteckt, JP1 steckt auch 'default'.
Grüße,
Kai
Kai schrieb:> Der IDCODE ändert sich auch nie. Er ist bei jedem Auslesen 0x00082043.
Dann modifiziere doch die devlist.txt und ergänze mal Deinen Chip:
1
00082043 6 XC3S200
> Und es wäre> ja auch recht seltsam, auf so nem kommerziellen Starter Board was> außergewöhnliches einzusetzen.
Nein. Ich habe hier ein SP601 da ist definitiv ein ES drauf.
Duke
Was sagt die -T Option Die pruef, ob die JTAG Kette stabil gelesen
werden kann und hilft beim Debuggen mit dem Skope.
> xc3sprog -c ft2232test -T10000
...
Reading ID_CODE 10000 times
Sending 10 bits IDCODE Commands: 0x9100
Expecting 2 IDCODES : 0x0978103f 0x02218093..........
JTAG loc.: 0 IDCODE: 0x02218093 Desc: XC3S200A Rev: A
IR length: 6
JTAG loc.: 1 IDCODE: 0x0978103f Desc: AT90CAN128 Rev: A
IR length: 4
Wenn irgendwann mal etwas falsches gelesen wird, wird der anders
gelesene Code gedruckt. Erst wenn dass wirklich fuer viele Lesevorgaenge
geht, kann man die Kette als stabil betrachten.
Leider laesst mich das System gerade keine Datei anhaengen, evt geht das
Posten auch wieder. Auf Anfrage sende ich einen auf Windows ungetesteten
Build 617. Der laeuft nur mit 1/8 der JTAG Frequenz. Evt haengt der
Fehler ja mit der JTAG Frequenz zusammen.
Meine Adresse findet man leicht mit Google/etc.
Da ich so gerne Fotos mache, hier noch der Aufdruck vom Chip. Ich würde
sagen, dass ist ein ganz normaler XC3S200, laut Datenblatt
gekennzeichnet.
Duke Scarring schrieb:> Dann modifiziere doch die devlist.txt und ergänze mal Deinen Chip:
Hab ich gemacht. Jetzt erhalte ich die nächste Fehlermeldung... :(
1
>xc3sprog.exe -c ftdi -v test.bit
2
Release $Rev: 401 $
3
Free software: If you cContribute nothing, expect nothing!
4
Please provide feedback on success/failure/enhancement requests!
Sorry, can't program device 'XC3S200' from manufacturer 0x21 A more recent release may be able to.
9
USB transactions: Write 6 read 4 retries 8
Die Zeile in der devlist.txt sieht jetzt so aus:
1
#01414093 6 0x9 XC3S200
2
00082043 6 0x9 XC3S200
Uwe Bonnes schrieb:> Auf Anfrage sende ich einen auf Windows ungetesteten> Build 617
Danke, das Anhängen hat scheinbar wieder funktioniert. Ich habs mal mit
deiner Version ausprobiert, da kommt allerdings das Gleiche bei raus.
(mit derselben, veränderten devlist.txt)
XC3SPROG (c) 2004-2010 xc3sprog project $Rev: 617 $ OS: Windows
3
Free software: If you contribute nothing, expect nothing!
4
Feedback on success/failure/enhancement requests:
5
http://sourceforge.net/mail/?group_id=170565
6
Check Sourceforge for updates:
7
http://sourceforge.net/projects/xc3sprog/develop
8
9
Using Libftdi,
10
Sorry, can't program device 'XC3S200' from manufacturer 0x21 A more recent release may be able to.
Uwe Bonnes schrieb:> Was sagt die -T Option Die pruef, ob die JTAG Kette stabil gelesen> werden kann und hilft beim Debuggen mit dem Skope.
Das werde ich dann gleich noch ausprobieren und mir dabei die Signale
auf dem Oszi anschauen. Nur muss ich mir dafür erstmal Zugang zu einem
Oszi verschaffen...
Danke für eure Unterstützung!
Grüße,
Kai
Kai schrieb:> #01414093 6 0x9 XC3S200> 00082043 6 0x9 XC3S200
Die IdCodes sind schon sehr unterschiedlich. Vermutlich hast Du doch
eher ein Problem mit der Signalintegrität. Mit welcher Spannung läuft
Deine JTAG-Kette?
Duke
Okay, bin ans Oszi ran und habe viele Überraschungen erlebt...
Duke Scarring schrieb:> Vermutlich hast Du doch> eher ein Problem mit der Signalintegrität
Das glaube ich mittlerweile auch. Nur kann ich die Ursache noch nicht
sehen.
Zuerst habe ich einfach das Oszi an die Pins bei J5 angeschlossen. Beim
Detektieren der JTAG-Kette blieb alles beim Alten, auf dem Oszi gabs
keine großen Überraschungen.
Dann habe ich mal den Tastkopf an den TDI Eingang des Flash direkt
rangehalten (2. in der Kette) und siehe da, nun wurde die korrekte ID
des FPGAs ausgelesen. Da ich nicht an VooDoo glaube, muss hier irgendwas
im Argen sein.
Ein -T1000 Test bestätigt dies:
1
>xc3sprog.exe -c ftdi -j -T1000
2
...
3
Reading ID_CODE 1000 times
4
Sending 14 bits IDCODE Commands: 0xfe09
5
Expecting 2 IDCODES : 0xf5045093 0x01414093
6
Mismatch run 89: 0x81414093 0xf5045093
7
Mismatch run 96: 0x00000000 0xf5045093
8
Mismatch run 119: 0x81414093 0xf5045093
9
...
10
Failed 19/ 1000
11
...
Wenn ich jetzt noch die Ursache finde, kann ich diese beseitigen... Nur
weiß ich leider nicht, wo genau ich suchen soll.
Duke Scarring schrieb:> Mit welcher Spannung läuft> Deine JTAG-Kette?
Der FTDI bekommt als VCCIO die 3,3V VDD vom Board. Laut Schaltplan sind
jeweils 100R in den Leitungen TMS, TDI, TCK drin.
Die Clock-Leitung hat auf dem Board einen Hub von 2,4V. TDI hingegen
3,2V. Bei TDO sind es 2,44.
Brauch ich doch einen Level Shifter?
Grüße,
Kai
Laut dem Schaltplan S3Board.pdf arbeitet das Prom mit 3.3 Volt
VCCJ(VCCO), waehrend der XC3S mit VCCAUX 2.5 Volt arbeitet. Durch die
100 R zwischen den FTDI Ausgaengen und den internen TCK/TDI/TMS bekommt
dann das Prom einen High Pegel von VCCAUX + 1 * interne Schutzdiode. Das
reicht gerade so. XC3S TDO ist aber ein richtiges CMOS2.5 Volt Signal,
und dass reicht dem PROM wohl nicht richtig, zumindestens bei schnellen
Signalen, die dann noch nicht richtig den Endwert erreicht haben.
In meinen Schaltungen mit dem XC3S ist an der Stelle ein Pegelumsetzer.
XC3SA und XC6 kann aber auch JTAG mit 3.3 Volt und dann hat man das
Problem nicht mehr.
Probier doch mal die aktuelle Variante mit langsameren JTAG Takt, die
ich oben gepostet habe. Dann sind die Chancen groesser, das XC3S TDO
einen "richtigen" Pegel hat.
Beim FTDI sind AFAIR die Treiber ziemlich schwach, gerade tck eiert
ziemlich rum, beim schnellsten Takt (6MHz) kann man da nicht mehr
wirklich von digital sprechen. Schau mal, ob da auf dem FTDI-Board noch
Widerstande in den Signalen sind, die machen das nur noch schwammiger.
Dazu kann man im EEPROm die Treiberstaerke erhoehen:
High Current I/Os Disabled
Enables the high drive level on the UART and CBUS I/O pins.
Man braucht ein EEPROM auf dem Board, und mprog/ftprog oder pass
libftdi-1.0/examples/eeprom.c an
Mein FTDI Board hat leider keinen EEProm bestückt, also kann ich da
nichts mit FTProg konfigurieren. Aber ich habe noch Widerstände
entdeckt, jeweils 100R und dazu noch einen Kondensator mit 47p nach
Masse. Den Widerstand habe ich mal gebrückt. Hat aber auch nichts
geholfen...
Hier nochmal der Schaltplan:
http://www.ixbat.de//files/admin/projekte/openocd/610000043A.pdf
Im Anhang mal ein Snapshot der Signale, oben clock, darunter TDO des
Flash, darunter TDI des FPGA, ganz unten nochmal das TDO aber direkt am
FTDI gemessen.
Ich habe hierzu die xc3sprog-Version von Uwe verwendet, die Clock läuft
deshalb mit 1,5 MHz. Die Standard-Version läuft mit 6MHz und da sieht
die Clock echt verheerend aus...
Kann man die Geschwindigkeit irgendwie noch weiter drosseln?
So ganz verstanden habe ich die Sache mit der libftdi noch nicht. Wie
kann ich die unter Windoof einsetzen? Bis jetzt habe ich einfach
libusb-win32 mit der GUI verwendet, um einen Treiber zu erzeugen und zu
installieren. Aber da kann ich auch keine Treiberstärke einstellen...
Grüße,
Kai
Die Treiberstaerke laesst sich nur im FTDI EEPROM einstellen.
Um ein libftdi Programm zu kompilieren, brauchst Du ein Export File von
libusb-win32. Fuer den Mingw Compilier kann ich Dir das Export schicken.
Aber warum willst Du etwas kompilieren? Wenn es auch mit den 1.5 MHz
nicht laeuft, dann liegt das Problem an den Pegeln oder an Klinglern an
den Flanken. Bei gleicher Flankensteilheit bleibt das Klingeln auch bei
Signalen mit geringer Frequenz gleich.
Mach noch einen Versuch, wobei Du die Massen von Adapter und Karte noch
mit weiteren Kabel verbindest. Vielleicht brinmg das ein Quaentchen
sauberere Signale.
Uwe Bonnes schrieb:> Mach noch einen Versuch, wobei Du die Massen von Adapter und Karte noch> mit weiteren Kabel verbindest. Vielleicht brinmg das ein Quaentchen> sauberere Signale.
Hab ich probiert. Bringt aber leider auch nichts. Ich habe jetzt mal nen
EEProm bestellt und werde den noch auf dem FTDI-Board bestücken.
Kannst Du eventuell eine xc3sprog-Version bauen, die mit 500kHz oder
noch weniger läuft? Ich würde es ganz gern mal gaaanz langsam
probieren...
Mit nem alten Pentium3-Notebook hab ich eben noch versucht, per
Parallel-Kabel zu programmieren. Und da funktionierts problemlos... Also
kanns nicht am FPGA-Board liegen. Nur läuft dort das ISE verdammt
langsam.
Bis ich den EEProm hab, dauerts vermutlich noch ein paar Tage. Dann
werde ich erneut berichten, ob die Treiberstärke was ändert.
Grüße,
Kai
Die hier angehaengte Datei kennt jetzt eine -J [Wert] Option, um eine
maximale JTAG Frequenz vorzugeben. Die tatsaechlich mit dem Baustein
erreichbare Frequenz wird mit der -v (Verbose) Option ausgegeben.
Jetzt gehts!! :)
Was ich gemacht habe: Das OpenOCD-USB hat einen EEProm bekommen.
Natürlich hat der nicht gleich funktioniert, siehe hier:
http://meander.roofof.net/2008/07/missing-eeprom-on-openocd-usb-adapter.html
Deshalb war er wohl auch nicht bestückt. Naja, mit Fädeldraht hab ich
VCC und CLK getauscht, dann ließ sich auch der FT2232D mit FTProg
konfigurieren. Jetzt auf D2XX Treiber gestellt, High Current IOs
aktiviert und die Sache läuft.
Nun funktioniert das Programmieren zuverlässig mit 1.5MHz. Und es geht
wesentlich schneller als mit dem Parallelport-Kabel.#
Danke an alle, die mich hier unterstützt haben!
Viele Grüße,
Kai