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

Czy AVR może uruchamiać programy bezpośrednio z karty SD jak PC?

daniel93 25 Mar 2008 22:50 4083 30
REKLAMA
  • #1 4954577
    daniel93
    Poziom 29  
    Posty: 1673
    Pomógł: 30
    Ocena: 92
    Jestem ciekaw czy jest możliwość, aby w jakiś sposób AVR wykonywał program zapisany na karcie SD, tak jak to się poniekąd dzieje w PC?
  • REKLAMA
  • REKLAMA
  • #3 4954668
    daniel93
    Poziom 29  
    Posty: 1673
    Pomógł: 30
    Ocena: 92
    A na jakimś innym nośniku danych?
  • #5 4954699
    elektryk
    Poziom 42  
    Posty: 11029
    Pomógł: 439
    Ocena: 240
    Można coś podobnego zaemulować. Zrobić bootloader który wczyta zawartość karty SD do pamięci FLASH i uruchomi program.
  • REKLAMA
  • #6 4954702
    daniel93
    Poziom 29  
    Posty: 1673
    Pomógł: 30
    Ocena: 92
    A po zastosowaniu jakiegoś systemu operacyjnego w AVR'ze?

    Dodano po 56 [sekundy]:

    No tak, ale co jeśli program jest większy niż FLASH?
  • #7 4954722
    don diego
    Poziom 32  
    Posty: 1557
    Pomógł: 165
    Ocena: 63
    Zastosować większy mikrokontroler. Ewentualnie przesiąść się na ARMy. Takie zabawy na AVRach to moim zdaniem "sztuka dla sztuki".
  • #8 4954728
    crazy_phisic
    VIP Zasłużony dla elektroda
    Posty: 2244
    Pomógł: 278
    Ocena: 130
    daniel93 napisał:
    A po zastosowaniu jakiegoś systemu operacyjnego w AVR'ze?

    Dodano po 56 [sekundy]:

    No tak, ale co jeśli program jest większy niż FLASH?


    Coś kręcisz ;). Proponuje sprawdzić jakie procesory mogą współpracować z zewnętrzną pamięcią i jakie są ograniczenia sprzętowego adresowania.
  • #9 4954828
    daniel93
    Poziom 29  
    Posty: 1673
    Pomógł: 30
    Ocena: 92
    crazy_phisic: Są jakieś ograniczenia w adresowaniu kart SD(to przecież nie jest zewnętrzny RAM, ani EEprom)?

    To z bootloaderem jest ciekawe, bo można sobie wybrać jaki program ma być załadowany do uC, ale czy da się takie coś zrobić w badziewnym języku jakim jest BASCOM?
  • #10 4954851
    Balu
    Poziom 38  
    Posty: 4397
    Pomógł: 323
    Ocena: 48
    Pewnie i się da:> Bootloadery ogólnie dostępne, można przeedytować (niestety nie widziałem w bascomie,zawsze asm:) i jakoś się nie dziwię:P)...
    Tylko... te pare tysięcy uruchomień i uC idzie do piachu:> To chyba nie za dużo:/
    IMO sztuka dla sztuki.
  • #11 4954885
    daniel93
    Poziom 29  
    Posty: 1673
    Pomógł: 30
    Ocena: 92
    No tak, nie pomyślałem o żywotności uC ;/
  • #12 4954917
    elektryk
    Poziom 42  
    Posty: 11029
    Pomógł: 439
    Ocena: 240
    daniel93 napisał:
    crazy_phisic: Są jakieś ograniczenia w adresowaniu kart SD(to przecież nie jest zewnętrzny RAM, ani EEprom)?
    Ale trzeba skopiować program do pamięci RAM i uruchomić.
    daniel93 napisał:
    To z bootloaderem jest ciekawe, bo można sobie wybrać jaki program ma być załadowany do uC, ale czy da się takie coś zrobić w badziewnym języku jakim jest BASCOM?
    Trzeba przemyśleć architekturę procesora, na upartego pewnie by się dało, ale trzeba by to dobrze zaplanować. Raczej całość trzeba by zrobić w asemblerze, a programy można by robić w BASCOM.
  • #13 4954986
    Balu
    Poziom 38  
    Posty: 4397
    Pomógł: 323
    Ocena: 48
    W/g mnie marne szanse z tym bascomem:> I cała gra niewarta świeczki:>
    Zdecydowanie...

    A jeśli można wiedzieć, czemu by to miało służyć?
  • #14 4955068
    daniel93
    Poziom 29  
    Posty: 1673
    Pomógł: 30
    Ocena: 92
    Taki "komputer" do robota, wsadzasz kartę wybierasz program i robot jest linefollowerem, a nie np światłolubem.
  • #15 4955079
    lelekx
    Poziom 30  
    Posty: 1220
    Pomógł: 158
    Ocena: 90
    AVR potrafi wykonać program tylko z pamięci Flash. Zostaje Ci kilka możliwości:
    - jak przedmówca wspomniał, programowanie pamięci FLASH przez bootloader zawartością pliku z karty pamięci
    - napisanie lub użycie interpretera i tworzenie programów w jakimś interpretowanym języku (BASIC?)
    - zmiana mikrokontrolera na taki, co by potrafił wykonać program z RAM (a tu wybór jest bardzo szeroki)
  • #16 4955126
    MarasK
    Poziom 18  
    Posty: 231
    Pomógł: 19
    Ocena: 4
    albo zamiast karty SD płyteczka z uC. Podłączasz do kompa przez przejściówke do p programatora, programujesz i przekładasz do robota.
  • REKLAMA
  • #17 4955331
    Samuraj
    Poziom 35  
    Posty: 2792
    Pomógł: 286
    Ocena: 616
    Ciekawym pomysłem jest własny interpreter.
    W tym przypadku możliwości ograniczają się do pomysłu autora, lecz należy napisać dwa programy. Jeden jest interpreterem a drugi poleceniami dla interpretera.
    Swojego czasu widziałem coś takiego tylko na procesory z serii MSC-51 gdzie z pod poziomu portu RS była dostępna konsola w którą można było wklepać program. Proste warunki IF....THEN, GOTO itp. Taki mały BASIC tylko bez konieczności programowania.
    Lecz to wszystko sztuka dla sztuki.
  • #18 4955615
    Zaquadnik
    Poziom 27  
    Posty: 998
    Pomógł: 103
    Ocena: 25
    Można zastosować 8051, który ma możliwość wykonywania programu z pamięci zewnętrznej. Do tego AVR, który będzie czytał dany program z karty SD i wysyłał go do 8051. Działało by to tak: 8051 wystawia adres, AVR, go odbiera, zczytuje z karty SD bajt i wystawia na szynę danych, a 8051 go odbiera. Przy czym należy pamiętać, o długości cyklu maszynowego 8051. Jeśli jest to wersja klasyczna to przy kwarcu 24 MHz cykl maszynowy trwa 0,5 us (f=2 MHz). Dodatkowo należy wiedzieć, że maksymalna wielkość pojedynczego programu to 64 kB. Dobrze byłoby zbuforować program w jakiejś pamięci. Albo rozwiązanie alternatywne (właśnie przyszło mi do głowy) 8051 z podłączonym SRAMem 62xxx i AVR. Podczas wyboru programu z karty SD AVR wyłącza wejścia 8051 podłączone do SRAM (poprzez bufory trójstanowe) i przepisuje program z karty SD do SRAM dodatkowo 8051 jest w stanie resetu podtrzymywanym przez AVR. Po przepisaniu programu AVR sam ustawia swoje wyjścia do SRAM w stan wysokiej impedancji i włącza linie 8051, następnie zwalnia reset 8051. Procek 8051 wykonuje program z pamięci SRAM. Należy tylko pamiętać o tym, żeby uniemożliwić zapis do pamięci SRAM przez 8051. Przy każdorazowej zmianie programu odbywałoby się przeprogramowanie pamięci SRAM przez AVR. Zero problemów z żywotnością a i procki 8051 są z różnymi fajnymi funkcjami ;)
  • #19 4955663
    marenc
    Poziom 24  
    Posty: 881
    Pomógł: 37
    Ocena: 5
    Przerost formy nad treścią, ale da się coś takiego zrobić ... jak już ktoś wspomniał "emulacja", ale to będzie działało kosztem prędkości, wewnętrznego SRAM'u oraz innych rejestrów. Chodzi o to, że wszystko będzie musiało być współdzielone pomiędzy emulację kodu z SD/MMC oraz wykonywanie programu tam umieszczonego.

    Lepiej pokombinuj z podłączaniem jakiś slotów z EEPROM'em i interpretację odgórnie przyjętych przez mikrokontroler komend w stylu: 0x01 - ruch do przodu; 0x02 - ruch do tyłu itd.
  • #20 4956445
    daniel93
    Poziom 29  
    Posty: 1673
    Pomógł: 30
    Ocena: 92
    Teraz widzę, że to rzeczywiście przerost formy nad treścią. Dziękuję za pomoc.

    Dodano po 2 [godziny] 27 [minuty]:

    Jeszcze małe pytanie - czy rodzina ARM mogła by sprostać takiemu zadaniu?
  • #21 4957309
    don diego
    Poziom 32  
    Posty: 1557
    Pomógł: 165
    Ocena: 63
    Pewnie by mogła. Zwłaszcza, że program może się wykonywać z Flasha lub z RAMu.
  • #22 4957385
    lelekx
    Poziom 30  
    Posty: 1220
    Pomógł: 158
    Ocena: 90
    Trudno mi zrozumieć, dlaczego "przerost formy nad treścią". W sieci istnieje co najmniej kilka darmowych interpreterów BASICa dla AVR. Prędkość interpretowanego wykonywania programu w takim zastosowaniu chyba nie ma dużego znaczenia. Nawet prędkość 1000 instrukcji na sekundę powinna być zadowalająca.
  • #23 4959267
    don diego
    Poziom 32  
    Posty: 1557
    Pomógł: 165
    Ocena: 63
    Moim zdaniem przy tak ogromnym asortymencie mikrokontrolerów na rynku kombinowanie z kartą SD mija się z celem. Czy tego programu naprawdę nie da się zmieścić w pamięci mikrokontrolera a tryb pracy wybierać np. mikrostykiem?
  • #24 4969467
    krzych_u
    Poziom 12  
    Posty: 26
    A mi sie podoba pomysł, bo chyba nie chodzi o to, żeby wybierać program (np za pomocą switcha) tylko wgrać nowy (właśnie zrobiony).
  • #25 4971580
    daniel93
    Poziom 29  
    Posty: 1673
    Pomógł: 30
    Ocena: 92
    Dziękuje wam za pomoc.

    ps> Nic nie buduje, temat był z ciekawości.
  • #26 4972315
    MarasK
    Poziom 18  
    Posty: 231
    Pomógł: 19
    Ocena: 4
    krzych_u napisał:
    A mi sie podoba pomysł, bo chyba nie chodzi o to, żeby wybierać program (np za pomocą switcha) tylko wgrać nowy (właśnie zrobiony).


    Do tego dobrze nadawałby się bootloader :)
  • #27 4972751
    asembler
    Poziom 32  
    Posty: 2099
    Pomógł: 123
    Ocena: 11
    Ja połączyłem program wewnętrzny z tym zczytywanym z karty.
    Wygląda to tak że procedury obsługi wyswietlacza, klawiatury karty MMC/FAT, 1-wire i innych często uzywanych urzadzeń są zaprogramowane na stałe w Atmedze. Na wyswietlaczu wybieramy program który ma byc wykonywany. Oczywiscei program jest specjalnie napisany tak zeby wykorzystywał jak najwiecej procedur wewnetrznych. Pozostałe instrukcje są interpretowane poprzez prosty interpreter który wykorzystuje drugi zestaw rejestrów utworzony w wewnetrzneje pamieci RAM. Ponieważ wiekszosc programów i tak nie potrzebuje aż takiej predkości procesora ,więc wykonanie programów z SD jest tylko minimalnie zauważalne.
  • #28 4972804
    marenc
    Poziom 24  
    Posty: 881
    Pomógł: 37
    Ocena: 5
    No właśnie ... wszystko idzie kosztem prędkości i zasobów. Nie lepiej zrobić "na pokładzie" dodatkowy układ do wyboru programu z karty, który będzie np. przez ISP programował ten właściwy? Mi się wydaje, że takie rozwiązanie najlepiej by sobie poradziło - nie zwracając uwagi na żywotność programowania oczywiście.
  • #29 4972833
    Balu
    Poziom 38  
    Posty: 4397
    Pomógł: 323
    Ocena: 48
    Też tak myślę, przy czym to miałoby prawo bytu tylko w układach PDIP, bo nie wyobrażam Sobie wylutowywania co pół roku układu qftp64 lub 100...
  • #30 4972883
    asembler
    Poziom 32  
    Posty: 2099
    Pomógł: 123
    Ocena: 11
    Ale rozkazy są zczytywane do buforu w Ramie nie jest wykorzystywany rozkaz SPM więc nie ma mowy o zuzyciu procesora

