
Es gibt so einen kleinen, ordentlichen und günstigen USB Blaster Programmierer für Altery CPLD/FPGA Schaltungen, der seine Rolle perfekt erfüllt.



Leider stellt es nicht die Versorgungsspannung bereit, was erfordert, dass die programmierbare Schaltung von einer externen Quelle gespeist werden muss. Verschiedene Stromkreise haben unterschiedliche Versorgungsspannungen (und manchmal sogar mehrere).
Zum Beispiel hat mein Lieblings-CPLD EPM3064 eine Spannung für die Versorgung des Kerns der Schaltung (VCCINT) und die andere für die Versorgung von Puffern der Endstufen I/O (VCCIO), damit die Schaltung in einem System arbeiten kann, das an unterschiedliche Spannungen angepasst ist, z.B. 3,3 V, 2,5 V.

Der EPM240 hat beispielsweise vier IOLABS-Blöcke und jeder dieser Blöcke kann seine eigene VCCIO-Spannung haben.
So kam ich auf die Idee, für den oben genannten Programmierer einen kleinen "Adapter" zu bauen, der die gängigsten Spannungen produziert. Das Ganze musste in das bestehende Gehäuse passen, was eine ziemlich große Herausforderung war. Die Annahme sollte folgende Spannungen beinhalten: +1,8 V, +2,5 V, +3,3 V, +5 V, +12 V.
Als Ergebnis entstand eine Platine, angepasst an die Größe des bestehenden Gehäuses, die mit zwei Drähten (an Masse und +5 V) an die Hauptplatine des Programmierers angelötet wird, wo sich der J1-Stecker auf der Originalplatine befindet. Die Platine hat auch zwei Löcher, durch die LEDs hindurchgehen können, die den Betrieb von der Originalplatine signalisieren. Wir haben es geschafft, alles auf eine einlagige Platine zu montieren, damit die Platine ohne Angst vor einem Kurzschluss eng an die Originalplatine passt.






Ich habe mich entschieden, alle Spannungen mit der Stiftleiste abzuleiten, da sie sich im Gegensatz zum Buchsenleiste nicht abnutzt (Buchsenleisten lösen sich bei häufigem Einsetzen schnell). Um mich vor einem versehentlichen Kurzschluss der Stifte im Moment des Kontakts mit etwas zu schützen, setze ich eine Kappe auf die Stifte (aus einer Buchsenleiste).

o Die Spannungen +1,8 V, +2,5 V, +3,3 V kommen von den dedizierten AMS1117-Stabilisatoren
o Die Spannung von +5 V kommt direkt vom USB-Anschluss
o Für eine Spannung von +12 V habe ich den Konverter MC34063 verwendet
Der Leser mag sich fragen, wozu das Vorhandensein von +12 V dient? Nun, die Notwendigkeit, diese Spannung zu haben, war im Grunde der Grund für die Entwicklung der beschriebenen Leiterplatte. Oftmals versuchen wir bei der Konstruktion eines Gerätes, eine Schaltung dafür auszuwählen, dass sie den Bedürfnissen entspricht, aber nicht zu ,,übertrieben" ist (d. h. es hat die erforderliche Anzahl an Anschlüssen). Zu viele Stifte und ungenutzte Stifte sind nicht nur Preisverschwendung (teurere Schaltung), sondern auch eine kompliziertere Leiterplatte (mehr Stifte = größeres Gehäuse = meist komplizierteres Platinendesign).
Daher reicht für viele Bedürfnisse z.B. das zuvor beschriebene einfache EPM3064 Schaltung aus. Diese Schaltung hat 30 I/O-Stifte. Allerdings war ich oft in einer Situation, in der ich den einen/zwei zusätzlichen Stifte verpasst habe und auf seltsame Kombinationen zurückgreifen musste. Es stellt sich heraus, dass die JTAG-Programmierstifte dieser schaltung (TDI/TMS/TCK/TDO) auch als Standard-I/O-Stifte fungieren können. Um sie dazu zu zwingen, gehen Sie in der Quartus-Umgebung wie folgt vor:
1. Klicken Sie mit der rechten Maustaste auf Schaltung, Device >> Device and Pin Options >> wählen, Karte "General".
2. Deaktivieren Sie "Enable JTAG BST Support"
3. Kompilieren Sie das Projekt neu



Leider wird nun ein Versuch, die "POF"-Datei zum Hochladen in die Schaltung auszuwählen, mit der mysteriösen Meldung "JTAG support disabled in file..." enden.

4. Gehen Sie also zurück zu Karte ,"Programming files" und wählen Sie "JEDEC STAPL Format File (.jam)" und kompilieren Sie das Projekt erneut.

Von nun an wird nach jedem Übersetzen zusätzlich zur Standard-POF-Datei eine JAM-Datei generiert und diese Datei sollte beim Programmieren ausgewählt werden.
Um einen Stapel mit abgeschalteten JTAG-Pins zu programmieren (oder umzuprogrammieren), braucht man leider - laut Kataloghinweis - einen speziellen Hochspannungs-Programmierer. Kein Wunder, denn wenn jetzt JTAG-Pins als Standard-I/O-Pins verwendet werden, woher soll das System dann wissen, dass wir sie für die Programmierung wiederverwenden wollen?
Es gibt jedoch einen Trick (der im Kataloghinweis nicht erwähnt wird). Wenn der EPM3064-Chip im Moment des Einschaltens eine Spannung von +12 V an seinem I/OE1-Pin sieht (im QFP44-Gehäuse ist es Pin 38), dann werden die JTAG-Pins wieder aktiv (bis zum Neustart) und können zum Programmieren verwendet werden. Bei dieser Methode sollten Sie natürlich einige Dinge beachten:
o +12 V an den I/OE1-Pin für die Zeit der Programmierung anschließen MUSS mit einem Schutzwiderstand in Reihe (z. B. 1kΩ). Ich weiß nicht genau, welche Spannung die Schaltung benötigt, da die andere Seite des Widerstands etwa 8 V beträgt.
o I/OE1-Pin sollte im Projekt entweder gar nicht verwendet werden, oder zumindest mit einem Jumper gesichert werden, der ihn für die Dauer der Programmierung vom Rest des Systems "abschneidet", damit +12 V darauf nicht kämen und andere daran angeschlossene Schaltungen beschädigen.
o die Stromsignale an den Pins TDI/TMS/TCK/TDO dürfen den Programmiervorgang nicht stören, d.h. sie dürfen nicht mit Ausgängen anderer Systeme verbunden werden, über die wir keine Kontrolle haben, oder sie können mit Ausgängen anderer Systeme verbunden werden, aber durch die Schutzwiderstände. Idealerweise werden diese Pins nur vom EPM3064-Chip angesteuert und für andere Schaltungen sind sie nur Eingänge.
o es ist eine Situation analog der Verwendung von MOSI/MISO/SCK-Pins von gängigen AVR-Mikrocontrollern für deren Zwecke. Dort ist der Pin zum Umschalten in den Programmiermodus der /RESET-Pin, der auch mit Fusebits abgeschaltet und in einen I/O-Pin umgewandelt werden kann, dann wird aber auch ein Hochspannungs-Programmierer benötigt).
Zussamenfassung
Die entworfene Platine erfüllt ihre Aufgabe perfekt, das einzige was noch hinzugefügt werden könnte, ist eine Spannung von 1,2 V, vielleicht könnte noch ein AMS1117 Regler hineingesteckt werden.
Cool? DIY-Rangliste