Maison / Travailler sur Internet / Contrôleur de mémoire dynamique. Contrôleur d'accès direct à la mémoire : diagramme, logique, états et mode de fonctionnement Fonctions du contrôleur de cache

Contrôleur de mémoire dynamique. Contrôleur d'accès direct à la mémoire : diagramme, logique, états et mode de fonctionnement Fonctions du contrôleur de cache

Cœur du processeur des microcontrôleurs :
- Unité arithmétique et logique
- organisation de la mémoire

Bonjour chers radioamateurs !
Je vous souhaite la bienvenue sur le site ""

Aujourd'hui (plus précisément, au fil de plusieurs articles), nous allons nous intéresser de plus près base n'importe lequel microcontrôleurcœur du processeur.

Éléments essentiels:

1. Unité logique arithmétique

ALU- le cœur (et peut-être l'esprit, avec honneur et conscience) du microcontrôleur.
Ici, nous n'entrerons pas dans le rôle d'un "démembrement maniaque" et fouinons dans les entrailles de cet appareil. Nous apprenons seulement que grâce à l'ALU, tout le travail du microcontrôleur a lieu. Si jamais vous avez envie d'apprendre plus profondément comment fonctionne le "cœur" du microcontrôleur (et ce sera bien s'il apparaît), alors dans les livres des merveilleux auteurs Belov, Ryumik, Evstifeev, Revich, Baranov et bien d'autres , vous trouverez toujours une réponse détaillée .

2. Mémoire du microcontrôleur (organisation de la mémoire)

Avant de parler de la mémoire du microcontrôleur, parlons un peu de la mémoire en général.
La mémoire humaine - tout est clair avec elle - elle peut être "solide" (lorsque vous êtes dans une mémoire solide, et parfois même dans votre bon sens) et, malheureusement, "fuyante". Et toutes les informations sont stockées dans les soi-disant "neurones" - de petites cellules de mémoire.
Presque tout est pareil avec les microcontrôleurs. Seulement si une personne a la plus petite cellule pour stocker des informations appelée « neurone », alors la plus petite cellule mémoire pour un microcontrôleur stocker des informations s'appelle " peu“.
Un bit peut stocker soit un un logique, soit un zéro logique.
Peul'unité de mesure minimale de la quantité de mémoire dans la technologie des microprocesseurs.
L'unité de mémoire principale suivante, ou la plus courante, est octet.
Octetc'est huit bits d'information. Un octet ne peut stocker que huit zéros et uns.
Le nombre maximum pouvant être écrit dans un octet est 255. Si vous opérez dans le programme gros chiffres alors vous devez savoir (pour savoir combien d'octets il faut pour stocker un nombre) que le nombre maximum sur lequel on peut écrire :
– un octet = 255
– deux octets = 65535
– trois octets = 16 777 215
- quatre octets - un nombre de plus de 4 milliards (si vous n'êtes pas au moins une centaine du magazine Forbes, vous n'aurez pas besoin de quatre octets de mémoire pour stocker des chiffres).
L'écriture en mémoire et la lecture à partir de la mémoire se font en octets (vous ne pouvez pas écrire ou lire un bit d'information).
La prochaine unité de mesure est kilo-octet.
Il y a 1024 octets d'informations dans un kilo-octet. (exactement 1024, pas 1000 octets).
Il existe également de grandes valeurs pour mesurer la quantité de mémoire (mégaoctets, gigaoctets), mais elles ne sont pas encore utilisées dans les microcontrôleurs.
J'espère que tout est clair pour nous avec les unités de mesure de la mémoire électronique :

Organisation de la mémoire dans le microcontrôleur

Les puces AVR ont trois types de mémoire :
mémoire de programme, alias mémoire FLASH
mémoire de données, alias RAM (RAM)alias SRAM
mémoire non volatile, alias EEPROM, alias EEPROM
Le microcontrôleur a trois espaces d'adressage dans lequel se trouvent les types de mémoire ci-dessus. Dans le même temps, la mémoire de données (au sens de l'espace d'adressage alloué) s'est avérée un peu privée - elle doit partager son espace d'adressage avec les cellules de mémoire dans lesquelles les registres sont stockés usage général et les registres d'E/S (vous les découvrirez en détail dans le prochain article). Ces registres n'appartiennent pas physiquement à la mémoire de données, mais sont dans le même espace d'adressage. Si les adresses de départ de la mémoire de programme et de la mémoire non volatile commencent à l'adresse zéro, alors l'adresse de départ de la mémoire de données ne commence pas à l'adresse zéro - les registres à usage général et les registres d'E / S prennent leur place à partir de l'adresse zéro, et eux seuls sont suivis des adresses des cellules de la mémoire programme.
Certains types de MCU ATiny n'ont pas de mémoire de données.

Mémoire programme (mémoire FLASH)

Mémoire programme est conçu pour y stocker nos programmes, ainsi que toutes les données dont nous avons besoin et qui ne changent pas pendant l'exécution du programme (constantes). Lorsque l'alimentation du microcontrôleur est coupée, toutes les données de la mémoire programme sont enregistrées.
Mémoire programme, bien sûr, ont tous les microcontrôleurs. La taille de la mémoire programme, selon le type de MK, varie de 1 kilo-octet à 256 kilo-octets.
Accès à la mémoire programme seul le programmeur a lors de la programmation du MK, le MK lui-même a également accès à la mémoire du programme, mais uniquement pour lire les données de la mémoire, il ne peut rien y écrire (on ne sait jamais, il veut soudainement gâcher notre programme). Certes, le MK de la famille Mega a la possibilité (avec l'autorisation du programmeur) d'apporter des modifications à la mémoire du programme, mais c'est une autre histoire.
Pour la mémoire de programme, il existe deux autres types de mesure de mémoire - " mot" Et " page“.
Le fait est que la mémoire programme est constituée de cellules composées de deux octets. Une telle cellule s'appelle un "mot". Et cela se fait de cette façon car presque toutes les commandes MK se composent de deux octets et, par conséquent, deux octets sont nécessaires dans la mémoire du programme pour les écrire. Chaque commande MK est un "mot". Il existe plusieurs commandes qui nécessitent 4 octets de mémoire pour écrire - deux mots, mais de telles commandes se trouvent dans les MK avec une mémoire de programme supérieure à 8 kilo-octets.
Ainsi, dans une cellule de la mémoire programme peut être écrit:
- toute commande composée de deux octets
- la moitié de la commande, composée de 4 octets
- deux constantes, chacune tenant dans un octet, ou une constante de seize bits. En même temps, si vous écrivez trois constantes d'un octet en mémoire, elles occuperont toujours quatre octets (deux mots) en mémoire.
En plus, l'écriture dans la mémoire programme s'effectue non seulement par "mots", mais aussi par "pages" . Taille de la page est de 64 à 256 octets (plus la quantité de mémoire programme est grande, plus la "page" est grande). Qu'est-ce que ça veut dire. Si vous créez un petit programme de 11 mots (22 octets), il occupera toujours une page de mémoire programme, c'est-à-dire au moins 64 octets. Les 42 octets "supplémentaires" seront remplis de zéros ou de uns. Ce sont les tartes.
Mais ce n'est pas tout.
La mémoire programme peut avoir trois états(Si je peux le dire):
1. Toute la mémoire est à la disposition du programmeur
Dans ce cas, nous pouvons remplir complètement toute la mémoire avec notre programme et nos données. Et le programme démarrera à partir de l'adresse mémoire zéro.
2. Une partie de la mémoire prend MK
Dans le cas où MK est utilisé pendant le fonctionnement (et j'espère que vous vous souvenez de quoi il s'agit), le MK prend une partie de la mémoire pour les besoins du traitement des interruptions et l'y stocke " vecteurs d'interruption“.
Ce que c'est.
Lorsque nous permettons au MK de traiter les interruptions, il, à partir de l'adresse zéro de la mémoire, prend certaines des cellules pour y stocker les adresses, auxquelles le MK doit se rendre pour exécuter la routine d'interruption. Pour chaque interruption, le MK alloue deux octets de mémoire (un mot) qui stockent les adresses des routines d'interruption. Ces adresses, qui indiquent où se trouve en mémoire le sous-programme de traitement de telle ou telle interruption, sont appelées " vecteurs d'interruption“. Et toute la zone de mémoire dans laquelle les «vecteurs d'interruption» sont stockés s'appelle table des vecteurs d'interruption. Le nombre de cellules mémoire occupées pour les interruptions dépend directement du nombre d'interruptions possibles pour un microcontrôleur donné (de quelques à plusieurs dizaines). Toutes les interruptions sont situées au début de la mémoire programme, à partir de l'adresse zéro, et ont une séquence claire. A l'adresse zéro, le vecteur d'interruption de réinitialisation est toujours localisé. Lorsque nous allumons l'appareil ou réinitialisons avec le bouton, l'interruption de réinitialisation est déclenchée. Le MK lit à partir de l'adresse zéro (de la cellule) l'adresse qui indique où se trouve en mémoire le début de notre programme, et en se rendant à cette adresse, il commence à exécuter le programme. Le programme lui-même dans ce cas sera situé dans la mémoire programme immédiatement après la table d'interruption.
3. MK prend une autre partie de la mémoire du programme (plus précisément, il ne prend pas, mais alloue une zone à la fin de la mémoire, dans laquelle le programmeur place un programme spécial - le «chargeur»).
Ceci est possible dans les MCU de la famille "MEGA", qui ont la capacité de permettre au MCU d'apporter des modifications à la mémoire programme. Qu'est-ce que ça veut dire.
Certains MK ont la capacité auto-programme. Dans la pratique des amateurs, cette possibilité de MK est extrêmement rarement utilisée. La capacité de reprogrammation (auto-programmation) est nécessaire principalement dans les cas de production industrielle d'un appareil sur un microcontrôleur, pour lequel une mise à jour peut ensuite être publiée logiciel. Nous n'envisagerons pas cette possibilité, du moins pas encore. Nous avons juste besoin de savoir que dans les MK qui prennent en charge l'auto-programmation, la mémoire du programme est divisée en deux parties :
- supérieur - section programme d'application, où se trouve notre programme et vecteurs d'interruption
- inférieur - section chargeur de démarrage (Section du chargeur de démarrage- en anglais), où le programmeur place son programme de chargement. La taille de la section bootloader dépend de la taille totale de la mémoire du programme MK et peut aller de 128 octets à 4096 octets. Si nous n'utilisons pas la possibilité d'auto-programmation du MK, alors cette section est donnée pour notre programme et nos données.
Eh bien, la mémoire FLASH est appelée mémoire programme car elle est fabriquée à l'aide de la technologie dite Flash (comme les «lecteurs flash» informatiques habituels pour nous tous).
La mémoire programme permet 10 000 cycles de reprogrammation.

Mémoire de données (RAM statique, SRAM)

RAM, c'est mémoire de données taper SRAM, conçu pour y stocker diverses données obtenues à la suite du programme.
Lorsque l'alimentation du microcontrôleur est coupée, toutes les données qui y sont stockées sont perdues.
Mémoire de données est disponible dans presque tous les microcontrôleurs (absent dans les MK les plus simples de la famille Tiny).
Dans tous les MC de la famille Mega (et une partie des MC de la famille Tiny), la quantité de mémoire de données intégrée varie de 128 octets à 8 kilo-octets, et la quasi-totalité est mise à notre entière disposition. Il suffit d'un peu de MK pour lui-même organiser la pile (nous verrons ce que c'est plus tard). Certains MK offrent une connexion mémoire externe(il peut être de n'importe quel type - FLASH, SRAM, EEPROM) jusqu'à 64 kilo-octets. Dans le cas de la connexion d'une mémoire externe dans de tels MK, cela devient, pour ainsi dire, une continuation de la mémoire de données.
L'écriture et la lecture dans la mémoire de données se font octet par octet et, contrairement à la mémoire programme, elle n'est pas divisée en pages et en mots.

Mémoire non volatile (EEPROM)

Une mémoire non volatile fait également référence à la mémoire de données, mais contrairement à cette dernière, elle possède plusieurs fonctionnalités. Il est destiné à stocker des données et des constantes qui doivent être conservées en l'absence d'alimentation.
Tous les microcontrôleurs ont des EEPROM.
Lorsque l'alimentation du microcontrôleur est coupée, toutes les données stockées dans la mémoire non volatile sont enregistrées (c'est pourquoi on l'appelle non volatile).
La quantité de mémoire non volatile, selon le type de MK, varie de 64 octets à 4 kilo-octets.
Écrire et lire des informations en mémoire se fait octet par octet. Cependant, dans les anciens modèles de la famille MEGA, la mémoire non volatile, ainsi que la mémoire programme, a un enregistrement de page. La taille de la page est petite, seulement 4 octets. En pratique, cette fonctionnalité n'a pas d'importance - l'écriture et la lecture sont toujours effectuées octet par octet.
Nombre de cycles d'écriture et d'effacement la mémoire atteint 100 000.
La principale caractéristique de l'EEPROM est que lorsque des données y sont écrites, elles deviennent très «lente» - l'écriture d'un octet peut durer de 2 à 4 millisecondes (c'est une vitesse très faible), et il peut arriver, par exemple, que certains - ou interruption, auquel cas le processus d'écriture des données sera ruiné.
De plus, il n'est pas recommandé d'écrire des données dans la mémoire non volatile à partir de l'adresse zéro (je ne me souviens pas de la source de cette information, mais je me souviens exactement de ce que j'ai lu quelque part) - les données peuvent être endommagées pendant le fonctionnement du MK . Parfois, les programmeurs reculent de quelques octets depuis le début de la mémoire, et ce n'est que dans les cellules suivantes qu'ils commencent à écrire des données.

Au cœur de toute mémoire flash se trouve un cristal de silicium, sur lequel sont formés des transistors à effet de champ pas tout à fait ordinaires. Un tel transistor possède deux grilles isolées : de contrôle (contrôle) et flottante (flottante). Ce dernier est capable de retenir des électrons, c'est-à-dire des charges. Dans une cellule, comme tout transistor à effet de champ, il y a un drain et une source (Fig. 4.1). Lors du processus d'écriture, une tension positive est appliquée à la grille de commande et une partie des électrons se déplaçant du drain vers la source est déviée vers la grille flottante. Certains des électrons surmontent la couche isolante et pénètrent (diffusent) dans la grille flottante. Ils peuvent y rester de nombreuses années.

La concentration d'électrons dans la zone de la grille flottante détermine l'un des deux états stables du transistor - la cellule mémoire. Dans le premier état initial, le nombre d'électrons sur la grille flottante est faible et la tension de seuil d'ouverture du transistor est relativement faible (un logique). Lorsque suffisamment d'électrons sont chargés sur la grille flottante, le transistor est dans son deuxième état stable. Sa tension d'ouverture augmente fortement, ce qui correspond à un zéro logique. Lors de la lecture, il est mesuré

Riz. 4.1. Cellule de mémoire flash

tension de seuil qui doit être appliquée au drain pour rendre passant le transistor. Pour supprimer les informations, une tension négative est brièvement appliquée à la grille de commande et les électrons de la grille flottante se diffusent vers la source. Le transistor repasse dans l'état d'unité logique et y reste jusqu'à la prochaine écriture. Il est à noter que dans la mémoire flash, un transistor stocke un bit d'information - c'est une cellule. Tout le processus de « mémorisation » est basé sur la diffusion d'électrons dans un semi-conducteur. Cela conduit à deux conclusions peu optimistes.

Le temps de stockage de la charge est très long et se mesure en années, mais reste limité. Les lois de la thermodynamique et de la diffusion stipulent que la concentration d'électrons dans différentes zones finira par s'égaliser.

Pour la même raison, le nombre de cycles d'écriture-réécriture est limité : de cent mille à plusieurs millions. Au fil du temps, une dégradation du matériau lui-même et des transitions p-n se produisent inévitablement. Par exemple, les cartes Compact Flash Kingston sont conçues pour 300 000 cycles d'écriture. Transcend Compact Flash - activé

1 000 000, alors que la clé USB Transcend 32 Go n'est que de 100 000.

Il existe deux architectures de mémoire flash. Ils diffèrent par la manière dont ils accèdent aux cellules et, par conséquent, l'organisation des conducteurs internes.

La mémoire NOR (OR-NOT) vous permet d'accéder aux cellules une par une. Chaque cellule a un conducteur séparé. L'espace d'adressage mémoire NOR vous permet de travailler avec des octets ou des mots individuels (chaque mot contient

2 octets). Cette architecture impose de sérieuses restrictions sur la quantité maximale de mémoire par unité de surface de la puce. La mémoire NOR n'est actuellement utilisée que dans les puces BIOS et autres ROM de faible capacité, telles que les téléphones portables.

