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

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

La microélectronique est un hobby à la mode ces dernières années grâce à la magie Arduino. Mais voici le problème : avec suffisamment d’intérêt, vous pouvez rapidement dépasser DigitalWrite(), mais la marche à suivre n’est pas tout à fait claire. Les développeurs d'Arduino ont déployé beaucoup d'efforts pour abaisser la barrière à l'entrée dans leur écosystème, mais à l'extérieur, il existe encore une sombre forêt de circuits difficiles d'accès, inaccessibles à l'amateur.

Par exemple, des fiches techniques. On dirait qu'ils ont tout, le prennent et l'utilisent. Mais leurs auteurs ne se donnent clairement pas pour mission de vulgariser les microcontrôleurs ; Parfois il semblequ'ils abusent délibérément de termes et d'abréviations incompréhensibles pour décrire des choses simples afin de confondre le plus possible les non-initiés. Mais tout n'est pas si mauvais : si on le souhaite, le cercueil s'ouvre.

Dans cet article, je partagerai l'expérience d'un spécialiste des sciences humaines communiquant avec des fiches techniques à des fins de loisirs. Le texte est destiné aux amateurs issus des pantalons Arduino, il suppose une certaine compréhension des principes de fonctionnement des microcontrôleurs.

Je vais commencer par le traditionnel

Faire clignoter une LED sur Arduino

Et aussitôt 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? – Un lecteur averti demandera. – Pourquoi écrivez-vous quelque chose dans le registre d’entrée PINB ? C'est uniquement pour la lecture ! » Vraiment, Documentation Arduino, comme la plupart des articles pédagogiques sur Internet, précise que ce registre est en lecture seule. Je le pensais moi-même jusqu'à ce que je le relise Fiche technique à Atmega328p, en préparant cet article. Et là:

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

Il s'agit d'une fonctionnalité relativement nouvelle, elle n'était pas présente sur Atmega8, tout le monde ne la connaît pas ou n'est pas mentionnée 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 les plus méconnues. Et ce n’est pas la seule raison.

Sinon, pourquoi lire les fiches techniques ?

Habituellement, les ingénieurs Arduino, après avoir suffisamment joué avec les LED et les AnalogWrites, commencent à connecter toutes sortes de modules et de puces à la carte, pour lesquelles 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 à s'en prendre à lui pour le réparer, et puis...

Et quelque chose de complètement incompréhensible se produit là-bas, vous devez donc aller sur Google, lire de nombreux tutoriels, extraire des parties du code approprié de quelqu'un et enfin atteindre votre objectif. Cela donne un puissant sentiment d’accomplissement, mais en réalité, le processus revient à réinventer la roue en procédant à l’ingénierie inverse d’une moto. De plus, la compréhension du fonctionnement de ce vélo n'augmente pas. Je le sais, parce que je l'ai fait moi-même pendant assez longtemps.

Si au lieu de cette activité passionnante j'avais passé quelques jours à étudier la documentation de l'Atmega328, j'aurais gagné énormément de temps. Après tout, il s'agit d'un microcontrôleur assez simple.

Ainsi, vous devez au moins lire les fiches techniques pour imaginer comment fonctionne généralement le microcontrôleur et ce qu'il peut faire. Et plus loin:

  • pour vérifier et optimiser les bibliothèques d'autres personnes. Ils sont souvent écrits par les mêmes amateurs qui réinventent la roue ; ou au contraire, les auteurs les rendent volontairement excessivement infaillibles. Laissez-le être trois fois plus grand et plus lent, mais cela fonctionnera certainement ;

  • pouvoir utiliser des puces dans un projet pour lequel personne n'a écrit de bibliothèque ;

  • pour vous faciliter la migration d'une ligne MK à une autre ;

  • pour enfin optimiser votre ancien code, qui ne rentrait pas dans Arduino ;

  • pour apprendre à contrôler n'importe quelle puce directement via ses registres, sans se soucier d'étudier la structure de ses bibliothèques, le cas échéant.

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

Glossaire
HAL, couche d'abstraction élevée – une bibliothèque pour contrôler un microcontrôleur avec un haut niveau d'abstraction. Si vous devez utiliser l'interface SPI1, il vous suffit de configurer et d'activer SPI1 sans penser à quels registres sont responsables de quoi.
LL, API bas niveau – une bibliothèque contenant des macros ou des structures avec des adresses de registre, permettant d'y accéder par leur nom. DDRx, PORTx, PINx sur Atmega sont LL.

