Comment et pourquoi lire les fiches techniques, si les microcontrôleurs sont votre hobby


La microélectronique est un passe-temps à la mode de ces dernières années grâce à l'Arduino magique. Mais le problème est: avec un intérêt certain, DigitalWrite () peut se développer rapidement, mais que faire ensuite n'est pas entièrement clair. Les développeurs d'Arduino ont fait beaucoup d'efforts pour abaisser le seuil d'entrée dans leur écosystème, mais à l'extérieur, il y a encore une forêt sombre de circuits durs, inaccessible à un amateur.


Par exemple, des fiches techniques. Il semble qu'ils ont tout, le prennent et l'utilisent. Mais seuls leurs auteurs ne se sont clairement pas donné pour tâche de vulgariser les microcontrôleurs; parfois, il semble qu'ils abusent intentionnellement de termes et d'abréviations obscurs en décrivant des choses simples afin de confondre autant que possible les non-initiés. Mais tout n'est pas si mal, si on le souhaite, la poitrine s'ouvre.


Dans cet article, je partagerai l'expérience de la communication des sciences humaines avec des fiches techniques à des fins de loisir. Le texte est destiné aux fans de pantalons Arduino qui sont issus de pantalons Arduino et fournit un aperçu du fonctionnement des microcontrôleurs.


Je vais commencer par le traditionnel


LED clignotante sur Arduino


Et immédiatement le code:


void setup() { DDRB |= (1<<5); } void loop() { PINB = (1<<5); for (volatile uint32_t k=0; k<100000; k++); } 

«Qu'est-ce que c'est? - Demandez au lecteur averti. - Pourquoi écrivez-vous quelque chose dans le registre d'entrée PINB? Il est seulement pour lire! " En effet, la documentation Arduino , comme la plupart des articles de formation sur Internet, affirme que ce registre est en lecture seule. Je le pensais moi-même jusqu'à ce que je relise la fiche technique d'Atmega328p, en préparant cet article. Et là:



Il s'agit d'une fonctionnalité relativement nouvelle, elle n'était pas sur Atmega8, tout le monde ne la connaît pas ou ne la mentionne pas pour des raisons de rétrocompatibilité. Mais il est tout à fait approprié pour démontrer l'idée que les fiches techniques valent la peine d'être lues afin d'utiliser toutes les capacités de la puce, y compris celles peu connues. Et ce n'est pas la seule raison.


Sinon, pourquoi lire les fiches techniques


Habituellement, les pilotes Arduino, ayant suffisamment joué avec les LED et AnalogWrite'ami, commencent à connecter toutes sortes de modules et de puces à la carte, pour laquelle il existe déjà des bibliothèques écrites. Tôt ou tard, une bibliothèque apparaît qui ne fonctionne pas comme elle le devrait. Puis l'amateur commence à le ramasser pour le réparer, et là ...


Et il se passe quelque chose de totalement incompréhensible, vous devez donc aller sur Google, lire de nombreux tutoriels, mettre en pièces le code approprié de quelqu'un et enfin trouver votre propre chemin. Cela donne un puissant sentiment d'accomplissement, mais en fait, le processus rappelle l'invention d'un vélo par rétro-ingénierie d'une moto. De plus, la compréhension du fonctionnement de ce vélo n'augmente pas. Je sais, puisque je le fais moi-même depuis un certain temps.


Si, au lieu de cette activité fascinante, j'avais passé quelques jours à étudier la documentation d'Atmega328, j'aurais économisé énormément de temps. Au final, c'est un microcontrôleur assez simple.


Ainsi, il est nécessaire de lire les fiches techniques au moins afin d'imaginer comment le microcontrôleur est généralement agencé et ce qu'il peut faire. Et aussi:


  • pour vérifier et optimiser les bibliothèques d'autres personnes. Ils sont souvent écrits par les mêmes amoureux qui ont inventé le vélo; ou, au contraire, les auteurs leur font intentionnellement une protection excessive contre le fou. Que ce soit trois fois plus grand et plus lent, mais cela fonctionnera certainement;
  • pouvoir utiliser des puces dans le projet que personne n'a écrit la bibliothèque;
  • pour faciliter la tâche de migration d'une ligne MK à une autre;
  • pour enfin optimiser leur ancien code, qui ne cadrait pas avec Arduin;
  • pour apprendre à gérer n'importe quelle puce directement via ses registres, sans prendre la peine d'étudier le périphérique de ses bibliothèques, le cas échéant.

Pourquoi écrire directement dans les registres quand il y a HAL et LL?


Vocabulaire
HAL, Hardware Abstraction Layer - une bibliothèque pour contrôler un microcontrôleur avec un haut niveau d'abstraction. Si vous devez utiliser l'interface SPI1, nous configurons et activons simplement SPI1 sans nous soucier des registres responsables de quoi.
LL, Low Level API - une bibliothèque contenant des macros ou des structures avec des adresses de registre qui vous permet d'y accéder par leur nom. DDRx, PORTx, PINx sur Atmega est LL.


