[Linux] Introduction au sous-système Pinctrl

Avant-propos :

GPIO est très couramment utilisé dans notre travail de développement, en développement Linux, il est nécessaire de le connaître et de le comprendre. Le sous-système pinctrl du sous-système correspondant est également fourni dans le noyau Linux.Cet article le comprend d'un point de vue plus large .

Étude de référence : Cours de professeur de note Linux (sous-système Pinctrl)

https://live.csdn.net/v/219059?spm=1001.2014.3001.5501

https://xuesong.blog.csdn.net/article/details/109522945?spm=1001.2014.3001.5502

https://blog.csdn.net/qq_33487044/article/details/123468166

https://blog.csdn.net/qq_33487044/article/details/110010020

À ce stade, apprenez d'abord ici, et le contenu de cette partie sera combiné avec des exemples spécifiques pour pratiquer une étude et une compréhension approfondies.

1. Présentation du sous-système Pinctrl 

En plus d'être utilisée comme port d'entrée et de sortie ordinaire, la broche gpio a pour fonction de se connecter à d'autres contrôleurs. Cependant, l'affectation des fonctions et la configuration des fonctionnalités des broches est une tâche fastidieuse. Comment résoudre ce problème?

Le sous-système Pinctrl doit résoudre les problèmes ci-dessus. Il existe deux types de paramètres sur son corps principal, dont l'un est la sélection de fonction, c'est-à-dire qu'il peut être utilisé comme iic, uart ou gpio ordinaire. L'autre type est la configuration des fonctionnalités de gpio, c'est-à-dire la configuration de pull-up, pull-down, capacité d'entraînement et vitesse. 

En résumé, les fonctions fournies par le sous-système Linux Pinctrl :

  • Gérer toutes les broches contrôlables du système Lorsque le système est initialisé, énumérer toutes les broches contrôlables et identifier ces broches.
  • Gérer le multiplexage de ces broches (Multiplexage). Pour SOC, en plus de configurer ses broches comme GPI0 ordinaire, plusieurs broches peuvent également former un groupe de broches avec des fonctions spécifiques. sous-système de contrôle des broches pour gérer tous les groupes de broches.
  • Configurez les caractéristiques de ces broches. Par exemple, activez ou désactivez les résistances pull-up et pull-down sur la broche et configurez la puissance du pilote de la broche.

Deuxièmement, le cadre spécifique de Pinctrl

L'ensemble du module pilote de Pinctrl peut être divisé en 4 parties :

  • pinctrl api : interface fournie aux utilisateurs de niveau supérieur
  • cadre commun pinctrl : une interface fournie aux utilisateurs de niveau supérieur
  • pilote pinctrl : le pilote que la plate-forme doit implémenter
  • configuration de la carte : informations sur la configuration des broches de l'appareil.

  • Dans le noyau Pinctrl, vous pouvez voir qu'il existe trois états, par défaut, en veille et inactif. Lorsque le système fonctionne normalement, il suit d'abord la configuration par défaut ou est en état d'inactivité ; lorsque le système entre en état de veille, afin d'économiser de l'énergie, un autre ensemble de configurations doit être effectué sur les broches de l'appareil.
  • Le cadre Pinctrl traite principalement de trois fonctions de pinstate, pinmux et pinconfig, et la relation de mappage est illustrée dans la figure ci-dessus.

3. Exemple de configuration Pinctrl dts

uart0_pins: uart0-pins {
	pins = "18", "19";
	function = "uart0";
};
uart0_sleep_pins: uart0-pins {
	pins = "18", "19";
	function = "gpio";
};
...
&uart0 {
	pinctrl-names = "default","sleep";
	pinctrl-0 = <&uart0_pins>;
	pinctrl-1 = <&uart0_sleep_pins>;
	status = "okay";
};

pinctrl-0 correspond aux broches uart0 ci-dessus, où la broche sera configurée comme une fonction uart, correspondant aux broches 18 et 19. pinctrl-1 correspond aux uart0_sleep_pins ci-dessus, lorsque le système entre en veille, la broche ici sera configurée en tant que fonction gpio.

Je suppose que tu aimes

Origine blog.csdn.net/weixin_42373086/article/details/130914052
conseillé
Classement