Une entrée/sortie à usage général ( GPIO ) est une broche de signal numérique non engagée sur une carte de circuit intégré ou de circuit électronique (par exemple, MCU / MPU ) qui peut être utilisée comme entrée ou sortie, ou les deux, et est contrôlable par logiciel.
Les GPIO n'ont pas d'objectif prédéfini et ne sont pas utilisés par défaut. S'ils sont utilisés, l'objectif et le comportement d'un GPIO sont définis et mis en œuvre par le concepteur de circuits de niveau d'assemblage supérieur : le concepteur de circuits imprimés dans le cas de GPIO de circuits intégrés, ou l'intégrateur système dans le cas de GPIO au niveau de la carte.
GPIO de circuits intégrés
Les GPIO des circuits intégrés (CI) sont implémentés de diverses manières. Certains CI fournissent des GPIO comme fonction principale tandis que d'autres incluent des GPIO comme « accessoire » pratique à une autre fonction principale. Parmi les premiers, on peut citer le Intel 8255 , qui connecte 24 GPIO à un bus de communication parallèle , et divers CI d'extension GPIO , qui connectent les GPIO à des bus de communication série tels que I²C et SMBus . Un exemple de ce dernier est le CI Realtek ALC260, qui fournit huit GPIO avec sa fonction principale de codec audio .
Les circuits intégrés de microcontrôleurs incluent généralement des GPIO. Selon l'application, les GPIO d'un microcontrôleur peuvent constituer son interface principale avec les circuits externes ou bien il peut s'agir simplement d'un type d'E/S utilisé parmi plusieurs, comme les E/S de signal analogique , le compteur/minuteur et la communication série.
Dans certains circuits intégrés, notamment les microcontrôleurs, une broche GPIO peut être capable d'autres fonctions que GPIO. Dans de tels cas, il est souvent nécessaire de configurer la broche pour qu'elle fonctionne comme une GPIO (par rapport à ses autres fonctions) en plus de configurer le comportement de la GPIO. Certains microcontrôleurs (par exemple, la famille dsPIC33 de Microchip) intègrent des circuits de routage de signaux internes qui permettent de mapper par programmation les GPIO aux broches du périphérique. Les réseaux de portes programmables (FPGA) étendent cette capacité en permettant de contrôler par programmation le mappage, l'instanciation et l'architecture des broches GPIO.
-
Interface de bus parallèle à 24 GPIO ( Intel 8255 )
-
Un « adaptateur d'interface polyvalent », qui combine 20 GPIO avec d'autres interfaces à usage général ( MOS Technology 6522 )
-
Un microcontrôleur PIC avec 29 GPIO remappables ( Microchip Technology PIC24FJ256)
GPIO au niveau de la carte
De nombreuses cartes de circuits imprimés exposent les GPIO au niveau de la carte à des circuits externes via des connecteurs électriques intégrés. En général, chaque GPIO est accessible via une broche de connecteur dédiée.
Comme les GPIO basés sur des circuits intégrés, certaines cartes incluent simplement des GPIO comme une ressource auxiliaire pratique qui augmente la fonction principale de la carte, alors que dans d'autres cartes, les GPIO sont la fonction centrale et principale de la carte. Certaines cartes, qui sont généralement classées comme cartes d'E/S multifonctions, sont une combinaison des deux ; ces cartes fournissent des GPIO ainsi que d'autres types d'E/S à usage général. Les GPIO se trouvent également sur les cartes de contrôleur intégrées et les ordinateurs monocarte tels que Arduino , BeagleBone et Raspberry Pi .
Les GPIO au niveau de la carte sont souvent dotés de capacités qui manquent généralement aux GPIO basés sur CI. Par exemple, des entrées à bascule de Schmitt , des pilotes de sortie à courant élevé, des isolateurs optiques ou des combinaisons de ceux-ci peuvent être utilisés pour mettre en mémoire tampon et conditionner les signaux GPIO et pour protéger les circuits de la carte. De plus, des fonctions de niveau supérieur sont parfois implémentées, telles que l'anti-rebond d'entrée , la détection de bord de signal d'entrée et la sortie à modulation de largeur d'impulsion (PWM).
-
Routeur réseau avec trois GPIO (Banana Pi R1)
-
Interface GPIO pour ordinateurs Hewlett-Packard série 80 (HP 82940A)
-
Interface Ethernet vers 48 GPIO (Sensoray 2410)
-
GPIO à code couleur (en haut) sur une carte Asus Tinker
Usage
Les GPIO sont utilisés dans une grande variété d'applications, limitées uniquement par les spécifications électriques et temporelles de l'interface GPIO et la capacité du logiciel à interagir avec les GPIO de manière suffisamment rapide.
Les GPIO utilisent généralement des niveaux logiques standard et ne peuvent pas fournir un courant significatif aux charges de sortie. Lorsqu'il est suivi d'un tampon de sortie à courant élevé approprié (ou d'un relais mécanique ou à semi-conducteurs), un GPIO peut être utilisé pour contrôler des appareils à haute puissance tels que des lumières, des solénoïdes, des radiateurs et des moteurs (par exemple, des ventilateurs et des souffleurs). De même, un tampon d'entrée, un relais ou un opto-isolateur est souvent utilisé pour traduire un signal autrement incompatible (par exemple, une haute tension) aux niveaux logiques requis par un GPIO.
Les GPIO de circuits intégrés sont couramment utilisés pour contrôler ou surveiller d'autres circuits (y compris d'autres circuits intégrés) sur une carte. Il s'agit par exemple d'activer et de désactiver le fonctionnement (ou l'alimentation) d'autres circuits, de lire les états des commutateurs et des shunts de configuration intégrés et de piloter des indicateurs d'état à diode électroluminescente (DEL). Dans ce dernier cas, un GPIO peut, dans de nombreux cas, fournir suffisamment de courant de sortie pour alimenter directement une LED sans utiliser de tampon intermédiaire.
Plusieurs GPIO sont parfois utilisés ensemble comme interface de communication de type bit banging . Par exemple, deux GPIO peuvent être utilisés pour implémenter un bus de communication série tel que Inter-Integrated Circuit ( I²C ), et quatre GPIO peuvent être utilisés pour implémenter un bus Serial Peripheral Interface (SPI) ; ceux-ci sont généralement utilisés pour faciliter la communication série avec des circuits intégrés et d'autres appareils dotés d'interfaces série compatibles, tels que des capteurs (par exemple, des capteurs de température, des capteurs de pression, des accéléromètres ) et des contrôleurs de moteur . Poussée à l'extrême, cette méthode peut être utilisée pour implémenter un bus parallèle complet, permettant ainsi la communication avec des circuits intégrés ou des cartes de circuits imprimés orientés bus.
Bien que les GPIO soient fondamentalement numériques par nature, ils sont souvent utilisés pour contrôler des processus analogiques. Par exemple, un GPIO peut être utilisé pour contrôler la vitesse du moteur, l'intensité lumineuse ou la température. En général, cela se fait via PWM, dans lequel le cycle de service du signal de sortie GPIO détermine l'amplitude effective du signal de contrôle du processus. Par exemple, lors du contrôle de l'intensité lumineuse, la lumière peut être atténuée en réduisant le cycle de service GPIO. Certains processus analogiques nécessitent une tension de commande analogique. Dans de tels cas, il peut être possible de connecter un GPIO, qui fonctionne comme une sortie PWM, à un filtre RC pour créer un convertisseur numérique-analogique simple et peu coûteux .
Mise en œuvre
Les interfaces GPIO sont très variées. Dans certains cas, elles sont simples : un groupe de broches pouvant commuter en tant que groupe vers l'entrée ou la sortie. Dans d'autres cas, chaque broche peut être configurée pour accepter ou fournir différentes tensions logiques, avec des forces de commande et des résistances de rappel configurables . Les tensions d'entrée et de sortie sont généralement, mais pas toujours, limitées à la tension d'alimentation de l'appareil équipé des GPIO et peuvent être endommagées par des tensions plus élevées.
L'état d'une broche GPIO peut être exposé au développeur du logiciel via l'une des nombreuses interfaces différentes, telles qu'un périphérique d'E/S mappé en mémoire ou via des instructions de port d'E/S dédiées. Certaines broches GPIO ont des entrées tolérantes à 5 V : même lorsque l'appareil a une faible tension d'alimentation (par exemple 2 V), l'appareil peut accepter 5 V sans dommage.
Un port GPIO est un groupe de broches GPIO (souvent 8 broches, mais cela peut être moins) disposées en groupe et contrôlées comme un groupe.
Les capacités GPIO peuvent inclure :
- Les broches GPIO peuvent être configurées pour être en entrée ou en sortie
- Les broches GPIO peuvent être activées/désactivées
- Les valeurs d'entrée sont lisibles (généralement hautes ou basses )
- Les valeurs de sortie sont inscriptibles/lisibles
- Les valeurs d'entrée peuvent souvent être utilisées comme IRQ (généralement pour les événements de réveil)