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!~
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.
> 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.
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 | ... |
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?
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.
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.
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.
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...
> 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.
"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...
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.
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". ;)
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.
> 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.
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.
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.
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)
> 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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.