Sie befinden sich hier: Startseite » Anleitungen » Programmér en 27C512 (og andre EPROM'er/EEPROM'er) med RURP » Anleitungen » 27C512 (und andere EPROMs/EEPROMs) mit dem RURP programmieren
Ein EPROM enthält die ersten Befehle, die ein Retro-Computer ausführt, das Programm eines Arcade-Automaten oder den Code in einem Spielmodul. Dieser Leitfaden zeigt, wie Sie mit dem Relatively Universal ROM Programmer (RURP), dem Open-Source-Arduino-Shield von Anders Nielsen, eigene Daten in einen solchen Chip bringen. Das durchgehende Beispiel ist ein Chip vom Typ 27C512, vom leeren Sockel bis zur verifizierten Kopie.
ROM bedeutet Read-Only Memory: ein Chip, der seinen Inhalt auch ohne Strom behält. Ein Computer liest ihn wie jeden anderen Speicher. Er legt eine Adresse an die Adresspins (A0-A15 beim 27C512) und bekommt an den Datenpins (D0-D7) ein Byte zurück. Das P in EPROM steht für programmierbar: Sie können ihn selbst beschreiben, aber nur in einem Programmiergerät und mit einer höheren Spannung als den 5 V, mit denen der Chip läuft. Im fertigen Computer wird er nur gelesen.
Ein 6502-Computer ist der klassische Grund, eines zu programmieren. Beim Einschalten holt die CPU ihre Startadresse aus dem Reset-Vektor bei $FFFC-$FFFD, ganz oben im Adressraum, also muss dort ROM mit einem gültigen Programm liegen. Unser 6502-Leitfaden erklärt, warum, und der Leitfaden zu 6502 und SRAM zeigt, wie sich RAM und ROM die 64 KB des Adressraums teilen. Dieselbe Art Chip enthält die Firmware von Heimcomputern, Arcade-Platinen, Synthesizern und Industriegeräten der 1980er und 1990er Jahre. Typische Aufgaben sind eigene Firmware für einen Bausatz wie den 65uino zu brennen, eine Sicherungskopie eines alten ROMs anzulegen oder ein defektes zu ersetzen.
$FFFC-$FFFD
Ein 27C512 fasst 512 kbit, also 64 KB: 65.536 Adressen mit je 8 Bit. Das ist genau ein 6502-Adressraum, und deshalb taucht die Typennummer in so vielen Retro-Projekten auf.
Programmieren kann Bits nur von 1 auf 0 ändern. Um wieder Einsen zu bekommen, muss der Chip gelöscht werden, und wie er gelöscht wird, entscheidet, was Sie auf dem Tisch brauchen.
Der Relatively Universal ROM Programmer ist ein Arduino-Shield. Seine SMD-Bauteile sind vorgelötet: drei 74HC573-Latches, die die Adresse halten, ein Aufwärtsregler, der die Programmierspannung erzeugt, und Transistorschalter, die diese Spannung softwaregesteuert an den richtigen Sockelpin legen. Sockel und Stiftleisten löten Sie selbst ein. Ein kleines Trimmpoti stellt die Programmierspannung ein; das README nennt einen Bereich von 12-27 V. Ab Rev 2 werden Chips mit 24, 28 oder 32 Pins über Transistoren statt Jumper gewählt, und Rev 2.1 bekam eine 200-mA-Polyfuse vor dem Regler. Rev 2.2 und Rev 2.3, die aktuelle Version, haben einen Jumper JP4 mit drei Positionen, wobei die zusätzliche Position für Chips vom Typ 2716 ist.
Firestarter ist die für den RURP empfohlene Open-Source-Software. Sie stammt von Henrik Olsson und steht unter der MIT-Lizenz auf GitHub. Sie besteht aus zwei Teilen: Firmware, die auf dem Arduino unter dem RURP-Shield läuft und den Chipsockel ansteuert, und dem Kommandozeilenwerkzeug firestarter auf Ihrem Computer, das ihr über das USB-Kabel Befehle schickt. Sie installieren das Werkzeug mit pip install firestarter, danach installiert das Werkzeug die Firmware selbst auf dem Arduino (siehe unten).
firestarter
pip install firestarter
Für die Arbeit mit dem RURP und Firestarter brauchen Sie außerdem:
Das RURP-README empfiehlt Firestarter, wenn Sie einfach nur ROMs programmieren wollen. Die Befehle unten stammen aus der aktuellen stabilen Version 3.1.0.
brew install avrdude
sudo apt install avrdude
pip install firestarter firestarter --version
-b leonardo
-b uno328pb
firestarter fw -i -b uno
firestarter fw firestarter hw
Werkzeug und Firmware müssen in den ersten beiden Versionsnummern übereinstimmen (3.1 mit 3.1). Beim Aktualisieren zuerst das Werkzeug, dann die Firmware aktualisieren.
Prüfen Sie die Ausrichtung zweimal. Anders weist darauf hin, dass die Sicherung der Rev 2.1 keine Garantie ist: Ein verkehrt herum eingesetztes ROM kann trotzdem Schaden nehmen.
firestarter info <chip> zeigt alles zu einem Chip: Größe, Typ, ob er elektrisch löschbar ist, seine VPP, die Pinbelegung und die Jumper-Einstellung für jede Shield-Revision. Das Programmiergerät wird dabei nicht benutzt. Führen Sie den Befehl für jeden neuen Chiptyp aus.
firestarter info <chip>
Spannung einstellen. Das Shield hat einen einstellbaren Regler. Seine volle Ausgangsspannung heißt VPE. Für EPROMs mit 28 und 32 Pins leitet die Firmware VPP über einen Vorwiderstand daraus ab. Sie stellen beides mit demselben Trimmpoti ein, messen aber die Schiene, die der Chip bekommt:
firestarter vpp
firestarter vpe
Führen Sie den Befehl mit leerem Sockel aus; er zeigt die Spannung fortlaufend an, legt sie aber nicht an den Sockel. Drehen Sie das Trimmpoti mit einem kleinen Schraubendreher langsam, bis der Wert zur VPP-Zeile von info passt, und drücken Sie Strg+C. Vor jedem Schreiben misst die Firmware erneut. Mehr als 0,5 V zu hoch stoppt den Schreibvorgang; unter 95 % des Sollwerts gibt es eine Warnung.
info
Für einen W27C512 ist der Sollwert 12 V. Drehen Sie nicht darüber hinaus: Der absolute Grenzwert an OE/VPP und an A9 liegt laut Datenblatt bei 14,5 V. Die Löschspannung von 14 V stellen Sie nicht separat ein; zum Löschen legt die Firmware die nicht abgesenkte VPE-Schiene für 100 ms an A9 und OE/VPP.
JP4 leitet die Programmierspannung an Pin 1, wenn ein Chip sie dort braucht. Der 27C512 hat A15 an Pin 1 und teilt VPP mit /OE an Pin 22, er braucht also keinen Jumper. 27C256 und 2764 haben VPP an Pin 1, deshalb gehört der Jumper bei Rev 2.2 und 2.3 auf den 28-Pin-Pol (zum Sockel hin), und bei Rev 2.0 und 2.1 wird JP4 geschlossen. Der 24-Pin-Pol (zum Platinenrand hin) ist nur für Chips vom Typ 2716 mit VPP an Pin 21. Er verbindet Sockelpin 1 mit Sockelpin 25, also entfernen Sie ihn bei allen Chips mit 28 und 32 Pins. Lassen Sie JP4 bei einem 32-Pin-Chip nie gesteckt: Das README warnt, dass dies höchstwahrscheinlich das ROM, den Programmer oder beide beschädigt.
JP5 ist eine Lötbrücke auf der Rückseite, die im Neuzustand geschlossen ist. Trennen Sie sie nur für Chips mit der Adressleitung A19 an Pin 1, etwa 27C080 und M27C801. Firestarter lässt Sie bestätigen, dass JP5 getrennt ist, bevor es einen solchen Chip beschreibt oder löscht. Platinen der Rev 0 und Rev 1 verwenden stattdessen die Jumper JP1-JP3; info zeigt auch deren Einstellungen.
-a
build/abn6507rom.bin
assemble.sh
firestarter write w27c512 build/abn6507rom.bin
firestarter search 27C512 firestarter info W27C512
W27C512
VPP: 12.0v
Can be erased: yes (electrically erasable)
id
0xDA08
firestarter id W27C512 firestarter read W27C512 backup.bin
firestarter write W27C512 build/abn6507rom.bin --verify
Write to W27C512: verified -- the read-back matches.
verify
blank
firestarter verify W27C512 build/abn6507rom.bin firestarter blank W27C512
Dieselbe Aufgabe mit einem UV-27C512, etwa dem M27C512: Führen Sie zuerst firestarter blank M27C512 aus. Ein UV-Chip wird vom Programmer nie gelöscht, also lehnt write einen nicht leeren Chip ab, mit einer Zeile wie Refusing write to M27C512: not blank at 0x000123, v: 0x4F. Löschen Sie ihn mit UV-Licht und versuchen Sie es erneut. info M27C512 zeigt VPP: 13.0v und Can be erased: no (UV erase only), stellen Sie also 13,0 V ein, bevor Sie firestarter write M27C512 rom.bin --verify ausführen.
firestarter blank M27C512
write
Refusing write to M27C512: not blank at 0x000123, v: 0x4F.
info M27C512
VPP: 13.0v
Can be erased: no (UV erase only)
firestarter write M27C512 rom.bin --verify
Firestarter führt eine Liste der auf echter Hardware validierten Chips. Aus der 27C512-Familie stehen dort der W27C512, der auf zwei Aufbauten bestand (ein Leonardo mit Rev-2.0-Shield und ein Uno mit Rev-2.2-Shield), der TMS27C512 und der SST27SF512. Die übrigen 27C512-Varianten stehen in der Datenbank, sind aber noch nicht validiert.
Ja, der RURP programmiert ihn. firestarter search 27C256 listet 26 Datenbankeinträge von Herstellern wie AMD, Atmel, Intel, Microchip, ST und TI, alle mit demselben 28-Pin-EPROM-Protokoll wie der 27C512. Drei Dinge sind anders:
firestarter search 27C256
firestarter info AM27C256
Kann ein 27C512 einen 27C256 ersetzen? Oft, aber das hängt von der Platine ab. Die Pinbelegungen sind bis auf Pin 1 gleich. Ein 27C256 braucht beim Lesen seinen Pin 1 (VPP) auf Versorgungsspannung (Microchip-Datenblatt), deshalb legen Platinen diesen Pin meist fest auf 5 V, und ein 27C512 sieht dann A15 = 1 und antwortet aus seiner oberen Hälfte. Ein gängiger Trick ist, das 32-KB-Image zweimal in eine 64-KB-Datei zu schreiben, sodass der Chip bei jedem Pegel an Pin 1 funktioniert:
# macOS, Linux cat rom32k.bin rom32k.bin > rom64k.bin # Windows copy /b rom32k.bin+rom32k.bin rom64k.bin
Prüfen Sie vorher den Schaltplan Ihrer Platine. Wird Pin 1 von etwas anderem angesteuert, gilt der Trick nicht.
firestarter -p /dev/ttyACM0 fw
fw -i
-b uno
hw
rev_unknown
firestarter config --rev 5
VPP is high: 12.9V > 12.0V
VPP is low: …
Chip ID … does not match expected ID …
-f
Refusing write … not blank at …
firestarter erase W27C512 -b
Byte at … failed to program within 25 pulses
landed, but the read-back did not verify
firestarter verify <chip> <datei> --full
blank/contact
address-line
erase
M2732A
Brauche ich ein UV-Löschgerät? Nur für UV-EPROMs mit Fenster wie M27C512, 27C256, 2764 und 2732. W27C512 und W27C020, 28C-EEPROMs und SST39SF-Flash werden im RURP gelöscht.
Welcher Arduino? Ein Uno, ein Leonardo oder ein Board im Uno-Format mit ATmega328PB, für Firestarter. Der Aufdruck auf dem Chip zeigt, welches -b-Flag passt.
-b
Muss mein Image genau so groß sein wie der Chip? Nein. write schreibt die Datei ab Adresse 0 (oder ab -a), und verify vergleicht so viele Bytes, wie die Datei enthält.
Kann ich ein altes ROM sichern? Ja: firestarter read <chip> backup.bin, dann firestarter verify <chip> backup.bin. Stellen Sie vorher Jumper und Spannung für diesen Chip ein, wie beim Schreiben.
firestarter read <chip> backup.bin
firestarter verify <chip> backup.bin
Programmiert er 28C64- und 28C256-EEPROMs? Ja, bei 5 V ohne Programmierspannung. Firestarter hebt vor jedem Schreiben ihren Software-Schreibschutz auf. Für Version 3.1.0 stand noch kein 28C-Typ auf der Validierungsliste, betrachten Sie Ihren ersten also als Test.
Wofür steht RURP? Relatively Universal ROM Programmer.
Wo sehe ich ihn in Aktion? In Anders' Video Open $9 ROM Burner just got even better and easier to use! (Englisch), das Firestarter installiert und einen Chip brennt, und in Open Source ROM Burner Just Keeps Getting Better! über Rev 2.1.
Der Programmer und was Sie darauf löten:
Für den Computer, in den das ROM kommt:
Chips aus diesem Leitfaden, die iMania führt. Es sind gebrauchte Teile, den Lagerbestand sehen Sie auf der jeweiligen Seite:
Wie ein ROM seinen Platz im Adressraum bekommt, zeigt als Nächstes der Leitfaden zur Adressdekodierung.
Quellen. RURP-Repository und README (Jumper, Spannung, Sicherheitsregeln) · Projektlog auf Hackaday (74HC573-Latches, Sicherung der Rev 2.1) · Firestarter-Wiki: Install, Shield Revisions, Reading Chips, Writing and Verifying, Pin Maps sowie das Werkzeug Firestarter 3.1.0 und seine Chipdatenbank (Ausgabe von search und info) · Datenblätter: Winbond W27C512 (Lösch- und Programmierspannungen, Pinbelegung, Signatur), ST M27C512 (VPP, UV-Löschung), Microchip 27C256 (Pinbelegung, VPP), Winbond W27C020, SST39SF010A/020A/040. Beide Diagramme wurden für diesen Leitfaden gezeichnet.
search
Wir verwenden Cookies, um Ihnen die bestmögliche Erfahrung zu bieten. Außerdem ermöglichen sie uns, das Nutzerverhalten zu analysieren, um die Website für Sie stetig zu verbessern.