Arduino als Programmer für Atmel CPLD (ATF-150x)

  • Nun gibt es eine weitere funktionierende Alternative, um einen ATF150x zu programmieren:


    Die Arduino Lösung habe ich endlich zum laufen gebracht. :)




    Allerdings sehe ich die Arduino Lösung genau so wie das FT232H Shield eher als Notlösung.


    Es funktioniert tadellos, aber es gibt Einschränkungen:

    • es ist wirklich langsam, sehr langsam
    • es funktionieren folgende SVF Dateien: Blank Check, Program/Verify, Verify, Erase
    • UEC Abfrage, LOAD, Secure Bits, - solche Dinge gehen zur Zeit nicht



    Im Vergleich zum FT232 Shield gibt es Unterschiede:

    • man spart sich die FT232 Treiber Install Probleme
    • man spart sich das Handling mit dem Open OCD
    • man spart sich die XSVF Konvertierung
    • dafür braucht man ein kleines Windows Tool



    Das Shield ist praktisch aber nicht unbedingt notwendig.


    Ohne Shield muss man:

    • sich um die Stromversorgung des CPLD selbst kümmern
    • die 12V irgendwie anders holen
    • 5 Drähte vom Arduino zum CPLD anschliessen (GND und die 4 JTAG)


    Die Doku werde ich heute Abend fertig stellen:

    https://oe7twj.at/index.php?ti…F150x#Arduino_JTAG_Shield




      

  • Ich habe einen etwas anderen Ansatz gewählt, und einen ATF150x PLCC44 shield für einen Arduino MEGA 2560 entwickelt. Zum einen lässt sich damit der ATF programmieren , zum anderen aber auch die programmierten Funktionen testen. Alle I/O PINs des ATF sind dafür mit den Arduino PINs verbunden. Zusätzlich wird der Zustand der I/Os über LED angezeigt, die SMD LED brauchen wenig Strom, bei 2,2k Ohm Vorwiderstand sind das nur 1,5mA, also kaum Belastung. Die 12 V selbst , die evtl. nötig sind, um die JTAG Funktion wieder zu aktivieren, ist über eine kleine Platine realisiert, die sehr günstig im Internet zu bekommen ist,


    Ich verwende das originale Microchip cable ATDH1150USB mit ATMISP. Die jedec Datei wird über WINCUPL erstellt. Damit kann ich Fehler in diesem Bereich ausschliessen, und mich voll auf die Programmierung und das Testen konzentrieren.


    Die Platine hat einen JTAG Anschluss und es würde natürlich auch die FT232 und Arduino Lösung gehen ( für Arduino müßte das von Diddle entwickelte Programm für den UNO auf den 2560 umgeschrieben werden) . Dann kann man sich die 100€ für das Microchip cable sparen.


    Das shield selbst kann auch ohne Arduino zum Programmieren verwendet werden, dann braucht es aber eine externe 5V, geht aber auch mit Arduino, dann müssen die 4 Jumper geöffnet werden.





    Da JLCPCB immer min. 5 Platinen Mindestbestellmenge hat, kann ich noch ein paar Leer Platinen abgeben.

    Den ATF1504 habe ich deshalb gewählt, weil in 5V verfügbar, das IC steckbar ist, und PLCC44 Sockel leicht zu löten.


    Schwieirig wird es inzwischen bei der Beschaffung der ATF150x Chips. Ich hatte ein paar in China bestellt, immerhin nur 20 % Ausschuss, teilweise nur nach Behandlung mit 12V zu programmieren.

    ... der Weg ist das Ziel

  • Zum einen lässt sich damit der ATF programmieren , zum anderen aber auch die programmierten Funktionen testen.

    Diese Test Funktion gefällt mir sehr gut.



    Dazu wäre es wünschenswert, dass ein Arduino Programm diese CPLD Testfunktion unterstützt.

    So in der Art wie der TL866 die TTL testet.

    Also ein einfaches Textfile, das man einfach in den Arduino Serial Monitor.

    Pro Zeile: digitale Ausgänge setzen + erwartetes Eingangs Muster

    Damit könnte man auch komplexere Abläufe testen (Register schreiben, lesen ...).

  • Nachdem ich nun etliche Stunden damit verbracht habe, ein ATF1504 erfolgreich zu programmieren, möchte ich nun kurz meine Erfahrungen zum Besten geben.


    Verwendet wurden WinCupl und ATMISP, was von Microchip frei verfügbar ist, und das original Michrochip ATDH1150USB ( USB ISP cable ).


    - wenn Änderungen an der xxx.pld Datei gemacht werden, kann ich nur empfehlen die Datei zu speichern, WinCupl zu schliessen und neu aufzurufen. Es hat sich gezeigt, daß WinCupl beim Übersetzen irgendwie durcheinander kommt, wenn man es nicht macht.


    - es ist ungemein wichtig das richtige Device ( ... isp ... ) in der xxx.PLD Datei zu verwenden, wenn man über JTAG laden will

    also z.B. Device f1504ispplcc44 ; /* isp type important when JTAG is used !!! */


    - wenn JTAG Laden nicht möglich ist, liegt es evtl. daran, das das JTAG Flag im ATF auf OFF gesetzt ist. Um es wieder auf ON zu setzen, den PIN 1 über 10k Widerstand mit 12 V einspeisen, und dann ein Programm laden. Dann tritt eine Fehlermeldung auf, aber das JTAG Flag wird dabei auf ON gesetzt. Jetzt die 12 V wegnehmen, und das Programm kann dann normal mit JTAG geladen werden, ( immer die Option JTAG Port Check Override bei ATMISP verwenden ).


    In WinCupl gibt es einige Beispiele für ATF Programme, im Internet findet man aber kaum etwas. Anbei ein getestetes Programm für einen zweifachen BCD to 7 Segment decoder ( sollte mal eine Anzeige für eine POST Karte werden ).

  • . Um es wieder auf ON zu setzen, den PIN 1 über 10k Widerstand mit 12 V einspeisen, und dann ein Programm laden.

    Ja das ist wichtig.


    Bei den CPLD die ich beim AliExpress gekauft habe, sind fast 100% nicht beschreibbar, nur weil JTAG deaktiviert ist.

    Wenn man das zurücksetzt, funktionieren alle tadellos, ich hatte noch keinen einzigen Defekt.

  • In WinCupl gibt es einige Beispiele für ATF Programme, im Internet findet man aber kaum etwas. Anbei ein getestetes Programm für einen zweifachen BCD to 7 Segment decoder ( sollte mal eine Anzeige für eine POST Karte werden ).

    Der CPLD wurde/wird hauptsächlich in industriellen Umgebungen eingesetzt.

    Auch in ganz alten PC Karten (ISA) wurde der CPLD gerne verwendet.


    Aber es gibt auch einige Retro Projekte wo der drin ist.

    Und ich habe nun ja auch schon etliche Projekte damit gemacht ... :)

    Ich verwende den ATF15xx sehr gern, es ist ein sehr zuverlässiges Teil.

  • Da es den ATF15xx als 5V Version gibt, passt er gut zu der 30 Jahre alten Technik.

    Genau.


    Aber auch die ASV Typen (3,3V) funktionieren tadellos mit der Technik.


    Man benötigt halt noch einen kleinen 3,3V Regler, als SMD braucht der kaum Platz auf der Platine.

    Und die ASV sind leichter zu kriegen bzw. oft preisgünstiger.


    Auf meinen Platinen habe ich meist beide Typen (AS und ASV) vorgesehen.

    Den Regler muss man ja nicht bestücken.

  • - wenn JTAG Laden nicht möglich ist, liegt es evtl. daran, das das JTAG Flag im ATF auf OFF gesetzt ist. Um es wieder auf ON zu setzen, den PIN 1 über 10k Widerstand mit 12 V einspeisen, und dann ein Programm laden. Dann tritt eine Fehlermeldung auf, aber das JTAG Flag wird dabei auf ON gesetzt. Jetzt die 12 V wegnehmen, und das Programm kann dann normal mit JTAG geladen werden, ( immer die Option JTAG Port Check Override bei ATMISP verwenden ).

    Ich muß das leider korrigieren, es ist nicht PIN 1 sondern PIN OE1 ( 44 bzw. 84 ) !!!


    Und hier die PCB MEGA2560 Test Version für einen ATF1504 PLCC84. Und dieser hat 5V und Sockel THT ( leicht zu löten ), was auch gemein die Arbeit beim Erstellen einer PCB erleichtert.


    Zum Glück hat der MEGA2560 genügend I/Os, so daß alle ATF Pins ( Ausnahme die JTAG Pins ) getestet werden können.


    ... der Weg ist das Ziel

  • Noch eine Ergänzung...


    - in WinCupl müssen die Variablennamen mit einem Buchstaben beginnen !!!

    ... der Weg ist das Ziel