GPIOS - Kasimashi/Systemes-embarques GitHub Wiki
GPIO signifie General Purpose Input/Output : ils font partis des périphériques. C'est le périphérique qui permet de contrôler les broches et qui permet de communiquer avec le monde extérieur. Ces broches sont des sorties numériques (qui sortent uniquement 0 ou 5V) et qui permettent d'allumer des LEDs, de rajouter des bouttons poussoirs ou encore d'y insérer par exemple un clavier.
Le nombre de broche sur un processeur est assez limité, les broches du processeurs sont configurables par le software au démarrage pour accomplir différentes fonctions. Ces broches GPIO permettent de fournir une grande flexibilité et une manoeuvre importante sur le design de la carte.
- L'entrée numérique qui permet de détecter si l'entrée du signal est haute ou basse en définissant un certain seuil.
- En sortie numérique pour controler la sortie de la broche. (0 ou 5V)
- Des fonctions analogues pour faire du DAC ou de l'ADC.
- D'autres fonctionalités plus complexes comme du PWM, un driver LCD, un timer input capture, une interruption externe, une interface USART, SPI, I2C et des communications USB.
Nous appelons cette dernière catégorie les AF pour alternates functions. Le software permet de changer la fonction des GPIO au démarrage du logiciel.
Un port GPIO est un regroupement de broche GPIO, (typiquement 8 ou 16), qui partagent les mêmes données et registres de contrôles.
- Quand une broche GPIO est mise comme entrée numérique, la valeur binaire lue sur cette broche est stocké dans le ième bit du registre input data register (IDR). Chaques bits dans l'IDR correspond à une entrée d'une broche différente appartenant au même port.
- Quand une broche GPIO est mise en sortie numérique, le bit i du registre output data register (ODR) permet de controler la sortie de la broche. Par conséquent, 1 broche correspond à 1 bit.
- Tout les broches GPIO d'un GPIO port peuvent être configuré indépendaments en entrée ou en sortie.
Quand un GPIO est utilisé en tant qu'entrée numérique, la broche peut avoir 3 états: état haut, état bas, et haute impédance (aussi appelée entrée flottante). Pull up et pull down sont utilisés pour assurer que la broche est un état valide 0 ou 1. Quand un système externe ne contrôle pas la pin.
- Quand le logiciel configure un GPIO en pull up, la broche est connecté en interne à une résistance qui est connecté au VCC. La broche est dans un état haut (1) jusqu'à que un circuit externe mette l'entrée à bas.
- Cela fonctionne de la même manière pour une pull down qui est connecté au GND.
Quand une broche n'est ni à l'état haut, ni à l'état bas on dit que l'entrée est flottante : Le signal analogique ne représente ni un zero ni un un. La configuration peux se faire dynamiquement pendant l'exécution du programme.
Remarque : pour limiter le courant dans les résistances de pull up et de pull down on met souvent de grosses résistances (> 10KOhm)
ATTENTION : Quand un circuit externe veut piloter ces circuits, le fait de tirer à l'état bas ou l'état haut ces circuits prend du temps du à l'impédance des résistances. Il peut arriver que cela ne correspond pas à la fréquence voulu pour les communications rapide comme pour l'I2C. Pour changer rapidement un pin GPIO peux être utilisé extérieurement avec des plus petites résistances. Les pull up ou des pull down de petites valeurs sont appelées strong pull-up ou strong pull-down.
Habituellement chaque entrée d'un GPIO contiennent un Trigger de Schmitt. Ce dernier utilise un comparateur pour convertir un signal soit bruité pour obtenir une sortie "plus clean".
Le trigger de Schmitt utilise deux valeurs de seuil et évite ainsi les effets indésirables d'un simple comparateur.
Les valeurs de seuils (
Dans les systèmes réels, un signal d’entrée provenant de périphériques externes ne peut généralement pas changer instantanément. Un tel signal d'entrée a tendance à avoir une vitesse de montée en puissance en raison de capacités parasites inhérentes, de résistance ou d'induction dans le chemin de données d'entrée. Une puce de processeur est généralement dotée de déclencheurs Schmitt intégrés pour augmenter la vitesse de balayage et améliorer l'immunité au bruit.
Le logiciel peut configurer une broche de sortie GPIO en mode push-pull ou open-drain. Les modes push-pull permettent à la broche de fournir et d'absorber du courant. Cependant, une broche GPIO en mode open-frain (également appelé collecteur) ne peut absorber que du courant.
Une sortie push pull se compose d’une paire de transistors complémentaires. Un seul d’entre eux est activé à la fois.
- Quand la broche sort la logique 0, le transistor connecté à la masse est activé pour absorber un courant électrique du circuit externe.
- Lorsque la broche sort la logique 1, le transistor connecté à l'alimentation est allumé et fournit un courant électrique au circuit externe connecté à la broche de sortie.
La vitesse de balayage d'une broche GPIO est la vitesse de changement de sa tension de sortie par unité de temps, telle que définie comme suit.
Si la sortie logique de la broche GPIO passe de 0 à 1 et qu'en conséquence la tension de sortie de cette broche passe de 0 V à 3 V en 3 us, la vitesse de montée est de 1 volt par us. La définition de la vitesse de montée s'applique à la fois au front montant et au front descendant ainsi qu'au front descendant d'une sortie de tension.