Dans la mémoire NAND (NAND), chaque cellule est à l'intersection d'une "ligne de bit" et d'une "ligne de mot". Les cellules sont regroupées en petits blocs semblables à un cluster disque dur. La lecture et l'écriture ne sont effectuées que par blocs ou lignes entiers. Tout moderne média amovible construit sur la mémoire NAND.

Les plus grands fabricants de puces NAND sont Intel, Micron Technology, Sony et Samsung. La gamme de puces fabriquées est assez large et est mise à jour plusieurs fois par an.

Contrôleurs

Le contrôleur de mémoire est utilisé pour contrôler la lecture et l'écriture. À l'heure actuelle, le contrôleur est toujours implémenté en tant qu'élément séparé (il s'agit soit d'une micropuce de l'un des facteurs de forme standard, soit d'une puce non emballée intégrée dans une carte mémoire), bien que des travaux soient en cours pour intégrer le contrôleur directement dans une mémoire flash ébrécher.

Les contrôleurs sont conçus et fabriqués pour des puces de mémoire flash complètement spécifiques. La méthode d'adressage des cellules est structurellement intégrée dans le contrôleur. Lors de l'écriture sur une puce de mémoire flash, les données sont organisées d'une certaine manière, qui varie d'un modèle à l'autre. Les fabricants gardent ces subtilités secrètes et, apparemment, ne prévoient pas de les divulguer. De toute évidence, il y a beaucoup plus de micrologiciels de contrôleur créés que de modèles de contrôleurs eux-mêmes. Le micrologiciel du contrôleur (micrologiciel) et la table de traduction d'adresses (traducteur) sont écrits dans la zone de service de la mémoire flash. C'est cette zone que le contrôleur commence à lire immédiatement après la mise sous tension. En plus de l'adressage proprement dit des cellules, le contrôleur remplit un certain nombre d'autres fonctions : les fonctions de surveillance des secteurs défectueux, de correction d'erreurs (ECC - error check and correct) et même d'usure des cellules (wear leveling).

