Maison >Problème commun >A quoi sert l'interface GPIO ?
L'interface gpio est utilisée pour l'interaction des données avec le matériel ; gpio est l'abréviation de « Ports d'E/S à usage général », ce qui signifie que ses broches peuvent être utilisées librement par les utilisateurs sous le contrôle du programme. Être émis via l'interface niveaux haut et bas ou lire si l'état de la broche est haut ou bas.
L'environnement d'exploitation de ce tutoriel : système Windows 10, ordinateur DELL G3.
GPIO, l'abréviation d'entrée et de sortie générales, a des fonctions similaires à P0-P3 de 8051. Ses broches peuvent être utilisées librement par l'utilisateur via le contrôle du programme. comme entrée générale (GPI) basée sur des considérations pratiques. ) ou sortie à usage général (GPO) ou entrée et sortie à usage général (GPIO), comme un générateur de clk, une sélection de puce, etc.
GPIO (Ports d'E/S à usage général ) signifie les ports d'entrée/sortie généraux. En termes simples, il s'agit d'une broche, vous pouvez émettre des niveaux haut et bas à travers eux ou lire l'état de la broche à travers eux - qu'il s'agisse d'un niveau haut ou bas.
Le port GPIO 1 est un concept important. Les utilisateurs peuvent interagir avec le matériel via le port GPIO pour l'interaction des données (telles que UART), contrôler le travail du matériel (tel que la LED, le buzzer, etc.) et lire les signaux d'état de fonctionnement du matériel (tels que signaux d'interruption) )attendez. Les ports GPIO sont largement utilisés.
Comment utiliser l'interface gpio
Pour utiliser GPIO, le système doit d'abord allouer un GPIO et utiliser gpio_request() pour allouer un GPIO au système.
La prochaine chose à faire est de marquer la direction du GPIO, généralement lors de l'utilisation du GPIO pour créer un platform_device (situé dans le code de configuration de la carte) :
/* set as input or output, returning 0 or negative errno */ int gpio_direction_input(unsigned gpio); int gpio_direction_output(unsigned gpio, int value);
Renvoyer 0 pour indiquer le succès, ou un code d'erreur d'erreur négatif . Cela doit être vérifié car les appels get/set ne renvoient pas d'erreurs et il peut y avoir des erreurs de configuration. Vous devez généralement utiliser ces appels dans un contexte de thread. Cependant, pour le GPIO à verrouillage tournant, il est également possible de l'utiliser avant que les tâches ne soient activées, en tant que première version d'une seule carte.
Pour la sortie GPIO, le paramètre value fournit la valeur de sortie initiale. Cela permet d'éviter les interférences de signal lors du démarrage du système.
Afin d'être compatible avec la première interface GPIO, la définition d'une direction GPIO nécessite implicitement de postuler pour GPIO. Cette compatibilité est supprimée de l'architecture optionnelle gpiolib.
Si le numéro GPIO n'est pas valide ou si le GPIO spécifié ne peut pas fonctionner dans le mode correspondant, le réglage de la direction échouera. Ce n'est généralement pas une bonne idée de s'appuyer sur le micrologiciel de démarrage pour définir la direction GPIO, car la fonctionnalité de démarrage peut ne pas être vérifiée (sauf pour Linux de démarrage). (De même, le code de configuration de la carte unique peut nécessiter de multiplexer la broche en tant que GPIO et de configurer le pull-up/pull-down approprié.)
Accès GPIO sécurisé par spinlock
La plupart des contrôleurs GPIO peuvent utiliser des instructions de lecture et d'écriture en mémoire. accéder. Ils ne nécessitent pas de mise en veille et peuvent être exécutés en toute sécurité à partir de la gestion des interruptions matérielles internes (non threadées) et de contextes similaires.
Utilisez l'appel suivant pour accéder à ces GPIO. À ce stade, gpio_cansleep renverra toujours une erreur
/* GPIO INPUT: return zero or nonzero */ int gpio_get_value(unsigned gpio); /* GPIO OUTPUT */ void gpio_set_value(unsigned gpio, int value);
où la valeur est un paramètre booléen, zéro signifie faible et non nul signifie élevé. Lors de la lecture de la valeur d'une broche de sortie, la valeur renvoyée doit être la valeur vue sur la broche. . . Cela ne correspond pas toujours à la valeur de sortie spécifiée en raison de problèmes de signalisation à drain ouvert et de retard de sortie.
Aucune erreur n'est renvoyée par les appels get/set car "GPIO invalide" aurait dû être signalé tôt par gpio_direction_*(). Néanmoins, toutes les plates-formes ne peuvent pas lire la valeur d'une broche de sortie, et celles qui ne le peuvent pas doivent toujours renvoyer zéro. En même temps, c'est une erreur d'utiliser ces interfaces avec des GPIO qui peuvent provoquer une mise en veille.
Les implémentations spécifiques à la plate-forme sont encouragées à optimiser ces deux appels pour obtenir les valeurs GPIO. Dans les cas où les numéros GPIO sont constants, ils ne nécessitent généralement qu'une paire d'instructions (lire ou écrire un registre matériel) pour y accéder, et aucun verrou tournant n'est requis. De telles optimisations peuvent rendre les applications de fractionnement de bits plus efficaces (en termes de temps et d'espace) (par rapport à la dépense d'un tas d'instructions en appels de sous-programmes).
A quoi sert l'interface gpio ?
La valeur de sortie peut être écrite (haute=1, basse=0). Certaines puces peuvent également choisir comment piloter ces valeurs pour prendre en charge un schéma « OU filaire » ou similaire (lignes de signal à drain ouvert).
La valeur d'entrée est lisible (1, 0). Certaines puces prennent en charge la relecture des broches de sortie, ce qui est utile dans les situations de fil OU (pour prendre en charge les lignes de signal bidirectionnelles). Le contrôleur GPIO peut avoir une logique de sécurité/anti-rebond d'entrée et parfois un contrôle logiciel.
Les entrées sont souvent utilisées comme signaux d'interruption, généralement déclenchées par front, mais peuvent également être déclenchées par niveau. Ces interruptions peuvent être configurées en tant qu'événements de réveil du système pour sortir le système des modes de faible consommation.
Un GPIO est souvent configuré comme entrée/sortie bidirectionnelle, en fonction des exigences des différentes cartes produits, mais il existe également des situations unidirectionnelles.
La plupart des GPIO sont accessibles lors de l'acquisition du spinlock, mais ceux accessibles via le bus série ne peuvent généralement pas le faire (raison de l'hibernation). Certains systèmes ont les deux formes de GPIO.
Sur une carte donnée, chaque GPIO est utilisé dans un but spécifique, tel que la surveillance de l'insertion/du retrait de la carte MMC/SD, la vérification de l'état de protection en écriture de la carte, la conduite de la LED, la configuration de l'émetteur, la suppression des bits du bus série, le déclenchement d'un chien de garde matériel, le déclenchement d'un interrupteur ou quelque chose comme ça.
Pour plus de connaissances connexes, veuillez visiter la rubrique FAQ !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!