Choisir et utiliser la technologie de mémoire Flash adaptée aux applications de mémoire programme IoT
Avec la contribution de Rédacteurs nord-américains de DigiKey
2018-05-23
Étant donné que les nœuds IoT sont désormais plus puissants, les exigences en matière de traitement peuvent atteindre un niveau nécessitant un système d'exploitation embarqué complet, comme Linux, pour gérer correctement la complexité de toutes les tâches en cours d'exécution. Même si cela semble pratique de stocker ce code sur une carte Flash microSDHC, la plupart de ces cartes sont conçues uniquement pour le stockage de données et non pour le stockage du système d'exploitation, même si les fournisseurs proposent des solutions innovantes.
Le présent article décrit le rôle d'un système d'exploitation embarqué et explique pourquoi il est souvent judicieux de placer à la fois le code d'application et le système d'exploitation sur une carte Flash microSDHC dans un nœud IoT. Il explique ensuite le mode de détérioration des cartes Flash et ses conséquences néfastes sur les systèmes d'exploitation. Il démontre ensuite comment les concepteurs peuvent utiliser de nouvelles implémentations de mémoire Flash pour surmonter cette détérioration afin de réaliser des implémentations de nœuds IoT efficaces et fiables.
Pourquoi utiliser un système d'exploitation embarqué ?
Pour certaines applications IoT, plus les prétraitements pouvant être effectués au niveau du nœud IoT distant sont importants, plus les données que le nœud IoT doit renvoyer au concentrateur central sont réduites, ce qui libère de la bande passante réseau. Un système d'exploitation embarqué pré-testé peut prendre en charge un prétraitement complexe en traitant efficacement de nombreuses tâches individuelles, et peut effectuer plusieurs tâches de manière prévisible (déterministe). Bien entendu, cela exige des contraintes supplémentaires pour le microcontrôleur, nécessitant une fréquence d'horloge plus rapide et, plus important encore, davantage de mémoire programme.
Un système d'exploitation embarqué commercial ou open-source prêt à l'emploi peut également présenter l'avantage d'un code robuste et pré-testé qui a rarement besoin d'être mis à jour. Par exemple, les systèmes d'exploitation Linux embarqués disponibles peuvent être mis à jour une fois par trimestre seulement ou uniquement pour les correctifs de sécurité d'urgence. Un système d'exploitation embarqué et le code d'application requis peuvent nécessiter 8 Go ou plus. En outre, comme le système d'exploitation est rarement mis à jour, il peut être plus pratique de le stocker sur une carte mémoire Flash microSDHC mise à jour manuellement (physiquement) par un technicien. Cela permet également une extension future de la mémoire, car une carte Flash existante de 4 Go peut facilement être remplacée par une carte de 8 Go ou plus si nécessaire lors de la prochaine visite du technicien (Figure 1).

