Opis protokołu programowania mikrokontrolerów Nyquest MTP (NY8AE51F) na podstawie własnej analizy timingów zebranych podczas programowania.
Timingi dostarczyła osoba posiadająca oryginalny programator (DZIĘKUJĘ).
Mikrokontroler NY8AE51F posiada 1K*14bit pamięci wielokrotnego zapisu, 64B RAM, 64B EEPROM i dostępny jest w obudowach SOP8 i SOT23-6.
Nyquest ma też w ofercie układy MTP w większych obudowach, np. NY8BExx, NY8BMxx w SOP16 i całą masę układów z pamięcią OTP (w cenach poniżej 2 centów). Do tego µC 4 bitowe czy różne "grajki".
https://www.nyquest.com.tw/en/product/
Programowanie:
Napięcie programowania 5V. Stan linii RESET - niski.
Kolejność sygnałów na screenach: VCC, SCL, SDA.
Odczyt:
Włączamy zasilanie.
Czekamy
Wysyłamy kod inicjacji:
Wysyłamy komendę odczytu:
Odbieramy dane:
Zapis:
Włączamy zasilanie.
Czekamy
Wysyłamy kod inicjacji:
Wysyłamy komendę zapisu:
Wysyłamy dane:
Kasowanie:
Nie ma. Przy zapisie nadpisujemy stare wartości.
Kod inicjacji:
Kod składa się z 16 bitów (0x53AD).
Bity ustawiamy przed rosnącym sygnałem zegara. Od najstarszego do najmłodszego.
Po wysłaniu 16bitów ustawiamy linię zegara jako wejście z pull-upem.
Linię danych ustawiamy jako stan niski.
Chwilę czekamy.
Bit startu:
Ustawiamy stan wysoki na linii danych.
Czekamy na stan wysoki na linii zegara.
Ustawiamy stan niski na linii danych.
Ustawiamy stan niski na linii zegara.
Zegar poza odcinkiem między "kodem" a bitem startu jest generowany przez programator.
Komenda odczytu/zapisu:
Komenda składa się z 2 bajtów. Po niej następuje 1 bajt nieznanego przeznaczenia (0x00). Po nim 2 bajty adresu.
Po każdym bajcie mikrokontroler odpowiada pojedynczym bitem.
Komendy:
Odczyt - 0x40, 0xC0, 0x00, [adres_hi], [adres_lo]
Zapis - 0x48, 0xC2, 0x00, [adres_hi], [adres_lo]
Dane odczyt:
Odbieramy 8bit danych (data_hi).
Wysyłamy 1bit '0' potwierdzenia z programatora.
Odbieramy 8bit danych (data_lo).
Wysyłamy 1bit '0' potwierdzenia z programatora.
...
Dane zapis:
Lub w zależności od czasu oczekiwania:
Wysyłamy 8bit danych (data_hi).
Odbieramy 1bit potwierdzenia z mikrokontrolera.
Wysyłamy 8bit danych (data_lo).
Czekamy na stan wysoki linii danych,
Ustawiamy stan wysoki na linii zegara.
Ustawiamy stan niski na linii zegara.
Pamięć:
0x0000...0x03FF pamięć programu
0x0400...0x0410 "fusebity"
Jak będzie zainteresowanie mogę też opisać programowanie wersji OTP i dekodowanie BINów generowanych przez kompilator producenta.
Fajne? Ranking DIY