La norme technologique dans la fabrication des puces mémoire est la présence en moyenne jusqu'à 2% de cellules non fonctionnelles. Au fil du temps, leur nombre peut augmenter, par conséquent, comme dans les disques durs, un volume de réserve est fourni dans la mémoire flash. Si un secteur défectueux apparaît, le contrôleur, lors du formatage ou de l'écriture, remplace son adresse dans la table d'allocation de fichiers par l'adresse de secteur de la zone de réserve. La correction est effectuée par le contrôleur, mais est mise en œuvre au niveau du système de fichiers d'un média particulier.

Du fait de la ressource limitée des cellules (de l'ordre de plusieurs millions de cycles de lecture/écriture pour chacune), le contrôleur a pour fonction de prendre en compte l'uniformité d'usure. Pour garantir que les informations sont enregistrées de manière uniforme, l'espace libre est conditionnellement divisé en sections et, pour chacune d'elles, le nombre d'opérations d'écriture est pris en compte. Les statistiques de cycle sont enregistrées dans une zone de service cachée de la mémoire, et le contrôleur accède périodiquement à ces informations pour ces informations. Cela n'affecte pas l'adressage.

Structure de la clé USB

Malgré la variété des cas, toutes les clés USB sont conçues de la même manière. Si les moitiés du boîtier sont verrouillées ensemble, elles se séparent généralement facilement. Les boîtiers étanches ou à la mode doivent être ouverts par des méthodes destructives, telles que la coupe.

Sur la carte à l'intérieur de la clé USB (Fig. 4.2), il y a nécessairement deux microcircuits : une puce mémoire et un contrôleur. Les deux sont marqués en usine. Parfois, la carte comporte deux puces de mémoire flash qui fonctionnent par paires. La tuyauterie des microcircuits est constituée de plusieurs résistances et diodes, d'un stabilisateur de puissance et d'un résonateur à quartz. Depuis peu, le stabilisateur est de plus en plus intégré directement au contrôleur et le nombre d'accessoires est réduit au minimum. De plus, le tableau peut contenir indicateur led et un mini-interrupteur pour la protection en écriture.

Riz. 4.2. Périphérique de disque flash

Le connecteur USB est soudé directement sur la carte. Les points de soudure des contacts de nombreux modèles sont assez vulnérables, car ils supportent la charge mécanique lors de la connexion et de la déconnexion de l'appareil.

Types et conception des cartes mémoire

De nombreuses entreprises ont proposé de temps en temps différents modèles de cartes mémoire aux utilisateurs. A de rares exceptions près, ils sont tous incompatibles les uns avec les autres en termes de nombre et d'arrangement des contacts et Caractéristiques électriques, Les cartes Flash sont de deux types: avec interface parallèle (parallèle) et série (série).

En tableau. Le tableau 4.1 répertorie les 12 principaux types de cartes mémoire que l'on trouve actuellement. Au sein de chaque type, il existe des variétés supplémentaires, en tenant compte du fait que nous pouvons parler de l'existence de près de 40 types de cartes.

Tableau 4.1. Types de cartes mémoire

Type de carte mémoire

Dimensions hors tout, mm)

Maximum

constructif

Interface

Compact Flash (CF)

Parallèle 50 broches

Broches série 9

Carte multimédia (MMS)

Série 7 broches

Série 7 broches

MMS haut débit

Série 13 broches

Série 10 broches

Clé USB PRO

Série 10 broches

Memory Stick Duo

Série 10 broches

SmartMedia (SSFDC)

Parallèle 22 broches

Parallèle 22 broches

Série 8 broches

Les cartes MMC peuvent fonctionner en deux modes : MMC (MultiMedia Card) et SPI (Serial Peripheral Interface). Le mode SPI fait partie du protocole MMC et est utilisé pour communiquer avec le canal SPI dans les microcontrôleurs de Motorola et de certains autres fabricants.

Dans la fente pour carte SD (Secure Digital), vous pouvez insérer Carte MMS(carte multimédia), mais pas l'inverse. Le contrôleur de carte SD contient le cryptage matériel des données et la mémoire elle-même est équipée d'une zone spéciale dans laquelle la clé de cryptage est stockée. Cela a été fait afin d'empêcher la copie illégale d'enregistrements musicaux, pour le stockage et la vente desquels un tel support a été conçu. La carte dispose d'un interrupteur de protection en écriture.

Les cartes CompactFlash (CF) peuvent être facilement insérées dans la fente PCMCIA Type II. Bien que PCMCIA ait 68 broches et que CF n'en ait que 50, la conception Cartes CompactFlash offre une compatibilité totale et possède toutes les fonctionnalités du format PCMCIA-AT A.

Tous les supports Memory Stick (norme Sony) sont relativement compatibles. La norme prévoit théoriquement une capacité de carte mémoire allant jusqu'à 2 To, bien qu'en réalité la capacité atteigne des unités de gigaoctets.

Les cartes SmartMedia sont pratiquement obsolètes et ne se trouvent que dans les très anciens appareils photo numériques. Il est à noter que c'était la seule norme dans laquelle le contrôleur n'était pas situé à l'intérieur de la carte, mais dans le lecteur.

La conception des cartes mémoire n'est pas séparable - il s'agit d'un appareil inadapté à la réparation. Des microcircuits non emballés, ainsi que les conclusions, sont versés dans le composé et tous ensemble sont pressés dans une coque en plastique. La seule façon d'accéder au cristal est d'ouvrir l'appareil, mais les dommages aux conducteurs sont presque inévitables.

Lecteurs

Pour lire une clé USB, un port USB: l'ordinateur considère ces périphériques comme standard Lecteur amovible grâce à leur contrôleur. Les contrôleurs de toutes les cartes mémoire sont adressés à l'ordinateur par des interfaces série ou parallèles - contacts sur la carte. Pour chacune de ces interfaces, un adaptateur correspondant est nécessaire - contrôleur supplémentaire, associant cette interface à un port USB standard.

Un lecteur de carte est un appareil composé d'un ou plusieurs contrôleurs similaires, d'un convertisseur de puissance et de connecteurs pour diverses cartes mémoire (Fig. 4.3). L'alimentation est fournie par une source +5 V via un câble USB.

Riz. 4.3. lecteur de cartes

Le plus souvent, il existe des "combinés" conçus pour plusieurs types de cartes : de 6 à 40. Il y a beaucoup moins d'emplacements dans un lecteur de cartes, car chaque emplacement est utilisé pour plusieurs types de cartes similaires en taille et en emplacement de contacts. Selon ses caractéristiques différents modèles sont pratiquement équivalents, mais diffèrent principalement par le nombre de types de cartes pris en charge et la conception.

Organisation logique

Avant de passer aux systèmes de fichiers des lecteurs flash, nous devons nous souvenir de l'architecture NAND. Dans cette mémoire fréquemment utilisée, la lecture, l'écriture et la suppression d'informations ne se produisent que par blocs.

Sur les disques durs et les disquettes, la taille de bloc est de 512 octets, sans compter les 59 octets de service, qui ne sont visibles que par le contrôleur de disque dur. Tous les systèmes de fichiers ont été créés avec ces valeurs à l'esprit. Le problème est qu'en mémoire flash, la taille du bloc d'effacement, à de rares exceptions près, ne correspond pas à la taille d'un secteur de disque standard de 512 octets et est généralement de 4,8 voire 64 Ko. D'autre part, pour des raisons de compatibilité, le bloc de lecture/écriture doit correspondre à la taille du secteur du disque.

Pour ce faire, le bloc d'effacement est divisé en plusieurs blocs de lecture/écriture d'une taille de 512 octets. En pratique, le bloc est légèrement plus gros : en plus des 512 octets pour les données, il possède également une « queue » (Tail) de 16 octets de long pour les informations de service sur le bloc lui-même. Physiquement, l'emplacement et le nombre de blocs de lecture/écriture ne sont limités par rien. La seule restriction est qu'un bloc de lecture/écriture ne doit pas traverser une limite de bloc d'effacement, puisqu'il ne peut pas appartenir à deux blocs d'effacement différents.

Les blocs de lecture/écriture sont divisés en trois types : valides, invalides et défectueux. Les blocs contenant des données enregistrées et appartenant à un fichier sont valides. Les blocs utilisés avec des informations obsolètes sont considérés comme invalides et doivent être effacés. La catégorie des blocs défectueux est constituée de blocs qui ne peuvent pas être écrits et effacés.

Une autre caractéristique de la mémoire flash est que les informations ne peuvent être écrites que dans un espace préalablement vidé des informations précédentes. Lorsque des informations doivent être écrites, le micrologiciel du contrôleur doit décider quels blocs invalides effacer en premier. Dans la plupart des microprogrammes, le problème de la suppression des blocs invalides est résolu de la manière la plus simple : dès qu'une certaine partie de la capacité du disque flash est remplie d'informations, le mécanisme de nettoyage des blocs invalides est automatiquement lancé.

