Istnieją trzy typowe opcje: wewnętrzna pamięć flash, zewnętrzna pamięć flash NAND i karty micro-SD. Pamięć Flash wyewoluowała z wczesnych urządzeń EEPROM i prawie je zastąpiła, będąc gęstszą (a przez to tańszą w przeliczeniu na bajt). Urządzenia o bardzo dużej objętości mogą korzystać z pamięci ROM, której nie będę tutaj omawiać, ponieważ nie mam dla niego ceny ani specyfikacji. Funkcjonalnie działałaby jako wewnętrzna lub zewnętrzna pamięć flash, z wyjątkiem tego, że są tylko do odczytu i nie mają problemów z trwałością.
Układy scalone NAND flash są zwykle nieco droższe niż porównywalne rozmiary mikro- Karty SD, tylko dlatego, że te ostatnie są produkowane w tak dużych ilościach, ekonomia skali obniża cenę. Na przykład chip 8 GB NAND flash (64 Gb) kosztuje około 20 USD, a karta SD 8 GB kosztuje 6 USD. (Nie mogłem nawet znaleźć 8 GB EEPROM IC dla porównania). Oczywiście wewnętrzna pamięć flash jest prawie za darmo, z wyjątkiem tego, że koszt mikrokontrolera rośnie wraz z rozmiarem pamięci flash.
Czas dostępu do karty SD Karta będzie jednak wolniejsza niż pamięć flash NAND, ponieważ dostęp do karty SD uzyskuje się za pomocą 2-przewodowego (R / W) interfejsu SPI lub 4-przewodowego zastrzeżonego interfejsu, podczas gdy układy NAND flash mają zwykle 8-bitowy interfejs równoległy. Wewnętrzna pamięć flash będzie najszybsza, ponieważ nie jest wymagany zewnętrzny interfejs.
Ponieważ karty SD można sformatować na komputerze, często są one wyposażone w system plików, taki jak FAT-32, co ułatwia aby skopiować pliki z komputera, a następnie uzyskać do nich dostęp z mikrokontrolera zawierającego niezbędną bibliotekę FAT-32. (Oczywiście mikrokontroler może również zapisywać nowe pliki, tworzyć katalogi itp., Jeśli chce).
Kolejną różnicą jest wyrównanie zużycia. Markowe karty SD zwykle zawierają funkcje równoważenia zużycia (wszystkie karty SD mają w sobie procesor), podczas gdy chipy NAND flash tego nie robią, a aplikacja musi niwelować zużycie, aby przedłużyć żywotność urządzenia. (Wymazywanie / zapisywanie jest znacznie wolniejsze niż czytanie na wszystkich tych urządzeniach.)
Karty SD mają zazwyczaj najdłuższą żywotność pod względem cykli kasowania / zapisu (zwykle 100 000). Wewnętrzne chipy flash i NAND flash zazwyczaj mają znacznie mniej cykli kasowania / zapisu, często mierzonych w tysiącach lub dziesiątkach tysięcy. Dlatego nie są dobrym substytutem dysku twardego.
(dodane)
Karty SD mogą być używane tylko do przechowywania danych; nie możesz uruchomić z nich kodu. Jeśli jednak procesor może wykonać kod z pamięci RAM ( architektura Von Neumanna), można w razie potrzeby załadować programy z karty SD do pamięci RAM i tam je uruchomić. (Uwaga: większość mikrokontrolerów ma architekturę Harvard i nie może wykonywać kodu z pamięci RAM.)
Zewnętrzna pamięć flash może być używana do wykonywania kodu tylko wtedy, gdy procesor ma interfejs pamięci zewnętrznej, który wyraźnie umożliwia to, na przykład wiele mikroprocesorów ARM. Jeśli dostęp odbywa się tylko przez port równoległy ogólnego przeznaczenia, zewnętrzna pamięć flash może być używana tylko do danych.
Wewnętrzna pamięć flash jest odwrotna - jest zwykle używana do przechowywania i wykonywania kodu programu , a większość mikrokontrolerów o architekturze Harvard musi mieć specjalne środki (takie jak „okno” danych), które umożliwiają dostęp do wewnętrznej pamięci flash jako obszaru danych (nie jest częścią obszaru stałego programu).
Aby odpowiedzieć Twoje ostatnie pytanie, system operacyjny prawie zawsze byłby całkowicie zawarty w wewnętrznym obszarze flash programu mikrokontrolera. Ale może znajdować się na zewnętrznej pamięci flash, jeśli procesor na to pozwala. Jeśli system operacyjny musi ładować sterowniki w razie potrzeby, można je zapisać na karcie SD (lub zewnętrznej pamięci flash) i albo załadować do pamięci RAM, jeśli jest wystarczająco dużo miejsca, a procesor może działać poza pamięcią RAM, lub nagrać na obszar wewnętrznej pamięci flash zarezerwowany dla kierowców.