Nuvoton N76E003 i Infineon XC800 wykonują zestaw instrukcji wywodzący się z MCS-51, lecz nie są odpowiednikami ceramicznego 8051 z zewnętrznym EPROM-em. Integrują reprogramowalną Flash, RAM, szybkie timery, PWM, ADC, watchdog, brown-out i interfejsy szeregowe. N76E003 używa rdzenia 1T, w którym większość instrukcji potrzebuje znacznie mniej taktów niż w klasycznej implementacji 12T. Dzięki temu „8051 ze śmieci” może być technicznie bliższy STM8 niż oryginalnemu układowi Intela.
Ten artykuł łączy Nuvoton i XC800, ponieważ wspólnym problemem jest przeniesienie projektu MCS-51 na współczesne, niezgodne peryferyjnie pochodne. Kod obliczeniowy można współdzielić, ale rejestry, programowanie, przerwania, pamięć Flash i PWM są całkowicie zależne od producenta.
Klasyczny 8051 a szybkie pochodne#
| Cecha | klasyczny 8051/8031 | N76E003 | XC800 |
|---|---|---|---|
| wykonanie | typowo 12 taktów na cykl maszynowy | rdzeń 1T | przyspieszony rdzeń 8051 zależnie od modelu |
| pamięć programu | mask-ROM lub zewnętrzna | 18 KB APROM + konfigurowalny LDROM | Flash albo ROM zależnie od wariantu |
| RAM | 128 B wewnętrzne | 1 KB SRAM | zależne od modelu |
| ADC | brak | 12-bit, 8 kanałów | obecny w wybranych seriach |
| PWM | timery wymagające obsługi | do 6 kanałów z dead-zone | jednostki PWM/motor-control zależne od serii |
| SPI/I²C | brak sprzętowego standardu w oryginale | SPI i I²C | interfejsy zależne od modelu |
| programowanie | zewnętrzny EPROM lub tryb producenta | ICP, ISP i IAP | bootstrap loader/debug interface zależny od serii |
Kod oparty wyłącznie na instrukcjach CPU może zostać przeniesiony. Kod zapisujący TMOD, SCON albo dodatkowe SFR-y wymaga audytu. Nawet wspólne nazwy rejestrów nie gwarantują identycznych bitów i timingów.
N76E003 jako baseline#
N76E003 jest małym, 20-pinowym mikrokontrolerem 2,4–5,5 V. Producent podaje:
- rdzeń 1T-8051 do 16 MHz;
- 18 KB Flash APROM;
- do 4 KB konfigurowalnego LDROM dla boot code;
- 1 KB SRAM;
- konfigurowalny obszar Data Flash;
- sześć kanałów PWM z generatorem dead-zone;
- 12-bitowy, ośmiokanałowy ADC do 500 kS/s;
- dwa UART-y;
- SPI do 8 MHz;
- I²C do 400 kHz;
- brown-out detector;
- wewnętrzny oscylator 16 MHz;
- programowanie ICP, ISP i IAP.
To zasoby wystarczające dla prostego fixed-wing, modułu wykonawczego albo regulatora HIL. Największym ograniczeniem jest 1 KB RAM-u oraz tylko 18 linii I/O współdzielonych przez peryferia i programowanie.
Gdzie występuje Nuvoton#
Producent wymienia małe AGD, termostaty, ładowarki, głośniki Bluetooth, liczniki i systemy kontroli dostępu. Na płycie N76E003 może więc współpracować z:
- panelem przycisków lub enkoderem;
- sterownikiem segmentowego LED;
- układem ładowania;
- termistorem i dzielnikami ADC;
- wzmacniaczem audio;
- driverem wentylatora lub silnika;
- złączem fabrycznym ICP.
Oznaczenie N76E003AT20 lub podobne trzeba dopasować do tabeli zamówieniowej. N76S003, N76E616, ML51 i MG51 są pokrewne, ale mają różne pamięci, napięcia i programowanie. Nie wolno wybierać profilu N76E003 tylko dlatego, że logo jest takie samo.
APROM, LDROM i tryby programowania#
APROM przechowuje aplikację. LDROM jest oddzielnym obszarem przeznaczonym typowo na kod bootloadera, a jego rozmiar jest konfigurowany. ISP może aktualizować program za pośrednictwem boot code, IAP pozwala aplikacji modyfikować Flash, a ICP używa programatora zewnętrznego.
Przy odzysku ta wielość ma dwie konsekwencje:
- układ może uruchamiać kod z innego obszaru niż oczekiwano;
- bity konfiguracji i ochrona mogą zablokować odczyt starego programu.
Pierwsza operacja to odczyt konfiguracji i pełny zapis raportu programatora. Pełne kasowanie wykonuje się dopiero po zaakceptowaniu utraty APROM, LDROM i Data Flash.
ICP i Nu-Link#
Nuvoton udostępnia programatory Nu-Link obsługujące N76E003 przez ICP. Dokładne sygnały i ich piny bierze się z datasheetu oraz instrukcji programatora. Płytka dawcy może mieć mały rząd padów testowych prowadzących do:
VDD
GND
ICP clock
ICP data
reset / dodatkowy sygnał zależny od serii
Nie należy zakładać zgodności pinowej z SWD, ICSP Microchipa ani SWIM. To inne interfejsy, nawet jeśli złącze ma cztery piny.
Piny ICP mogą być współdzielone z GPIO. LED, przycisk albo driver na tej samej linii może uniemożliwić połączenie. Przed wylutowaniem całego MCU lepiej odłączyć pojedynczy rezystor szeregowy.
Architektura na N76E003#
IMU 3,3 V --- translator --- SPI
|
RC UART/capture --------------v
+-------------+
ADC bateria ----------->| N76E003 |--> PWM -> serwa/emulator
| 1T-8051 |--> GPIO -> PhotoMOS
HIL/loger <------ UART2 | 18 KB / 1KB|--> fault/status
+-------------+
Przy 20 pinach trzeba wykonać tabelę kolizji funkcji. Jeśli SPI zajmuje trzy linie, UART-y cztery, ICP dwie, PWM cztery, ADC dwa i pozostają zasilanie/reset, może zabraknąć osobnego data-ready lub chip-select. Rozwiązaniem nie jest przypadkowe przełączanie alternate functions w locie. Trzeba ograniczyć kanały, zastosować sygnał sumaryczny RC albo przenieść część I/O do drugiego układu.
1T nie znaczy jedna instrukcja na takt#
Określenie 1T opisuje ulepszony cykl maszynowy względem klasycznego 12T. Poszczególne instrukcje nadal mogą wymagać różnej liczby taktów, a przerwania mają koszt wejścia, przełączania banku rejestrów i wyjścia. Budżet pętli należy wyznaczać z podręcznika instrukcji, listingu i pomiaru pinem.
Przy 16 MHz okres 1 ms zawiera 16 000 taktów zegara, ale nie 16 000 dowolnych operacji C. Wywołania biblioteki mnożenia 32-bitowego, dzielenie i konwersje float mogą pochłonąć znaczną część okresu.
Pamięć 1 KB#
Proponowany budżet:
| Obszar | Limit orientacyjny |
|---|---|
| stan IMU i filtr | 160 B |
| regulatory i konfiguracja aktywna | 128 B |
| dwa bufory UART | 128 B |
| ramka SPI | 32 B |
| stan scheduler/fault | 64 B |
| stos i rejestry | mierzone, np. 192 B |
| margines | co najmniej 25% |
Duże lokalne tablice i formatowanie printf są niepożądane. Telemetria ma stały binarny format. Wodowskaz stosu powinien być sprawdzany podczas testu najgorszego przypadku.
Timery i PWM#
Sześciokanałowy PWM N76E003 jest atrakcyjny, lecz należy sprawdzić:
- wspólną podstawę czasu kanałów;
- rozdzielczość dla żądanej częstotliwości;
- możliwość preload/aktualizacji na granicy okresu;
- stan pinów po resecie;
- dead-zone i polarity;
- alternate pin mapping;
- kolizję z ICP i UART.
Do serw klasycznych może być potrzebny znacznie wolniejszy okres niż do falownika. Jeżeli moduł PWM nie daje wymaganej rozdzielczości przy 50 Hz, timer ogólny może prowadzić kolejkę zboczy. Dla regulatora HIL PWM może być szybszym znormalizowanym sygnałem do emulatora.
SPI i I²C#
SPI do 8 MHz pozwala szybko odczytać IMU. Sensor 3,3 V wymaga jednak zgodności poziomów. N76E003 pracujący przy 5 V może wystawić niedozwolone napięcie na SCK, MOSI i CS. Najczystsze rozwiązanie to odpowiedni translator albo zasilenie MCU napięciem zgodnym z sensorem po sprawdzeniu parametrów zegara i poziomów.
I²C jest dobry dla barometru, ale współdzielone linie oraz pull-upy muszą odnosić się do właściwej domeny. Timeout magistrali jest obowiązkowy. Zakleszczone SDA nie może zatrzymać watchdog feed całego systemu.
ADC 12-bitowy#
Rozdzielczość 12 bitów nie jest równoznaczna z dokładnością 12 bitów. Wynik zależy od referencji, impedancji źródła, czasu akwizycji, szumu zasilania i przełączania PWM. Pomiar baterii oraz prądu powinien być zsynchronizowany z fazą o mniejszym zakłóceniu i filtrowany.
Kanały ADC testuje się na płytce kwalifikacyjnej znanym napięciem. Jeżeli oryginalna płyta ma dzielnik podłączony do sieci lub szyny mocy, najpierw usuwa się rezystor łączący z niebezpieczną domeną.
Kompilator i model pamięci#
Kod 8051 bywa kompilowany SDCC albo narzędziami Keil. Słowa kluczowe opisujące przestrzenie data, idata, xdata i rejestry SFR są zależne od kompilatora. Przenoszenie kodu wymaga warstwy portu:
/* pseudokod warstwy portu */
void hal_tick_init(void);
bool hal_imu_read(struct imu_sample *out);
void hal_outputs_commit(const int16_t *value, uint8_t count);
void hal_watchdog_service_if_healthy(void);
Algorytm nie powinien bezpośrednio używać SFR. Dzięki temu można porównać klasyczny AT89S52, N76E003 i XC800 tym samym testem hostowym.
Watchdog i brown-out#
BOD wykrywa spadek napięcia, a watchdog brak postępu programu. Progi i zachowanie konfiguracyjne zależą od bitów systemowych. Po restarcie firmware zapisuje powód resetu, o ile rejestr go przechowuje, i pozostawia wyjścia nieaktywne do zakończenia self-testu.
Watchdog jest karmiony dopiero, gdy:
- przyszła świeża próbka sensora albo poprawnie obsłużono jego stan awarii;
- regulator ukończył iterację;
- scheduler nie zgłosił deadline miss;
- stos nie przekroczył limitu;
- napięcie jest w dozwolonym zakresie.
Migawka aparatu#
N76E003 może wyzwolić aparat przez izolowany PhotoMOS. GPIO nie zasila aparatu i nie dzieli z nim masy. Stan wysoki uruchamia LED przez rezystor, a styk półprzewodnikowy zwiera wejście remote.
Wyjście jest domyślnie nieaktywne sprzętowo. Firmware kwalifikuje warunek, generuje jeden impuls i przechodzi do blokady. Jeżeli reset nastąpi w trakcie impulsu, zewnętrzny pull-down wyłącza PhotoMOS natychmiast po przejściu portu w high-impedance.
Infineon XC800#
XC800 to rodzina przemysłowych i motoryzacyjnych pochodnych 8051. Wybrane serie integrują Flash, ADC, capture/compare/PWM, interfejsy szeregowe i bloki sterowania silnikami. Historycznie konfigurowano je narzędziem DAVE 2, które generowało inicjalizację peryferiów i kod C dla kompilatorów Keil, Tasking/Altium lub innych obsługiwanych środowisk.
Ich zaletą w odzysku jest bogata elektronika wokół: układ z modułu AGD może już mieć pomiar prądu, driver i zasilanie. Wadą jest status legacy oraz zależność narzędzi od starego środowiska Windows. Przed demontażem trzeba sprawdzić, czy dokładny wariant jest Flash, a nie ROM, i czy istnieje publiczny opis bootstrap loadera lub obsługiwany debugger.
XC82x i podobne serie#
Oznaczenie XC82x, XC83x, XC86x albo XC88x prowadzi do innego zestawu peryferiów i innej obudowy. Nie należy tworzyć jednego schematu programatora dla „XC800”. Dla konkretnego znaleziska trzeba zebrać:
- datasheet wariantu;
- user manual rodziny;
- opis Flash/BSL;
- DAVE DIP lub pliki device support;
- listę kompatybilnych debuggerów;
- erratę;
- schemat zasilania i resetu.
Jeżeli któregoś z tych elementów nie ma, układ pozostaje kandydatem do studium przypadku, a nie częścią zaplanowanego FC.
DAVE 2 jako ryzyko odtwarzalności#
Infineon nadal opisuje DAVE 2 jako narzędzie legacy dla XC800, ale instrukcje wspominają systemy Windows z poprzednich generacji. Projekt oparty wyłącznie na nieutrzymywanej aplikacji GUI jest trudny do odtworzenia.
Jeżeli uda się uruchomić toolchain, należy natychmiast zachować:
- instalator i jego sumę kontrolną w granicach licencji;
- pakiet/DIP konkretnego MCU;
- wygenerowane pliki źródłowe;
- komendy kompilatora i linkera;
- mapę pamięci oraz HEX;
- opis programatora;
- obraz maszyny wirtualnej albo dokładną konfigurację systemu, jeśli licencja pozwala.
Największą wartością może być wygenerowany, czytelny kod inicjalizacji, który później da się utrzymywać bez DAVE.
Nuvoton kontra XC800#
| Kryterium | N76E003 | XC800 |
|---|---|---|
| dostępność dokumentacji konkretnego baseline | dobra | dobra dla części serii, rozproszona dla innych |
| współczesny programator | Nu-Link | zależny od serii i debuggera |
| rozmiar | mały TSSOP/QFN-20 | szerszy wybór obudów |
| RAM | 1 KB | zależny od modelu |
| PWM/ADC | jawnie udokumentowane w N76E003 | często bogatsze motor-control, ale wariantowe |
| ryzyko narzędzi legacy | umiarkowane | wysokie |
| najlepsza rola | mały regulator/moduł I/O | projekt retro na konkretnym module dawcy |
Do nowego eksperymentu bez posiadanego dawcy łatwiejszy jest N76E003. XC800 ma sens, gdy istnieje konkretna sprawna płyta, pełne oznaczenie i dostęp do narzędzi.
Minimalna płytka dla N76E003#
Jeśli układ zostaje zdjęty z dawcy, adapter powinien być projektowany dla dokładnej obudowy TSSOP-20 albo QFN-20. Minimalny układ obejmuje:
- kondensator ceramiczny 100 nF umieszczony bezpośrednio między VDD i GND;
- 1–4,7 µF lokalnej pojemności przy wejściu zasilania;
- czteropolowe lub pięciopolowe złącze ICP opisane nazwami sygnałów, nie kolorami przewodów;
- oddzielne złącze UART z podanym napięciem logiki;
- rezystory szeregowe 22–100 Ω na wyprowadzonych szybkich liniach SPI jako miejsca montażowe, dobierane pomiarem;
- zwory pozwalające odłączyć IMU, wyjścia PWM i wejście RC podczas programowania;
- sprzętowy pull-down na wyjściu migawki i wszystkich liniach mogących uruchomić aktuator;
- testpoint zegara/timera oraz pin profilujący scheduler;
- ochronę przed jednoczesnym zasilaniem z programatora i głównej szyny.
Warto pozostawić miejsce na zewnętrzny rezonator, ale pierwszy start korzysta z wewnętrznego oscylatora. Zewnętrzny zegar dodaje się dopiero, jeśli zmierzona dokładność RC nie wystarcza dla UART-u albo budżetu częstotliwości. Kondensatory rezonatora dobiera się do konkretnego elementu i pojemności pasożytniczej, nie kopiuje z przypadkowej płytki.
Podział portu i konflikt funkcji#
Przed trasowaniem powstaje tabela każdego pinu:
| Pin logiczny | Funkcja startowa | Funkcja projektu | Obciążenie na dawcy | Dostępny podczas ICP |
|---|---|---|---|---|
| P0.x | GPIO/analog zależnie od konfiguracji | ADC baterii | dzielnik | tak |
| P1.x | linia współdzielona | SPI SCK | LED przez rezystor | po odłączeniu LED |
| P1.y | linia ICP | programowanie, potem status | driver tranzystora | nie bez zwory |
| P0.z | PWM | serwo 1 | brak | tak |
Rzeczywiste symbole i funkcje bierze się z tabeli pin description N76E003. Tabela projektowa ujawnia problem, zanim firmware zacznie przełączać rejestry wielofunkcyjne. Linie analogowe powinny być ustawiane cyfrowo tylko świadomie; pozostawiony tryb analogowy może sprawić, że odczyt portu nie odpowiada stanowi wyprowadzenia.
Przerwania 8051 i banki rejestrów#
Pochodne 8051 zachowują model wektorów oraz banków rejestrów, ale dodają własne źródła i priorytety. ISR data-ready, tick i UART nie mogą jednocześnie wykonywać długich obliczeń. Najkrótsze przerwania zapisują próbkę czasu, przenoszą bajt do małego bufora i ustawiają flagę.
Osobny bank rejestrów może zmniejszyć koszt zapisu kontekstu dla najważniejszego ISR, lecz trzeba dopilnować, aby kompilator i kod startowy uzgadniały jego użycie. Funkcja wywoływana zarówno z głównej pętli, jak i przerwania musi być reentrant albo chroniona. Przy 1 KB RAM-u automatyczne tworzenie reentrant stacku przez kompilator może być zbyt kosztowne; bezpieczniejszy jest jawny podział danych i brak zagnieżdżonych wywołań w ISR.
Priorytet ustala się według deadline:
- przechwycenie timestampu IMU;
- zbocza timerów/capture, jeśli nie kończy ich sam hardware;
- odbiór UART z ryzykiem overrun;
- tick wolnych zadań;
- zdarzenia interfejsu użytkownika.
Telemetria nigdy nie powinna blokować odczytu sensora.
Test zgodności kompilatora#
Na 8051 różnice modelu pamięci są wystarczająco duże, aby ten sam kod C działał poprawnie w jednym toolchainie, a w drugim przepełniał mały obszar data. Przed regulatorem buduje się test ABI:
- rozmiary
char,int,longi wskaźników dla każdej przestrzeni; - kolejność bajtów liczb 16- i 32-bitowych;
- koszt i wynik mnożenia ze znakiem;
- przesunięcie arytmetyczne wartości ujemnej;
- konwersję między
data,idata,xdataicode; - zapis kontekstu w ISR;
- inicjalizację zmiennych
.datai zerowanie.bsspo każdym typie resetu.
Wyniki są wysyłane w binarnej ramce do testu hostowego. Nie wolno opierać formatu telemetrycznego na układzie struktury C bez jawnego pakowania i serializacji pól.
Separacja funkcji przy dwóch mikrokontrolerach#
Mały N76E003 może współpracować z nowocześniejszym FC jako supervisor. Odbiera heartbeat, mierzy zasilanie i generuje bezpieczne wyjścia pomocnicze. Interfejs nie jest jednak surową zmienną przesyłaną UART-em. Ramka powinna zawierać:
sync | version | length | sequence | command | payload | CRC
Supervisor odrzuca nieznaną wersję, zły CRC, powtórzony numer i komendę starszą niż deadline. Utrata heartbeat prowadzi do wcześniej zdefiniowanego stanu, a odzyskanie komunikacji wymaga kilku spójnych ramek. Dzięki temu 8-bitowiec jest rzeczywistą domeną bezpieczeństwa, a nie dodatkowym punktem awarii.
Kwalifikacja#
Wspólna procedura obu rodzin:
- dokładnie zidentyfikuj wariant i technologię pamięci;
- odnajdź oficjalny interfejs programowania;
- zachowaj oryginalną płytę i odłącz stopień mocy;
- odczytaj device/config/security bez kasowania;
- świadomie wykonaj erase;
- programuj wzorce i sprawdź CRC całej Flash;
- przetestuj RAM, UART, SPI/I²C, ADC i wszystkie timery;
- sprawdź watchdog oraz brown-out;
- zmierz jitter przy pełnym obciążeniu komunikacją;
- wykonaj fault injection: brak sensora, zakleszczone SDA, przepełnienie UART, reset podczas PWM;
- przypisz rolę
HIL,moduł I/Oalbodemonstrator.
Realistyczny firmware#
Na N76E003 mieści się:
- driver jednego IMU;
- prosta kalibracja żyroskopu;
- filtr komplementarny roll/pitch;
- dwa regulatory rate/attitude;
- wejście RC;
- cztery wyjścia;
- monitoring napięcia;
- binarna telemetria;
- watchdog i migawka.
Nie powinien jednocześnie zawierać dużego parsera tekstowego, systemu plików, rozbudowanej nawigacji i dynamicznej alokacji. Każda dodatkowa funkcja konkuruje o 1 KB RAM-u i deadline.
XC800 o większych zasobach może zrobić więcej, ale dopiero po utworzeniu tabeli konkretnego modelu. Nie wolno przypisywać całej rodzinie największych parametrów najlepszego wariantu.
Co odzysk zmienia w projekcie#
Odzyskany N76E003 nie wymaga zewnętrznej pamięci, dlatego można przenieść go na mały adapter. XC800 często lepiej pozostawić na module dawcy, gdzie działa zasilanie, rezonator i debug header. W obu przypadkach historia termiczna i elektryczna jest nieznana.
Do lotu eksperymentalnego kwalifikuje się dopiero egzemplarz po długim teście, power-cycle, pomiarze zegara i fault injection. Identyczny nowy MCU może służyć jako kontrola: jeśli odzyskany element zachowuje się inaczej, problem nie powinien być maskowany poprawką firmware.
Laboratoria fc-lab-n76e003 i fc-lab-xc800#
Nuvoton i XC800 mają osobne katalogi, mimo wspólnego rdzenia 8051. git/fc-lab-n76e003 opisuje APROM/LDROM, ICP, Nu-Link, sprzętowy SPI/PWM i model pamięci kompilatora. git/fc-lab-xc800 wymaga najpierw wskazania konkretnego XC82x/XC83x/XC86x/XC88x oraz zachowania device support i plików wygenerowanych przez DAVE 2.
Oba laboratoria uruchamiają make check: unit test, C runner HIL oraz weryfikację bezpiecznych stanów. Porty nie używają ogólnych rejestrów 8051.h jako substytutu dokumentacji producenta.
Powiązane tematy#
- Selekcja i odzysk mikrokontrolerów
- Flight controller na klasycznym 8051
- STM8 jako kontroler lotu
- PIC16 i PIC18 jako kontroler lotu
- Renesas RL78 jako kontroler lotu
- Kontroler lotu na starej elektronice 8-bitowej
- Watchdog w kontrolerze lotu
- Brownout w UAV
Przypisy#
- Nuvoton, N76E003 Data Sheet, Rev. 1.08 — rdzeń 1T, APROM/LDROM, ICP/ISP/IAP, Flash, pamięć i peryferia.
- Nuvoton, N76E003 product page — parametry napięciowe, PWM, ADC, UART, SPI, I²C i zastosowania.
- Nuvoton, Nu-Link — oficjalna obsługa programowania ICP N76E003.
- Infineon, XC800 I-family — rodzina przemysłowych pochodnych 8051 i dokumentacja wariantów.
- Infineon, DAVE version 2 legacy — konfiguracja peryferiów XC800, generowanie kodu i obsługiwane kompilatory.
Źródła z centralnego rejestru
- Nuvoton N76E003 [oficjalna karta 1T-8051; Flash, ADC, PWM, SPI, I²C, UART, BOD i metody programowania]
- Nuvoton N76E003 Data Sheet [datasheet producenta; APROM, LDROM, ISP/IAP/ICP, peryferia i konfiguracja pamięci]
- Nuvoton Nu-Link programmer/debugger [oficjalna karta programatora obsługującego ICP układów N76E003]
- Infineon XC800 I-family [oficjalna dokumentacja rodziny 8051 z Flash, ADC i timerami motor-control]
- Infineon DAVE version 2 legacy [oficjalne archiwalne środowisko konfiguracji i generowania kodu dla XC800]
- Microchip AT89S52 — MCS‑51 compatible MCU [datasheet producenta]
- STMicroelectronics: STM32WB BLE HID Selfie [oficjalny przykład BLE HID używający klawisza głośności do wyzwalania zdjęcia]