Jeden z moich projektów bardzo skorzystałby na możliwości uruchomienia programu, który nie jest przechowywany w mikrokontrolerze (ale jest przechowywany na karcie SD).
Poszukuję urządzenia, które pozwoli mi załadować kod z karty SD do pamięci RAM, a następnie wykonać kod z pamięci RAM. Obecnie mam tylko programator dostarczany z PicKit2, więc wolałbym pozostać przy PIC.
Czy ktoś wie, które PIC mogą to zrobić? Jeśli żadne PIC nie są w stanie tego zrobić, to jakie są różne mikrokontrolery, które by do tego pasowały? Najlepiej te, które są dostępne w pakiecie kompatybilnym z płytką ścienną.
microcontroller
pic
Ponkadoodle
źródło
źródło
Odpowiedzi:
Istnieje kilka PIC, które pozwalają na dodanie zewnętrznej pamięci programu. Nigdy tego nie robiłem, ale uwagi aplikacji AN869 i AN778 mają więcej informacji na temat implementacji pamięci zewnętrznej.
źródło
Inną opcją do rozważenia jest użycie interpretowanego języka dla programów zapisanych na karcie SD. W ten sposób procesor nie wykonuje kodu maszynowego odczytanego z karty, po prostu traktuje go jako dane.
Takie podejście zapewnia elastyczność kosztem prędkości.
Istnieje wiele opcji do wyboru: Badanie tłumaczy wysokiego poziomu / kompilatorów dla mikrokontrolerów
źródło
Jak już powiedziano, PIC (inne niż PIC32) nie mogą tego zrobić. Prawdopodobnie będziesz musiał przejść do większych procesorów w dowolnej rodzinie lub do procesora z zewnętrzną magistralą pamięci, ponieważ większość mikrokontrolerów ma bardzo ograniczone zasoby pamięci RAM.
Procesory MSP430 mogą uruchamiać kod z pamięci RAM, ale potrzebujesz czegoś takiego jak F5438 z 16k pamięci RAM - uruchomienie kodu w 128 bajtach nie jest tak naprawdę opcją!
Jeśli procesor ma zewnętrzną magistralę, możesz umieścić pamięć RAM w przestrzeni kodu. Może być konieczne dodanie dodatkowej logiki w celu odwzorowania pamięci RAM na dwa regiony pamięci, jeśli architektura procesora nie pozwala na zapis danych w pamięci wykonawczej.
Uruchomiłem kod z pamięci RAM w systemie opartym na 8051, ale oznaczało to, że pamięć RAM musiała zostać odwzorowana na obszar pamięci EXTERN w celu programowania, a następnie z powrotem na obszar CODE w celu wykonania. Program ładujący / monitorujący obsługiwał przełączanie i ładowanie banku pamięci. Proszę nie pytać o kod - zrobiłem to około 30 lat temu i już dawno go straciłem (i napisałem w PL / M-51)
źródło
Żaden z PIC niskiego i średniego zakresu nie może wykonać z pamięci RAM z powodu swojej architektury pamięci.
Każdy procesor oparty na ARM powinien być uruchamiany z pamięci RAM. Chociaż zwykle znajdują się w pakietach smd, istnieje sporo modułów wielkości „DIP”, które mają już załadowany mikrokontroler. Spójrz na przykład na mbed lub LPCXpresso . Oba są dostarczane z bootloaderem lub, w przypadku LPCXpresso, interfejsem debugowania wraz z darmowymi kompilatorami.
Jeśli wolisz pozostać przy zwykłych 8-bitowych mikrach, być może rozważ coś z freescale Family HCS08. Można je wykonać z pamięci RAM. Dostępna jest wersja kodera kompilatora IDE i C z ograniczeniami kodowymi.
Jestem całkiem pewien, że MPS430 powinien być w stanie to zrobić, ale sam nigdy tego nie zrobiłem.
źródło
Śmigło ładuje swój program z pamięci zewnętrznej.
źródło
Pamiętam, że czytałem o bootloaderze dla AVR-ów, który ponownie flashowałby układ za pomocą pliku .hex (prawdopodobnie) z karty SD. Nie mogę znaleźć oryginalnego źródła, ale ta wyszukiwarka Google pokazuje kilka interesujących trafień. Tak, wiem, że to AVR, a nie PIC, ale może ci się przydać, jeśli PIC się nie uda.
źródło
Jak zauważyli inni plakaty, nie można wykonać z pamięci RAM na 8 lub 16-bitowym PIC, ponieważ używają architektury Harvarda (oddzielne przestrzenie na kod i dane). To, czy praktyczne jest ładowanie programu z karty SD i flashowanie go w pamięci kodu, zależy od tego, jak często będziesz to robić.
Jeśli próbujesz stworzyć dynamiczne środowisko, takie jak system operacyjny, który ciągle nakłada programy, to nie. Ale w moim przypadku mam program, który w razie potrzeby ładuje sterowniki z karty SD o pojemności 2 GB. PIC24FJ256GB110 ma minimum 10 000 cykli kasowania / zapisu. Nawet jeśli robiono to pięć razy dziennie, flash trwałby minimum 5 1/2 lat.
(Uwaga: liczba 10 000 to minimum. Typowa wytrzymałość na cykle kasowania / zapisu może być pięciokrotnie większa - więc jeśli robisz programowanie, prawdopodobnie możesz ponownie flashować procesor 140 razy dziennie - co 3 1/2 minuty przez osiem godzin - i może trwać jeszcze rok).
źródło
W mojej szkole korzystaliśmy z procesorów HC11 lub HC12 z zewnętrzną pamięcią RAM, aby ładować i uruchamiać programy ... ale zapomniałem nazwy płyt / zestawu :( W każdym razie MCU z linią Freescale HC (S) adresuje identycznie RAM i ROM , dzięki czemu można załadować kod do pamięci RAM i wykonać go.
Biorąc w kolejce
blalor
, najlepszym rozwiązaniem może być po prostu dodanie na płycie przycisku, który może ponownie załadować PIC z danych przechowywanych na karcie SD włożonej za pomocą bootloadera. Nie mogę sobie wyobrazić, który kod nie pasowałby do większych PIC; jeśli masz jakieś dane statyczne (grafika, tekst, dźwięk), przechowuj je w pamięci zewnętrznej.źródło
Prawdopodobnie nie możesz przydzielić z pamięci RAM, ale dla twojej aplikacji możesz mieć mały moduł ładujący we flashu, który może następnie odczytać dane karty SD do pozostałej części pamięci flash. Zastosowałem to podejście z układem flash kontrolowanym przez SPI, aby umożliwić załadowanie oprogramowania układowego z łącza bezprzewodowego, a następnie zainstalowanie go po jego całkowitym otrzymaniu; Nie mogę wymyślić żadnego konkretnego powodu, dla którego nie działałby z kartą SD, chociaż bootloader kompatybilny z SD może zająć trochę miejsca.
źródło
Dość kilka mikrokontrolerów pozwoli ci to zrobić, nie brzmi jak zdjęcie. co chcesz zrobić, to mieć bootloader, który używa spi do odczytu z karty SD, skopiuj program, który prawdopodobnie chce być znaną lub zakodowaną nazwą pliku, prawdopodobnie w katalogu głównym, parsuj ten plik do pamięci RAM, a następnie rozgałęź do program w pamięci RAM. Kontrolery oparte na ARM z pewnością pozwolą ci zrobić coś takiego.
Alternatywą byłoby, gdyby bootloader czytał kartę SD przez SPI i zamiast kopiować do pamięci RAM i rozgałęziać nagrywanie do części flasha. Prawdopodobnie chcesz mieć przycisk, jeśli przycisk zostanie naciśnięty przy włączaniu lub resetowaniu, a następnie załaduj nowy program z karty SD, w przeciwnym razie, jeśli podpis lub suma kontrolna wygląda dobrze na tej ładowalnej części flasha, to na gałęzi rozruchowej do tej części flasha. A może, jeśli karta SD jest obecna, załaduj z niej inaczej do rozgałęzionej części flasha. Może używać tej metody z ramieniem i avr, prawdopodobnie nawet z piciem, ale moje doświadczenie z piciem jest przestarzałe. msp430 Też bym założył. Zasadniczo, jeśli możesz przeprogramować fragmenty pamięci flash, którą wykonujesz, z samego procesora mikrokontrolera,
źródło