Projekt 2048

mit USB4all_40


zurück zu Projekte , PIC-Prozessoren , Elektronik , Homepage


Einleitung
Den 27c2048 lesen und beschreiben
... und nun mit dem USB4all
Die Schaltung
Mechanischer Aufbau


zurück zu PIC-Projekt
Projekt 2048



Einleitung

Das ist ein Beispiel dafür, was man mit einem USB4all so alles machen kann. Manchmal hat man ein Projekt, für das man großen Entwicklungsaufwand betreiben müsste, aber der Einsatz eines USB4all kann diesen Prozess dramatisch vereinfachen.

Ich brauchte dringend eine Möglichkeit antike EPROMS des Typs 27c2048 zu kopieren. Das ist ein EPROM, der interessanterweise 16 Datenleitungen hat. Er speichert die Daten also nicht in Bytes, sondern in 16 Bit langen Worten. Für so eine Eigentümlichkeit hatte ich keine einsatzbereite Hardware herumliegen. Also musste was gebaut werden.




Den 27c2048 lesen und beschreiben

Der 27c2048 sitzt in einem klassischen 40-poligen keramischen DIL-Gehäuse mit einem Löschfenster an der Oberseite. Er kann 2 MBit speichern. Zum Beschreiben braucht man ein Programmiergerät, das unter anderem eine Hilfsspannung von 12,75V bereitstellen muss. Gelöscht werden kann der EPROM mit UV-Licht. Zum Lesen des Chips reicht eine normale Betriebsspannung von 5V.

Der Chip hast 17 Adressleitungen und 16 Datenleitungen. Dazu kommen die Steuereingänge /OE, /CE und /PGM sowie die Betriebsspannungspins Vcc, Vpp und GND. Vcc ist die normale 5V Betriebsspannung, während Vpp die spezielle Programmierspannung ist.

Um eine bestimmte Zelle (16 Bits) auszulesen, legt man die 5V Betriebsspannung an, und legt dann an den 17 Adresspins die zur Zelle passende Adresse an. Nun muss man den Pin /CE (chip enable) auf 0V ziehen, um den Chip zu aktivieren und schließlich legt man noch das Pin /OE (output enable) auf 0V, um auch die Datenausgänge des Chips einzuschalten. Dabei ist die Reihenfolge, in der man die Adresse, /OE und /CE bedient eigentlich egal. Nachdem all diese Pins die richtigen Pegel haben, liegen die 16 Datenbits nach spätestens 150 ns am den Datenpins. Am Programmierspannungseingang Vpp legt man dabei gar nichts an, und den Steuereingang /PGM lässt man immer auf 5V.

Eine Zelle mit einem bestimmten 16-Bit Wert zu programmieren, ist etwas aufwendiger. In einer gelöschte (also leere) Zelle steht immer hexadezimal FFFF, es liegen also alle Bits auf 1. Beim Programmieren kann man die Bits auf 0 ziehen. Es ist aber nicht möglich, ein auf 0 liegendes Bit durch das Programmieren wieder auf 1 zu setzen. So ein zurücksetzen auf 1 geht nur mit UV-Licht,  und betrifft dann immer den gesamten Chip.

Zum Beschreiben legt man auch zunächst 5V an das Vcc-Pin. Zusätzlich legt man aber noch 12,75V an das Vpp-Pin. Das Pin /CE wird wieder mit 0V verbunden und die Adresse der zu beschreibenden Zelle an die Adresspins A0 ... A16 angelegt. Im Gegensatz zum Setup beim Lesen muss aber /OE auf High-Pegel gesetzt werden! Ansonsten würde der Chip durch die Datenpins Signale heraustreiben, wir wollen aber Daten hineintreiben. Das geht nur, wenn /OE auf high bleibt. Nun legen wir die zu schreibenden Daten an die Datenpins D0 ... D15. Damit ist alles zu  Schreiben bereit.
Das eigentliche Schreiben/Brennen erfolgt mit einem low-Puls am Pin /PGM. Dieser sollte etwa 50 ... 100 us lang sein. Es reicht aber nicht immer ein Puls aus. Deshalb muss man nach dem Puls das Datenwort auslesen, und prüfen, ob es schon korrekt geschrieben wurde. War das nicht der Fall, wiederholt man den Prozess. Maximal darf man das 25 Mal tun. Steht danach immer noch nicht das Richtige in der Zelle, dann ist der Chip defekt.



...und nun mit USB4all

Es wäre recht einfach, die Firmware des USB4all so zu modifizieren, dass sie direkt das Brennen eines 27c2048 unterstützt. aber genau das will ich diesmal nicht tun. Ich will nur Funktionen Verwenden, die in der Standardsoftware verfügbar sind. Damit ergeben sich einige Probleme.

Zum Einen kann man nicht einfach einen 100us langen Puls erzeugen. Man kann zwar ein IO-Pin mit einem Befehl auf low und dann mit dem nächsten Befehl wieder auf High setzen, aber das dauert viel länger als 100us. Da würde man den EPROM beschädigen. Also muss eine Hardware her, die das erledigt. Ich verwende einen Monoflop mit einem 74LS123-Chip.

Die 12,75V müssen auch erzeugt werden. Um es einfach zu halten, verwende ich einen Linearregler, der mit einer externen Gleichspannung von 15V gespeist wird.

