Forum: FPGA, VHDL & Co. Lattice ispMACH 4A5 auslesen?


von Sven L. (lemming)


Lesenswert?

Hallo Experten, leider kenne ich mich mit CPLDs so garnicht aus. 
Deswegen bräuchte ich mal eine schnelle Info von jemandem, der sich mit 
den Lattice CPLDs auskennt.

Genauer gesagt geht es um einen Lattice iM4A5-192/96 der einige defekte 
I/O pins hat und der deshalb ersetzt werden muss. Kann man da irgendwie 
das Configuration ROM per JTAG auslesen? Ausser zu dutzenden "security 
features" habe ich beim Hersteller so nicht viel dazu gefunden. Und 
welche >low-cost< Programmieradapter gibt es für diese Modelle? Oder 
funzt das Lattice Tool mit jedem Wiggler Klon?

http://www.latticesemi.com/products/cpld/ispmach4a5.cfm

Vielen Dank im voraus!~

von Lattice User (Gast)


Lesenswert?

Die aktuellen Versionen der Lattice USB Adapter (insbesondere wenn in 
einem APP Board integriert) basieren auf den FTDI USB Controller. Soweit 
ich gesehen habe basieren diese auf den standard Treibern und DLLs von 
FTDI (ab ispVM 18.0).

Es ist aber möglich, dass die Seriennummer des Devices abgefragt wird. 
Lattice codiert in dieser den Adapter/Boardname.

von Bürovorsteher (Gast)


Lesenswert?

> Genauer gesagt geht es um einen Lattice iM4A5-192/96 der einige defekte
> I/O pins hat und der deshalb ersetzt werden muss. Kann man da irgendwie
> das Configuration ROM per JTAG auslesen?

Wenn jemand leichtsinningerweise das Securitybit, das den Schaltkreis 
vor den Auslesen schützt, nicht gesetzt hat, kannst du das. Also: 
PGM-Kabel
(das alte Parallelkabel ist recht preiswert) und probieren, ob du den
Stein auslesen kannst. Das ist der einzige Weg.

Ob nachgekupferte PGM-Adapter laufen, kann ich dir nicht sagen.

von Sven L. (lemming)


Lesenswert?

Vielen Dank erstmal für die zahlreichen Hilfestellungen!

Ich habe ein (hoffentlich) passendes JTAG Kabel gestrickt und es am 
OPENOCD-USB JTAG Adapter von embedded-projects angeschlossen. Da steckt 
nur ein FT2232D drin.

UrJTAG liefert leider ziemlich wirres Zeug auf einen "idcode" Befehl, 
wobei der Output (richtig sortiert) zu der vom Hersteller angegebenen 
device id passt. :|  Noch nicht so überzeugend...

Welche "JTAG frequency" sollte man denn einstellen oder kann man die 
beliebig niedrig wählen? Am Ergebnis ändert sich dabei nicht viel. 
Sollte die ID nach dem Befehl nicht nur einmal ausgegeben werden?

Ich bin für jeden Rat dankbar. Werde es gleich nochmal mit der ispVM 
versuchen.

1
UrJTAG 0.10 #1502
2
3
jtag> cable OOCDLink-s VID=0x403 PID=0x6010
4
Connected to libftdi driver.
5
6
jtag> idcode
7
Reading 0 bytes if idcode
8
Read 00110001 00110001 01010111 00100001 00110001 01011100 00110001 00010111
9
00000000 00110001 00000000 00110001 00000000 00000000 00000000 00000000
10
11
jtag> idcode
12
Reading 0 bytes if idcode
13
Read 00000000 00110001 00000000 00110001 01010111 00100001 01011100
14
00010111 00000000 00000000 00000000 01010111 00100001 01011100 00010111
15
01010111 00100001 01011100 00010111 01010111 00100001 01011100 00010111
16
01010111 00100001 01011100 00010111 01010111 00100001 01011100 00010111
17
00100001 01011100 00010111 00110001 01010111 00100001 00110001 01011100
18
00110001 00010111 00000000 00000000 00000000 00000000


m4a192t_isc.bsm :
1
-- ********************************************************************
2
-- * M4A5-192/96 144 Pin TQFP 5.0V BSDL Model                         *
3
-- *                                                                  *
4
-- * File Version:      V2.00                                         *
5
-- * File Date:         Dec. 10, 2001                                 *
6
7
...
8
9
    attribute IDCODE_REGISTER of M4A5_192_96_XXVC : entity is
10
        "0001"&               -- version number (1)
11
        "0111010111000010"&   -- part identification (75C2)
12
        "00010101011"&        -- company code (157)
13
        "1";                  -- mandatory 1
14
15
...

von Sven L. (lemming)


