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

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 domaine 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, OLinuXino, etc. 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

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 kernel[7] et expose la façon de programmer des pilotes. Les ports sont également directement accessible depuis leur export dans /sys/class/gpio/ via Sysfs[8], les rendent 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

En plus de la bibliothèque standard du noyau, il existe des bibliothèques spécialisées de plus haut niveau, 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 ports 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éfini généralement une assignation générique aux connecteurs GPIO, les fonctions et nom 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 le 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 incluses dans le noyau, il s'agit de l'entête <bcm2835.h>[17]. dans un code source en langage C[18].

Capacités

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.3Vcc et ne peut émettre que des courants de faible intensité, allant de mA à 50 mA[21].

Voir aussi

Notes et références

  • Portail de l’électricité et de l’électronique
  • Portail de l’informatique
Cet article est issu de Wikipedia. Le texte est sous licence Creative Commons - Attribution - Partage dans les Mêmes. Des conditions supplémentaires peuvent s'appliquer aux fichiers multimédias.