Podsumowanie tematu

✨ Mikrokontrolery AVR nie mają natywnej możliwości wykonywania programów bezpośrednio z karty SD, ponieważ mogą wykonywać kod tylko z wewnętrznej pamięci Flash. Możliwe jest jednak stworzenie bootloadera, który wczyta program z karty SD do pamięci Flash i uruchomi go, choć ograniczeniem jest rozmiar pamięci Flash mikrokontrolera. Alternatywnie można zastosować interpreter (np. w BASIC) do wykonywania programów z karty, co jednak wiąże się z ograniczeniami prędkości i żywotności mikrokontrolera przy częstym programowaniu. Rozwiązania bardziej zaawansowane obejmują użycie mikrokontrolerów z możliwością adresowania pamięci zewnętrznej, np. 8051 z zewnętrznym SRAM, gdzie AVR pełni rolę kontrolera transferu danych z karty SD do pamięci zewnętrznej. Wskazano również, że rodzina ARM lepiej nadaje się do wykonywania programów z RAM lub Flash, oferując większe możliwości pamięciowe i prędkościowe. Propozycje obejmują także implementację systemu operacyjnego czasu rzeczywistego zdolnego do ładowania i wykonywania programów z karty SD/MMC. W praktyce najczęściej stosuje się bootloadery do programowania Flash mikrokontrolera z karty SD lub wymianę programów poprzez programator. Pomysł wykonywania programów bezpośrednio z karty SD jest uznawany za skomplikowany i często nieopłacalny w kontekście AVR.
Wygenerowane przez model językowy.
REKLAMA