Die zu steuernden EPROM-Pins sind 17 Adresspins, 16 Datenpins, /CE, /OE und /PGM. Außerdem muss man die 12,75V schalten. Dafür bräuchte man eigentlich 37 IO-Pins. Soviele hat nicht mal ein USB4all mit 40-Pin-PIC. Deshalb erzeuge ich 16 der Adressbits mit Hilfe zweier Zählerschaltkreise 74LS590. Für die Ansteuerung der Zähler brauche ich nur zwei IO-Pins. Mit einem setze ich den Zähler auf Null, mit dem anderen erhöhe ich den Zähler jedes Mal um Eins. Damit kann ich nicht jede Adresse beliebig auswählen, sondern muss immer bei der Adresse Null beginnend mich schrittweise durch den Adressbereich arbeiten. Für das Brennen und Auslesen eines EPROMs ist das aber keine Einschränkung, da macht man das ja ohnehin so.




Die Schaltung

Nebenstehend sehen wir die Schaltung, die auf einer kleinen Tochterplatine huckepack auf einen USB4all gesteckt wird. Die Steckerleisten dafür befinden sich in der oberen linken Ecke der Grafik. Sie verbinden die Schaltung mit den Ports A, B, C und D des USB4all. Der Port E wird nicht benutzt.

Unten links ist die Erzeugung der Programmierspannung von 12,75V dargestellt. Ein LM1117-ADJ erzeugt die Spannung aus eingespeisten 15V. Diese darf um ca. 0,5V vom Sollwert abweichen. Bei weniger als 14,5V reicht die Spannung nicht mehr aus, um 12,75V sicher zu erzeugen, und ab 15,5V überschreitet man die Maximalspannung für den LM1117. Ich gebe zu, dass das etwas auf Kante genäht ist.

Mit dem USB4all-Pin RC7 lässt sich die 12,75V-Spannung mit Hilfe der Transistoren Q2 und Q1 an das Vpp-Pin des 27c2048 schalten.

Der Chip U5a ist ein Monoflop, der immer dann, wenn das USB4all-Pin RC2 von 0 auf 1 schaltet einen 100us langen negativen Puls ausgibt, der an das EPROM-Pin /PGM geht. Das ist der Programmierpuls.

U2 und U3 bilden zusammen einen 16-Bit Zähler. Mit RC1=0 setzt man den Zähler auf den Wert Null (0000). Mit jedem Puls am USB4all-Pin RC0, zählt der Zähler um 1 weiter. So erzeuge ich die unteren 16 Adressleitungen (A0 ... A15) für den EPROM. Die 17. Adressleitung (A16) wird direkt mit dem USB4all-Pin RA1 erzeugt.

Die USB4all-Ports RB und RD bilden die 16 Datenleitungen für den EPROM (D0 ... D15). Man sieht, dass sie einzelnen Bits in der "falschen" Reihenfolge angeschlossen sind. Das höchste Bit des Ports geht an das niedrigste Bit des EPROM und umgekehrt. Da habe ich so gemacht, weil es das Platinenlayout stark vereinfachte. Ich kompensiere das dadurch, dass ich die Daten in Software "spiegele".

Schaltplan



Mechanischer Aufbau

Zur Steuerung verwende ich einen USB4all in der 40-Pin-Ausführung mit stehenden Buchsenleisten für die Ports. Das Platinenlayout ist das KiCAD-Layout mit den Außenmaßen 86mm x 59mm. Damit ist die Position der Buchsen eindeutig, und die EPROM-Platine kann mittels passender Steckerleisten von oben auf den USB4all  aufgesteckt werden.

Der Einfachheit halber sollte die Platine ein einseitiges Layout haben. Um dabei die Steckerleisten einfach verlöten zu können, ist die Leiterseite oben. Einige zusätzliche Verbindungen sind mit Draht auf der Unterseite erforderlich.

Die Stromversorgung und der Monoflop U5 sind in SMD ausgelegt, und somit auf der Oberseite verlötet.

Platinenoberseite
Die beiden Zählerschaltkreise sind im DIL-Gehäuse, und werden von der Unterseite aus bestückt. Das sieht erst mal komisch aus, hat aber seinen Sinn.

Der Sockel für den EPROM muss auf die Oberseite, wo auch die Leiterbahnen sind. Man muss also zwischen der Leiterplatte und dem Sockel löten. Mit einem Textool-Sockel ist das nicht machbar. Aber ein billiger IC-Sockel lässt sich mit etwas Geschick und einer feinen Lötkolbenspitze auch auf der Oberseite auflöten. Es ist wichtig, dabei einen IC-Sockel ohne runde Präzisionskontakte zu verwenden.

Die 3D-Grafik der Platine zeigt also den falsche Typ. Nur in die billigen Sockel mit einfachen Federkontakten lässt sich dann ein Textool-Sockel einstecken. In diesen kommt dann der EPROM.

Der Turmbau ist fertig.
Seitenansicht




Ergebnis

Die Schaltung funktioniert, und benutzt eine unmodifizierte USB4all-CDC-Firmware. Das Auslesen und vor allem das Brennen eines EPROMS dauert aber seine Zeit. Schließlich muss für jedes Ändern des Pegels eines Signals ein Kommando zum USB4all geschickt werden und dessen Antwort empfangen werden. Die CDC-Version des USB4all verwendet ein virtuelles serielles Port, welches nicht besonders schnell ist. Einen EPROM komplett auszulesen dauert etwa 2 Stunden und ihn neu zu beschreiben erfordert 8 Stunden. Das ist natürlich nicht praxistauglich für den täglichen Produktiveinsatz. Aber um mal zwei EPROMS zu klonen (was hier genau mein Problem war) ist das schon mal akzeptabel.

Wenn man "normale" Geschwindigkeiten erreichen will, dann kann das die hier eingesetzte Hardware problemlos leisten, aber man muss die Firmware für diese Aufgabe anpassen.



zurück zu Projekte , PIC-Prozessoren , Elektronik , Homepage
Autor: sprut
erstellt: 16.04.2021
letzte Änderung: 19.04.2021