Figure 1 : Carte mémoire microSDHC S-140u classe 10 de Swissbit qui prend en charge des vitesses pouvant atteindre 104 Mo/s, ce qui est suffisant pour un accès rapide à la mémoire programme. (Source de l'image : Swissbit)
Le stockage de giga-octets d'un système d'exploitation embarqué sur une carte Flash NAND microSDHC mise à jour physiquement présente plusieurs avantages par rapport à la mémoire Flash mise à jour via un réseau sans fil. Sur un réseau sans fil, en fonction du schéma d'arbitrage utilisé, la mise à jour d'un système d'exploitation embarqué de 4 Go ou plus peut accaparer la bande passante sans fil des communications opérationnelles. La mise à jour sur un réseau nécessite également une carte microSDHC ayant une capacité deux fois plus élevée, car elle doit avoir suffisamment de stockage pour exécuter le système d'exploitation et prendre en charge la mise à jour entrante.
La mise à jour sans fil du code Flash réduit également la durée de vie de la batterie en raison de l'activité radio ainsi que des tensions d'écriture Flash et des besoins en énergie plus élevés.
Un système d'exploitation embarqué sur une mémoire Flash impose également des exigences différentes aux cellules de la mémoire Flash par rapport au stockage de données. La plupart des cartes Flash microSDHC commerciales sont conçues par le fabricant uniquement pour le stockage de données. L'utilisation commerciale la plus courante est le stockage multimédia pour les appareils mobiles. Tandis que des erreurs à plusieurs bits dans un fichier vidéo, image ou audio peuvent passer inaperçues auprès de l'utilisateur final, une erreur à un seul bit dans un fichier de système d'exploitation embarqué critique peut entraîner une défaillance totale du système.
La mémoire Flash n'a pas une durée de vie illimitée. Chaque opération d'écriture sur une matrice de mémoire Flash diminue la durée de vie de la matrice. Chaque spécification de mémoire Flash à semi-conducteurs répertorie un nombre limité de cycles d'effacement/écriture. Lorsque la cellule Flash approche cette limite spécifiée, elle risque de plus en plus de s'user et de ne plus accepter de nouvel état de programmation.
La répartition de l'usure est une approche courante pour empêcher la détérioration de la matrice Flash due aux opérations d'écriture. Au lieu d'écrire sur le même emplacement Flash, les écritures sont réparties de façon uniforme sur l'ensemble de la matrice de mémoire Flash à semi-conducteurs, ce qui garantit une distribution uniforme des écritures sur la matrice de mémoire Flash. Grâce à la répartition de l'usure, lorsque le microcontrôleur écrit sur un seul emplacement dans la mémoire physique, le contrôleur Flash peut associer ce même emplacement à différents emplacements de la matrice de mémoire Flash.
Comment les erreurs de perturbation de lecture se produisent-elles ?
Les fichiers du système d'exploitation sont utilisés beaucoup plus souvent que les fichiers de données. Ils peuvent donc être impitoyables en ce qui concerne les erreurs de bits des fichiers. Dans certains cas, les fichiers du système d'exploitation principal peuvent être lus en permanence, ce qui peut entraîner des erreurs de bits dans la matrice Flash.
La mémoire Flash est organisée en blocs et chaque bloc contient un certain nombre de pages. Les blocs sont les plus petites parties de la mémoire pouvant être effacées, tandis que les pages sont les plus petites parties de la mémoire pouvant être lues ou programmées. La taille courante d'un bloc Flash est de 256 Ko. Il peut alors contenir 64 pages de 4 Ko chacune. Chaque page comprend également 64 octets supplémentaires utilisés pour le code de correction d'erreurs (ECC), le nombre d'effacements et les informations de traduction logique vers physique.
Lors d'une opération de lecture Flash d'une page de données, une faible tension de lecture est appliquée à l'ensemble du bloc auquel la page appartient, même si un seul octet de la page doit être lu. En raison de la technologie de cellule de traitement Flash, cette opération induit également une tension plus faible au niveau des pages qui se trouvent autour du bloc. Cela peut injecter des électrons dans les couches d'isolement de la cellule, comme pour la programmation de la cellule. C'est la raison pour laquelle on parle de « programmation souple ». L'application répétée de la faible tension de lecture sur le même bloc peut finir par perturber la programmation des pages Flash non lues. Avec le temps, cela peut entraîner une modification de l'état des cellules adjacentes (différente valeur).
Alors que la plupart des cartes Flash NAND microSDHC présentent une forme ou une autre de correction d'erreur pour corriger les erreurs de cellule, le nombre d'erreurs provoquées par la programmation souple peut être si élevé qu'il peut atteindre un niveau critique impossible à corriger. Le microcontrôleur peut alors lire une valeur différente de l'emplacement du bit, ce qui entraîne une erreur de corruption de fichier. Ces erreurs de bits sont appelées erreurs de perturbation de lecture.
Une carte Flash NAND microSDHC utilisée pour le stockage de données détecte rarement les erreurs de perturbation de lecture. En raison des opérations d'écriture effectuées sur la matrice Flash, après une opération de répartition de l'usure, les emplacements Flash sont reprogrammés, ce qui élimine les effets de la programmation souple. Cependant, une matrice Flash utilisée pour un système d'exploitation embarqué est si rarement programmée qu'une erreur de perturbation de lecture peut devenir une réalité.
Les cartes Flash à cellules mono-niveau (SLC) sont répertoriées à un million de lectures, tandis que les cartes Flash à cellules multi-niveaux (MLC) sont caractérisées à 100 000 lectures avant qu'une erreur de perturbation de lecture ne se produise. Pour le stockage Flash de données, les erreurs de perturbation de lecture sont si rares que ces chiffres ne sont souvent pas spécifiés sur les fiches techniques.
Utiliser RDM pour éviter les erreurs de perturbation de lecture
Pour éviter les erreurs de perturbation de lecture, Swissbit a développé une fonction appelée Read Disturb Management (RDM, gestion des perturbations de lecture). Dans l'outil RDM de Swissbit, le contrôleur de la carte Flash assure le suivi du nombre d'opérations de lecture pour chaque bloc Flash individuel. Lorsqu'un bloc atteint un nombre d'opérations de lecture défini en interne, le contrôleur déplace les données vers un nouveau bloc, ce qui équivaut à la répartition de l'usure utilisée pour les opérations d'écriture. Si nécessaire, lors de l'écriture vers un nouveau bloc, le code de correction d'erreur (ECC) du contrôleur SD corrige les données corrompues.
RDM a été implémenté dans la carte Flash microSDHC S-450u UHS-I classe 10 de 8 Go SFSD8192N1BM1MT-I-QG-221-STD de Swissbit. Spécialement conçue pour les applications industrielles utilisant des systèmes d'exploitation embarqués, la carte S-450u dispose de suffisamment d'espace pour un système d'exploitation Linux embarqué et du code d'application pour de nombreux nœuds IoT complexes. En mode SDR104, la S-104u peut prendre en charge un accès aux données pouvant atteindre 104 Mo/s.
Utiliser une carte microSDHC pour l'exécution de la mémoire programme
Comme expliqué précédemment, les cartes microSDHC ne sont généralement utilisées que pour la mémoire de données. Par conséquent, les périphériques associés à la plupart des microcontrôleurs à architecture Harvard prennent uniquement en charge l'accès aux cartes microSDHC en tant que mémoire de données. Cela limite les options disponibles.
Les solutions existantes lisent la carte microSDHC et chargent la mémoire programme dans la RAM, puis exécutent les opérations depuis la RAM. Non seulement la puce RAM ajoute un coût supplémentaire à la carte, mais l'extension du programme est limitée à la quantité de mémoire RAM disponible sur la carte à circuit imprimé.
Les cartes MicroSDHC permettent d'établir une communication en mode SD ou en mode SPI.
Pour établir une communication entre le microcontrôleur et la carte microSDHC S-450u en tant que mémoire programme, le microcontrôleur sélectionné doit prendre en charge l'un des deux protocoles de bus microSDHC :
- Un périphérique contrôleur en mode SD sur carte SDHC mappé avec la mémoire programme (Figure 2). Il peut s'agir d'un périphérique externe ou d'un périphérique de microcontrôleur interne. L'interface consiste en six signaux : quatre bits de données (DAT[0-3]), une horloge (CLK) et un signal bidirectionnel de commande/réponse (CMD). Les données sont transférées quatre bits à la fois et offrent la vitesse d'exécution la plus rapide. Le contrôleur hôte ou le microcontrôleur fournit l'horloge à la carte microSDHC.
- Une interface SPI configurable avec prise en charge de la méthode eXecute In Place (XIP). Cela permet d'exécuter du code depuis la carte en accédant à la carte microSDHC en mode SPI, pour un transfert rapide des données, mais pas aussi rapide qu'en mode carte SDHC. La mémoire XIP mappe la mémoire de la carte dans l'espace de mémoire programme du microcontrôleur, ce qui rend l'accès à la carte microSDHC transparent pour le micrologiciel hôte.

Figure 2 : L'établissement de communication avec une carte microSDHC en mode SD utilise une interface simple à six signaux pour fournir l'accès le plus rapide à la mémoire. (Source de l'image : DigiKey Electronics)
Une carte microSDHC démarre en mode carte SD. Pour sélectionner le mode SPI à un bit, sur les six premières horloges après le démarrage, le signal DAT3 doit être transmis à VDD, tandis qu'une commande RESET (000000b) est envoyée simultanément à la carte en transmettant CMD vers VSS. Après cette opération, la carte reste en mode SPI jusqu'à son arrêt.
Le microcontrôleur Arm® Cortex®-M4F MAX32652 de Maxim Integrated est un microcontrôleur basse consommation conçu pour les nœuds IoT. Il présente une interface XIP QSPI sur puce qui, s'il est correctement configuré, permet d'exécuter du code à partir d'une carte microSDHC.
Le MAX32652 comporte également une interface SDHC complète principalement pour le stockage de données.
Il est important de noter que ces interfaces avec le microcontrôleur doivent être des interfaces de mémoire programme. Quel que soit le protocole ou l'interface de bus utilisés, le microcontrôleur doit contenir un code de démarrage Flash sur puce pour initialiser l'interface avec la carte microSDHC.
Sécurité par connecteurs
Le connecteur pour une carte microSDHC d'application industrielle est souvent négligé. Pour les applications robustes, l'étain ou d'autres matériaux de contact similaires peuvent ternir ou perdre leur résistance à la traction au fil du temps. Les contacts en or, même s'ils coûtent quelques centimes de plus, fournissent une connexion de contact solide qui conserve sa résistance à la traction dans le temps.
Le connecteur UFS (Universal Flash Storage) et microSDHC 10101704J6#2A d'Amphenol ICC offre une connexion solide pour toute carte compatible microSDHC (Figure 3). Ce connecteur inclut des contacts spéciaux qui évitent que les cartes mémoire restent bloquées lors de l'insertion et du retrait.

Figure 3 : Le connecteur de carte microSDHC et UFS 10101704J6#2A prend en charge les cartes microSDHC existantes et les cartes UFS nouvelle génération avec des vitesses de transfert de données pouvant atteindre 6 Go/s. (Source de l'image : Amphenol)
Ce connecteur Amphenol prend également en charge les futures extensions grâce à sa compatibilité avec le nouveau format UFS (Universal Flash Storage), qui présente un format similaire à celui de microSDHC, mais avec une empreinte de contact différente (Figure 4). La carte UFS prend en charge une vitesse deux fois plus élevée que la carte microSDHC grâce à un transfert de données bidirectionnel différentiel.

Figure 4 : Une carte microSDHC à gauche et la nouvelle carte UFS à droite. La carte UFS prend en charge une vitesse deux fois plus élevée que la carte microSDHC grâce à un transfert de données bidirectionnel différentiel. (Source de l'image : DigiKey Electronics)
Certains nœuds IoT en réseau peuvent se trouver à des emplacements distants où le Wi-Fi est indisponible ou peu pratique. Dans ces situations, la mise en réseau peut être effectuée via une connexion de données cellulaires sans fil. Cela nécessite l'utilisation d'une carte SIM d'abonné, qui doit également être connectée.
Un moyen simple d'économiser de l'espace carte est d'utiliser un connecteur microSDHC et carte SIM combiné, tel que le connecteur double (SIM et microSDHC) 1041681620 de Molex (Figure 5). Ce connecteur inclut également des contacts en or pour une connexion solide dans les environnements difficiles et des contacts antiblocage.

Figure 5 : Le connecteur combiné carte SIM et carte microSDHC 1041681620 réduit considérablement l'espace requis sur la carte et offre des contacts antiblocage pour prévenir les erreurs d'insertion et de retrait. (Source de l'image : Molex)
Conclusion
Même si les cartes Flash microSDHC ont toujours été utilisées pour le stockage de données, elles sont en train de s'améliorer pour prendre en charge les besoins uniques d'exécution de la mémoire programme pour les systèmes d'exploitation embarqués. Une partie de cette évolution inclut le développement de mémoires Flash plus rapides, capables de prendre en charge des demandes de lecture constantes. De plus, les microcontrôleurs évoluent eux aussi pour prendre en charge de nouvelles interfaces de mémoire capables d'exécuter du code de manière fiable à partir d'une carte microSDHC externe, tout en réduisant ou en éliminant les erreurs Flash.
Avertissement : les opinions, convictions et points de vue exprimés par les divers auteurs et/ou participants au forum sur ce site Web ne reflètent pas nécessairement ceux de DigiKey ni les politiques officielles de la société.




