General Purpose Input/Output

Les ports GPIO (anglais : General Purpose Input/Output, littéralement Entrée-sortie à usage général) sont des ports d'entrées-sorties très utilisés dans le monde des microcontrôleurs, en particulier dans le domaine de l'électronique embarquée, qui ont fait leur apparition au début des années 1980[1]. Elles sont placées sur un circuit électronique afin de communiquer avec des composants électroniques et circuits externes. Il peut s'agir de détecteurs ou senseurs pour capter des données, ou encore de contrôler des commandes.

Test de contrôle d'une hélice via les GPIO d'une Arduino et une platine d'expérimentation

Utilisation

modifier

Un connecteur GPIO offre à une carte électronique la possibilité de communiquer avec d'autres circuits électroniques. Le GPIO est très présent dans les domaines de l'informatique, principalement embarquée, l'électronique, l'automatisme, la commande numérique, ou la robotique.

Dans les années 1980 il existait des cartes d'interfaces dédiées à ces ports.

Elle est présente en tout premier lieu sur les cartes comportant des microcontrôleurs, comme l'Arduino et son Atmel AVR ou des cartes proches (PCDuino[2]) ou certaines cartes d'essai à DSP comme les STM32 Nucleo de ST Microelectronics, également compatibles Arduino[3], ou encore les DSP eux-mêmes comme le TMS320C6474 de Texas Instruments[4], intègrent des connecteurs ou des instructions spécifiques pour le GPIO. Le Raspberry Pi dispose d'un connecteur GPIO[5] depuis sa première version, lui permettant ainsi d'être utilisé à la fois en tant qu'ordinateur personnel, et à la fois en tant que carte contrôleur pour des applications purement électroniques, à l'image de Stellaris Launchpad[6].

Une grande partie des ordinateurs monocartes, orientées développement, comme les Arndale Board, Banana Pi, BeagleBoard, Cubieboard, Firefly, Odroid, OLinuXinoetc. intègrent elles aussi des séries de connecteurs GPIO.

Plus récemment, certaines cartes mère pour PC comme la carte Intel® NUC DE3815TYBE en comporte également[réf. souhaitée].

Programmation

modifier
Plan GPIO d'une Banana Pi, chaque broche correspond à un nom défini dans l'API

Ces connecteurs sont gérés par les pilotes du noyau du système d'exploitation.

Linux reconnaît par exemple nativement les ports GPIO, une documentation complète est même disponible sur le site officiel du noyau[7] et expose la façon de programmer des pilotes. Les ports sont également directement accessibles depuis leur export dans /sys/class/gpio/ via Sysfs[8], les rendant directement accessibles en ligne de commande shell[9].

Microsoft Windows intègre lui aussi des API de développement spécifiques pour la création de pilotes GPIO[10], la documentation MSDN donne des informations à ce sujet[11].

Bibliothèques

modifier

En plus de la bibliothèque standard du noyau, il existe des bibliothèques spécialisées de plus haut niveau qui facilitent la programmation des connecteurs GPIO ou la gestion de périphériques standards. Certaines permettent également une portabilité sur des matériels au brochage compatible mais à l'architecture différente.

Le RaspberryPi, par exemple, dispose de WiringPi, une bibliothèque (en C) permettant de gérer les cartes d'extension les plus populaires de cette carte[12].

Comme sur les autres systèmes, il existe pour cette architecture des portages de l'API dans différents langages, comme RPi.GPIO pour le langage Python[13] ou Pi4J pour le langage Java[14]. Il est aussi envisageable pour certaines architectures d'utiliser directement les capacités du processeur.

Il est également possible de descendre d'un niveau dans les bibliothèques. Le système définit généralement une assignation générique aux connecteurs GPIO, les fonctions et noms de ses connecteurs sont définis par le pilote du contrôleur de ces connecteurs. On peut donc y accéder de façon générique, directement par l'API GPIO en utilisant le fichier d'entête (par exemple pour Linux : <linux/gpio.h>[15]. Il est également possible dans certains cas de se baser sur les fichiers d'entête de registres spécifiques au contrôleur. Dans le cas par exemple d'un RaspberryPi utilisant un processeur Broadcom BCM 2835[16], où différents pilotes sont propriétaires et ne sont donc pas inclus dans le noyau, il s'agit de l'entête <bcm2835.h>[17]. dans un code source en langage C[18].

Capacités

modifier

Un connecteur GPIO peut être configuré pour jouer le rôle d'une entrée (réception d'un signal) ou d'une sortie (émission d'un signal). Lorsqu'il est configuré en tant que sortie, on peut écrire dans un registre interne afin de modifier l'état d'une sortie. Lorsqu'il est configuré en tant qu'entrée, on peut détecter son état en lisant le contenu d'un registre interne.

Un connecteur GPIO ne peut traiter que des signaux numériques, 1 ou 0, une connexion sur un support analogique nécessitera un CAN/CNA comme le MCP3008[19].

Les périphériques GPIO peuvent également produire des interruptions[20] et des événements d'accès direct à la mémoire (EDMA).

Un connecteur GPIO est généralement alimenté en 3,3 Vcc et ne peut émettre que des courants de faible intensité, allant de 3 mA à 50 mA[21].

Notes et références

modifier
  1. http://www.series80.org/PDFs/HP82940A-GPIO.pdf
  2. « tronixstuff.com/2014/01/29/tut… »(Archive.orgWikiwixArchive.isGoogleQue faire ?).
  3. Pierrick Arlot, « Les microcontrôleurs STM32 de ST sautent à pieds joints dans l’univers Arduino », sur L'Embarqué,
  4. « TMS320C6474 Multicore Digital Signal Processor », sur Texas Instrument
  5. « Rasp-Hack-GPIO Connecteur », sur mchobby.be (consulté le ).
  6. « EK-LM4F120XL », sur ti.com (consulté le ).
  7. « Index of /doc/Documentation/gpio/ », sur kernel.org (consulté le ).
  8. (en) « GPIO Sysfs Interface for Userspace », sur Kernel.org
  9. (en) « GPIO », sur Linux-Sunxi
  10. http://www.ctcom.com.tw/doc/324257.pdf
  11. (en) « GPIO Driver Support Overview - Windows drivers », sur microsoft.com (consulté le ).
  12. François MOCQ, « La documentation de WiringPi traduite en français », sur Framboise 314,
  13. (en) « RPi.GPIO », sur PyPI (consulté le ).
  14. « Welcome to Pi4J », sur pi4j.com (consulté le ).
  15. (en) « GPIO Interfaces », sur kernel.org
  16. « BCM2835 ARM Peripherals », sur Raspberrypi.org
  17. (en) « bcm2835 1.56 — C library for Broadcom BCM 2835 as used in Raspberry Pi »
  18. « Alarme de maison avec un raspberry pi », sur oversimple.fr
  19. https://learn.adafruit.com/downloads/pdf/reading-a-analog-in-and-controlling-audio-volume-with-the-raspberry-pi.pdf
  20. http://eduscol.education.fr/sti/sites/eduscol.education.fr.sti/files/ressources/pedagogiques/4346/4346-4-rpi-gpio.pdf
  21. « Web, Internet, Webmarketing, High Tech, Dev », sur Mespotesgeek (consulté le ).

Voir aussi

modifier

Articles connexes

modifier