Pour augmenter la durée de vie de la mémoire, une technologie de contrôle de niveau d'usure est utilisée, ce qui prolonge cycle de vie cristal de mémoire en raison de la répartition uniforme des cycles d'écriture / effacement des blocs de mémoire. Un effet secondaire - la défaillance d'un bloc de mémoire - n'affecte pas le fonctionnement des autres blocs de mémoire du même cristal. Les blocs fixes appartiennent aux fichiers qui n'ont pas été modifiés ou déplacés depuis longtemps ou pas du tout. La présence de blocs de données fixes conduit au fait que la partie restante des cellules est soumise à une usure accrue et consomme ses ressources plus rapidement. Le micrologiciel prend en compte ces blocs et, si nécessaire, déplace leur contenu vers d'autres cellules.

Les systèmes de fichiers des disques flash et des cartes mémoire, à première vue, sont bien connus des utilisateurs de disques durs et de disquettes. Il s'agit de FAT16, moins souvent de FAT32 : c'est ainsi que le système d'exploitation Windows propose de formater un disque. La norme signifie Le disque Windows XP et Windows 7 peut être formaté en Système NTFS! Pour ce faire, vous devez d'abord vous rendre dans le Gestionnaire de périphériques et dans la fenêtre des propriétés du lecteur flash connecté sur l'onglet Politique, sélectionnez la valeur Optimisation pour une exécution rapide. Programmes spéciaux des fabricants, tels que l'outil de formatage de disque USB HP, vous permettent de formater des lecteurs flash en NTFS sans un tel effort.

Cependant, la similitude externe des systèmes de fichiers disques durs à semi-conducteurs et les disques durs conventionnels sont trompeurs. Le système de fichiers à mémoire flash (Flash File System, FFS) n'émule qu'un lecteur de disque conventionnel et se compose d'unités de contrôle et d'une unité d'initialisation. En fait, seul le contrôleur d'un disque flash ou d'une carte mémoire connaît l'emplacement et l'adressage réels des blocs de mémoire.

Ceci est très significatif lorsque différentes façons restaurer le contenu de la puce de mémoire flash. Lors de la lecture d'une puce mémoire via son contrôleur "natif", le fichier image contient une séquence de blocs dans l'ordre de leurs numéros ou décalages. Au début se trouvent l'en-tête et la table du système de fichiers. Si la lecture est effectuée sur le programmeur, les blocs initiaux du vidage contiennent des informations de service et les blocs de données sont mélangés de manière presque aléatoire. Dans le même temps, il est peu probable que les informations de service soient utiles, car elles dépendent entièrement du modèle de contrôleur et de son micrologiciel - la séquence correcte de blocs doit être compilée avec beaucoup de difficulté.

Certaines caméras ne fonctionnent qu'avec des fichiers Système RAW La méthode d'enregistrement de photos sur un support avec un tel système de fichiers, ainsi que les fonctionnalités de formatage de la carte elle-même, dépendent du modèle de l'appareil et même du micrologiciel d'un modèle particulier. Ce format n'est pas standardisé et comporte de nombreuses variantes. Habituellement, seuls les programmes de service du fabricant de l'appareil photo peuvent restaurer les données de ces cartes, et il est conseillé d'utiliser l'appareil photo lui-même comme lecteur de carte.

Riz. 4.4. Formater la fenêtre du lecteur flash Windows Vista SPl

La nouveauté est système de fichiers exFAT (FAT étendu - FAT étendu). La prise en charge de ce système de fichiers, spécialement conçu pour les lecteurs flash, est apparue pour la première fois dans Windows Embedded CE 6.0. Windows Vista Service Pack 1 et Windows 7 fonctionnent avec exFAT (Figure 4.4).

Le but du nouveau système de fichiers est le remplacement progressif de FAT et FAT32 sur les lecteurs flash. Il contient certaines fonctionnalités qui étaient auparavant propres au système de fichiers NTFS :

La limite de taille de fichier de 4 Go a été dépassée : la limite théorique est de 2^ octets (16 exaoctets) ;

Amélioration de la diffusion espace libre en introduisant un bitmap d'espace libre, ce qui réduit la fragmentation du disque ;

La limite du nombre de fichiers dans un répertoire a été supprimée ;

Ajout de la prise en charge d'une liste de droits d'accès.

Dans combien de temps ce système de fichiers deviendra la norme pour les lecteurs flash, le temps nous le dira. Apparemment, cela n'arrivera pas avant système opérateur Windows 7 sera repris par la grande majorité des utilisateurs.

Parfois, lors du développement d'un appareil, il est nécessaire d'enregistrer certaines données dans une mémoire non volatile. Dans de tels cas, l'EEPROM interne du microcontrôleur est généralement utilisée. Si cela ne suffit pas, des puces EEPROM externes de la série 24lxx sont généralement utilisées. Les microcircuits de cette série sont très populaires. Le plus souvent, ils peuvent être trouvés dans l'ancien téléphones portables, quelques cartes mères, cartouches d'imprimantes et bien d'autres endroits. Le prix de ces puces est également très attractif. Par exemple, 24LC16 coûte 11 roubles.
Ce microcircuit est disponible dans différents boîtiers, dont les plus populaires sont DIP et SOIC. Le microcircuit a le brochage suivant :

Comme vous pouvez le voir, il y a très peu de conclusions. Essayons donc de comprendre ce qui est quoi.
A0, A1, A2- ne sont pas utilisés dans ce microcircuit. Ils peuvent être connectés à la terre ou à l'alimentation plus. Dans certains autres microcircuits de la série 24lxx, ces broches peuvent définir l'adresse du microcircuit afin de pouvoir connecter jusqu'à 8 micros de mémoire à un bus i2c à la fois.
contre- Terre.
SDA- ligne de données
SCL- ligne d'impulsion d'horloge
WP- Protection en écriture. Lorsque cette broche est à 0 logique, l'écriture dans la mémoire est activée. Si vous appliquez une unité logique, seule la lecture à partir de la mémoire est possible.
Vcc- alimentation du microcircuit. Selon la fiche technique, il est alimenté par une tension de 2,5 volts à 5,5 volts.

Connexion au contrôleur.
La connexion de la mémoire au MK est très simple. À partir du cerclage, seule une paire de résistances d'une résistance d'environ 4,7 kOhm est requise.

Logiciel

Pour travailler avec la mémoire, une bibliothèque a été développée qui implémente les fonctions suivantes :

i2c_init- ajuste la vitesse des impulsions d'horloge le long de la ligne SCL.

La puce 24LC16 prend en charge des fréquences jusqu'à 400 kHz. Vous pouvez calculer la fréquence comme ceci :

Fréquence d'horloge du processeur- la fréquence à laquelle le microcontrôleur fonctionne

TWBR- le numéro inscrit dans le registre du même nom.

TWPS- prédéterminant. Les valeurs du prédiviseur sont définies par les bits TWPS1 et TWPS0 dans le registre TWSR.

Pour le contrôleur Atmega 32, le tableau suivant est valide :

i2c_start- envoie un message de démarrage

i2c_stop- envoie un message d'arrêt

i2c_send- envoie un octet

i2c_recevoir- reçoit un octet

i2c_recevoir_dernier- prend le dernier octet. La différence avec la fonction précédente est que lorsqu'un octet est reçu, le microcontrôleur n'envoie pas de bit d'acquittement. Si, lors de la réception du dernier octet, utilisez i2c_recevoir alors la ligne SDA restera plaquée au sol.

Écriture de données sur une puce mémoire

Vous pouvez écrire des données à la fois dans un ordre aléatoire et page par page. Puisqu'il peut y avoir plusieurs appareils sur le bus i2c à la fois, pour accéder à n'importe quel appareil, vous devez connaître son adresse à sept bits. Adresse de puce 24LC16 dans forme binaire Ressemble à ça:

Les bits A, B, C sont utilisés pour sélectionner le bloc mémoire. Il y a 8 blocs de mémoire dans la puce, 256 octets chacun. En conséquence, les bits ABC prennent des valeurs de 000 à 111.

Pour écrire des octets sur la puce, vous devez effectuer la séquence d'actions suivante :

  1. Initialiser l'interface i2c
  2. Envoyer le message de départ
  3. Envoyer l'adresse de la puce + l'adresse du bloc de mémoire
  4. Envoyer l'adresse de l'emplacement mémoire à écrire
  5. Envoyer un octet de données
  6. Envoyer un colis stop

Exemple: Besoin d'écrire un octet 0xFA par l'adresse 0x101.

rappeler i2c_init
rappeler i2c_start
température ldi, 0b 1010 001 0 // Adresse de la puce où :
// 1010 - adresse de la puce
// 001 - adresse du bloc mémoire (la cellule 0x101 appartient au bloc 1)
// 0
rappeler i2c_send
ldi temp.1 //Adresse de la cellule mémoire. (bloc 1, cellule 1)
rappeler i2c_send
lditemp,0xFA //Charge l'octet à écrire dans le registre
rappeler i2c_send //Ecrit un octet
rappeler i2c_stop

