Być może jest to bardziej problem percepcyjny, ale wygląda na to, że mikrokontrolery posunęły się naprzód w ostatnich 20 latach, pod prawie wszystkimi względami, wyższa prędkość zegara, więcej urządzeń peryferyjnych, łatwiejsze debugowanie, 32-bitowe rdzenie itp.
Nadal często występuje pamięć RAM w 10 KB (16/32 KB).
Nie wydaje się, że może to być kwestia kosztów lub wielkości bezpośrednio. Czy jest to problem ze złożonością, gdy kontroler pamięci RAM przekracza pewien próg?
A może po prostu nie jest to na ogół wymagane?
Patrząc na matrycę części u popularnego dostawcy internetowego, widzę jeden Cortex M4 z 256 KB za mniej niż 8 USD, a następnie za kilka dolarów więcej można znaleźć kilka innych, które są bez pamięci ROM, ale wydaje się dość rzadkie ...
Nie potrzebuję dokładnie mikrokontrolera z MB pamięci lotnej, ale wygląda na to, że ktoś mógłby ...
źródło
it seems like somebody might
jest tutaj haczyk, większość ludzi nie. Nie będziesz dokładnie przesyłać strumieniowo Netflix na tym układzie, a 64K zwykle wystarcza na wszystko, co musisz zrobić z mikrokontrolerem . Jeśli chcesz iść wyżej, zdobądź pełnowymiarową kompozycję, np. Malinę.Odpowiedzi:
Jest tego kilka przyczyn.
Przede wszystkim pamięć zajmuje dużo krzemu. Oznacza to, że zwiększenie ilości pamięci RAM bezpośrednio zwiększa obszar krzemowy układu, a tym samym koszty. Większy obszar krzemu ma efekt „podwójnego uderzenia” w cenę: większe żetony oznaczają mniej żetonów na wafel, szczególnie wokół krawędzi, a większe żetony oznaczają, że każdy chip ma większą wadę.
Drugi to kwestia procesu. Macierze RAM powinny być zoptymalizowane na różne sposoby niż logiczne i nie jest możliwe wysyłanie różnych części tego samego układu przez różne procesy - cały układ musi być wytwarzany w tym samym procesie. Istnieją półprzewodniki, które w mniejszym lub większym stopniu zajmują się produkcją pamięci DRAM. Nie procesory ani inna logika, po prostu pamięć DRAM. DRAM wymaga wydajnych powierzchniowo kondensatorów i tranzystorów o bardzo niskim wycieku. Wykonanie kondensatorów wymaga specjalnego przetwarzania. Wykonanie tranzystorów o niskim wycieku skutkuje wolniejszymi tranzystorami, co jest dobrym kompromisem dla elektroniki odczytu DRAM, ale nie byłoby tak dobre do budowy logiki o wysokiej wydajności. Wytwarzanie pamięci DRAM na matrycy mikrokontrolera oznaczałoby, że musiałbyś w jakiś sposób obniżyć optymalizację procesu. Duże macierze pamięci RAM są również bardziej podatne na awarie ze względu na ich duży obszar, malejącą wydajność i rosnące koszty. Testowanie dużych macierzy RAM jest również czasochłonne, dlatego włączenie dużych macierzy zwiększy koszty testowania. Dodatkowo korzyści skali zmniejszają koszt oddzielnych układów RAM bardziej niż bardziej wyspecjalizowane mikrokontrolery.
Pobór mocy to kolejny powód. Wiele wbudowanych aplikacji ma ograniczoną moc, w wyniku czego wiele mikrokontrolerów jest budowanych w taki sposób, że można je wprowadzić w stan uśpienia o bardzo małej mocy. Aby umożliwić uśpienie przy bardzo niskim zużyciu energii, SRAM jest używany ze względu na jego zdolność do utrzymywania zawartości przy wyjątkowo niskim zużyciu energii. SRAM z podtrzymaniem bateryjnym może utrzymywać swój stan przez lata bez zasilania pojedynczym przyciskiem 3V. Z drugiej strony DRAM nie może utrzymać swojego stanu przez ułamek sekundy. Kondensatory są tak małe, że garstka elektronów wydostaje się na zewnątrz i wnika do tranzystorów ogniw. Aby temu przeciwdziałać, pamięć DRAM musi być stale odczytywana i zapisywana. W rezultacie DRAM zużywa znacznie więcej energii niż SRAM na biegu jałowym.
Z drugiej strony komórki bitowe SRAM są znacznie większe niż komórki bitowe DRAM, więc jeśli wymagana jest duża ilość pamięci, DRAM jest ogólnie lepszą opcją. Dlatego dość często używa się niewielkiej ilości SRAM (kB do MB) jako wbudowanej pamięci podręcznej w połączeniu z większą ilością pozamipowych DRAM (MB do GB).
Zastosowano kilka bardzo fajnych technik projektowania, które zwiększają ilość pamięci RAM dostępnej w systemie wbudowanym przy niskim koszcie. Niektóre z nich to pakiety wieloukładowe, które zawierają osobne matryce dla procesora i pamięci RAM. Inne rozwiązania obejmują wytwarzanie padów na górze procesora, dzięki czemu układ pamięci RAM można układać jeden na drugim. To rozwiązanie jest bardzo sprytne, ponieważ różne układy pamięci RAM można przylutować do procesora w zależności od wymaganej ilości pamięci, bez konieczności dodatkowego routingu na poziomie płyty głównej (szyny pamięci są bardzo szerokie i zajmują dużo miejsca na płycie). Należy zauważyć, że systemy te zwykle nie są uważane za mikrokontrolery.
Wiele bardzo małych systemów wbudowanych i tak nie wymaga dużo pamięci RAM. Jeśli potrzebujesz dużo pamięci RAM, prawdopodobnie będziesz chciał użyć wyższej klasy procesora, który ma zewnętrzną pamięć DRAM zamiast wbudowanej pamięci SRAM.
źródło
Pamięć prawdopodobnie zajmuje najwięcej krzemowej przestrzeni, a bardzo szybka w użyciu pamięć RAM jest niestabilna - i stale wykorzystuje energię, aby utrzymać swój stan. O ile nie potrzebujesz dużo pamięci RAM, nie jest to przydatne w wielu innych aplikacjach. Jeśli projektant systemów wbudowanych potrzebuje więcej pamięci RAM, otrzymuje jedynie zewnętrzny układ pamięci RAM i korzysta z interfejsów pamięci peryferyjnej, które często mają mikrokontrolery, w celu bardzo łatwego rozszerzenia pamięci typu plug and play. Właśnie dlatego rozumiem, dlaczego ogólnie mikrokontrolery nadal mają rozsądnie niską wbudowaną pamięć RAM, ponieważ rozsądny kod aplikacji i scenariusze przypadków użycia zwykle nie potrzebują wiele.
Kiedy zaczniesz wchodzić do większych architektur, które muszą działać w pełni na systemach operacyjnych, pamięć RAM staje się niezwykle ważna, jednak wychodzi to z królestwa mikrokontrolerów i na komputery wbudowane bardziej niż te, które widzisz na płytach Beaglebone i Raspberri Pi. dni. I nawet na tym etapie procesory są tak złożone i pełne funkcji, że nie mają miejsca na ilość pamięci RAM potrzebnej do ich zadania, więc pamięć zewnętrzna jest w ogóle wymagana do ich działania.
EDYTOWAĆ:
Jako osobistą anegdotę stworzyłem niedawno małą autonomiczną tablicę sterowania robotem w celu wykorzystania jej do wizji komputerowej w niskiej rozdzielczości, takiej jak wykrywanie ruchu oraz śledzenie i śledzenie obiektów. Do tego zadania wybrałem ARM Cortex M3 o niskiej liczbie pinów i patrząc na wybór procesorów serii SAM3 firmy Atmel, rzeczywiście wybrałem najwyższą pamięć RAM, jaką mogłem znaleźć - ponieważ w tym przypadku nie chciałem kupować zewnętrznego układu scalonego RAM ze względu na miejsce na płycie i brak potrzeby złożoności szybkiej magistrali pamięci RAM na płytce drukowanej. W tym przypadku w przypadku mojej konkretnej aplikacji bardzo chciałbym mieć opcję wielu 100 KB więcej pamięci RAM, jeśli to możliwe.
źródło
Oprócz doskonałych punktów poruszonych w innych odpowiedziach, innym powodem ograniczonej pamięci RAM jest architektura mikrokontrolera. Weźmy na przykład Microchip PIC10LF320, który ma tylko 448 bajtów pamięci programu (flash) i 64 bajty pamięci RAM. Ale prawdopodobnie kosztuje to tylko 25ȼ (lub mniej) w dużych ilościach. Ograniczony rozmiar słowa instrukcji PIC10 (12 bitów) pozwala mu adresować bezpośrednio tylko 128 bajtów pamięci RAM.
Jestem pewien, że istnieją inne mikrokontrolery, które mają tylko 8-bitową magistralę adresową, co ogranicza je do 256 bajtów pamięci RAM.
Ale większość mikrokontrolerów średniego zasięgu (nawet tych z 8-bitowymi ścieżkami danych) ma 16-bitową magistralę adresową. Ważnym aspektem architektonicznym dla tych układów jest to, czy układ wykorzystuje architekturę Harvarda czy Von Neumanna .
Większość mikrokontrolerów korzysta z architektury Harvard, która ma osobne 16-bitowe przestrzenie adresowe dla pamięci programu, pamięci RAM i adresów we / wy mapowanych w pamięci. Dlatego 16-bitowa magistrala adresowa może uzyskać dostęp do 64 KB (65 536) bajtów pamięci RAM. Architektura wciąż nakłada limit 64 KB, a jeśli ktoś chce przekroczyć ten limit, należy zastosować jakiś rodzaj stronicowania. O wiele bardziej powszechne jest stronicowanie przestrzeni programowej niż pamięci RAM.
Mikrokontrolery wykorzystujące architekturę Von Neumann, takie jak linia Freescale HCS08, mają tylko jedną przestrzeń adresową podzieloną między pamięć programu, pamięć RAM i operacje we / wy mapowane na pamięć. Aby mieć rozsądną ilość miejsca na program, ogranicza to ilość pamięci RAM zwykle do 4K lub 8K. Ponownie można użyć stronicowania, aby zwiększyć dostępną przestrzeń programu lub pamięci RAM.
źródło
Po dłuższej pracy z mikrokontrolerami i małymi systemami chciałbym zauważyć, że bardzo często potrzeba bardzo mało pamięci RAM. Pamiętaj, że nawet jeśli MCU może być w stanie wiele osiągnąć, w obecnych czasach panuje tendencja do używania znacznie większej liczby MCU niż kiedykolwiek wcześniej i wykorzystywania ich więcej do rozdzielania wielu zadań w większych systemach. W połączeniu z faktem, że w przeciwieństwie do rozdętych systemów programistycznych potrzebnych do programowania w systemie Windows, programowanie MCU często wykorzystuje bardzo dobrze zoptymalizowane kompilatory, najczęściej z bardzo wydajnym kodem źródłowym C i C ++, czasami z niewielkim lub zerowym obciążeniem systemu operacyjnego. Chociaż ledwo można napisać program Windows do wyświetlania swojego imienia na dowolnym urządzeniu bez zużywania co najmniej setek kilobajtów, w tym zasobów systemu operacyjnego,
Z pewnością istnieją problemy z kosztami i przestrzenią, jak zauważyli inni. Ale historia tutaj jest taka, że to, co nowi użytkownicy uważają za niewielką ilość pamięci RAM, jest naprawdę znacznie więcej niż kiedykolwiek wcześniej, a jednocześnie komponenty i urządzenia, z którymi MCU będzie musiało się komunikować, stają się inteligentniejsze. Szczerze mówiąc, moim największym wykorzystaniem pamięci RAM w wielu aplikacjach MCU było ostatnio buforowanie komunikacji sterowane przerwaniami, aby zwolnić MCU do innych zadań bez obawy utraty danych. Ale wierzcie lub nie, dla zwykłej logiki i funkcjonalność obliczeniową, mikrokontrolery są bardzo dobrze dopasowane do ich ograniczoną zbudowany w pamięci RAM i pamięci flash zasobów, a naprawdę można zrobić wiele z bardzo niewiele.
Pamiętaj, że kiedyś słynne gry wideo z prymitywną grafiką, ale złożoną logiką gier, takie jak „PAC Man” i „Space Invaders”, były zazwyczaj wykonywane w 8K ROM-ach na maszynach, które miały zaledwie 8 lub 16 KB pamięci RAM!
źródło
Oprócz doskonałych punktów na temat kosztów i produkcji, zaskakująco małe jest zapotrzebowanie na wiele RAM-ów na chipie.
Często pracuję z mikrokontrolerami z pamięcią flash w dziesiątkach kB (16 kB, 32 kB) i pamięciami RAM w zakresie kB (1 kB, 2 kB). Bardzo często brakuje mi pamięci flash i prawie nigdy nie brakuje pamięci RAM. W większości moich projektów zbliżam się do limitu pamięci flash, ale zwykle potrzebuję znacznie mniej niż 20% pamięci RAM.
Większość bardzo małych mikrokontrolerów ma dwa różne rodzaje ról:
regulacja i kontrola: muszą kontrolować kawałek maszyny. Nawet w przypadku skomplikowanego algorytmu kontrolera, który może zająć dziesiątki kB przestrzeni kodu, wymagana jest bardzo mała pamięć RAM. Masz kontrolę nad procesem fizycznym i masz zmienne zawierające kilka jednostek fizycznych, a być może kilka zmiennych jako liczniki pętli. Nie potrzebujesz więcej.
przetwarzanie danych: w rzadkich przypadkach musisz przechowywać dużą ilość danych w tym samym czasie, możesz użyć zewnętrznej pamięci RAM. Prawie wszystkie współczesne mikrokontrolery mają natywną obsługę. Jeśli potrzebujesz prostego programu używającego dużej ilości pamięci, tańszym i mniejszym będzie użycie małego mikrokontrolera i zewnętrznej pamięci RAM, a nie mikrokontrolera wysokiego poziomu. Nikt nie produkuje kontrolerów z kilkoma portami, małą pamięcią flash i dużą pamięcią RAM, ponieważ jest na nie tak mało popytu.
źródło
Wszystkie wyżej wymienione powody są oczywiście ważne technicznie i dokładne. Nie zapominaj jednak, że elektronika to biznes, a MCU to jeden z najbardziej konkurencyjnych niszowych rynków w branży elektronicznej.
Odważę się powiedzieć, że faktyczne powody powiązania ceny MCU z ilością wbudowanej pamięci SRAM są głównie przyczynami marketingowymi, a nie kosztowymi:
W większości konstrukcji maksymalna osiągalna częstotliwość taktowania nie jest czynnikiem ograniczającym. Zamiast tego ilość dostępnej pamięci SRAM wynosi. Nie zrozumcie mnie źle, częstotliwość procesora jest niezwykle ważna, jednak w pewnym segmencie rodziny MCU zazwyczaj nie oferuje się różnych modeli urządzeń w różnych cenach w oparciu o maksymalną częstotliwość procesora. Również pamięć programu Flash jest drugim kluczowym czynnikiem ograniczającym, jednak nie skupię się zbytnio na Flashu (pytanie skierowane jest konkretnie do SRAM).
Ilość dostępnej pamięci SRAM jest bezpośrednio związana z poziomem złożoności, który będziesz mógł osadzić w swoim MCU, czy to z bibliotekami stron trzecich, czy z twoim własnym rozwijanym kodem. Jest to więc „naturalny” wskaźnik, według którego można segmentować na podstawie cen MCU. Dla klienta technicznego zrozumiałe jest, że MCU zdolne do wykonywania bardziej złożonych zadań (więcej SRAM, więcej pamięci Flash) powinno kosztować więcej. Cena tutaj jest odzwierciedleniem podstawowej wartości (możliwości dostarczania) MCU. Pamięć flash jest zwykle oferowana w ilości proporcjonalnej do SRAM.
Wręcz przeciwnie, jeśli weźmiesz rynek procesorów do komputerów stacjonarnych i mobilnych, zwykle nie możesz zdobyć konkretnego MCU / CPU z wieloma różnymi rozmiarami SRAM. Zamiast tego schemat wyceny jest zwykle budowany w oparciu o możliwości wykonania / wydajności MCU / CPU: częstotliwość, liczbę rdzeni, wydajność energetyczną ...
źródło
Najpierw musisz wziąć pod uwagę, że 16 KB lub 32 KB to ogromna ilość pamięci, a większość sprzedawanych dziś mikrokontrolerów nie ma tak dużej ilości pamięci RAM.
Wiele programów mikrokontrolera wymaga 10 lub 50 bajtów pamięci. Jeszcze bardziej złożone rzeczy potrzebują głównie w setkach bajtów.
Zasadniczo istnieją trzy przypadki użycia, w których potrzebujesz pamięci RAM w kolejności w bajtach: a) Gdy twój mikrokontroler wykonuje grafikę b) Kiedy używasz mikrokontrolera do dużych dowolnych obliczeń c) Kiedy interfejs z interfejsami PC
Po drugie, pamiętaj, że jeśli mówisz o pamięci RAM mikrokontrolera, mówisz o pamięci podręcznej poziomu 0 / poziomu 1. Jeśli uważasz, że Intel Haswell ma „tylko” 64 KB bajtów pamięci podręcznej poziomu 1, ponownie rozważysz rozmiar pamięci RAM mikrokontrolera.
Po trzecie, możesz podłączyć dowolną ilość zewnętrznej pamięci RAM do mikrokontrolera, szczególnie więcej niż możesz podłączyć do procesora.
Osobiście rozwijam wiele aplikacji mikrokontrolera i nigdy nie potrzebowałem 1 KB pamięci, a nawet więcej. Nigdy też nie korzystałem z zewnętrznej pamięci RAM.
Sytuacja wygląda inaczej, jeśli przejdziemy do ROM (dziś Flash), ponieważ twój program i dane znajdują się w ROM. Naprawdę istnieje wiele aplikacji, w których podłączasz zewnętrzną pamięć ROM do mikrokontrolera, ponieważ masz wiele danych.
Przeanalizujmy przykład: Przeanalizujmy aplikację mikrokontrolera i bierzemy przenośny odtwarzacz MP3 z wyświetlaczem i 4 gigabajty pamięci flash.
Do tej aplikacji potrzebujesz 1 KB pamięci RAM. To wystarczy do wykonania pracy. Możesz jednak użyć więcej pamięci RAM dla większych buforów, aby przyspieszyć zapisywanie z USB na Flash.
Teraz widzisz różnicę: typowy komputer mieści wszystkie programy i dane w pamięci RAM. Dlatego potrzebuje dużo pamięci RAM. W przypadku mikrokontrolera jest to wszystko we Flash / ROM.
źródło
Projektując MCU, musisz zmierzyć się z warunkami, które nie są tak ważne na komputerach PC.
Trwałość
Aby wybrać komponenty, niekoniecznie musisz brać najlepsze lub / i najbardziej wydajne części, ale te, które sprawdziły się po kilku latach użytkowania, będą dostępne przez kilka lat i będą mogły pracować 24/7 przez lat Z tego powodu, jeśli kontroler jest na rynku od kilku lat i dobrze sobie radzi, wydaje się, że ma słabą pamięć RAM w porównaniu ze współczesnym standardem PC. Ale i tak dobrze sobie radzi i nie powinno być potrzeby wymiany, jeśli inżynieria była dobra.
Przestrzeń
Jednostki mikroprocesorowe to dosłownie mikroskopy. Musisz zmniejszyć potrzebną przestrzeń do absolutnego minimum. Oczywiście, możesz uzyskać 256 MB w tym samym miejscu, co 10-letnie chipy 64 KB. Tutaj dochodzi do sedna nr 1.
Cena £
Nie tylko cena zakupu, ale także zużycie energii. Nie chcesz projektować MCU, które ma kontrolę nad systemem wejściowym, który potrzebuje 1000 W, jeśli twój rywal w biznesie ma taki, który potrzebuje tylko 25 W. I oczywiście niższa cena zakupu (przy tej samej jakości) wynosi zawsze lepiej.
źródło