Des controverses sur le thème « HAL, LL ou registres » surviennent régulièrement dans les commentaires sur Habré. Sans prétendre accéder à la connaissance astrale, je partagerai simplement mon expérience et mes réflexions d'amateur.

Ayant plus ou moins compris Atmega et lu des articles sur les merveilles du STM32, j'ai acheté une demi-douzaine de cartes différentes - Discovery et Blue Pills, et même juste des chips pour mes produits faits maison. Ils ont tous ramassé la poussière dans une boîte pendant deux ans. Parfois je me disais : « ça y est, à partir de ce week-end je maîtrise STM », j'ai lancé CubeMX, généré une configuration pour SPI, regardé le mur de texte résultant, généreusement agrémenté de droits d'auteur STM, et j'ai décidé que c'était en quelque sorte aussi beaucoup.

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

Bien sûr, vous pouvez découvrir ce que CubeMX a écrit ici. Mais en même temps, il est clair qu’il n’est pas réaliste de se souvenir de tous les mots puis de les écrire à la main. Et pour déboguer cela, si j’oublie accidentellement de cocher une case dans le Cube, c’est tout à fait correct.

Deux ans ont passé, je me lèche encore les lèvres Recherche de MCU ST pour toutes sortes de savoureux, mais au-delà de ma compréhension, des chips, et je suis tombé par hasard sur merveilleux article, mais à propos de STM8. ET brusquement J'ai réalisé que pendant tout ce temps j'avais frappé à une porte ouverte : les registres de la STM sont disposés de la même manière que ceux de n'importe quel autre MK, et le Cube n'est pas nécessaire pour travailler avec eux. Était-ce même possible ?..

HAL et plus particulièrement STM32CubeMX est un outil destiné aux ingénieurs professionnels qui travaillent en étroite collaboration avec les puces STM32. La principale caractéristique est un haut niveau d'abstraction, la possibilité de migrer rapidement d'un MCU à un autre et même d'un cœur à un autre, tout en restant dans la lignée STM32. Les amateurs rencontrent rarement de tels problèmes - notre choix de microcontrôleurs, en règle générale, est limité à l'assortiment AliExpress, et nous migrons souvent entre des puces radicalement différentes - nous passons d'Atmega à STM, de STM à ESP, ou quelle que soit la nouveauté de nos amis chinois lancez-nous. HAL n'aidera pas ici, et son étude prendra beaucoup de temps.

LL reste - mais de là aux registres, il y a un demi-pas. Personnellement, je trouve utile d'écrire mes macros avec des adresses de registre : j'étudie plus attentivement la fiche technique, je réfléchis à ce dont j'aurai besoin dans le futur et à ce dont je n'aurai certainement pas besoin, je structure mieux mes programmes, et en général, surmonter aide à mémoriser .

De plus, il y a une nuance avec le populaire STM32F103 - il existe deux versions LL incompatibles, l'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 exactement une telle tâche), vous devez soit faire deux versions, soit accéder directement aux registres.

Enfin, supprimer LL simplifie, à mon avis, la migration, surtout si vous l'envisagez dès le début du projet. Exemple exagéré : écrivons Arduino Blink 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 fasse clignoter la LED sur une carte chinoise avec STM8 (depuis ST Visual Desktop), il suffit d'y changer deux adresses :

#define DDR_B 0x5007
#define OUT_B 0x5005

Oui, j'utilise une fonctionnalité de connexion de la LED sur une carte spécifique, elle clignotera très lentement, mais cela arrivera !

Quels types de fiches techniques existe-t-il ?

Dans les articles et sur les forums, en russe et en anglais, « fiches techniques » désigne toute documentation technique sur les puces, et je fais de même dans ce texte. Formellement, il ne s'agit que d'un type de documentation de ce type :

Fiche technique – Caractéristiques de performance, caractéristiques tactiques et techniques. Obligatoire pour tout composant électronique. Il est utile de conserver des informations générales à portée de main, mais il n’y a pas grand-chose à lire de manière réfléchie. Cependant, les puces plus simples se limitent souvent à une fiche technique afin de ne pas produire de documents inutiles ; dans ce cas Manuel de référence est inclus ici.

