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 aux débuts 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.
Sommaire
1 Utilisation
2 Programmation
2.1 Bibliothèques
3 Capacités
4 Voir aussi
5 Notes et références
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.
Carte GPIO du HP 82940A Series 80 (années 1980)
Carte de contrôleur GPIO par ethernet
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ême 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].
Connecteurs GPIO femelles d'une des cartes Arduino
Le connecteur GPIO (broches) à gauche, sur un Raspberry Pi Modèle A
Plan d'assignation des broches GPIO sur une carte Banana Pi
Les broches sont en dessous, sur la Cubieboard pour l'insérer dans une carte ou une carte pour le développement.
Carte d'extension de type Shield connecté directement sur les ports GPIO d'une Arduino.
carte de développement compatible Arduino basée sur un STM32, des rangs de broches sont fournies, laissant choisir entre câbles mâles ou femelles selon les besoins.
Programmation |
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éfini 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 3 mA à 50 mA[21].
Voir aussi |
- Entrées-sorties
- Bus informatique
- Microcontrôleur
- Microprocesseur
- Processing
- I2C
Notes et références |
http://www.series80.org/PDFs/HP82940A-GPIO.pdf
http://tronixstuff.com/2014/01/29/tutorial-pcduino-gpio-arduino-ide/
Pierrick Arlot, « Les microcontrôleurs STM32 de ST sautent à pieds joints dans l’univers Arduino », sur L'Embarqué, 20 mai 2016
« TMS320C6474 Multicore Digital Signal Processor », sur Texas Instrument
http://mchobby.be/wiki/index.php?title=Rasp-Hack-GPIO_Connecteur
http://www.ti.com/tool/ek-lm4f120xl
https://www.kernel.org/doc/Documentation/gpio
(en) « GPIO Sysfs Interface for Userspace », sur Kernel.org
(en) « GPIO », sur Linux-Sunxi
http://www.ctcom.com.tw/doc/324257.pdf
http://msdn.microsoft.com/en-us/library/windows/hardware/hh439512%28v=vs.85%29.aspx
François MOCQ, « La documentation de WiringPi traduite en français », sur Framboise 314, 16 octobre 2013
https://pypi.python.org/pypi/RPi.GPIO
http://pi4j.com/
(en) « GPIO Interfaces », sur kernel.org
« BCM2835 ARM Peripherals », sur Raspberrypi.org
(en) « bcm2835 1.56 — C library for Broadcom BCM 2835 as used in Raspberry Pi »
« Alarme de maison avec un raspberry pi », sur oversimple.fr
https://learn.adafruit.com/downloads/pdf/reading-a-analog-in-and-controlling-audio-volume-with-the-raspberry-pi.pdf
http://eduscol.education.fr/sti/sites/eduscol.education.fr.sti/files/ressources/pedagogiques/4346/4346-4-rpi-gpio.pdf
https://mespotesgeek.fr/controle-dun-dispositif-basse-tension-via-raspberry-pi/
- Portail de l’électricité et de l’électronique
- Portail de l’informatique