Comment un microcontrôleur «se souvient-il» d'un programme?

Oct 12 2020

C'est quelque chose qui m'a vraiment dérangé depuis que j'ai obtenu mon diplôme. Nous avons programmé les microcontrôleurs PIC16f877a en classe mais nous n'avons jamais compris comment cela fonctionne, juste le faire fonctionner. Disons que j'écris un programme qui fait clignoter les LED dans un ordre spécifique et que j'envoie ce programme au microcontrôleur via cet adaptateur spécial aux bonnes broches. Que savez-vous, les LED commencent à clignoter comme indiqué. Maintenant, je débranche l'alimentation et enlève le PIC de la maquette. J'ai remis le PIC à son emplacement correct, branchez l'alimentation et les LED clignotent toujours comme précédemment programmé sans avoir à le reprogrammer. Comment cela se passe-t-il? Comment ce microcontrôleur "se souvient-il" essentiellement de ce que je lui ai dit de faire?

Réponses

35 DaveTweed Oct 12 2020 at 01:05

Le PIC comprend un type de mémoire non volatile appelée " Flash EEPROM ". Lorsque vous "envoyez votre programme au microcontrôleur", l'adaptateur spécial programme en fait votre code dans cette mémoire. La mémoire physique est un type spécial de transistor avec une grille flottante qui peut stocker une charge plus ou moins indéfiniment, même sans alimentation appliquée. Dans la plupart des appareils, "facturé" = 0, "sans frais" = 1.

Chaque fois que le PIC est réinitialisé ou mis sous tension, il commence à exécuter votre code, en le récupérant directement à partir de cette mémoire.

Sur le PIC, cette mémoire est intégrée dans la même puce qui contient le CPU et le reste de la logique (périphériques, etc.). Le même type de mémoire est utilisé pour contenir le BIOS de votre ordinateur de bureau / portable, mais il s'agit d'une puce distincte du processeur. Les premiers écrans que vous voyez lorsque vous allumez votre PC proviennent du BIOS, qui charge ensuite votre système d'exploitation à partir du disque dur ou du SSD et l'exécute.

10 PeterGreen Oct 12 2020 at 12:49

Il y a plusieurs éléments pour faire fonctionner la magie de la programmation d'un microcontrôleur.

Votre chaîne d'outils de développement (compilateur, assembleur, éditeur de liens, etc.) traduit votre programme du code source en une série d'instructions machine qui seront stockées sur le microcontrôleur.

Le microcontrôleur stocke normalement le programme dans la mémoire flash (il existe également des microcontrôleurs effaçables aux UV et programmables une seule fois). Il s'agit d'un type de mémoire spécial conçu pour conserver les données même lorsque l'alimentation est coupée. Ceux-ci reposent sur une structure connue sous le nom de «mosfet à grille flottante». Essentiellement, chaque mosfet dans la matrice de mémoire a un petit condensateur en série avec sa grille et la charge sur ce condensateur modifie le comportement du transistor.

La grille flottante est entourée d'un matériau isolant et par conséquent, dans des conditions normales, la charge ne peut ni entrer ni sortir de la grille flottante. Cela permet à la grille flottante de conserver la charge et donc les informations même lorsque le circuit est hors tension.

Cependant, lorsque des tensions suffisamment élevées sont appliquées, les électrons peuvent traverser la couche isolante. Cela permet d'ajouter ou de retirer une charge de la grille flottante. Généralement, le mécanisme de chargement des portes (connu sous le nom de «programmation») peut être effectué sur une base de bit individuel, mais le procédé de suppression de charge (appelé «effacement) ne peut être effectué que pour un bloc entier de mémoire à la fois.

Lorsque vous connectez votre adaptateur de programmation et que vous dites au logiciel de programmer le microcontrôleur, il met le microcontrôleur dans un «mode programme» spécial. Les détails de cela varient selon les microcontrôleurs, mais sur votre PIC16f877a, cela se fait normalement en appliquant 13V à la ligne Vpp / MCLR. Sur les puces flash plus anciennes, Vpp fournirait en fait l'énergie nécessaire à la programmation, mais sur votre PIC, il s'agit simplement d'une ligne de signal avec toutes les tensions nécessaires pour programmer le tableau flash généré en interne. Une fois en mode programme, le processeur arrête d'exécuter les instructions normales et répond à la place aux commandes spéciales envoyées via l'interface de programmation. Sur les PIC, il s'agit d'une interface série synchrone avec une ligne d'horloge unidirectionnelle PGC et une ligne de données bidirectionnelle PGD.

Une fois en mode de programmation, le logiciel de programmation enverra une série de commandes série via l'adaptateur de programmation pour écrire votre programme en flash. Deux approches différentes sont possibles, dans une approche des commandes «effacer et programmer» sont utilisées pour effacer et reprogrammer un bloc à la fois. Dans l'autre approche, la puce entière est effacée avec une commande "d'effacement en bloc", puis des commandes "programme uniquement" peuvent être utilisées pour programmer les nouvelles données. Dans les deux cas, avant d'émettre une commande "effacer et programmer" ou "programme uniquement", les données doivent d'abord être chargées dans des registres de transfert. Vous pouvez trouver les détails sanglants danshttp://ww1.microchip.com/downloads/en/devicedoc/39589b.pdf

7 DKNguyen Oct 12 2020 at 01:22

Tout d'abord ... comprenez-vous comment fonctionne une mémoire fusible programmable à usage unique? Comme si j'avais un milliard de petits fils et que chacun d'entre eux je choisis de me connecter soit à + V pour une logique HI (ONE) et GND pour une logique LO (ZERO), comprenez-vous comment cela stocke un programme en lui-même de uns et de zéros ? Vous pouvez prendre un voltmètre et pour chaque fil, vous pouvez mesurer s'il est connecté à + V ou GND pour déterminer si le bit à cet endroit est HI ou LO. Un microcontrôleur fait la même chose.

Tout le reste est une version sophistiquée et plus flexible de ce concept: comment fonctionne la ROM?

Cela tend à conduire à la question: «Comment un microcontrôleur prend-il le programme des uns et des zéros et en fait des trucs avec lui Que se passe-t-il au niveau matériel lorsque nous alimentons un code?

6 RuskBox Oct 12 2020 at 01:08

Le code de programme est stocké dans la mémoire ROM des microcontrôleurs (dans ce cas flash). Les données stockées dans cette mémoire sont conservées après la mise hors tension. Votre microcontrôleur dispose de 14 Ko de mémoire flash, le code réside après la programmation.

Cette mémoire est basée sur des structures MOSFET, qui conserve les données une fois l'alimentation déconnectée. Pour plus d'informations sur le fonctionnement de la mémoire flash, je vous suggère de lire l' article wiki .

5 GrahamStevenson Oct 12 2020 at 01:31

Selon le millésime du microcontrôleur, il est équipé soit d'une EPROM effaçable UV dans un boîtier en céramique avec fenêtre en verre, d'une EPROM `` programmable une fois '' dans un emballage plastique (pour la production) ou d'une mémoire Flash (typique de la plupart des appareils actuels). Certains peuvent même être achetés avec une ROM programmée par masque pour une fabrication de grande quantité.

Certains programmeurs prennent en charge divers microcontrôleurs ou le fabricant de l'appareil peut avoir un EVB dédié ou autre. La programmation série via SPI, USB, port série (old school) ou port parallèle est également prise en charge pour certaines puces.

J'aime plutôt moi-même la programmation en circuit.