Forum: FPGA, VHDL & Co. xc3sprog: falscher IDCODE


von Kai (Gast)


Lesenswert?

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

von Uwe Bonnes (Gast)


Lesenswert?

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.

von user (Gast)


Lesenswert?

ist der IDCODE immer der gleiche? oder ändert er sich wenn man den 
öfters ausliest?

von Duke Scarring (Gast)


Lesenswert?

user schrieb:
> ist der IDCODE immer der gleiche?
Der ist immer gleich. Schau mal in die devlist.txt

Duke

von Martin M. (capiman)


Lesenswert?

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 ?

von Kai (Gast)


Angehängte Dateien:

Lesenswert?

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

von Duke Scarring (Gast)


Lesenswert?

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

von Uwe Bonnes (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Kai (Gast)


Angehängte Dateien:

Lesenswert?

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!
5
Check Sourceforge SVN for updates!
6
Using devlist.txt
7
JTAG chainpos: 0 Device IDCODE = 0x00082043     Desc: XC3S200
8
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)
1
D:\Software\PROGRA~1\XC3SPR~1\win32>xc3sprog.exe -c ftdi -r test.bit
2
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

von Duke Scarring (Gast)


Lesenswert?

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

von Kai (Gast)


Lesenswert?

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

von Uwe Bonnes (Gast)


Lesenswert?

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.

von Georg A. (Gast)


Lesenswert?

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.

von Uwe Bonnes (Gast)


Lesenswert?

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

von Uwe Bonnes (Gast)


Lesenswert?

Beim FT2232D heisst das AIsHighCurrent und  BIsHighCurrent und in 
libftdi
HIGH_CURRENT_A oder HIGH_CURRENT_B

von Kai (Gast)


Angehängte Dateien:

Lesenswert?

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

von Uwe Bonnes (Gast)


Lesenswert?

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.

von Kai (Gast)


Lesenswert?

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

von Uwe Bonnes (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Georg A. (Gast)


Lesenswert?

Als Pfuschlösung könnte man noch mit Pullups auf den Signalen rumspielen 
(so 2k und kleiner werdend).

von Kai (Gast)


Lesenswert?

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

von Duke Scarring (Gast)


Lesenswert?

Danke für die (positive :-) Rückmeldung!

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.