Lesenswert?

So, unter Windows mit der ispVM erkennt er das IC in der JTAG chain aber 
ich kann keine Operationen darauf anwenden (ausser Reset). Ich bekomm 
immer: "Connection Error. Please check the JTAG signals connection." 
Heisst das jetzt, dass das Ding verriegelt ist (security fuse) oder 
woran erkennt ich das?

von Lattice User (Gast)


Lesenswert?

Sven L. schrieb:
> So, unter Windows mit der ispVM erkennt er das IC in der JTAG chain aber
> ich kann keine Operationen darauf anwenden (ausser Reset). Ich bekomm
> immer: "Connection Error. Please check the JTAG signals connection."
> Heisst das jetzt, dass das Ding verriegelt ist (security fuse) oder
> woran erkennt ich das?

Was steht im Logfile?

Du kannst dir auch einen SVF File erzeugen lassen und mit diesem es in 
OpenOCD versuchen um zu erkennen wo genau es nicht klappt.
Dem SVF File kann man auch die JTAG Frequenz entnehmen.

von Sven L. (lemming)


Angehängte Dateien:

Lesenswert?

Im Logfile steht leider garnichts, weil er schon beim "JTAG connection 
check" abbricht. Aber wenn ich diesen Test abschalte rennt alles so 
durch wie es soll. Zumindest liest er dann die device id und das 
configuration rom richtig aus.