Vous pouvez écrire des données dans la mémoire non seulement octet par octet, mais également page par page. La taille de la page est de 16 octets. L'écriture par page implique ce qui suit : Envoi de l'adresse de l'octet nul page souhaitée et après cela 16 fois nous envoyons les données nécessaires. Le compteur d'adresses incrémentera automatiquement d'une unité. Si vous envoyez des données pour la 17e fois, l'octet nul sera écrasé, si vous envoyez l'octet 18e fois, il écrasera l'octet numéro 1, etc.

Exemple: Il est nécessaire d'écrire la première page du bloc 0.

rappeler i2c_init // Initialiser l'interface i2c
rappeler i2c_start // Envoie le message de début
température ldi, 0b 1010 000 0 // Adresse de la puce où :
// 1010 - adresse de la puce
// 000 - adresse du bloc mémoire (on s'intéresse au bloc zéro)
// 0 - bit de lecture/écriture. 0 - écrire, 1 - lire
rappeler i2c_send
température ldi, 16 //Adresse de la première page
rappeler i2c_send
température ldi, 0x01 //Charger l'octet numéro 0 dans le registre
rappeler i2c_send //Ecrit un octet
température ldi, 0x02 //Charger l'octet numéro 1 dans le registre
rappeler i2c_send //Ecrit un octet
/// écrire le reste des octets ici.....
température ldi, 0x0E //Charger l'octet numéro 14 dans le registre
rappeler i2c_send //Ecrit un octet
température ldi, 0x0F //Charger l'octet numéro 15 dans le registre
rappeler i2c_send //Ecrit un octet
rappeler i2c_stop // Envoie un message d'arrêt

Lire les données d'une puce
Nous avons en quelque sorte compris le dossier, maintenant commençons à lire. Pour lire un octet, procédez comme suit :

  1. Initialiser l'interface i2c (si elle n'a pas été initialisée auparavant)
  2. Envoyer le package de démarrage
  3. Envoyez l'adresse du microcircuit et l'adresse du bloc mémoire d'où nous allons lire
  4. Envoyer l'adresse de l'emplacement mémoire
  5. Envoyer à nouveau le message de démarrage
  6. Envoyer l'adresse de la puce et l'adresse du bloc de mémoire avec le bit "read"
  7. Octet de réception
  8. Envoyer un colis d'arrêt

rappeler i2c_init // Initialiser l'interface i2c
rappeler i2c_start // Envoie le message de début
lditemp, 0b1010 011 0 // Adresse de la puce + adresse du 3ème bloc mémoire.
// Bit de lecture/écriture toujours à 0 !
rappeler i2c_send
température ldi, 0x41 //Adresse de la cellule mémoire
rappeler i2c_send
rappeler i2c_start // Renvoyer le message de début
lditemp, 0b1010 011 1 // L'adresse de la puce + l'adresse du bloc mémoire + le bit de lecture/écriture sont devenus 1
rappeler i2c_send // vous pouvez maintenant lire les données
rappeler i2c_recive_last //Lire un octet. Premier et dernier.
rappeler i2c_stop // Envoie un message d'arrêt

La lecture peut être effectuée séquentiellement octet par octet, c'est-à-dire il suffit d'appeleri2c_recevoir Autant que les besoins. La commande pour augmenter l'adresse de un n'a pas besoin d'être envoyée. Il n'est pas non plus nécessaire de changer d'adresse de bloc pendant la lecture séquentielle. Ceux. vous pouvez prendre et lire l'intégralité de la puce en une seule fois sans aucun problème.

La bibliothèque pour travailler avec i2c a été développée et testée sur le microcontrôleur Atmega32. Je pense que cela fonctionnera sur de nombreux autres contrôleurs sans aucun changement. Naturellement, le contrôleur doit avoir un support matériel pour i2c, ou comme on l'appelle aussi TWI. Bien sûr, i2c peut également être implémenté par programme, mais je n'ai pas pris la peine et ce n'était pas nécessaire. L'exemple de démonstration est un programme qui écrit des octets de 0 à 15 dans les 16 premières adresses, et après l'écriture, il les sort sur le port A. Vous pouvez voir comment cela fonctionne non seulement en direct mais aussi dans Proteus.

Et enfin, je joins un oscillogramme :

Voici à quoi ressemble le bus i2c à travers mes yeux :-)
Toutes les questions et suggestions sont les bienvenues dans les commentaires.

Comme exemple de mise en œuvre des principes d'accès direct à la mémoire (DMA), considérons le microcircuit KR580VT57. Le contrôleur programmable PDP est conçu pour l'échange de données à grande vitesse entre la mémoire système et quatre périphériques externes (ED).

Le contrôleur effectue un échange de données bidirectionnel entre la mémoire et le VU (à la demande du VU), tandis que les paramètres du tableau spécifié d'adresses de cellules de mémoire (adresse initiale et nombre de cycles) et les signaux de commande sont générés dans le canal d'adresse de le système à microprocesseur. Chacun des quatre canaux du contrôleur fournit l'adressage (en incrémentant l'adresse générée) de la mémoire externe avec des tableaux allant jusqu'à 16K octets avec la possibilité de définir l'une des 64K adresses de départ.

Composition du contrôleur PDP

Les blocs suivants peuvent être distingués dans le contrôleur (Fig. 3.11.1): un bloc de traitement de requête, un générateur d'adresses, un bloc logique de lecture-écriture, un bloc de contrôle, un tampon de données et deux registres - un registre de réglage de mode et un registre d'état du canal. Considérez leurs caractéristiques.

Le bloc de traitement des requêtes est destiné à :

● pour réception signaux de demande ZDAP0–ZDAP3 pour un accès direct à la mémoire depuis le VU ;

● pour masquage entrées des canaux K0–K3 ;

● pour extradition demander des signaux de confirmation ¯PPDP0 – ¯PPDP3 d'accès direct à la mémoire, informant le VU de la disponibilité du contrôleur à échanger des données via le canal DMA.

Le générateur d'adresses contient des registres 16 bits de l'adresse de début (PHA0…PHA3) et du nombre de cycles (RCHTs0…RCHTs3), un schéma d'incrémentation-décrémentation et un déclencheur. Lors de l'exécution du programme d'installation initial, l'adresse initiale de la cellule mémoire, à laquelle le VU accédera via le canal DMA, est écrite dans le RHA. Dans les 14 chiffres les moins significatifs du registre du nombre de cycles du RFC, le nombre N - 1 est inscrit, où N est le nombre de cycles. Les deux bits de poids fort de ce registre sont utilisés pour contrôler l'échange sur le canal DMA.

Dans chaque cycle, deux octets de l'adresse sont lus à partir du PHA. Le déclencheur fournit l'ordre de lecture: l'octet de poids fort est émis via le tampon de données vers le moteur pas à pas et l'octet de poids faible de l'adresse est émis via les bus A0 ... A3, A4 ... A7. A la fin du cycle, le schéma d'incrémentation-décrémentation incrémente le contenu de la RHA et diminue de un le contenu de la RFC. Il convient de noter que les sorties du contrôleur A4…A7 sont toujours utilisées comme sorties pour les bits A4…A7 du code d'adresse, et les sorties A0…A3 sont utilisées :

  • Comment sorties pour la transmission des chiffres les moins significatifs du code d'adresse lors du fonctionnement du canal DMA ;
  • Comment contributions pour sélectionner le registre avec lequel les informations seront échangées. Ce besoin apparaît lors de l'écriture du programme de configuration dans le contrôleur DMA, ainsi que lors de la lecture du contenu du registre d'adresse, du registre de nombre de cycles ou du registre d'état.

Bloc logique de lecture-écriture

reçoit, génère et sort des signaux qui assurent l'échange d'informations entre le processeur et le contrôleur PDP, la mémoire et le VU. Le bloc logique de lecture-écriture possède les sorties suivantes :

● ¯Зп - entrée/sortie tri-stable de contrôle bidirectionnel utilisée :

Comment entrée pour recevoir un signal du processeur enregistrer données dans les registres internes du contrôleur PDP lors de son installation initiale ;

Comment sortie, sur lequel un signal est généré qui permet à un appareil externe enregistrer données de la mémoire ;

● ¯Th est une entrée/sortie de commande bidirectionnelle à trois états utilisée par :

Comment entrée recevoir un signal du processeur qui permet en lisant(sortie) le contenu des registres internes du contrôleur ;

Comment sortie pourémettre un signal d'autorisation lectures données de VU à la mémoire ;

● ¯ChtP, ¯ZpP - sorties pour contrôler la lecture de la mémoire et l'écriture dans la mémoire ;

● ¯VK - entrée (sélection de cristal) à laquelle un signal de sélection de puce zéro est appliqué après la définition des signaux d'écriture ou de lecture. Le signal ¯VK initie l'échange de données entre le processeur et les registres internes du contrôleur DMA lors de la programmation ; automatiquement bloqué en mode d'accès direct. L'entrée ¯VK est reliée au SHA du système à microprocesseur directement ou par l'intermédiaire d'un décodeur.

Conclusions ¯Zp, ¯Cht sont connectés au processeur en tant qu'entrées et au VU en tant que sorties, et les sorties ¯ZpP, ¯ChtP - à la mémoire du système à microprocesseur.

