Powiedzmy, że masz dość prosty i mały mikrokontroler i nie masz interfejsu, komputera, debuggera, kompilatora ani asemblera. Czy możesz napisać kod w asemblerze, przekonwertować go (ręcznie) na kod maszynowy, a następnie przyłożyć zasilanie do odpowiednich styków za pomocą źródła napięcia?
Rozumiem, że potrzebowałbyś odpowiedniego I / O i pamięci, aby naprawdę cokolwiek zrobić , ale gdybyś był tak skłonny i miał czas, czy mógłbyś to zrobić? Wydaje mi się, że historycznie, jak to zrobiono, skoro na początku nie było komputera / kompilatora / asemblera? Nie krępuj się połączyć mnie z zasobem zewnętrznym. Dzięki! :)
Odpowiedzi:
Tak!
Kod można zapisać „z głowy” w formie binarnej, jeśli chcesz.
Dawno (dawno, dawno temu) tak zacząłem używać (wtedy) mikroprocesorów.
Ja i przyjaciele piszemy kod w języku asemblera, kompilujemy go ręcznie do kodu maszynowego (coś, co można zrobić „przez kontrolę” po pewnej praktyce), a następnie wprowadzamy go do procesora na różne sposoby. W jednym zbudowanym przez nas systemie ustawiamy adres na przełącznikach binarnych (włącz / wyłącz) lub korzystamy z funkcji automatycznego zwiększania procesora, wprowadzamy 8 bitów danych na przełącznikach binarnych, a następnie wciskamy przełącznik „zegar”, aby wprowadzić dane do pamięci.
Równoważną funkcjonalność można uzyskać dzięki jeszcze mniejszej liczbie przełączników nowoczesnego mikrokontrolera za pomocą szeregowego programowania SPI - patrz poniżej.
Tak!
Ale byłoby to niezwykle powolne!
Wiele nowoczesnych mikrokontrolerów pozwala na użycie interfejsu „SPI” do programowania.
Zwykle składa się z linii danych wejściowych i wyjściowych oraz linii „zegara” i zwykle linii resetu.
Wiele procesorów pozwala, aby zegar SPI i dane były „statyczne”, co oznacza, że nie ma ograniczeń co do czasu, jaki można poświęcić na konfigurację danych między bitami. Można zaprogramować taki procesor za pomocą linii danych i linii zegara, które były sterowane ręcznie obsługiwanymi przełącznikami. Linia zegara musi być „wolna od odbicia” - musisz być w stanie ustawić ją na wysoką lub niską w jednym przejściu na operację - więc minimalny interfejs może wymagać włączenia bramki wyzwalanej przez Schmitta. Możesz „uciec” z opóźnieniem RC i przełącznikiem przyciskowym, ale wejście wyzwalane przez Schmitta jest bezpieczniejsze. Linia danych nie musi być odbijana swobodnie, ponieważ jej stan jest odczytywany tylko na brzegu zegara.
Niektóre interfejsy są interaktywne - dane są przetwarzane przez procesor podczas programowania (np. Data out = MISO = Master In Serial Out na procesorach AVR). Aby to przeczytać, musisz dodać np. Diodę LED i rezystor (a może tylko bufor lub tranzystor, jeśli zdolność napędu była NAPRAWDĘ niska).
MC6800:
Z pamięci zanikającej (prawie 40 lat!)
LDI A, 7F $ ...... 86 7F ...... 1000 0110 0111 1111
STA, 1234 $ ...... B7 12 34 ... 1011 0111 0001 0010 0011 0100
LDI X, 2734 $ .. CE 27 34 ... 1100 1110 0010 0111 0011 0100
...
źródło
Pierwotnie w programowalnych maszynach programy były ręcznie dziurkowane w taśmę papierową lub karty. Później używali swego rodzaju maszyny do pisania, aby wykonać wykrawanie, a nawet później komputery (jak do tej pory były znane) mogły wykrawać własną taśmę papierową.
Dosłownie siedział tam z kartą i ręcznie robił w nim dziury.
Każda kolumna jest instrukcją lub bitem danych interpretowanym przez maszynę stanu procesora do wykonywania zadań.
Teraz, jeśli oczywiście jest to cała pamięć flash, i tak, uzyskanie danych tam przede wszystkim zwykle wymaga komputera. Ale to nie jest w 100% prawda.
W końcu, co robi programista komputerowy i sprzętowy, ale ustawia stan pinów we / wy we właściwym czasie? Tak więc, jeśli jesteś wystarczająco masochistyczny, możesz zbudować system, który pozwoli ci wysłać odpowiednie instrukcje do pinów programowania mikrokontrolera we właściwy sposób, aby zainstalować niektóre instrukcje w pamięci flash w celu wykonania.
Może coś obejmującego wiele przełączników, niektóre rejestry przesuwne, generator zegara itp.
Pamiętam, że na studiach mieliśmy nowy system programowania oparty na Z80 - jednostkę wielkości walizki z Z80, niewielką ilość pamięci RAM, kilka 7-segmentowych wyświetlaczy LED i duży rząd przełączników. Zaprogramuj go, ręcznie ładując instrukcje do pamięci RAM za pomocą przełączników.
źródło
Powiedziałeś: „mały mikrokontroler i nie miał interfejsu, nie miał komputera, nie miał debuggera, kompilatora ani asemblera”. Cóż, możesz sobie poradzić bez komputera, debuggera, kompilatora lub asemblera, ale musisz mieć jakiś interfejs, aby połączyć się z mikrokontrolerem, aby załadować program.
Przede wszystkim zapomnij o językach wysokiego poziomu, takich jak C. Następnie najłatwiej jest napisać program w języku asemblera, ale nie używaj asemblera do tłumaczenia go na kod maszynowy. Zamiast tego przejrzyj każdą instrukcję montażu w instrukcji programowania, znajdź jej równoważne kodowanie szesnastkowe i zapisz ją.
Będziesz musiał przydzielić własne zmienne, abyś mógł wpisać odpowiednie adresy w części operandu instrukcji. Zapomnij także o stosie i stosie, zbyt dużo pracy. Po zakończeniu otrzymasz program maszynowy, który można załadować bezpośrednio do pamięci flash mikrokontrolera - nie jest też potrzebny linker.
Z powodu braku zewnętrznych adresów i magistrali danych na prawie wszystkich mikrokontrolerach (ponieważ zajęłyby one zbyt wiele pinów potrzebnych przez porty I / O i urządzenia peryferyjne), praktycznie wszystkie mikrokontrolery są programowane za pomocą specjalnego interfejsu takiego jak ten:
Zwykle „programator” po lewej stronie byłby podłączony do komputera PC, który pobierałby plik maszyny wygenerowany przez kompilator / linker.
Jeśli jednak programator ma klawiaturę, taką jak ta poniżej:
następnie można wprowadzić kody szesnastkowe ręcznie wygenerowanego programu bezpośrednio do programatora i zaprogramować urządzenie bez potrzeby korzystania z kompilatora, konsolidatora lub komputera, o które pytano. (Klawiatura służy również do edycji plików szesnastkowych i generowania sum kontrolnych).
Oczywiście niewielu programistów ma takie klawiatury. Ten nie byłby odpowiedni dla hobbystów, ponieważ prawdopodobnie kosztuje kilka tysięcy dolarów.
Ten konkretny programator programuje części przed umieszczeniem ich na płycie; interfejsy i gniazda są dostępne dla wielu PIC, a także dla AVR Atmel.
źródło
W praktyce, coś takiego jak ręczne przełączanie pinów JTAG byłoby bardzo podatne na błędy. Wprowadzenie programu o dowolnej wielkości wymagałoby tysięcy przełączeń. Ale teoretycznie jest to możliwe.
Jeśli możesz wcześniej przygotować mikrokontroler (lub napisać bootowalną pamięć ROM), możesz łatwo zaimplementować coś takiego jak zewnętrzne przełączniki używane we wczesnych komputerach mainframe. Jeśli zezwolisz na logikę zewnętrzną, możesz nawet użyć klawiatury sześciokątnej, aby przyspieszyć.
Wreszcie, choć obecnie nie jest to tak powszechne, możesz kupić mikrokontroler oparty na pamięci ROM z niestandardowym kodem. Musiałbyś zaoferować trochę pieniędzy z góry i zagwarantować określoną ilość, ale widziałem, jak klienci robią to, aby zaoszczędzić pieniądze na produkcji na dużą skalę. W takim przypadku nie byłoby żadnych sygnałów zewnętrznych potrzebnych do zaprogramowania mikrokontrolera. Kod zostałby wbudowany w fizyczny układ układu.
Oczywiście można również użyć mikrokontrolera, który uruchamia kod poza interfejsem pamięci zewnętrznej, ale to oszustwo. :-)
źródło
Absolutnie. W rzeczywistości pierwszy kurs mikroprocesorowy, który odbyłem (około 87), używał płyty Motorola 68000. Opracowujemy kod w asemblerze, wyszukujemy szesnastkę dla zestawu i wpisujemy hex w terminalu, aby zaprogramować płytkę. Jeśli edytowałeś, musisz upewnić się, że kod, który wstawiłeś, jest krótszy niż kod, który zastępujesz, a następnie buforować resztę za pomocą NOP. Gdyby coDE był dłuższy, musiałbyś przepisać wszystko! Nauczyliśmy się dodawać wiele NOP.
źródło
Absolutnie. Kiedy masz binarny format rzeczywistych instrukcji (łatwe do zrobienia dla dobrze określonych zestawów instrukcji), wszystko czego potrzebujesz to zaimplementować protokół programowania.
Na przykład weź coś małego jak AVR Tiny 4 . W sekcji 14 szczegółowo opisano interfejs programowania, w tym protokół i warstwę fizyczną. Jest to stosunkowo proste i potrzebujesz tylko kilku przycisków i rezystorów podnoszących / opuszczających, aby wysłać / odebrać 1 lub 0. Jeśli czujesz się ambitny, dodaj kilka diod LED, aby odczytać wynik.
Ostatni pozostały problem dotyczy tego, czy potrafisz to zrobić wystarczająco szybko, co na szczęście * w AVR Tiny 4 (sekcja 16) nie ma żadnej minimalnej częstotliwości, jeśli chodzi o programowanie.
* Uwaga: w zakresie określonym w arkuszu danych. W rzeczywistości może się to różnić ... Wątpię, czy ktoś próbował programować go z częstotliwością taktowania MHz.
Możesz zautomatyzować to tyle / mało procesu, ile chcesz. I tak właśnie robi większość urządzeń programujących: automatyzacja procesu.
źródło
Niezależnie od tego, w jaki sposób wprowadzasz program do interfejsu użytkownika, „łączysz się” z nim, ponieważ to właśnie oznacza interfejs. Nawet kilka przełączników, które ręcznie przełączasz, to „interfejs”.
Więc potraktuję to pytanie jako „w jaki sposób mogę połączyć się z komputerem z interfejsem w dużej mierze - mechanicznym - (w przeciwieństwie do elektronicznego) - i tak fajnie, jak to możliwe?”
Na co mam odpowiedź, wprowadź program jako rolkę fortepianu. „Pasek trackera” rolki pianina z pianina gracza w zasadzie daje co najmniej 65 (w zależności od formatu) bitów, które można włączać i wyłączać niezależnie na podstawie perforacji w papierze. Reszta to ciężka praca nożem exacto. Ale przynajmniej twój program, po uruchomieniu, jest (nieco) trwale przechowywany (w przeciwieństwie do ręcznego przełączania przełączników).
źródło
Możliwe jest nie tylko zaprogramowanie mikrokontrolera bez komputera, ale można dziś kupić komputer specjalnie zaprojektowany do programowania za pomocą przełączników sprzętowych. Zestaw nazywa się Kartą Członkowską i jest odtworzeniem komputera Elfa z COSMAC z lat 70. Zestaw został opisany w ostatnim artykule w magazynie IEEE Spectrum . Możliwe jest również zaprogramowanie nowszych wersji karty członkowskiej z komputera.
źródło
W porządku. Co powiesz na to: piszesz program w asemblerze i sam wyszukujesz kody, jak wcześniej sugerowano. Jak dostać się do komputera: weź stary odtwarzacz taśm, wyjmij głowicę odtwarzającą, ale zostaw kabestan i rolkę dociskową. To będzie twój transport. Jeśli masz odtwarzacz szpulowy, możesz pozostawić głowicę odtwarzającą na miejscu.
Następnie weź długi i wąski pasek papieru, a nawet lepszą, przezroczystą taśmę. To tutaj kodujesz swój program. Do zaprogramowania używasz tyle ścieżek, ile masz pinów. Na jednej ścieżce umieszczasz czarne kropki w regularnych odstępach czasu; to jest twój zegar. Na innych ścieżkach umieszczasz czarne kropki lub paski i pozostawiasz puste miejsca zgodnie z danymi i sygnałami. Świecisz światło na całość i wykrywasz je za pomocą małych fototranzystorów (lub świecisz jedną diodą LED na taśmie i wykrywasz światło za pomocą innych podobnych) i napędzasz zegar i linie sygnałowe za pomocą tranzystorów. Zajmuje to trochę miejsca w odtwarzaczu taśm, dlatego może być konieczne zdjęcie głowicy odtwarzającej.
Oczywiście możesz również kodować sygnały jako audio, ale dekodowanie jest nieco bardziej skomplikowane. Lub możesz wykryć światło odbite zamiast światła przechodzącego. Możesz też dziurkować ciemną taśmą lub taśmą papierową zamiast czarnych znaków na przezroczystej taśmie. Cokolwiek. Odtwarzacz taśm napędza taśmę ze stałą prędkością, dzięki czemu można wprowadzić taktowany sygnał bez komputera.
źródło
Tak. Głównym problemem może być interakcja z interfejsem programowania. Jeśli masz zwykły adres i magistralę danych, sprawy są nieco łatwiejsze. Czy widziałeś kiedyś naprawdę wczesne komputery? Programy są wprowadzane pojedynczo do pamięci RAM za pomocą przełączników z przodu.
źródło
Minikomputery PDP-8 firmy Digital Equipment sprzed ponad 40 lat nie miały możliwości automatycznego uruchamiania. Programy były zwykle ładowane z perforowanych taśm papierowych, ale moduł ładujący, aby załadować taśmy papierowe, musiał zostać ręcznie wprowadzony za pomocą przełączników na panelu przednim.
W witrynach klientów Digital i PDP-8, takich jak producenci OEM, którzy używali ich jako wbudowanych kontrolerów tego dnia, nierzadko użytkownicy zapamiętywali moduły ładujące i konkurowali ze sobą o najszybszy czas potrzebny na wejście do bagażnika ładowarka do maszyny. Maszyny wykorzystywały wspomnienia z rdzeniem magnetycznym (ręcznie naciągnięte w odległych częściach świata, przez kobiety z małymi palcami, za pomocą igieł i cienkiego drutu do włosów).
Ponieważ zawartość pamięci magnetycznej jest nieulotna, programy ładujące przeżyły awarię zasilania, a ręczne wprowadzenie było potrzebne dopiero po wstępnym montażu, program ładujący został usunięty przez błąd programu lub program potrzebny do wykorzystania przestrzeni programu ładującego.
źródło
Odpowiedź brzmi: tak , możesz zaprogramować mikrokontroler bez komputera, debugera itp. Potrzebne byłoby zapewnienie różnych napięć, danych, zegara i sekwencji programowania określonych przez producenta uC (nie jest to łatwe zadanie).
źródło