Des litiges sur un sujet "HAL, LL ou registres" surviennent régulièrement dans les commentaires sur Habré. Sans prétendre avoir accès à la connaissance astrale, je partagerai simplement mon expérience amateur et mes pensées.


Plus ou moins tri avec Atmega et après avoir lu des articles sur la magnifique STM32, j'ai acheté une demi-douzaine de planches différentes - et Discovery, et «Blue Tablets», et même juste des chips pour mes produits maison. Tous saupoudrés dans une boîte pendant deux ans. Parfois, je me disais: "Je maîtrise la STM ce week-end", a lancé CubeMX, a généré une configuration pour SPI, a examiné le mur de texte résultant, richement parfumé avec les droits d'auteur STM, et a décidé que c'était en quelque sorte trop.



Pour comprendre ce que CubeMX a écrit ici, bien sûr, vous pouvez. Mais en même temps, il est irréaliste de se souvenir de toutes les formulations, afin que plus tard vous puissiez les écrire avec vos mains. Et debid, si j'oublie accidentellement de mettre une tique à Cuba, - salut.


Deux ans se sont écoulés, j'ai encore léché toutes sortes de puces savoureuses, mais inaccessibles à ma compréhension, dans le ST MCU Finder , et suis tombé accidentellement sur un article merveilleux , bien que sur STM8. Et soudain, j'ai réalisé que pendant tout ce temps, je frappais à la porte ouverte: les registres pour STM sont disposés de la même manière que pour tout autre MK, et le Cube est facultatif pour travailler avec eux. Et c'était donc possible? ..


HAL et spécifiquement STM32CubeMX est un outil pour les ingénieurs professionnels travaillant en étroite collaboration avec les puces STM32. La principale caractéristique est un haut niveau d'abstraction, la possibilité de migrer rapidement d'un MK à un autre et même d'un cœur à l'autre, tout en restant dans la ligne STM32. Les amateurs rencontrent rarement de telles tâches - notre choix de MK est généralement limité à la gamme d'AliExpress, et nous migrons souvent entre des puces radicalement différentes - nous passons d'Atmega à STM, de STM à ESP, enfin, ou quoi de neuf pour nos amis chinois. HAL n'aidera pas ici, et son étude prendra beaucoup de temps.


Il reste LL - mais de celui-ci aux registres demi-pas. Personnellement, je trouve utile d'écrire mes macros avec des adresses de registre: j'étudie la fiche technique plus attentivement, je pense que j'en aurai besoin à l'avenir, et ce qui ne l'est certainement pas, je structure mieux mes programmes, et en général surmonter les aides à retenir.