À l'étape installation initiale dans le générateur d'adresses, les bits de poids faible А3…А0 du code d'adresse sont décodés, et après que les signaux ¯Зп, ¯Тт sont reçus du processeur, l'écriture ou la lecture des registres accessibles par logiciel du dispositif DMA est organisée . À travailler en cycle Des circuits logiques PDP de l'unité de lecture-écriture forment des couples de signaux ¯Cht, ¯ZpP et ¯Zp, ¯ChtP aux sorties du dispositif, qui assurent la synchronisation du processus d'échange de données entre le VU et la mémoire.

Bloc de contrôle

régule la séquence des opérations pendant tous les cycles RAP à l'aide de signaux de commande, et transfère également le contrôleur de l'état de veille à l'état de service en fonction du signal de confirmation de capture (PCx). L'unité de contrôle a les sorties suivantes :

  • ЗЗх (Н RQ) - sortie à partir de laquelle le signal est pris demande de capture pour microprocesseur ;
  • ПЗх (HLDA) - entrée sur laquelle le signal est reçu confirmer la capture du microprocesseur ;
  • Ã (RDY) - entrée de commande préparation. Le signal Гт = 1 du VU active le fonctionnement du contrôleur PDP; le signal Гт = 0 met le contrôleur dans l'état de veille ;
  • M128 - sortie marqueur du cycle 128 : M128 = 1 indique que le cycle DAP actuel est le 128e cycle à partir de la fin du tableau de données ;
  • KS (TS) - sortie fin de comptage : CS = 1 indique au WU que le cycle d'échange en cours sur le canal DMA est le dernier dans la transmission du tableau de données. Si le bit "KS-stop" dans le registre de réglage de mode est mis à 1, alors le canal sera désactivé. La sortie CS est activée (CS = 1) lorsque le contenu du registre 14 bits du nombre de cycles dans ce canal est mis à 0 ;
  • RA (AE) - sortie autorisations d'adresse : PA = 1 indique au système que des cycles d'accès direct sont en cours. Dans ce cas, tous les bus sont déconnectés du microprocesseur. Le signal peut être utilisé pour bloquer le bus d'adresse dans les appareils ne participant pas à l'accès direct, ainsi que pour écrire les huit bits supérieurs du code d'adresse dans le registre tampon d'adresse et désactiver le circuit de récupération de l'appareil. En mode PDP, l'appareil est échantillonné à l'aide des signaux ¯PPDP0 – ¯PPDP3 ;
  • STA (STBA) - sortie stroboscope d'adresse, dont le signal strobe l'octet de poids fort de l'adresse mémoire, transmis par l'intermédiaire du moteur pas à pas à un tampon de données supplémentaire. A travers ce tampon, l'octet de poids fort de l'adresse entre dans le bus d'adresse du système à microprocesseur ;
  • TI - entrée pour les impulsions d'horloge ;
  • Réinitialiser - l'entrée de l'installation initiale de l'appareil. L'application d'un seul signal à cette entrée réinitialise le contenu de tous les registres accessibles par logiciel, ce qui entraîne la déconnexion des canaux K0 - K3.

Le tampon de données est un bus tri-état bidirectionnel 8 bits qui connecte le contrôleur DMA au bus de données système du moteur pas à pas.

Via le tampon de données :

  • à la programmation en mode écriture, huit bits de données D 7 ... D 0 du microprocesseur sont transférés au contrôleur PDP pour écriture dans le registre d'adresse de début, le registre de nombre de cycles ou le registre de réglage de mode ; lorsque le processeur lit à partir du dispositif DMA, le contenu du registre d'adresse de début, le registre de nombre de cycles et le registre d'état de canal sont affichés ;
  • à fonctionnement du canal DMA au début de chaque cycle, les huit bits supérieurs de l'adresse sont transférés du registre d'adresse du canal correspondant vers la mémoire. Ensuite, le SD est libéré pour un échange direct de données entre la mémoire et le VU pendant le reste du cycle. Ces données ne transitent pas par l'appareil PDP.

Registre d'installation

modes stocke des informations sur les modes de chargement automatique programmés, l'enregistrement étendu et régulier, la priorité fixe et le décalage cyclique des priorités, l'arrêt KS, etc. Un mot de contrôle de 8 bits y est écrit lors de la programmation du contrôleur DMA. Le registre de réglage du mode est généralement chargé après la registre d'adresse(RgA) et registre des cycles(RgC). Le but des bits du registre de réglage de mode est donné dans le tableau. 3.11.1.

Registre d'état des canaux

indique dans lequel des quatre canaux le processus de transfert de matrice s'est terminé. Pour ce faire, la valeur du signal KS = 1 de fin de comptage, qui apparaît en sortie du KS et indique la fin du tableau sur la voie correspondante, est écrite sur les bits de poids faible de PC0– PC3 (drapeaux d'achèvement de service). Nomination des grades registre de réglage de mode est donné dans le tableau. 3.11.2.

États de base et modes de fonctionnement de l'appareil.

Les principaux états sont état initial, programmation, attente et maintenance.

L'état initial.

Dès l'entrée Réinitialiser un seul signal, l'appareil passe à initialÉtat. Dans cet état, les requêtes de tous les canaux DMA sont masquées (P0 = P1 = P2 = P3 = 0), les circuits tampons du bus A0 ... A3 sont transférés à l'état de réception d'informations.

La programmation.

Capable la programmation dispositif, le microprocesseur sur le bus de données (SM - D 0 ... D 7) écrit l'adresse de départ, le nombre de cycles et d'autres données dans les registres correspondants, dont l'adresse est donnée par le code A 3 A 2 A 1 A 0 sur les bus A0–A3 (tableau 3.11.3). Le bit senior du code A3 vous permet de distinguer quand A3 \u003d 0 - registres de canal K0…K3 ; à A3 = 1 - registre de réglage de mode(ne fonctionne que pour l'écriture) et registre d'état des canaux(ne fonctionne qu'en lecture). Le bit le moins significatif de A0 sélectionne les registres de l'adresse de début (A0 = 0) et du nombre de cycles (A0 = 1). Les deux chiffres du milieu A 2 A 1 indiquent les numéros de registres (ou canaux) dans code binaire. Par exemple, le code 0101 correspond au registre de comptage de cycles RFC2 - canal 2. Les registres du contrôleur DMA sont chargés ou des informations y sont lues si le microprocesseur exécute une commande d'écriture ou de lecture en accédant au dispositif et à ses registres. Pour ce faire, le microprocesseur doit émettre les signaux d'écriture appropriés ¯Zp ou lire ¯Cht et définir l'adresse de registre sous la forme du code A 3 A 2 A 1 A 0 sur les bus d'adresse système SHA. A ce moment, les informations nécessaires D 7 ... D 0 sont fournies au bus de données du moteur pas à pas pour être écrites dans les registres ou des informations sont lues à partir du contrôleur PDP via le bus de données du moteur pas à pas. Pour définir l'état de programmation, vous devez également appliquer le signal d'extraction de l'appareil ¯VK = 0. Du fait que les registres de canal sont de 16 bits, deux cycles d'instructions de programme sont nécessaires pour les charger ou les lire. DANS générateur d'adresses Le contrôleur a un déclencheur qui commute automatiquement les circuits pendant une opération de lecture ou d'écriture. Ce déclencheur détermine l'accès à l'octet haut ou bas d'un registre. Le déclencheur est réinitialisé en appliquant un seul signal à l'entrée réinitialiser, et aussi chaque fois que le registre de réglage de mode est chargé.

Pour assurer une bonne synchronisation lors de l'accès aux registres de canal, toutes les commandes doivent provenir du microprocesseur par paires, il ne doit y avoir aucun espace entre elles.

Attente.

Capable attentes le contrôleur reçoit du VU un signal de demande pour recevoir un cycle PDP (ZPDP0–ZPDP3) et génère un signal de demande de capture (ЗЗх) pour le microprocesseur. Dans cet état, les bus système sont contrôlés par le microprocesseur.

Service.

Après réception du signal de confirmation de capture (PZx) du microprocesseur en présence d'un signal de demande (ZPDP0 - ZPDP3) de la VU, le contrôleur génère un signal de confirmation de demande (¯PPDP0 - ¯PPDP3) pour l'une des VU et commute à état du service. DANS Dans cet état, les bus système sont contrôlés par le contrôleur et l'un des modes DMA programmés est mis en œuvre :

  • les 8 bits inférieurs de l'adresse mémoire sont envoyés aux bus A0–A3, A4–A7, les 8 bits supérieurs - au bus de données du moteur pas à pas;
  • les signaux de commande correspondants ¯ChtP et ¯ZpP, ¯Zp et ¯Cht sont formés, ce qui permet au VU de recevoir de la cellule mémoire ou de transférer vers la cellule mémoire en un cycle d'octets de données.

Au premier cycle de fonctionnement, le dispositif PMA transmet l'adresse de début de la cellule mémoire. Dans les cycles suivants, l'adresse augmente, et le nombre de cycles diminue de un, jusqu'à ce que le contenu du registre du nombre de cycles (ou plutôt ses 14 bits) devienne égal à zéro. Après cela, un signal est généré fin de comptage CS et les modes de fonctionnement suivants sont possibles :

  • augmenter encore l'adresse en en ajoutant une après le cycle suivant ;
  • blocage du canal PDP (mode « KS-stop ») ;
  • répétition d'un tableau d'adresses préalablement sélectionné (mode autoload).

