logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Protokół programowania mikrokontrolerów Nyquest MTP (NY8AE51F)

piotr_go 27 Lut 2024 16:26 987 4
  • Protokół programowania mikrokontrolerów Nyquest MTP (NY8AE51F)





    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.

    Protokół programowania mikrokontrolerów Nyquest MTP (NY8AE51F)

    Odczyt:
    Włączamy zasilanie.
    Czekamy 1ms 130µs.
    Wysyłamy kod inicjacji:
    Protokół programowania mikrokontrolerów Nyquest MTP (NY8AE51F)
    Wysyłamy komendę odczytu:
    Protokół programowania mikrokontrolerów Nyquest MTP (NY8AE51F)
    Odbieramy dane:
    Protokół programowania mikrokontrolerów Nyquest MTP (NY8AE51F)

    Zapis:
    Włączamy zasilanie.
    Czekamy 1ms 130µs.
    Wysyłamy kod inicjacji:
    Protokół programowania mikrokontrolerów Nyquest MTP (NY8AE51F)
    Wysyłamy komendę zapisu:
    Protokół programowania mikrokontrolerów Nyquest MTP (NY8AE51F)
    Wysyłamy dane:
    Protokół programowania mikrokontrolerów Nyquest MTP (NY8AE51F)

    Kasowanie:
    Nie ma. Przy zapisie nadpisujemy stare wartości.

    Kod inicjacji:
    Protokół programowania mikrokontrolerów Nyquest MTP (NY8AE51F)
    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:
    Protokół programowania mikrokontrolerów Nyquest MTP (NY8AE51F)
    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:
    Protokół programowania mikrokontrolerów Nyquest MTP (NY8AE51F)
    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:
    Protokół programowania mikrokontrolerów Nyquest MTP (NY8AE51F)
    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:
    Protokół programowania mikrokontrolerów Nyquest MTP (NY8AE51F)
    Lub w zależności od czasu oczekiwania:
    Protokół programowania mikrokontrolerów Nyquest MTP (NY8AE51F)
    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
    O autorze
    piotr_go
    Konstruktor DIY elektronika
    Offline 
    Specjalizuje się w: technika cyfrowa
    piotr_go napisał 2785 postów o ocenie 3114, pomógł 90 razy. Jest z nami od 2003 roku.
  • #2 20981627
    _lazor_
    Moderator Projektowanie
    W sumie producent dostarcza jakiś programator i software? Czy jest to raczej coś co dorwałeś i nie jest to tak łatwo dostępne, więc kopia zapasowa?
  • #3 20981670
    piotr_go
    Konstruktor DIY elektronika
    NY8 MTP:
    https://pl.aliexpress.com/item/1005005078371917.html
    ~179zł

    NY8 OTP:
    https://pl.aliexpress.com/item/1005004560890408.html
    ~532zł

    Soft na stronie Nyquesta.
    Procki mają w LCSC, ale tylko OTP, MTP zero na stanie od dłuższego czasu.
    MTP chyba stąd brałem: https://pl.aliexpress.com/item/1005004555467807.html



  • #4 20997896
    Sam.Aux
    Poziom 7  
    Na wstępie chciałbym podziękować Piotrowi za ciekawą pracę, za każdym razem gdy miałem do czynienia z tanim uC był szybszy ;-)
    To samo czułem w przypadku Nyquest uC. Kiedy szukał alternatywy dla Padauka w LCSC, pracował nad nią już od dłuższego czasu ;-)
    Dziękuję, że nie tylko się tym zajmujesz, ale także przekazujesz swoją wiedzę.

    Byłbym zainteresowany flashowaniem/timingiem/kalibracją wariantu OTP, za 2 centy jest to bardzo interesujące.
    Ponieważ chciałbym też programować Padauka z Linuksa, skopiuję programator Piotra, jest naprawdę świetny.
    Chcę się tylko upewnić, jaka jest aktualna wersja płyty/sterownika.

    (ponieważ nie mówię po polsku, ten tekst został przetłumaczony przez Google)
  • #5 20998246
    piotr_go
    Konstruktor DIY elektronika
    Z opisem OTP mi trochę zejdzie. Najpierw opiszę dekodowanie BINa. Będę też musiał zmapować "fusebity", bo wyciąganie starego laptopa z windowsem za każdym razem jak coś chcę przestawić jest dość upierdliwe.

    Programator, jest nowsza wersja (w kolejce do opisania), podesłałem pliki na PW.

    Kilka spostrzeżeń odnośnie samych mikrokontrolerów.
    Fusebity trzeba ustawiać. Nawet jak mamy rejestry np. enable watchdog, czy PWM na pinie, to bez ustawienia tego samego fusebitem nie będzie działać.

    Nyquest MTP z Aliexpress są czymś zaprogramowane. Nie wiem czy to jest powodem, ale pobór prądu w uśpieniu przy pracującym timerze jest dość wysoki (4µA, OTP ~1,2µA).
    Nie mogę też przez to namierzyć bajtów kalibracyjnych co skutkuje niewłaściwym napięciem odniesienia i częstotliwością generatora.
    W OTP z LCSC wszystko wygląda OK.

    Przydałyby się do testów czyste NY8AE51F.

    Dodano po 6 [godziny] 30 [minuty]:

    ================= update =================
    Niektóre fusebity powodowały problemy z inicjacją więc uaktualniłem czas po włączeniu zasilania.

    Namierzyłem kalibrację LVR. 0x405: bity 7...0 (signed)
    Namierzyłem kalibrację LVD Bandgap. 0x408: bity 5...0
    Namierzyłem kalibrację IHRC. 0x40D: bity 6...0
    Namierzyłem kalibrację ILRC. 0x40E: bity 7...0

    Po ustawieniu kalibracji LRC na 0 procek zwolnił ~4x (instruction clock ~2kHz) a pobór prądu w uśpieniu przy pracującym timerze wynosił 0,7µA.

    Watchdog jest taktowany z LRC.

    Byłbym zapomniał, pobór prądu przy zasilaniu 3,3V.
REKLAMA