C’est peut-être plus un problème de perception, mais il semble que les microcontrôleurs aient progressé à pas de géant au cours des 20 dernières années, à presque tous les égards, une vitesse d'horloge plus élevée, plus de périphériques, un débogage plus facile, des cœurs 32 bits, etc.
Il est encore courant de voir la RAM dans les 10 de Ko (16/32 Ko).
Il ne semble pas que cela puisse être directement une question de coût ou de taille. Est-ce un problème de complexité avec le contrôleur RAM au-dessus d'un certain seuil?
Ou est-ce simplement que ce n'est pas généralement nécessaire?
En regardant une matrice de pièces chez un fournisseur Internet populaire, je vois un Cortex M4 de 256 Ko pour moins de 8 USD, puis pour quelques dollars de plus, vous pouvez en trouver quelques-uns de plus sans ROM, mais cela semble plutôt rare ...
Je n'ai pas vraiment besoin d'un microcontrôleur avec un MB de stockage volatile, mais il semble que quelqu'un puisse ...
la source
it seems like somebody might
est le piège ici, la plupart des gens ne le font pas. Vous n'allez pas diffuser Netflix sur cette puce, et le 64K est généralement plus que suffisant pour tout ce que vous devez faire avec un micro- contrôleur. Si vous voulez aller plus haut, procurez-vous une composition complète, par exemple une framboise.Réponses:
Il y a plusieurs raisons à cela.
Tout d’abord, la mémoire occupe beaucoup de silicium. Cela signifie que l'augmentation de la quantité de RAM augmente directement la surface de silicium de la puce et donc le coût. Une plus grande surface de silicium a un effet "double whammy" sur le prix: de plus grandes puces signifient moins de puces par tranche, en particulier autour du bord, et de plus grandes puces signifient que chaque puce est plus susceptible de présenter un défaut.
Deuxièmement, il y a la question du processus. Les matrices de mémoire vive doivent être optimisées de différentes manières que la logique, et il n'est pas possible d'envoyer différentes parties d'une même puce à travers des processus différents - la puce entière doit être fabriquée avec le même processus. Il existe des fonderies de semi-conducteurs qui se consacrent plus ou moins à la production de DRAM. Pas les processeurs ou autre logique, juste la DRAM. La mémoire DRAM nécessite des condensateurs efficaces en surface et des transistors à très faible fuite. La fabrication des condensateurs nécessite un traitement spécial. Faire des transistors à faible fuite a pour résultat des transistors plus lents, ce qui est un bon compromis pour l'électronique de lecture DRAM, mais ne serait pas aussi bon pour construire une logique à hautes performances. Produire de la DRAM sur un dé de microcontrôleur signifierait que vous auriez besoin de faire un compromis sur l'optimisation des processus. Les grandes baies de mémoire RAM sont également plus susceptibles de développer des défauts simplement en raison de leur grande surface, de leur rendement décroissant et de leur coût croissant. Tester de grandes baies de mémoire RAM prend également beaucoup de temps et donc, inclure de grandes baies augmentera les coûts de test. De plus, les économies d’échelle réduisent davantage le coût de puces de RAM séparées que de microcontrôleurs plus spécialisés.
La consommation d'énergie est une autre raison. De nombreuses applications embarquées sont soumises à des contraintes de puissance. Par conséquent, de nombreux microcontrôleurs sont conçus pour pouvoir être placés dans un état de veille très basse consommation. Pour permettre une très faible veille, la mémoire SRAM est utilisée en raison de sa capacité à conserver son contenu avec une consommation électrique extrêmement faible. La SRAM protégée par batterie peut conserver son état pendant des années sans une seule pile bouton 3V. La DRAM, par contre, ne peut pas conserver son état plus d’une fraction de seconde. Les condensateurs sont si petits que la poignée d'électrons se faufile dans le substrat ou fuit à travers les transistors de cellule. Pour lutter contre cela, la DRAM doit être lue et écrite en permanence. Par conséquent, la mémoire DRAM consomme beaucoup plus d’énergie que la mémoire SRAM au repos.
D'un autre côté, les cellules de bits SRAM sont beaucoup plus volumineuses que les cellules de bits DRAM. Par conséquent, si une grande quantité de mémoire est requise, la mémoire DRAM est généralement une meilleure option. C’est pourquoi il est assez courant d’utiliser une petite quantité de SRAM (ko / Mo) comme mémoire cache sur puce associée à une plus grande quantité de DRAM hors puce (Mo à Go).
Certaines techniques de conception très utiles ont été utilisées pour augmenter la quantité de RAM disponible dans un système intégré à un coût réduit. Certains d'entre eux sont des packages multi-puces contenant des matrices séparées pour le processeur et la RAM. D'autres solutions impliquent la production de pads sur le dessus du boîtier du processeur, de manière à pouvoir empiler une puce RAM. Cette solution est très astucieuse car différentes puces de RAM peuvent être soudées sur le processeur en fonction de la quantité de mémoire requise, sans aucun routage supplémentaire au niveau de la carte (les bus de mémoire sont très larges et occupent beaucoup de surface de carte). Notez que ces systèmes ne sont généralement pas considérés comme des microcontrôleurs.
Beaucoup de très petits systèmes embarqués ne nécessitent de toute façon pas beaucoup de RAM. Si vous avez besoin de beaucoup de RAM, vous voudrez probablement utiliser un processeur haut de gamme doté d'une mémoire DRAM externe au lieu d'une mémoire SRAM intégrée.
la source
La mémoire occupe probablement le plus d’espace en silicium, et la mémoire RAM très rapide à utiliser est volatile - et utilise constamment l’énergie pour conserver son état. À moins que vous n'ayez besoin de beaucoup de RAM, ce n'est pas utile pour beaucoup d' autres applications. Si un concepteur de système embarqué a besoin de plus de RAM, il se contente d’obtenir une puce de RAM externe et d’utiliser les interfaces de mémoire périphériques que les microcontrôleurs ont souvent de nos jours pour une extension de mémoire plug-and-play très facile. C’est la raison pour laquelle, selon moi, les microcontrôleurs disposent généralement d’une mémoire vive embarquée assez faible, car un code d’application raisonnable et des scénarios de cas d’utilisation n’ont normalement pas besoin de beaucoup.
Lorsque vous commencez à vous familiariser avec les grandes architectures qui doivent fonctionner intégralement sur des systèmes d’exploitation, la RAM devient extrêmement importante. Cependant, cela sort du domaine des microcontrôleurs et dans des ordinateurs embarqués plus comme ceux que vous voyez dans les cartes Beaglebone et Raspberri Pi. journées. Et même à ce stade, les processeurs sont si complexes et si riches en fonctionnalités qu’ils n’ont aucune place pour la quantité de RAM nécessaire à leur tâche. Il leur faut donc une mémoire externe pour fonctionner.
MODIFIER:
Comme anecdote personnelle, j'ai récemment réalisé un petit tableau de commande de robot autonome dans le but de l'utiliser pour la vision par ordinateur à basse résolution, comme la détection de mouvement, le suivi et le suivi d'objets. J'ai choisi un ARM Cortex M3 à faible nombre de broches pour cette tâche et, tout en regardant dans la sélection par Atmel de leurs processeurs de la série SAM3, j'ai en effet opté pour la mémoire vive la plus élevée que j'ai pu trouver - car dans ce cas, je ne voulais pas acheter de RAM externe. en raison de l'espace de la carte et de ne pas vouloir la complexité d'un bus de mémoire RAM à grande vitesse sur le PCB. Dans ce cas, pour mon application particulière, j'aurais beaucoup aimé pouvoir disposer de plusieurs centaines de ko de plus de RAM si possible.
la source
Outre les excellents arguments évoqués dans les autres réponses, l’architecture du microcontrôleur est une autre raison de la limitation de la mémoire RAM. Par exemple, prenons la puce PIC10LF320, qui ne contient que 448 octets de mémoire programme (flash) et 64 octets de RAM. Mais cela ne coûte probablement que 25ȼ (ou moins) en grande quantité. La taille limitée du mot d'instruction PIC10 (12 bits) lui permet de n'adresser directement que 128 octets de RAM.
Je suis sûr qu'il existe d'autres microcontrôleurs qui ne disposent que d'un bus d'adresses à 8 bits, les limitant à 256 octets de RAM.
Mais la plupart des microcontrôleurs de milieu de gamme (même ceux avec des chemins de données de 8 bits) ont un bus d’adresse de 16 bits. Une considération architecturale majeure pour ces puces est de savoir si la puce utilise l' architecture de Harvard ou de Von Neumann .
La plupart des microcontrôleurs utilisent l'architecture Harvard, qui dispose d'espaces adresse distincts de 16 bits pour la mémoire programme, la RAM et les adresses d'E / S mappées en mémoire. Donc, pour ces derniers, le bus d’adresse 16 bits peut accéder à 64 Ko (65 536) octets de RAM. Il y a toujours une limite de 64 Ko imposée par l’architecture, et si l’on veut aller au-dessus, une sorte de pagination doit être utilisée. Il est beaucoup plus courant de faire de la pagination pour l’espace programme que pour l’espace RAM.
Les microcontrôleurs utilisant l'architecture Von Neumann, tels que la ligne Freescale HCS08, ne disposent que d'un seul espace adresse divisé entre la mémoire de programme, la RAM et les E / S mappées en mémoire. Afin de disposer d'une quantité raisonnable d'espace de programme, cela limite la quantité de RAM à 4K ou 8K. Là encore, on peut utiliser la pagination pour augmenter le programme disponible ou l’espace RAM.
la source
Ayant travaillé avec des microcontrôleurs et de petits systèmes pendant un bon bout de temps, j'aimerais préciser que très souvent, très peu de RAM est nécessaire. N'oubliez pas que, même si un MCU est capable d'accomplir de nombreuses tâches, la tendance actuelle consiste à en utiliser beaucoup plus que jamais et à en utiliser davantage pour répartir de nombreuses tâches dans des systèmes plus grands. Ceci, combiné au fait que contrairement aux systèmes de développement saturés nécessaires à la programmation sous Windows, le développement MCU utilise souvent des compilateurs très bien optimisés, le plus souvent avec un code source très efficace en C et C ++, parfois avec peu ou pas de surcharge du système d'exploitation. Il est à peine possible d’écrire un programme Windows pour afficher votre nom sur n’importe quel appareil sans consommer au moins des centaines de kilo-octets, ressources OS comprises,
Bien sûr, il y a des problèmes de coût et d'espace, comme d'autres l'ont souligné. Mais l’histoire actuelle est que ce qui est considéré comme une petite quantité de RAM par les nouveaux arrivants aujourd’hui est en réalité un peu plus que jamais auparavant, et tout le temps que les composants et les périphériques avec lesquels le MCU devra s’interfacer deviennent eux-mêmes plus intelligents. Honnêtement, mon utilisation la plus importante de RAM dans de nombreuses applications MCU a été récemment pour les tampons de communication pilotés par interruption, afin de libérer le MCU pour d’autres tâches sans craindre de perdre des données. Mais croyez-le ou non, pour la logique ordinaire et les fonctionnalités de calcul, les MCU sont assez bien adaptés à leurs ressources Flash et RAM intégrées, et vous pouvez vraiment faire beaucoup avec très peu.
Gardez à l'esprit qu'il était une fois des jeux vidéo célèbres avec des graphismes rudimentaires mais une logique de jeu complexe comme "PAC Man" et "Space Invaders" étaient généralement réalisés dans des ROM 8K, sur des machines ne disposant que de 8 ou 16 Ko de RAM!
la source
Outre les excellents arguments relatifs au coût et à la fabrication, il existe étonnamment peu de demande pour beaucoup de RAM sur puce.
Je travaille souvent avec des microcontrôleurs avec des mémoires flash de plusieurs dizaines de Ko (16 Ko, 32 Ko) et des mémoires RAM de l'ordre du Ko (1 Ko, 2 Ko). Je manque souvent de mémoire flash et presque jamais de mémoire vive. Dans la plupart de mes projets, je me rapproche de la limite de mémoire flash, mais j'ai généralement besoin de beaucoup moins de 20% de la mémoire vive.
La plupart des très petits microcontrôleurs ont deux types de rôles:
régulation et contrôle: ils doivent contrôler une machine. Même dans le cas d'un algorithme de contrôleur compliqué, qui peut occuper des dizaines de ko d'espace de code, très peu de RAM est nécessaire. Vous êtes en contrôle d'un processus physique et avez des variables contenant quelques unités physiques, et peut-être quelques variables en tant que compteurs de boucles. Pas besoin de plus.
traitement des données: dans les rares cas où vous devez stocker une grande quantité de données en même temps, vous pouvez utiliser de la RAM externe. Pratiquement tous les microcontrôleurs modernes ont un support natif pour cela. Si vous avez besoin d'un programme simple utilisant beaucoup de mémoire, il sera à la fois moins coûteux et moins coûteux d'utiliser un petit microcontrôleur et de la mémoire vive externe, plutôt qu'un microcontrôleur de haut niveau. Personne ne fabrique de contrôleurs avec peu de ports, une petite mémoire flash et une mémoire vive importante, car ils sont si peu sollicités.
la source
Toutes les raisons déjà mentionnées sont, bien sûr, techniquement valables et précises. Cependant, n'oubliez pas que l'électronique est une entreprise et que les MCU constituent l'un des créneaux les plus compétitifs du secteur de l'électronique.
J'ose dire que les raisons réelles de lier le prix d'un MCU à la quantité de mémoire SRAM intégrée sont principalement des raisons de marketing et non de coût:
Dans la plupart des conceptions, la fréquence d'horloge maximale pouvant être atteinte n'est pas le facteur limitant. Au lieu de cela, la quantité de mémoire SRAM disponible est de. Ne vous méprenez pas, la fréquence de l'UC est extrêmement importante, cependant, dans un certain segment de la famille des MCU , différents modèles de périphériques ne sont généralement pas proposés à des prix différents en fonction de la fréquence maximale de l'UC. De plus, le stockage de programme Flash est l'autre facteur limitant clé. Cependant, je ne me concentrerai pas trop sur Flash (la question s'adresse spécifiquement à SRAM).
La quantité de mémoire SRAM disponible est directement liée au niveau de complexité que vous pourrez intégrer à votre MCU, que ce soit avec des bibliothèques tierces ou avec votre propre code déployé. Il est donc naturel de segmenter sur la base des prix de votre MCU au moyen d’une mesure «naturelle». Il est compréhensible pour un client technique d’accepter qu’une MCU capable de tâches plus complexes (davantage de SRAM, plus de stockage Flash) coûte plus cher. Le prix, ici, est un reflet de la valeur sous-jacente (capacités de livraison) du MCU. Le stockage Flash est généralement offert dans une quantité proportionnelle à la SRAM.
Au contraire, si vous prenez le marché des processeurs de bureau et mobiles, vous ne pouvez généralement pas vous procurer un MCU / CPU spécifique avec différentes tailles de SRAM. Au lieu de cela, le schéma de tarification est généralement construit sur les capacités d'exécution / de performances du MCU / CPU: fréquence, nombre de cœurs, efficacité énergétique ...
la source
Vous devez donc d’abord considérer que 16 Ko ou 32 Ko représentent une énorme quantité de mémoire et que la plupart des microcontrôleurs vendus aujourd’hui ne disposent pas d’une telle quantité de RAM.
De nombreux programmes de microcontrôleurs nécessitent 10 ou 50 octets de mémoire. Même des choses plus complexes nécessitent principalement des centaines d'octets.
Il existe essentiellement trois cas d'utilisation de RAM en ordre de ko: a) lorsque votre microcontrôleur crée des graphiques b) lorsque vous utilisez un microcontrôleur pour des calculs arbitraires volumineux
Deuxièmement, notez que si vous parlez de RAM de microcontrôleur, vous parlez de cache de niveau 0 / niveau 1. Si vous considérez qu'un processeur Intel Haswell ne dispose "que" de 64 Ko de cache de niveau 1, vous réexaminerez la taille de la RAM d'un microcontrôleur.
Troisièmement, vous pouvez attacher n’importe quelle quantité de RAM externe à un microcontrôleur, et même plus qu’à un processeur.
Personnellement, je développe de nombreuses applications de microcontrôleurs et je n'ai jamais eu besoin de 1 Ko de mémoire, ni même plus. J'ai aussi jamais utilisé de RAM externe.
Les choses sont différentes si nous arrivons à ROM (aujourd'hui Flash), car votre programme et vos données sont dans la ROM. Il existe vraiment de nombreuses applications où vous attachez une ROM externe à votre microcontrôleur, car vous avez beaucoup de données.
Examinons un exemple: analysons une application de microcontrôleur et prenons un lecteur MP3 portable avec écran et 4 gigaoctets de Flash.
Pour cette application, vous avez besoin d'environ 1 Ko de RAM. C'est assez pour faire le travail. Cependant, vous pouvez utiliser davantage de RAM pour des mémoires tampons plus importantes afin d'accélérer l'écriture USB à Flash.
Vous voyez maintenant la différence: un PC type contient tous les programmes et toutes les données dans la RAM. Par conséquent, il nécessite beaucoup de RAM. Pour le microcontrôleur, tout est en Flash / ROM.
la source
Lors de la conception d'un MCU, vous devez faire face à des conditions qui ne sont pas aussi importantes sur les PC.
Durabilité
Pour choisir les composants, vous ne prenez pas nécessairement les pièces les plus performantes, mais celles qui ont fait leurs preuves après plusieurs années d’utilisation seront disponibles pendant plusieurs années et capables de fonctionner 24h / 24 et 7j / 7. ans. En raison de cette situation, si un contrôleur est sur le marché depuis plusieurs années et fait bien son travail, il semble avoir une mémoire RAM faible, comparé au standard PC actuel. Quoi qu'il en soit, il fait bien son travail et il ne devrait pas être nécessaire de le remplacer, si l'ingénierie fonctionnait bien.
Espace
Les unités de microprocesseur sont littéralement des micros. Vous devez réduire l'espace nécessaire au strict minimum. Bien sûr, vous pouvez obtenir 256 Mo dans le même espace que des puces de 64 Ko vieilles de 10 ans. C'est là que le n ° 1 vient à point.
Prix
Non seulement le prix d'achat, mais aussi la consommation d'énergie. Vous ne voulez pas concevoir un MCU qui contrôle un système d’entrée, nécessitant 1000 W, si votre concurrent en a un qui nécessite seulement 25 W. Et bien sûr, un prix d’achat moins cher (de même qualité) est: Toujours mieux.
la source