DIY / ROM-Programmierung

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.

Zuerst: was ein EPROM ist und warum man eines programmiert

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 24-poliges ST-M2732A-EPROM mit rundem Quarzfenster, eingespannt in einen schwarzen 32-Pin-ZIF-Sockel auf einer RURP-Platine.
Ein EPROM im RURP: ein ST M2732A, ein 24-poliges UV-EPROM mit der Aufschrift 21V, in einem 32-Pin-ZIF-Sockel. Am runden Quarzfenster erkennt man ein UV-EPROM. Foto: iMania-Produktbild.

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.

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.

Draufsicht auf eine unbestückte RURP-Platine Rev 2.1: eine violette Arduino-Shield-Platine mit vorgelöteten SMD-Bauteilen, dem leeren Footprint für den 32-Pin-Sockel, einer LED-Reihe und den Tastern RST und USR.
Der RURP Rev 2.1 im Lieferzustand: SMD-Bauteile vorgelötet; Sockel und Stiftleisten löten Sie selbst ein.
Das Stiftleisten-Set: eine abbrechbare 40-polige Stiftleiste, eine 4-polige Buchsenleiste und zwei Jumper.
Stiftleisten und Jumper für den Programmer.

Löschen: UV-Licht, Hochspannung oder 5 V

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.

  • UV-EPROMs (27C512, 27C256, 2764, 2732, 2716 und die meisten anderen Typen der 27er-Reihe) haben ein Quarzfenster über dem Silizium. Nur kurzwelliges UV-Licht löscht sie. Das Datenblatt des ST M27C512 verlangt UV-Licht mit 253,7 nm und eine Dosis von mindestens 15 W·s/cm²: etwa 15 bis 20 Minuten unter einer Lampe mit 12 mW/cm², der Chip höchstens 2,5 cm von den Röhren entfernt. Das kann der RURP nicht. Er liest und programmiert UV-EPROMs, zum Löschen brauchen Sie aber ein separates UV-Löschgerät. Kleben Sie das Fenster danach mit einem lichtdichten Etikett ab: Laut demselben Datenblatt kann direktes Sonnenlicht den Chip in etwa einer Woche löschen. Versionen ohne Fenster („OTP“) lassen sich gar nicht löschen.
  • Elektrisch löschbare EPROMs wie Winbond W27C512 und W27C020 haben dieselbe Pinbelegung und werden genauso programmiert wie ein 27C512 oder 27C020, mit 12 V am Programmierpin. Gelöscht werden sie aber elektrisch: 14 V an OE/VPP und an A9, während CE 100 ms lang low gepulst wird (Datenblatt W27C512). Das erledigt der RURP selbst, ein UV-Löschgerät ist also nicht nötig. Händler, auch wir, nennen den W27C512 oft EEPROM; Winbond nennt ihn „electrically erasable EPROM“. So oder so braucht er diese hohen Spannungen und lässt sich daher nicht in einem 5-V-Computer neu beschreiben.
  • 5-V-EEPROMs (die 28C-Familie, etwa AT28C64 und AT28C256) und 5-V-Flash (SST39SF010A, SST39SF020A, SST39SF040) brauchen überhaupt keine Hochspannung. Sie werden bei 5 V mit Befehlsfolgen gelöscht und beschrieben. Die SST39SF-Typen löschen in Sektoren zu 4 KB oder als ganzer Chip, typisch in 18 ms bzw. 70 ms (Datenblatt SST39SF0x0A). Die unten verwendete Software unterstützt beide Familien.
VPP-Werte aus den unter Quellen genannten Datenblättern; der Wert für den M2732A stammt von der Produktseite und aus der Chipdatenbank der weiter unten beschriebenen Programmiersoftware.
ChipPinsTypGelöscht vonProgrammierspannung
W27C51228Elektrisch löschbares EPROMRURP (14 V)12 V an Pin 22
M27C512 (ST)28UV-EPROMUV-Löschgerät12,75 V ±0,25 V an Pin 22
27C256 (Microchip)28UV-EPROMUV-Löschgerät13,0 V ±0,25 V an Pin 1
W27C02032Elektrisch löschbares EPROMRURP (14 V)12 V
M2732A (ST)24UV-EPROMUV-Löschgerät21 V
SST39SF010A/020A/040325-V-FlashRURP (5-V-Befehle)Keine
AT28C64, AT28C256285-V-EEPROMRURP (5-V-Befehle)Keine

