
Beschreibung des Programmierprotokolls für Nyquest MTP (NY8AE51F)-Mikrocontroller auf der Grundlage unserer eigenen Analyse der während der Programmierung erfassten Timings.
Timings wurden von der Person zur Verfügung gestellt, die im Besitz des originalen Programmierers ist (DANKE).
Der Mikrocontroller NY8AE51F verfügt über einen wiederbeschreibbaren 1K*14bit-Speicher, 64B RAM, 64B EEPROM und ist in den Gehäusen SOP8 und SOT23-6 erhältlich.
Nyquest bietet auch MTP-Chips in größeren Gehäusen an, z. B. NY8BExx, NY8BMxx in SOP16, und eine ganze Reihe von OTP-Speicherchips (zu Preisen unter 2 Cent). Dazu 4-Bit µC und diverse „Player“.
https://www.nyquest.com.tw/en/product/
Programmierung:
Programmierspannung 5V. Status der RESET-Leitung - niedrig.
Reihenfolge der Signale auf den Screenshots: VCC, SCL, SDA.

Auslesen:
Wir schalten die Stromversorgung ein
Wir warten
Wir senden den Initialisierungscode:

Wir senden den Auslesebefehl:

Wir erfassen Daten:

Schreiben:
Wir schalten die Stromversorgung ein
Wir warten
Wir senden den Initialisierungscode:

Wir senden den Schreibbefehl:

Wir senden Daten:

Löschen:
Gibt es nicht. Beim Speichern überschreiben wir die alten Werte.
Initialisierungscode:

Der Code besteht aus 16 Bits (0x53AD).
Wir setzen die Bits vor dem steigenden Taktsignal. Vom Ältesten bis zum Jüngsten.
Nach dem Senden der 16 Bits setzen wir die Taktleitung als Pull-up-Eingang.
Wir setzen die Datenleitung auf den niedrigen Zustand.
Wir warten eine Weile.
Startbit:

Wir setzen den High-Status auf der Datenleitung.
Wir warten auf den High-Status auf der Taktleitung.
Wir setzen den Low-Status auf der Datenleitung.
Wir setzen den Low-Status auf der Taktleitung.
Der Takt außerhalb des Abschnitts zwischen dem "Code" und dem Startbit wird vom Programmierer generiert.
Lese-/Schreibbefehl:

Der Befehl besteht aus 2 Bytes. Darauf folgt 1 Byte unbekanntes Ziel (0x00) gefolgt von 2 Bytes Adresse.
Nach jedem Byte antwortet der Mikrocontroller mit einem einzelnen Bit.
Befehle:
Lesen - 0x40, 0xC0, 0x00, [address_hi], [address_lo]
Schreiben - 0x48, 0xC2, 0x00, [address_hi], [address_lo]
Daten lesen:

Wir empfangen 8 Bit Daten (data_hi).
Wir senden 1 Bit '0' Bestätigung vom Programmierer.
Wir empfangen 8 Bit Daten (data_lo).
Wir senden 1 Bit '0' Bestätigung vom Programmierer.
...
Daten schreiben:

Oder je nach Wartezeit:

Wir senden 8 Bit an Daten (data_hi).
Wir erhalten die 1 Bit Bestätigung vom Mikrocontroller.
Wir senden 8 Bit an Daten (data_lo).
Wir warten darauf, dass die Datenleitung auf High geht,
Wir setzen den High-Status auf der Taktleitung.
Wir setzen den Low-Status auf der Taktleitung.
Speicher:
0x0000...0x03FF Programmspeicher
0x0400...0x0410 „Fuse-Bits“
Bei Interesse kann ich auch die Programmierung der OTP-Version und die Dekodierung der vom Compiler des Herstellers generierten BINs beschreiben.
Cool? DIY-Rangliste