Lors de l'exécution des cycles RAP, trois modes de fonctionnement sont possibles :

  • mode en lisant, assurer le transfert de données de la mémoire vers le VU ;
  • mode enregistrements, assurer le transfert de données du VU vers la mémoire ;
  • mode chèques. Dans ce mode, le contrôleur PMA ne génère pas les signaux ¯ChtP, ¯ZpP, ¯Ch et ¯Zp, ce qui empêche l'échange de données entre la mémoire et la VU. Cependant, à chaque cycle, le contrôleur PMA contrôle le bus système et acquitte les requêtes de la VU. Périphériques externes peut utiliser des signaux d'accusé de réception pour permettre un accès interne à chaque octet du tableau de données afin d'effectuer une opération de vérification. Le réseau de cycles de vérification peut suivre le réseau de cycles de lecture pour permettre au RT de vérifier les données nouvellement arrivées.

Le contrôleur flash intégré (EFC) fait partie du contrôleur de mémoire (MC) et fournit une interface pour accéder aux blocs de mémoire flash via un bus 32 bits interne. Cela vous permet d'augmenter considérablement la vitesse de récupération des instructions de la mémoire flash lorsque le cœur du processeur fonctionne en mode Thumb (système d'instructions 16 bits) en raison du fonctionnement du tampon 32 bits. De plus, le contrôleur flash intégré prend en charge ensemble complet commandes de lecture, d'écriture, d'effacement de la mémoire flash, de définition et d'effacement des bits de sécurité.

20.2 Description fonctionnelle

20.2.1 Organisation de la mémoire flash intégrée

Les interfaces de mémoire flash embarquées sont directement connectées à un bus 32 bits interne basé sur plusieurs des interfaces suivantes.

  • Organisation mémoire simple : plusieurs pages de même taille.
  • Deux tampons de lecture 32 bits conçus pour augmenter la vitesse de lecture flash (voir "Commandes de lecture" à la page 101).
  • Un tampon d'écriture pour stocker les données lors de la programmation d'une page flash. Ce tampon a la taille d'une page et est en écriture seule. De plus, le tampon d'écriture adresse la totalité de la zone de 1 Mo de la mémoire flash (voir "Commandes d'écriture" à la page 101).
  • Plusieurs bits de sécurité (bits de verrouillage) pour empêcher l'effacement et l'écriture de la mémoire flash. Chaque zone protégée de la mémoire flash (toutes les zones sont de taille égale) est constituée d'un nombre fixe de pages placées en séquence. Chacune de ces zones est directement associée à un seul bit de sécurité.
  • Quelques bits de mémoire non volatile - bits NVM (mémoire non volatile) à des fins générales. Chacun de ces bits est chargé de contrôler certains nœuds du microcontrôleur. Pour plus des informations détaillées pour chaque bit NVM, voir les chapitres correspondants de ce document.
La taille de la mémoire flash intégrée, sa taille de page et l'organisation des bits de sécurité sont décrites au chapitre 9 Mémoire.

Tableau 20-1. Nombre de bits de sécurité et de bits NVM à usage général pour les membres de la famille AT91SAM7S

Illustration 20-1. Carte mémoire flash intégrée

20.2.2 Commandes de lecture

Pour accélérer le processus de lecture de la mémoire flash, un tampon 32 bits dédié est intégré au contrôleur EFC. En raison de la présence de ce tampon, lorsque le processeur fonctionne en mode Thumb (système d'instructions 16 bits), l'accès à la mémoire flash se produit deux fois plus rarement, ce qui augmente le taux de récupération des instructions et, par conséquent, augmente la vitesse du processeur (Fig. 20-2, Fig. 20-3 et Fig. 20-4).

Cette optimisation est effectuée uniquement lors de la récupération des instructions, et non lors de la lecture des données de la mémoire flash.

Les commandes de lecture peuvent être exécutées avec ou sans cycles d'attente supplémentaires. Seuls jusqu'à trois cycles d'attente (inclus) peuvent être définis dans le champ FWS (Flash Wait State) du registre de mode flash MC_FMR (voir "Registre de mode flash", page 110). Avec FWS = 0, la mémoire flash intégrée est accessible en un cycle.

L'accès à la mémoire flash est disponible en 32 bits (mot), 16 bits (demi-mot) et 8 bits.

Étant donné que la taille de la mémoire flash intégrée est inférieure à celle du microcontrôleur par rapport à la taille de l'espace d'adressage de la mémoire interne qui lui est allouée (1 Mo), le contrôleur de mémoire implémente ce que l'on appelle. duplication de ce bloc de mémoire flash dans tout l'espace d'adressage qui lui est alloué. Par exemple, pour l'AT91SAM7S64, la mémoire flash de 64 Ko est mappée exactement 1024/64 = 16 fois dans cet espace d'adressage.


Illustration 20-2. Optimisation lors de la lecture du code de commande en mode Thumb pour FWS = 0


Illustration 20-3. Optimisation lors de la lecture du code de commande en mode Thumb pour FWS = 1


Illustration 20-4. Optimisation lors de la lecture du code de commande en mode Thumb pour FWS = 3

20.2.3 Commandes d'écriture

La zone de mémoire interne réservée à la mémoire flash intégrée ne peut également être écrite que via un tampon dédié. Lors de l'exécution de commandes d'écriture dans la mémoire flash, seuls les 8 bits inférieurs de l'adresse sont pris en compte (car nous parlons pour les données 32 bits, les 10 bits les moins significatifs de l'adresse sont effectivement pris en compte). À leur tour, les 10 bits supérieurs de l'adresse de la zone interne (1 Mo) réservée à la mémoire flash adressent ce soi-disant. une fenêtre d'une taille de 256 mots (1024 octets). Ainsi, tout cela mémoire intérieure se compose de 1024 telles fenêtres.

Toute commande d'écriture dans la mémoire flash intégrée peut être désactivée par le MPU (Memory Protection Unit).

La mémoire flash ne peut être écrite qu'en mots (32 bits), donc toute tentative d'écrire des demi-mots (16 bits) ou des octets (8 bits) produira un résultat imprévisible.

Les commandes d'écriture sont exécutées dans le nombre de cycles d'attente (champ FWS dans MC_FMR) spécifié pour les commandes de lecture, plus un cycle supplémentaire, sauf lorsque FWS = 3 (voir "Flash Mode Register", page 110).

20.2.4 Jeu de commandes du contrôleur flash

EFCS comprend des commandes pour programmer la mémoire flash, des commandes pour définir la protection (déprotéger) ses zones, des commandes pour la programmation séquentielle et la configuration de la protection de la mémoire flash, et une commande pour effacer complètement toute la mémoire flash.

Tableau 20-2. Système de commande du contrôleur flash

Avant d'exécuter l'une de ces commandes, le champ FCMD du registre MC_FCR doit être défini sur le code de cette commande. Étant donné que MC_FCR est en lecture seule, l'indicateur FRDY est automatiquement effacé. Une fois l'exécution de l'instruction terminée, l'indicateur FRDY est automatiquement défini, ce qui peut déclencher l'interruption correspondante s'il est activé via le contrôleur de mémoire (MC).

Toutes les instructions flash sont protégées contre une exécution accidentelle par un mot-clé commun, qui doit être spécifié dans les 8 bits supérieurs du registre MC_FCR chaque fois que l'instruction suivante est exécutée.

Une instruction avec un mot-clé incorrectement spécifié et/ou un code incorrectement spécifié pour cette instruction ne sera pas exécutée, même si l'indicateur PROGE dans le registre MC_FSR est défini. Cet indicateur sera automatiquement réinitialisé à la prochaine lecture du registre MC_FSR.

Une tentative d'écriture ou d'effacement d'une page située dans une zone protégée n'aura aucun effet sur le contenu de la mémoire flash (en fait, cette commande sera ignorée), même si le drapeau PROGE du registre MC_FSR est activé. Cet indicateur sera automatiquement réinitialisé à la prochaine lecture du registre MC_FSR.


Illustration 20-5. Organigramme de commande

Pour exécuter correctement les commandes flash, le champ Cycle Time in Microseconds (FMCN) du Flash Controller Mode Register (MC_FMR) doit être réglé sur la valeur correcte (voir "Flash Memory Controller Mode Register", page 110).

20.2.4.1 Programmation flash

Seules quelques commandes peuvent être utilisées pour programmer la mémoire flash.

Selon la technologie de la mémoire flash, elle doit être effacée immédiatement avant le processus de programmation. Une zone flash entière ou une page individuelle peut être effacée en effaçant le drapeau NEBP dans le registre MC_FMR directement en écrivant un code d'instruction dans le registre MC_FCR.

En définissant le drapeau NEBP dans le registre MC_FMR, une page peut être programmée en un certain nombre d'étapes si elle a déjà été effacée au préalable (voir Figure 20-6).


Illustration 20-6. Exemple de programmation d'une section de page Flash

Après la fin du processus de programmation, la page peut être protégée d'un effacement ou d'une écriture accidentelle ou volontaire (lorsque toute la zone contenant cette page est protégée). À l'aide de la commande WPL, la protection peut être définie automatiquement immédiatement après la fin d'un cycle d'écriture de page.