Was der RURP ist und was Sie sonst noch 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).

Für die Arbeit mit dem RURP und Firestarter brauchen Sie außerdem:

  • Einen Arduino Uno, einen Arduino Leonardo oder ein Board im Uno-Format mit ATmega328PB. (Anders' 65uino kann das Shield ebenfalls ansteuern, aber mit seinem ursprünglichen 6502-Code und den Python-Skripten im RURP-Repository, nicht mit Firestarter.)
  • Einen 32-poligen Sockel. Ein 32-Pin-ZIF-Sockel ist die bequeme Wahl: Der Chip fällt hinein, und ein Hebel klemmt ihn fest. Ein einfacher 32-Pin-DIP-Sockel ist die günstige Wahl. Der 32-polige Footprint nimmt auch Chips mit 24 und 28 Pins auf.
  • Die Stiftleisten und Jumper für die Arduino-Verbindung und JP4.
  • Einen Computer mit Python 3.11 oder neuer und avrdude sowie ein USB-Kabel für den Arduino.
Anders' drei Regeln, von der Platine und aus dem README. Stecken Sie das Shield nicht auf, solange Strom anliegt. Versorgen Sie das Shield erst mit Strom, wenn der Arduino die passende Firmware hat: also erst die Firmware installieren, dann das Shield aufstecken. Setzen Sie ein ROM erst in den Sockel, wenn Sie bereit zum Schreiben sind, und lassen Sie es nicht darin, während der Arduino zurückgesetzt wird oder Firmware bekommt: Manche Boards legen beim Reset die Programmierspannung an mehrere Pins.

Firestarter installieren

Das RURP-README empfiehlt Firestarter, wenn Sie einfach nur ROMs programmieren wollen. Die Befehle unten stammen aus der aktuellen stabilen Version 3.1.0.

  1. Installieren Sie avrdude: brew install avrdude unter macOS oder sudo apt install avrdude unter Debian und Ubuntu. Die Arduino IDE enthält es ebenfalls.
  2. Installieren Sie das Kommandozeilenwerkzeug und prüfen Sie die Version:
    pip install firestarter
    firestarter --version
  3. Schließen Sie den nackten Arduino per USB an und installieren Sie die Firmware. Für diese Boards nehmen Sie -b leonardo bzw. -b uno328pb. Bricht avrdude mit einem Signaturfehler ab, ist das Board-Flag falsch.
    firestarter fw -i -b uno
  4. Ziehen Sie das USB-Kabel ab, stecken Sie das Shield auf den Arduino und schließen Sie das Kabel wieder an. Fragen Sie dann Firmware-Version und Shield-Revision ab. Keiner der beiden Befehle berührt den Sockel.
    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.

So kommt der Chip in den Sockel

Foto einer RURP-Platine Rev 2.1 von der Bauteilseite mit einem 28-poligen Winbond W27E257 im 32-Pin-Sockel. Nummerierte Markierungen: 1, die Kerbe am linken Ende des Chips, die zu JP4 zeigt; 2, Chip-Pin 1 in Sockelloch 3; 3, die freien Sockellöcher 1 und 2 unten links sowie 31 und 32 oben links; 4, der blaue JP4-Jumper am linken Platinenrand.
Eine echte Platine mit Markierungen: ein 28-poliger Winbond W27E257 (27C256-Pinbelegung, also VPP an Pin 1) im einfachen 32-Pin-Sockel eines RURP Rev 2.1, von der Bauteilseite mit lesbar stehender Beschriftung. Die Kerbe zeigt nach links, zu JP4 (1); Chip-Pin 1 steckt in Sockelloch 3 (2); die Löcher 1, 2, 31 und 32 bleiben frei (3); und JP4 ist gesteckt, weil dieser Chip VPP an Pin 1 hat (4). Foto: iMania-Produktbild, für diesen Leitfaden markiert - JPG.
Draufsicht auf den 32-poligen RURP-Sockel, maßstabsgetreu mit 600-mil-DIP-Gehäusen gezeichnet. Die große Zeichnung zeigt einen 28-Pin-Chip mit Pin 1 in Sockelloch 3, sodass die Löcher 1, 2, 31 und 32 frei bleiben; zwei kleine Zeichnungen zeigen einen 32-Pin-Chip, der alle Löcher belegt, und einen 24-Pin-Chip mit Pin 1 in Loch 5, sodass die Löcher 1 bis 4 und 29 bis 32 frei bleiben. In jeder Zeichnung zeigt die Kerbe des Chips zu Sockelpin 1.
So sitzen Chips mit 32, 28 und 24 Pins im 32-poligen RURP-Sockel, nach der Pin-Map-Tabelle von Firestarter. Maßstabsgetreu für diesen Leitfaden gezeichnet (600-mil-DIP: 2,54 mm Raster, 15,24 mm Reihenabstand) - SVG.
  1. Finden Sie Pin 1 des Chips. Eine Kerbe oder ein Punkt markiert das Ende mit Pin 1. Zeigt die Kerbe nach links, ist Pin 1 der untere linke Pin.
  2. Finden Sie Pin 1 des Sockels. Er sitzt auf dem quadratischen Lötpad, und die Rückseite der Platine trägt „Pin1->“-Pfeile für Chips mit 24, 28 und 32 Pins. Auf den Platinen Rev 2.1 und Rev 2.3, mit den Bauteilen zu Ihnen und lesbar stehenden Beschriftungen RST, USR und OLED, ist Sockelpin 1 das Loch unten links, am Ende neben Jumper JP4.
  3. Richten Sie die Kerbe zum Pin-1-Ende des Sockels aus und schieben Sie den Chip ans andere Ende. Ein 32-Pin-Chip füllt den Sockel. Ein 28-Pin-Chip steckt mit Pin 1 in Sockelloch 3, die Löcher 1, 2, 31 und 32 bleiben frei. Ein 24-Pin-Chip steckt mit Pin 1 in Loch 5, die Löcher 1-4 und 29-32 bleiben frei.
  4. Bei einem ZIF-Sockel heben Sie den Hebel an, um die Kontakte zu öffnen, legen den Chip ohne Druck ein und drücken den Hebel nach unten, um ihn festzuklemmen. Heben Sie den Hebel wieder an, bevor Sie den Chip herausnehmen.

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.

Programmierspannung und Jumper

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.

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:

ChipMessen mit
EPROMs mit 28 und 32 Pins, auch W27C512 und W27C020firestarter vpp
EPROMs mit 24 Pins (2716, 2732) und Intel-28F-Flashfirestarter vpe
5-V-EEPROMs und 5-V-FlashNichts einzustellen

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.

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.

Pinbelegung von 27C512 und 27C256 nebeneinander in der Draufsicht. Sie sind gleich bis auf Pin 1, der beim 27C512 A15 und beim 27C256 VPP ist, und Pin 22, der beim 27C512 /OE und VPP, beim 27C256 aber nur /OE ist. Pin 24, A9, ist bei beiden markiert, weil er bei der Chip-ID und beim Löschen des W27C512 Hochspannung bekommt.
Pinbelegung von 27C512 und 27C256 nach den Datenblättern von Winbond W27C512, ST M27C512 und Microchip 27C256. Für diesen Leitfaden gezeichnet - SVG.

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.

Durchgespieltes Beispiel: ein ROM-Image in einen W27C512, dann verifizieren

  1. Besorgen Sie das Image. Ein 27C512 fasst 65.536 Bytes. Eine kleinere Datei ist kein Problem: Der Schreibvorgang beginnt bei Adresse 0 (oder bei der mit -a angegebenen) und endet am Dateiende. Für einen 65uino ist das Image build/abn6507rom.bin, erzeugt vom Skript assemble.sh im 65uino-Repository. Der letzte Schritt dieses Skripts ist selbst firestarter write w27c512 build/abn6507rom.bin. Sie können das Image zuerst im 65uino-Emulator ausprobieren; er öffnet eine rohe ROM-Datei lokal in Ihrem Browser (siehe unseren Leitfaden zu den 6502-Browser-Emulatoren).
  2. Ermitteln Sie den genauen Chipnamen und lesen Sie seine Daten:
    firestarter search 27C512
    firestarter info W27C512
    Die Suche listet jede 27C512-Variante mit Hersteller und VPP. Nehmen Sie den Namen des Chips, den Sie in der Hand halten; beim Winbond ist es W27C512. info zeigt VPP: 12.0v, Can be erased: yes (electrically erasable) und „No jumper“ für JP4.
  3. Ziehen Sie den Jumper von JP4 ab und stellen Sie die Spannung ein, mit leerem Sockel. Drehen Sie das Trimmpoti, bis 12,0 V angezeigt werden, und drücken Sie Strg+C:
    firestarter vpp
  4. Setzen Sie den Chip ein: Kerbe zum Pin-1-Ende, Chip-Pin 1 in Sockelloch 3, Hebel nach unten.
  5. Optionale Prüfungen. id liest die elektronische Signatur des Chips; das Datenblatt nennt DA (Winbond) und 08 (W27C512), es sollte also 0xDA08 herauskommen. Der Befehl legt Hochspannung an A9, deshalb wird die Spannung vorher eingestellt. Enthält der Chip etwas, das Sie behalten möchten, lesen Sie es vor dem Überschreiben in eine Datei aus:
    firestarter id W27C512
    firestarter read W27C512 backup.bin
  6. Schreiben und verifizieren in einem Schritt:
    firestarter write W27C512 build/abn6507rom.bin --verify
    Einen elektrisch löschbaren Chip löscht Firestarter zuerst, programmiert ihn dann Byte für Byte mit 12-V-Pulsen und prüft jedes Byte, und zum Schluss liest es den ganzen Bereich zurück und vergleicht ihn mit der Datei. Bei Erfolg endet es mit Write to W27C512: verified -- the read-back matches. und Exit-Code 0.
  7. Prüfen Sie jederzeit erneut. verify vergleicht den Chip mit der Datei (Exit-Code 0 heißt identisch), und blank sagt, ob ein Chip leer ist:
    firestarter verify W27C512 build/abn6507rom.bin
    firestarter blank W27C512
  8. Heben Sie den Hebel an und nehmen Sie den Chip heraus, bevor Sie den Arduino vom Strom trennen oder zurücksetzen. Der Chip ist bereit für seinen Sockel im Computer.

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 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.

Und der 27C256?

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:

  • VPP liegt an Pin 1, nicht an Pin 22 (siehe Abbildung oben). Stecken Sie JP4 bei Rev 2.2/2.3 auf den 28-Pin-Pol oder schließen Sie ihn bei Rev 2.0/2.1; firestarter info AM27C256 sagt dasselbe. Entfernen Sie den Jumper wieder, bevor Sie einen 27C512 oder einen 32-Pin-Chip programmieren.
  • VPP hängt vom Hersteller ab. Die Datenbank hat 12,0 V für den 27C256 von Intel und Atmel und 13,0 V für den von AMD, Microchip und den M27C256B von ST. Das Microchip-Datenblatt nennt 13,0 V ±0,25 V. Nehmen Sie den Eintrag des Herstellers, der auf Ihrem Chip steht.
  • Er ist ein UV-EPROM mit halber Kapazität: 32.768 Bytes. Zum Löschen brauchen Sie wie oben ein UV-Löschgerät.

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.

Häufige Fehler und was sie bedeuten

Sie sehenWahrscheinliche UrsacheWas zu tun ist
Kein Programmer gefunden, oder der falsche antwortetMehrere serielle Geräte, oder das Board ist belegtNur einen Programmer anschließen oder den Port angeben: firestarter -p /dev/ttyACM0 fw
avrdude-Signaturfehler bei fw -iFalsches Board-Flag-b uno, -b leonardo oder -b uno328pb passend zum Chip auf Ihrem Board verwenden
hw zeigt rev_unknownRevision nicht erkannt; die Firmware schaltet die Programmierspannung nicht einPer Nummer setzen: firestarter config --rev 5 für Rev 2.3 (4 = Rev 2.2, 3 = 2.1, 2 = 2.0)
VPP is high: 12.9V > 12.0VTrimmpoti zu hoch; der Schreibvorgang stopptfirestarter vpp ausführen und herunterdrehen
VPP is low: …Trimmpoti zu niedrigHochdrehen. Lässt sich der Wert nicht erreichen (manche 24-Pin-Chips wollen bis 25 V), kann das Shield diesen Chip nicht programmieren
Chip ID … does not match expected ID …Falscher Chipname, Chip verdreht oder in falschen Löchern, Hebel offen, oder ein Chip eines anderen HerstellersAufdruck und Position des Chips prüfen. id listet Chips mit der gefundenen ID. -f nur verwenden, wenn Sie sicher sind
Refusing write … not blank at …Ein UV-EPROM, das noch Daten enthältMit UV-Licht löschen. Bei einem W27C512 firestarter erase W27C512 -b ausführen
Byte at … failed to program within 25 pulsesVPP zu niedrig, VPP am falschen Pin (JP4) oder ein verschlissener ChipSpannung und JP4 mit info abgleichen, dann einen anderen Chip versuchen
landed, but the read-back did not verifySchlechter Kontakt oder ein Adressproblemfirestarter verify <chip> <datei> --full ausführen. blank/contact heißt, fast alle Bytes wurden als FF gelesen: Der Chip ist leer oder hat keinen Kontakt. address-line deutet auf einen verbogenen Pin oder falsche Löcher. Bei gebrauchten Chips müssen die Pins eventuell von Oxidation gereinigt werden
erase bewirkt bei einem 27C512 nichtsUV-EPROMs lassen sich nicht elektrisch löschenEin UV-Löschgerät verwenden
Die Suche zeigt eine Typennummer von mehreren Herstellern mit unterschiedlicher VPPinfo und write nehmen den ersten Treffer. M2732A findet zum Beispiel Intels 25-V-Eintrag vor dem 21-V-Eintrag von STVergleichen Sie die VPP vor dem Schreiben mit dem Datenblatt Ihres Chips. Programmieren Sie erst, wenn beide übereinstimmen

Grenzen

  • Er löscht keine UV-EPROMs.
  • Er nimmt parallele DIP-Chips mit 24, 28 und 32 Pins. Adapter für andere Gehäuse behandelt dieser Leitfaden nicht.
  • Die Spannung stellen Sie von Hand am Trimmpoti ein, JP4 und JP5 ebenfalls von Hand. Das Shield kann seine Jumper nicht erkennen, die Software kann sie also nicht prüfen.
  • Die Versorgung des Chips durch das Shield ist fest auf 5 V. Manche UV-EPROM-Datenblätter verlangen beim Programmieren eine erhöhte Versorgung (6,25 V beim M27C512, 6,5 V beim „Express“-Algorithmus des Microchip 27C256). Firestarter zeigt für solche Chips eine Programmier-VCC in info an und programmiert sie mit 5 V.
  • Kommerzielle Programmiergeräte wie TL866II oder T48 können bei manchen Aufgaben schneller sein. Beim RURP geht es um Preis, Offenheit und Reparierbarkeit.

Häufige Fragen

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.

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.

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.

In diesem Leitfaden verwendete Teile

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.