Leider enthält das ausgelesene JEDEC File nur Nullen. :( Scheint also 
entweder nicht geklappt zu haben oder das Ding ist eben protected.

von Lattice User (Gast)


Lesenswert?

Sven L. schrieb:
> Im Logfile steht leider garnichts, weil er schon beim "JTAG connection
> check" abbricht.

Kann natürlich sein dass da noch ein Signal fehlt, normalerweise wird 
bei Lattice Adaptern auch VCCJ verbunden. Da man aber den Test 
abschalten kann ist das ja kein Showstopper.

Sven L. schrieb:
> Leider enthält das ausgelesene JEDEC File nur Nullen. :( Scheint also
> entweder nicht geklappt zu haben oder das Ding ist eben protected.

Da er alles andere richtig ausliest, ist das Ding mit ziemlicher 
Sicherheit protected.

von Sven L. (lemming)


Lesenswert?

Lattice User schrieb:
> Kann natürlich sein dass da noch ein Signal fehlt, normalerweise wird
> bei Lattice Adaptern auch VCCJ verbunden. Da man aber den Test
> abschalten kann ist das ja kein Showstopper.

Im Datenblatt steht, dass er nur die 4 JTAG Signale braucht, kein TRST 
und kein _ispEN. Mehr ist zum JTAG connector auf der Platine auch nicht 
verbunden.

> Sven L. schrieb:
>> Leider enthält das ausgelesene JEDEC File nur Nullen. :( Scheint also
>> entweder nicht geklappt zu haben oder das Ding ist eben protected.
>
> Da er alles andere richtig ausliest, ist das Ding mit ziemlicher
> Sicherheit protected.

Naja, nicht ganz. Manchmal vertut er sich irgendwie bei der Erkennung 
des Typs. Mal ist es ein M4A5 und mal nur ein M4. Die id codes 
unterscheiden sich nur in einem Bit.

Ok, habt Dank! Schade, dass ich so nicht weiterkomme. :( Dann muss ich 
wohl den Hersteller nochmal anhauen damit er das JEDEC File rausrückt...

von Bürovorsteher (Gast)


Lesenswert?

> Im Datenblatt steht, dass er nur die 4 JTAG Signale braucht, kein TRST
> und kein _ispEN. Mehr ist zum JTAG connector auf der Platine auch nicht
> verbunden.

Vcc und GND müssen aber zwingend mitangeschlossen werden, sonst läuft 
gar nichts. TRST und ispEN und INIT bleiben in der Tat offen.

von Andreas (Gast)


Lesenswert?

"Connection Error. Please check the JTAG signals connection."
-> kenne ich von meinen Versuchen mit ispvm und ftdi. Gelöst bekommen 
habe ich es nicht richtig. Allerdings musste ich nur einige cplds 
programmieren. In den Projekt-Settings gibt es eine Einstellung zum 
Ingorieren von Fehlern (auf der TDO Leitung). Nach Aktivieren dieser 
Eigenschaft konnte ich die cplds problemlos programmieren.

Den Umweg mittels SVF-File habe ich ebenfalls getestet, was mittels 
eines anderen Tools ohne Fehler funktioniert hatte.

Bin mir nicht ganz sicher ob die FTDI-Unterstützung schon ausgereift 
ist...

von Sven L. (lemming)


Lesenswert?

Bürovorsteher schrieb:
>> Im Datenblatt steht, dass er nur die 4 JTAG Signale braucht, kein TRST
>> und kein _ispEN. Mehr ist zum JTAG connector auf der Platine auch nicht
>> verbunden.
>
> Vcc und GND müssen aber zwingend mitangeschlossen werden, sonst läuft
> gar nichts. TRST und ispEN und INIT bleiben in der Tat offen.

Ja, sind sie auch, keine Sorge. Die hab ich nur nicht extra erwähnt. Der 
JTAG Adapter zeigt es auch an, dass Vtarget vorhanden ist.

von Sven L. (lemming)


Lesenswert?

Andreas schrieb:
> In den Projekt-Settings gibt es eine Einstellung zum
> Ingorieren von Fehlern (auf der TDO Leitung). Nach Aktivieren dieser
> Eigenschaft konnte ich die cplds problemlos programmieren.

Danke, "ignorieren" war auch meine "Lösung". ;)

von Lattice User (Gast)


Lesenswert?

Du hast doch eine mehr oder weniger fliegende Verdrahtung?

Wenn dem so ist, kann es auch sein dass TCLK keine saubere Flanken hat, 
und deswegen das Device manchmal 2 Clockpulse sieht wo eigentlich nur 
einer sein soll.

Was man versuchen kann ist ein 33 - 100 Ohm Serienwiderstand in die TCLK 
Leitung auf der Seite des JTAG Adapters.

Bei mir macht der FTDI2232D und ispVM keinen Ärger, aber da ist er auf 
einem Lattice Applikationboard integriert.

von Bürovorsteher (Gast)


Lesenswert?

> Was man versuchen kann ist ein 33 - 100 Ohm Serienwiderstand in die TCLK
> Leitung auf der Seite des JTAG Adapters.

Lattice spricht an dieser Stelle von einem 1-kOhm-Widerstand nach Masse 
(oder war es nach Plus?) am Schaltkreis.

von Sven L. (lemming)


Lesenswert?

Lattice User schrieb:
> Du hast doch eine mehr oder weniger fliegende Verdrahtung?

Naja, ca. 30cm Flachbandkabel und nen zerknipster IC Sockel als Stecker. 
;) Was halt gerade so in der Schublade lag...

> Wenn dem so ist, kann es auch sein dass TCLK keine saubere Flanken hat,
> und deswegen das Device manchmal 2 Clockpulse sieht wo eigentlich nur
> einer sein soll.
>
> Was man versuchen kann ist ein 33 - 100 Ohm Serienwiderstand in die TCLK
> Leitung auf der Seite des JTAG Adapters.

100 Ohm Serienwiderstände sind in allen Leitungen bereits drin und 47p 
gegen Masse. Ich hab diesen Adapter benutzt:

http://shop.embedded-projects.net/index.php?module=artikel&action=artikel&id=14

Den Schaltplan gibts da auch falls es dich interessiert.

Danke.

von Sven L. (lemming)


Lesenswert?

Bürovorsteher schrieb:
>> Was man versuchen kann ist ein 33 - 100 Ohm Serienwiderstand in die TCLK
>> Leitung auf der Seite des JTAG Adapters.
>
> Lattice spricht an dieser Stelle von einem 1-kOhm-Widerstand nach Masse
> (oder war es nach Plus?) am Schaltkreis.

Jedenfalls haben sie in ihrer appnote keinen einzigen Serienwiederstand 
eingezeichnet:

http://www.latticesemi.com/documents/an8082.pdf


Und daraus konnte ich auch nichts Hilfreiches entnehmen:

http://www.latticesemi.com/lit/docs/ispbs/ispguide.pdf


Es sieht aber wirklich danach aus, als ob irgendwo Reflexionen 
entstehen. Kann man im ispVM nicht die JTAG Frequenz einstellen? 
Möglicherweise sollte ich das Flachbandkabel auch noch so weit wie 
möglich kürzen.

von Lattice User (Gast)


Lesenswert?

Bürovorsteher schrieb:
>> Was man versuchen kann ist ein 33 - 100 Ohm Serienwiderstand in die TCLK
>> Leitung auf der Seite des JTAG Adapters.
>
> Lattice spricht an dieser Stelle von einem 1-kOhm-Widerstand nach Masse
> (oder war es nach Plus?) am Schaltkreis.

Die gehören auf das Zielboard, nicht auf den JTAG Adapter. 4.7k tun es 
da auch. Der Zweck ist dabei sicherzustellen, dass der TAP Controller im 
Baustein brav im Reset State bleibt wenn nichts angeschlossen ist.

Sven L. schrieb:
> Jedenfalls haben sie in ihrer appnote keinen einzigen Serienwiederstand
> eingezeichnet:
>
> http://www.latticesemi.com/documents/an8082.pdf

In dieser Note geht es darum wie man den FTDI mit auf ein eigenes Board 
intergriert. Da hast du dann natürlich keine nennenswerte Probleme mit 
der Signalqualität.

Sven L. schrieb:
> Es sieht aber wirklich danach aus, als ob irgendwo Reflexionen
> entstehen. Kann man im ispVM nicht die JTAG Frequenz einstellen?
> Möglicherweise sollte ich das Flachbandkabel auch noch so weit wie
> möglich kürzen.

Wenn die Flanken kaput gehen nutzt eine langsamere Clock gar nichts, die 
Flanken bleiben ja gleich. Wie lang ist denn dein Kabel?
Eventuell einfach mal mit dem Osci nachschauen wie die Signale aussehen? 
Im Toolsmenu vom ispVM gibt es Boarddiagnostic, da kann man u.A. TCLK 
ständig toggeln lassen um einfach messen zu können.


Mein Lattice USB Adapter ist noch die alte Version mit 
Cypresscontroller, und hat 30 cm lange Flywires. Hat mir auch noch nie 
Probleme gemacht. (Ausser dass das Ding grottenlahm bei komplexen 
Protokollen ist, wie z.B. den SPI Flash am FPGA darüber zu 
programmieren)

von Sven L. (lemming)


Lesenswert?

> Wenn die Flanken kaput gehen nutzt eine langsamere Clock gar nichts, die
> Flanken bleiben ja gleich. Wie lang ist denn dein Kabel?
> Eventuell einfach mal mit dem Osci nachschauen wie die Signale aussehen?
> Im Toolsmenu vom ispVM gibt es Boarddiagnostic, da kann man u.A. TCLK
> ständig toggeln lassen um einfach messen zu können.

Hm, an sämtlichen Ausgängen hängen 100 Ohm und 47pF nach Masse, ergibt 
also nen Tiefpass mit ~33MHz Grenzfrequenz. Die MPSSE schafft doch 6MHz 
JTAG clock oder wieviel war es?

> Mein Lattice USB Adapter ist noch die alte Version mit
> Cypresscontroller, und hat 30 cm lange Flywires. Hat mir auch noch nie
> Probleme gemacht. (Ausser dass das Ding grottenlahm bei komplexen
> Protokollen ist, wie z.B. den SPI Flash am FPGA darüber zu
> programmieren)

Ja, ungefähr 30cm Flachbandkabel hab ich dran (schrieb ich bereits 
irgendwo). Grottenlahm ist doch JTAG über Parallelport. ;)


Vorteil von Open Source Hardware: Hätt ich mir damals nen J-Link gekauft 
hätt ich jetzt damit den CPLD nicht auslesen können. Dank FT2232D ist 
das Teil nun aber sehr verbreitet und selbst von ispVM problemlos 
unterstützt, wofür er eigentlich garnicht gedacht war. Schöne Sache.

von Lattice User (Gast)


Lesenswert?

Sven L. schrieb:
> Hm, an sämtlichen Ausgängen hängen 100 Ohm und 47pF nach Masse, ergibt
> also nen Tiefpass mit ~33MHz Grenzfrequenz.

Könnte natürlich auch zuviel des guten sein und die Flanken zu langsam 
machen wodurch sie empfindlicher für Übersprecher sind, z.B. vom TDO das 
ja nicht gedämpft ist!
Genaueres kriegt man nur mit dem Osci raus.

Sven L. schrieb:
> Grottenlahm ist doch JTAG über Parallelport. ;)

USB ist nicht trivial, und wenn man nicht aufpasst ist man ganz schnell 
bei nur mickrigen 1 kHz.
Ich vermute dass mein Latticeadapter für jeden JTAG Stateübergang eine 
USB Transaktion durchführt, und das bremst! Beim laden eines FPGAs fällt 
das nicht witer auf, da fast die gesamte aktion innerhalb eines 
einzelenen DR-Shift states durchgeführt werden kann. Beim Programmieren 
des SPI Flashs am FPGA muss je nach Typ alle 1 bis 2 Bytes zwischen 
DR-Shift und DR-Pause gewechselt werden.
Bei CPLDs fällt das natürlich nicht so stark ins Gewicht.

von Lattice User (Gast)


Lesenswert?

Lattice User schrieb:
> USB ist nicht trivial, und wenn man nicht aufpasst ist man ganz schnell
> bei nur mickrigen 1 kHz.

Nachtrag:
Siehe dazu auch diesen Thread
Beitrag "FT2232D + libMPSSE: Lange Pausen auf dem I2C-Bus :o("

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.