Manuel de référence – les instructions elles-mêmes, un livre sain de plus de 1000 pages. Le travail de tout ce qui est entassé dans la puce est décrit en détail. Le document principal pour maîtriser le microcontrôleur. Contrairement à Fiche technique, les instructions sont écrites pour une large gamme de MK ; elles contiennent de nombreuses informations sur les périphériques qui ne sont pas disponibles dans votre modèle spécifique.

Manuel de programmation ou Manuel du jeu d'instructions – des instructions pour les commandes uniques du microcontrôleur. Conçu pour ceux qui programment en langage Assembly. Les auteurs de compilateurs l'utilisent activement pour optimiser le code, donc dans le cas général, nous n'en aurons pas besoin. Mais regarder ici est utile pour une compréhension générale, pour certaines commandes spécifiques telles que la sortie d'une interruption, ainsi que pour utiliser activement le débogueur.

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

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

Ce qu'il y a dans les fiches techniques

Directement dans Fiche technique nous pouvons avoir besoin des sections suivantes :

Résumé de l'appareil – la première page de la fiche technique décrit brièvement l'appareil. Très utile dans les situations où vous avez trouvé une puce quelque part (l'avez vue dans un magasin, soudée, tombée sur une mention) et que vous souhaitez comprendre de quoi il s'agit.

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

Brochage – des schémas de brochage pour tous les packages de puces possibles (quelle broche se trouve sur quelle patte).

Description de la broche – description du but et des capacités de chaque broche.

Carte Mémoire – il est peu probable que nous ayons besoin d’une carte d’adresses en mémoire, mais elle inclut parfois également une table d’adresses de blocs de registre.

Enregistrer la carte – le tableau des adresses des blocs de registres se trouve généralement dans la fiche technique et dans Manuel de référence – uniquement les quarts de travail (décalages d'adresse).

Caractéristiques électriques – dans cette section nous nous intéressons principalement à notes maximales absolues, répertoriant les charges maximales par puce. Contrairement à l'Atmega328p indestructible, la plupart des MK ne permettent pas de connecter des charges importantes aux broches, ce qui devient une mauvaise surprise pour les Arduinonistes.

Informations sur le forfait – des dessins des cas disponibles, utiles lors de la conception de vos planches.

Manuel de référence se compose structurellement de sections consacrées à des périphériques spécifiques indiqués dans leur titre. Chaque chapitre peut être divisé en trois parties :

Vue d’ensemble, Introduction, Fonctionnalités: – aperçu des capacités périphériques;

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

Enregistre – description des registres de contrôle. Dans des cas simples comme GPIO ou SPI, cela peut suffire largement pour commencer à utiliser les périphériques, mais il faut souvent quand même lire les parties précédentes.

Comment lire les fiches techniques

Les fiches techniques, par habitude, vous effraient par leur volume et leur abondance de mots incompréhensibles. En fait, tout n'est pas si effrayant si vous connaissez quelques astuces.

Fixer bon lecteur PDF. Les fiches techniques sont rédigées dans la glorieuse tradition des instructions papier ; elles sont idéales à imprimer, à insérer avec des signets en plastique et à coudre. L'hypertexte qu'ils contiennent est observé à l'état de traces. Heureusement, au moins la structure du document est conçue avec des signets, donc un lecteur approprié avec une navigation facile est très nécessaire.

La fiche technique n'est pas le manuel de Stroustrup ; elle contient pas besoin de tout lire. Si vous avez utilisé les conseils précédents, recherchez simplement la section souhaitée dans la barre de favoris.

Les fiches techniques, notamment Manuels de référence, peut décrire les capacités non pas d'une puce spécifique, mais toute la ligne. Cela signifie que la moitié, voire les deux tiers des informations ne sont pas liées à votre puce. Avant d'étudier les registres TIM7, enregistrez-vous Description générale, l'avez vous?

Savoir Anglais assez pour niveau de base. Les fiches techniques sont constituées pour moitié de termes peu familiers au locuteur natif moyen et pour moitié de structures de connexion simples. Il existe également d'excellentes fiches techniques en chinois en anglais chinois, dont la moitié sont également des termes et la seconde moitié est un ensemble aléatoire de mots.

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

La meilleure façon de comprendre ce que vous lisez est vérifier en action. Par conséquent, gardez à portée de main la carte de débogage avec laquelle vous vous familiarisez, ou mieux encore deux, au cas où vous auriez encore mal compris quelque chose et verriez une fumée magique.

C'est une bonne habitude de garder votre fiche technique à portée de main lorsque vous lire le tutoriel de quelqu'un ou étudier la bibliothèque de quelqu'un d'autre. Il est fort possible que vous y trouviez une solution plus optimale à votre problème. Et vice versa - si vous ne comprenez pas à partir de la fiche technique comment fonctionne réellement le registre, recherchez-le sur Google : très probablement, quelqu'un a déjà tout décrit avec des mots simples ou a laissé du code clair sur GitHub.

Glossaire

Quelques mots et symboles utiles pour vous habituer rapidement aux fiches techniques. Ce dont je me suis souvenu ces derniers jours, les ajouts et corrections sont les bienvenus.

Électricité
Vcc, Vrai – « plus », nourriture
Vss, Vee – « moins », terre
actuel - actuel
Tension - tension
absorber le courant – fonctionne comme « sol » pour une charge externe
pour générer du courant – alimentation charge externe
broche haute source/puits – goupille avec « tolérance » accrue à la charge

IO
H, Élevé – sur la broche Vcc
L, Faible – sur la broche Vss
Haute impédance, Salut-Z, flottant – il n’y a rien sur le pin, « haute résistance », il est quasiment invisible du monde extérieur.
faible traction, faible tirage vers le bas – résistance pull-up/pull-down intégrée, équivalente environ à 50 kOhm (voir fiche technique). Il est utilisé, par exemple, pour empêcher la broche d'entrée de pendre en l'air, provoquant de fausses alarmes. Faible - parce qu'il est facile de « l'interrompre ».
pousser tirer – mode de sortie de broche, dans lequel il bascule entre Haute и Faible – SORTIE régulière d'Arduino.
vidange à ciel ouvert – désignation du mode de sortie dans lequel la broche peut être soit FaibleOu Haute impédance/flottant. De plus, il ne s'agit presque toujours pas d'un « vrai » drain ouvert : il y a des diodes de protection, des résistances, etc. Il s'agit simplement d'une désignation pour le mode terre/aucun.
vrai drain ouvert - mais il s'agit là d'un véritable drain à ciel ouvert : le pion débouche directement au sol s'il est ouvert, ou reste dans les limbes s'il est fermé. Cela signifie que, si nécessaire, une tension supérieure à Vcc peut y passer, 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
enchaîner – assembler les puces en chaîne à l’aide d’une connexion série, augmentant ainsi le nombre de sorties.
décalage – décalage, désigne généralement un petit décalage. Respectivement, se déplacer и se déplacer – recevoir et transmettre des données bit par bit.
loquet – un verrou qui couvre le tampon pendant que les bits y sont déplacés. Une fois le transfert terminé, la vanne s'ouvre et les embouts commencent à fonctionner.
pointer – effectuer un transfert bit par bit, décaler tous les bits aux bons endroits.
double tampon, registre fantôme, registre de préchargement – les désignations historiques, lorsque le registre doit pouvoir accepter de nouvelles données, mais les conserver jusqu'à un certain point. Par exemple, pour que PWM fonctionne correctement, ses paramètres (cycle de service, fréquence) ne doivent pas changer jusqu'à la fin du cycle en cours, mais de nouveaux paramètres peuvent déjà être transférés. En conséquence, ceux actuels sont maintenus à registre fantôme, et de nouveaux tombent dans registre de préchargement, étant écrit dans le registre de puce correspondant.

Toutes sortes de choses
prédiviseur – pré-échelonneur de fréquence
pour régler un peu – mettre le bit à 1
pour effacer/réinitialiser un peu – remettre le bit à 0 (réinitialiser – Fonctionnalité de fiche technique STM)

Quelle est la prochaine

De manière générale, 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 datasheets, avec ampoules, SPI, timers, PWM et interruptions :

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

Mais il y a beaucoup de texte, donc les projets sont envoyés en 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 amateurs sur les forums et les chats. Pour cela, vous devez avant tout améliorer votre anglais. Par conséquent, ceux qui auront fini de lire recevront un prix spécial : deux cours gratuits à Skyeng avec le premier paiement utilisant le code HABR2.

Source: habr.com

Ajouter un commentaire