Les données écrites sont stockées dans une mémoire tampon interne dont la taille est égale à la taille d'une page flash. Ce tampon interne couvre tout l'espace d'adressage de la mémoire flash interne, c'est-à-dire en fait, il peut être affiché dans son intégralité sur n'importe laquelle de ses pages.

Note: l'écriture d'octets (8 bits) ou de demi-mots (16 bits) est interdite, car car cela provoque la corruption des données enregistrées.

Le processus d'écriture des données dans la mémoire flash précédemment allouée dans la mémoire tampon interne est contrôlé par le registre de commande flash (MC_FCR). Vous trouverez ci-dessous la séquence de travail avec ce registre.

  • Une écriture de page entière, qui peut être placée à n'importe quelle adresse dans l'ensemble de l'espace d'adressage flash, n'est possible qu'en tant que dictionnaire (données 32 bits).
  • Le cycle d'écriture de page commence immédiatement après que le numéro de page et le code de commande d'écriture lui-même sont spécifiés dans le registre MC_FCR. Cela efface automatiquement l'indicateur FRDY dans le registre d'état de programmation Flash (MC_FSR).
  • Immédiatement après l'achèvement d'un cycle de programmation, l'indicateur FRDY est défini dans le registre d'état de programmation Flash (MC_FSR). Si les interruptions du drapeau FRDY sont activées, alors le signal d'interruption approprié se produira dans le contrôleur de mémoire (MC).
  • Erreur de programmation : une valeur non valide a été écrite dans le registre MC_FSR. mot-clé et/ou une commande non valide a été spécifiée.

20.2.4.2 Commande flash d'effacement complet

Toute la mémoire flash sur puce peut être effacée si le registre MC_FCR est écrit avec la commande "Erase All" - EA (Erase All).

L'effacement de la totalité de la mémoire flash n'est possible que lorsqu'aucune de ses zones n'est protégée contre l'effacement et l'écriture (aucun des drapeaux de protection de la mémoire flash n'est activé). Sinon (au moins un des drapeaux de protection est défini), cette commande sera ignorée. Si le drapeau LOCKE dans le registre MC_FMR est défini, le signal d'interruption correspondant se produira.

Le drapeau FRDY sera automatiquement défini dans le registre MC_FSR après l'effacement de la dernière commande de programmation ou de la mémoire flash. Dans ce cas, le signal d'interruption correspondant apparaîtra immédiatement à la sortie du contrôleur de mémoire (MC), s'il est activé.

Lors de l'exécution du cycle de programmation, des erreurs peuvent survenir qui sont enregistrées dans le registre MC_FSR. Ces erreurs sont répertoriées ci-dessous.

  • Erreur de programmation : un mot-clé non valide a été écrit dans le registre MC_FSR et/ou une commande non valide a été spécifiée.
  • Erreur de verrouillage : Une tentative a été faite pour programmer une zone sécurisée. Pour programmer correctement cette zone, il faut d'abord la déprotéger à l'aide de la commande unprotect.

20.2.4.3 Bits de protection flash

Chacun des bits de sécurité est lié à une zone spécifique de la mémoire flash, constituée d'un nombre spécifique de pages. Le but de ces bits est de protéger la mémoire flash d'un effacement/programmation accidentel ou intentionnel.

Au cours du processus de fabrication du microcontrôleur, certains des bits de protection peuvent y être définis. Leur but est de protéger une certaine zone de la mémoire flash, qui contient par défaut un programme écrit sur le microcontrôleur lors de sa production. Avant de programmer/effacer une zone protégée, celle-ci doit être déprotégée.

Voici l'ordre dans lequel la protection d'une zone est définie :

La valeur suivante doit être écrite dans le registre de commande flash : (0x5A, après l'exécution de la commande de protection, l'indicateur FRDY dans le registre MC_FSR sera défini. Cela entraînera immédiatement le signal d'interruption correspondant à la sortie du contrôleur de mémoire ( MC), s'il est activé. ul>

Une fois la protection activée, elle peut être déprotégée. Voici la séquence de déprotection d'une zone :

  • la valeur suivante doit être écrite dans le registre de commande flash: (0x5A après l'achèvement de la commande de protection, le drapeau FRDY dans le registre MC_FSR sera défini. Dans ce cas, le signal d'interruption correspondant apparaîtra immédiatement à la sortie de la mémoire contrôleur (MC), s'il est activé.

Si une erreur survient lors de l'exécution de la commande (un mot-clé invalide et/ou un code de commande incorrect est spécifié dans le registre MC_FCR), alors ce fait sera enregistré dans le registre MC_FSR.

L'exécution de la commande pour effacer un bit de verrouillage écrit physiquement un « 1 » sur le bit correspondant, bien que la lecture du registre MC_FSR lit le bit LOCKx correspondant comme un « 0 ». Inversement, l'exécution d'une commande d'établissement de bit de verrouillage écrit physiquement un « 0 » sur le bit correspondant, et la lecture du registre MC_FSR lit le bit LOCKx correspondant comme un « 1 ».

Note: que la mémoire flash soit protégée ou non, elle reste accessible en lecture.

20.2.4.4 Bits NVM à usage général

Les bits à usage général - bits NVM - ne sont pas associés à la mémoire flash intégrée, mais sont destinés à protéger les autres nœuds du microcontrôleur. Chacun de ces bits peut être activé (désactivé) indépendamment des autres. Pour plus de détails sur les bits NVM, consultez les chapitres correspondants de ce document.

Voici la séquence d'activation des bits NVM à usage général.

  • Exécution de la commande Set General Purpose NVM Bit (SGPB) en écrivant dans le Flash Memory Command Register (MC_FCR) le code de cette commande et le nombre de ces bits dans le champ PAGEN du même registre.
  • après l'achèvement de l'instruction SGPB, le drapeau FRDY dans le registre MC_FSR sera défini. Dans ce cas, le signal d'interruption correspondant apparaîtra immédiatement à la sortie du contrôleur de mémoire (MC), s'il est activé.

Lors de l'exécution du cycle de programmation, des erreurs peuvent survenir qui sont enregistrées dans le registre MC_FSR. Ces erreurs sont répertoriées ci-dessous.

  • Le champ PAGEN du registre MC_FCR indique le nombre de bits à usage général qui est supérieur au nombre maximal autorisé de bits NVM mis en œuvre dans la puce. Voici la séquence d'effacement des bits NVM à usage général.
  • Exécution de la commande Clear General Purpose NVM Bit (CGPB) en écrivant dans le registre de commande de la mémoire flash (MC_FCR) le code de commande et le nombre de ces bits dans le champ PAGEN du même registre.
  • lorsque l'instruction CGPB se termine, le drapeau FRDY dans le registre MC_FSR sera défini. Dans ce cas, le signal d'interruption correspondant apparaîtra immédiatement à la sortie du contrôleur de mémoire (MC), s'il est activé.

Lors de l'exécution du cycle de programmation, des erreurs peuvent survenir qui sont enregistrées dans le registre MC_FSR. Ces erreurs sont répertoriées ci-dessous.

  • Erreur de programmation : un mot-clé non valide a été écrit dans le registre MC_FSR et/ou une commande non valide a été spécifiée.
  • Le champ PAGEN du registre MC_FCR indique le nombre de bits à usage général qui est supérieur au nombre maximal autorisé de bits NVM mis en œuvre dans la puce.

L'exécution d'une commande "effacer les bits à usage général NVM" écrit physiquement un "1" sur le bit correspondant, bien que la lecture du registre MC_FSR lit le bit GPNVMx correspondant comme un "0". Inversement, l'exécution d'une commande "Set General Purpose NVM Bits" écrit physiquement "0" sur le bit correspondant, et la lecture du registre MC_FSR lit le bit GPNVMx correspondant comme "1".

Note: quel que soit l'état des bits NVM à usage général, la mémoire flash est toujours lisible.

20.2.4.5 Bit de sécurité

Le bit secret est destiné à empêcher les tentatives externes d'accéder au bus système interne. Après avoir défini le bit de sécurité, le fonctionnement de l'interface JTAG, l'interface de programmation rapide de la mémoire flash et l'accès à la mémoire flash via interface série. L'accès à la mémoire flash via les interfaces ci-dessus n'est à nouveau autorisé que lorsque nettoyage complet cristal sur la broche ERASE externe - voir chapitre 4. Affectation des broches. Lorsque la broche ERASE est à l'état haut (voir la section 7.4. "Effacer la broche de contrôle"), tous les flashs sur puce, tous les bits de protection flash et tous les bits NVM à usage général sont effacés, et seulement après que tout cela est fait, effacez le bit de confidentialité .

La séquence de réglage du bit de confidentialité est donnée ci-dessous.

  • Exécutez la commande Set Security Bit (SSB) en écrivant le code de commande dans le registre de commande Flash (MC_FCR).
  • après l'achèvement de l'instruction SSB, le drapeau FRDY dans le registre MC_FSR sera défini. Dans ce cas, le signal d'interruption correspondant apparaîtra immédiatement à la sortie du contrôleur de mémoire (MC), s'il est activé.

Immédiatement après la définition du bit de sécurité, le drapeau SECURITY sera défini dans le registre MC_FSR.