Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial Internet of Things >> Technologie de l'Internet des objets

Maîtriser le sous-système de contrôle des broches pour pilotes de périphériques Linux

Maîtriser le sous-système de contrôle des broches pour pilotes de périphériques Linux Note de l'éditeur : Linux embarqué devient l'épine dorsale de l'Internet des objets, et les pilotes de périphériques sont le pont entre applications et matériel. Dans « Linux Device Drivers Development », l'auteur John Madieu offre un guide détaillé, riche en code, pour construire ces pilotes.

Cet extrait — Chapitre 14 du livre — plonge dans le contrôle des broches et GPIOs, une zone critique pour développeurs qui doivent interfacer du matériel personnalisé avec le noyau. Le premier volet introduit le sous-système de contrôle des broches.

Adapté de Linux Device Drivers Development, par John Madieu.


Chapitre 14. Sous-système Pin Control et GPIO
Par John Madieu

Dans Linux embarqué, les pilotes interagissent presque toujours avec des GPIOs ou configurent le multiplexage de broches. Une « broche » est la ligne de sortie physique d'un composant, et de nombreux SoC réutilisent la même broche pour plusieurs fonctions. Par exemple, la broche MX6QDL_PAD_SD3_DAT1 de l'i.MX6QDL peut servir de ligne de données SD, ligne UART RTS/CTS, ligne FlexCAN Rx, ou GPIO générique.

Le processus de sélection de la fonction d'une broche s'appelle pin muxing, et le composant noyau qui l'orchestre est le contrôleur de broches. Dans la seconde partie de ce chapitre, nous explorerons le sous-système General Purpose Input/Output (GPIO), une fonction de broche courante.

Dans ce chapitre, vous allez :

Sous-système de contrôle des broches

Le sous-système pinctrl gère le multiplexage et la configuration des broches. Les appareils qui nécessitent un arrangement de broches spécifique doivent décrire cet arrangement dans l'Arbre de Périphériques. Le pilote du contrôleur de broches analyse ces descriptions et programme le contrôleur I/O du SoC en conséquence.

Le sous-système offre :

Notez que ce livre se concentre sur l'utilisation de l'API du contrôleur de broches ; il ne couvre pas l'écriture d'un pilote de contrôleur de broches lui-même.

Pinctrl et l'Arbre de Périphériques

Dans l'Arbre de Périphériques, un nœud contrôleur de broches décrit tous les groupes de broches et fonctions disponibles. Chaque groupe se voit assigner un ID entier, optionnellement accompagné d'un pinctrl-name qui mappe des noms lisibles par l'humain aux IDs.

La liaison d'un appareil spécifie les états de broches qu'il requiert. Deux propriétés lient un appareil aux états de broches :

Ci-dessous un extrait typique d'Arbre de Périphériques montrant la configuration de broches pour deux appareils :

Maîtriser le sous-système de contrôle des broches pour pilotes de périphériques Linux

Chaque ligne suit le format <PIN_FUNCTION> <PIN_SETTING> :

MX6QDL_PAD_DISP0_DAT15__GPIO5_IO09 0x80000000
MX6QDL_PAD_EIM_D25__UART3_RX_DATA 0x1b0b1

Le premier token (MX6QDL_PAD_DISP0_DAT15__GPIO5_IO09) identifie la fonction de broche ; le second token (0x80000000) encode les bits de configuration (pull-up/down, force de drive, etc.). Ces macros sont définies dans des fichiers d'en-tête spécifiques à l'architecture comme arch/arm/boot/dts/imx6q-pinfunc.h.

Pour programmer un état de broche dans le code du pilote, suivez ces étapes pendant l'initialisation (typiquement dans probe()) :

struct pinctrl *pinctrl;
pinctrl = devm_pinctrl_get_select_default(&pdev->dev);
if (IS_ERR(pinctrl))
    dev_warn(&pdev->dev, "pins are not configured from the driver");

L'assistant pinctrl_get_select_default() récupère et applique automatiquement l'état default. Si un appareil fournit un état init, le noyau l'appliquera avant probe() puis reviendra à default après, sauf si le pilote le change.

Quand terminé, libérez le contrôleur avec pinctrl_put(pinctrl) ou utilisez la variante gérée par ressource devm_pinctrl_put(pinctrl).

Voici un exemple concret du fichier am335x-evm.dts :

dcan1: d_can@481d0000 {
    status = "okay";
    pinctrl-names = "default";
    pinctrl-0 = <&d_can1_pins>;
};

Dans le pilote correspondant :

pinctrl = devm_pinctrl_get_select_default(&pdev->dev);
if (IS_ERR(pinctrl))
    dev_warn(&pdev->dev, "pins are not configured from the driver");

Au moment où le probe() du pilote s'exécute, la configuration de broches default est déjà en place.

Le prochain volet couvrira le sous-système GPIO en détail.

Reproduit avec permission de Packt Publishing. Copyright © 2017 Packt Publishing


John Madieu est un ingénieur Linux embarqué et noyau basé à Paris. Il développe des pilotes et BSPs pour clients en automatisation, transport, santé, énergie, et défense. John travaille chez EXPEMB, pionnier en design computer-on-module, et est un défenseur open-source actif qui croit que le partage de connaissances accélère l'innovation.


Technologie de l'Internet des objets

  1. De l'ivoire à la bakélite : retraçant l'évolution des plastiques modernes
  2. Perspectives futures : faire progresser l'IIoT industriel pour l'excellence de production
  3. Qui commande la voiture connectée ? Regard depuis la perspective du conducteur
  4. 6 étapes éprouvées pour sécuriser les systèmes embarqués IoT
  5. Adoption SaaS en forte hausse dans le développement produit : obstacles clés et opportunités – Partie 2
  6. L'adoption du SaaS atteint un point de bascule dans le développement produit — insights de PTC
  7. Comment choisir le partenaire de développement IoT idéal : défis clés et solutions
  8. PCs Industriels : La pierre angulaire du contrôle complexe dans la révolution IIoT
  9. Facteurs clés pour un développement IoT d'entreprise réussi : insights d'experts Nokia