De plus, il y a une nuance avec le populaire STM32F103 - pour cela, il existe deux versions incompatibles de LL, une officielle de STM, la seconde de Leaf Labs utilisée dans le projet STM32duino. Si vous écrivez une bibliothèque open-source (et j'avais juste une telle tâche ), vous devez soit faire deux versions, soit accéder directement aux registres.


Enfin, le rejet de LL, à mon avis, simplifie la migration, surtout si vous vous y reposez dès le début des travaux sur le projet. Exemple exagéré: écrivez le clignotement d'Arduin dans Atmel Studio sans LL:


 #include <stdint.h> #define _REG(addr) (*(volatile uint8_t*)(addr)) #define DDR_B 0x24 #define OUT_B 0x25 int main(void) { volatile uint32_t k; _REG(DDR_B) |= (1<<5); while(1) { _REG(OUT_B) |= (1<<5); for (k=0; k<50000; k++); _REG(OUT_B) &= ~(1<<5); for (k=0; k<50000; k++); } } 

Pour que ce code clignote une LED sur un foulard chinois avec STM8 (depuis ST Visual Desktop), il suffit de changer deux adresses:


 #define DDR_B 0x5007 #define OUT_B 0x5005 

Oui, j'utilise la fonction de connexion de la LED sur une carte spécifique, elle clignotera très lentement, mais elle le fera!


Que sont les fiches techniques


Dans les articles et les forums, en russe et en anglais, les «fiches techniques» désignent toute documentation technique pour les puces, je fais de même dans ce texte. Formellement, ils ne sont qu'un type de cette documentation:


Fiche technique - TTX, tactiquement spécifications techniques. Assurez-vous d'avoir un composant électronique. Les informations de référence sont utiles à garder à portée de main, mais il n'y a surtout rien à y lire attentivement. Cependant, les puces plus simples sont souvent limitées aux fiches techniques, afin de ne pas produire de documents inutiles; dans ce cas, le manuel de référence est inclus ici.


Manuel de référence - le manuel réel, un livre sain avec plus de 1000 pages. Le travail de tout ce qui est poussé dans la puce est peint en détail. Le document principal pour le développement du microcontrôleur. Contrairement à la fiche technique , les instructions sont écrites pour une large gamme de MK, elles contiennent beaucoup d'informations sur la périphérie qui ne sont pas disponibles dans votre modèle spécifique.


Manuel de programmation ou manuel d' instructions - instructions pour les commandes uniques du microcontrôleur. Conçu pour ceux qui programment en Assembleur. Les auteurs des compilateurs l'utilisent activement pour optimiser le code, donc en général nous n'en aurons pas besoin. Mais jeter un œil ici est utile pour une compréhension générale, derrière certaines commandes spécifiques telles que la sortie de l'interruption, ainsi que pour l'utilisation active du débogueur.


Note d'application - Conseils utiles pour résoudre des problèmes spécifiques, souvent avec des exemples de code.


Feuille d'errata - une description des cas de comportement de puce non standard avec des options de contournement, le cas échéant.


Contenu des fiches techniques


Directement dans la fiche technique, nous pouvons avoir besoin des sections suivantes:


Résumé de l'appareil - La première page de la fiche technique parle brièvement de l'appareil. Il est très utile dans les situations où vous avez trouvé quelque part une puce (vu dans un magasin, vypayali, rencontré une mention) et que vous voulez comprendre de quoi il s'agit.


Description générale - une description plus détaillée des capacités des puces de la ligne.


Brochage - schémas de brochage pour tous les cas de puces possibles (dont la jambe a une broche).


Description de la broche - Une description de l'objectif et des capacités de chaque broche.


Carte mémoire - nous n'avons guère besoin d'une carte d'adresses en mémoire, mais parfois elle inclut également une table d'adresses de blocs de registres.


Register Map - le tableau des adresses des blocs de registres, en règle générale, se trouve dans la fiche technique et dans le manuel de référence - uniquement les décalages d'adresses .


Caractéristiques électriques - dans cette section, nous nous intéressons principalement aux valeurs maximales absolues , répertoriant la charge maximale sur la puce. Contrairement à l'Atmega328p, qui ne peut pas être tué, la plupart des MK ne vous permettent pas de connecter de lourdes charges aux broches, ce qui devient une mauvaise surprise pour les joueurs Arduino.


Informations sur le boîtier - Dessins de boîtiers abordables utiles pour la conception de vos circuits imprimés.


Le manuel de référence est structurellement composé de sections sur la périphérie spécifique indiquée dans leur titre. Chaque chapitre peut être divisé en trois parties:


Aperçu , introduction , fonctionnalités - un aperçu des capacités de la périphérie;


Description fonctionnelle , Guide d'utilisation ou tout simplement le bloc de section principal - une description textuelle détaillée des principes du périphérique et comment l'utiliser;


Registres - description des registres de contrôle. Dans des cas simples comme GPIO ou SPI, cela peut être suffisant pour commencer à utiliser des périphériques, mais souvent vous devez toujours lire les parties précédentes.


Comment lire les fiches techniques


Les datashites d'habitude effrayent par leur volume et une abondance de mots incompréhensibles. En fait, tout n'est pas si effrayant si vous connaissez quelques astuces de vie.


Installez un bon lecteur PDF . Les datashits sont écrits dans la glorieuse tradition des instructions sur papier, c'est génial de les imprimer, de les poser avec des signets en plastique et de les coudre. L'hypertexte en eux est observé en traces. Heureusement, au moins la structure du document est mise en signet, donc un bon lecteur avec une navigation pratique est très nécessaire.


Datashit n'est pas le manuel de Straustrup, vous n'avez pas à tout lire . Si vous avez utilisé le conseil précédent, il vous suffit de trouver la section dans la barre des signets.


Les fiches techniques, en particulier les manuels de référence , peuvent ne pas décrire les capacités d'une puce particulière, mais la ligne entière . Cela signifie que la moitié, voire les deux tiers des informations ne sont pas liées à votre puce. Avant d'étudier les registres TIM7, vérifiez dans la description générale si vous en avez un.


Il suffit de connaître l' anglais au niveau de base . Les datashits sont composés pour moitié de termes inconnus du locuteur natif moyen, et pour moitié composés de structures de connexion simples. Il y a encore de belles fiches techniques chinoises en anglais chinois, où la moitié sont également des termes, et la seconde moitié est un ensemble aléatoire de mots.


Si vous rencontrez un mot inconnu , n'essayez pas de le traduire à l'aide du dictionnaire anglais-russe. Si l'hystérésis vous déroute , la traduction de «l'hystérésis» ne vous réchauffera pas. Utilisez Google, Stack Overflow, Wikipedia, forums, où le concept nécessaire sera expliqué en mots simples avec des exemples .


La meilleure façon de comprendre ce que vous lisez est de vérifier en action . Par conséquent, gardez le tableau de débogage que vous connaissez bien, et de préférence deux, au cas où vous auriez quand même mal compris quelque chose et vu une fumée magique.


C'est une bonne habitude de garder une fiche technique à portée de main lorsque vous lisez le didacticiel de quelqu'un ou étudiez la bibliothèque de quelqu'un d'autre. C'est possible, vous y trouverez une solution plus optimale à votre problème. Et vice versa - si vous ne pouvez pas comprendre à partir de la fiche technique comment fonctionne le registre, recherchez-le sur Google: très probablement, quelqu'un a déjà tout décrit en termes simples ou laissé un code compréhensible sur le github.


Vocabulaire


Quelques mots et notations utiles qui vous aident à vous habituer plus rapidement aux fiches techniques. Ce qui a été retenu au cours des deux derniers jours, les ajouts et les corrections sont les bienvenus.


Électricité
Vcc , Vdd - Plus, Puissance
Vss , Vee - "moins", sol
actuel - actuel
tension - tension
faire couler le courant - travailler "au sol" pour une charge externe
pour alimenter le courant - alimenter la charge externe
broche haute source / puits - broche avec une tolérance de charge accrue


IO
H, haut - sur la broche Vcc
L, Low - sur la broche Vss
Haute impédance , Hi-Z , flottant - il n'y a rien sur la broche, "haute résistance", elle est en fait invisible pour le monde extérieur.
faible pull up , faible pull down - résistance intégrée pull-up / pull-down , un analogue approximatif de 50 kOhm (voir fiche technique). Il est utilisé, par exemple, pour empêcher la broche d'entrée de pendre dans l'air, provoquant des faux positifs. Faible - car il est facile de le "tuer".
mode de sortie push pull - pin, dans lequel il bascule entre haut et bas - SORTIE normale avec Arduino.
drain ouvert - désignation du mode de sortie, dans lequel la broche peut être à basse ou haute impédance / flottante . De plus, presque toujours ce n'est pas un «vrai» drain ouvert, il y a des diodes de protection, des résistances, etc. Il s'agit simplement d'une désignation du mode sol / rien.
vrai drain ouvert - mais c'est déjà un vrai drain ouvert: la broche mène directement au sol si elle est ouverte, ou est dans les limbes si elle est fermée. Cela signifie que, si nécessaire, une tension supérieure à Vcc peut y être autorisée, mais le maximum est toujours spécifié dans la fiche technique dans la section Valeurs nominales / tension maximales absolues .


Interfaces
en série - connecté en série
to chain - collectez les puces dans une chaîne par une connexion série, augmentant le nombre de sorties.
shift - shift, désigne généralement un décalage de bits. En conséquence, pour entrer et sortir - recevoir et transmettre des données bit par bit.
loquet - une valve qui recouvre le tampon tandis que les bits y sont décalés. Lorsque le transfert est terminé, la vanne s'ouvre, les bits commencent à fonctionner.
pour synchroniser - effectuez un transfert au niveau du bit, déplacez tous les bits aux endroits souhaités.
double tampon , registre fantôme, registre de précharge - désignations de l'historique lorsque le registre devrait pouvoir accepter de nouvelles données, mais les conserver jusqu'à un certain point. Par exemple, pour que le PWM fonctionne correctement, ses paramètres (rapport cyclique, fréquence) ne doivent pas changer avant la fin du cycle actuel, mais de nouveaux paramètres peuvent déjà être transférés. En conséquence, les actuels sont conservés dans le registre fantôme , et les nouveaux tombent dans le registre de précharge , étant enregistrés dans le registre à puce correspondant.


Chaque
prescaler - diviseur de fréquence
mettre un bit - mettre le bit à 1
pour effacer / réinitialiser un bit - remettre le bit à 0 ( reset - puce de fiche technique STM)
pour basculer un bit - changez la valeur du bit à l'opposé (voir l'exemple au début de l'article)


Et ensuite


En général, une partie pratique était prévue ici avec une démonstration de trois projets sur STM32 et STM8, réalisés spécifiquement pour cet article à l'aide de fiches techniques, avec ampoules, SPI, minuteries, PWM et interruptions:



Mais le texte est trop, donc les projets sont envoyés dans la deuxième partie.


La capacité de lire des fiches techniques vous aidera dans votre passe-temps, mais il est peu probable qu'elle remplace la communication en direct avec d'autres passionnés dans les forums et les forums de discussion. Pour lui, il s'agit néanmoins avant tout de resserrer la langue anglaise. C'est pourquoi j'ai fini de le lire - un prix spécial: deux leçons gratuites de Skyeng lors du premier paiement en utilisant le code HABR2 .

Source: https://habr.com/ru/post/fr449624/


All Articles