[Linux] Pinctrl サブシステムの概要

序文:

GPIO は私たちの仕事の開発で非常に頻繁に使用されますが、Linux 開発では GPIO に精通し、理解する必要があります。Linux カーネルには、対応するサブシステム pinctrl サブシステムも提供されていますが、この記事ではそれを大きな観点から理解します

参考学習:Linuxノート教師コース(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

この段階では、まずここを学習し、この部分の内容を具体的な例と組み合わせて、より深い学習と理解を練習します。

1. Pinctrl サブシステムの概要 

gpio ピンは通常の入出力ポートとして使用されるほか、他のコントローラーと接続する機能もあります。ただし、ピンの機能割り当てと機能構成は面倒な作業です。この問題を解決するにはどうすればよいでしょうか?

Pinctrl サブシステムは、上記の問題を解決するもので、本体の設定は 2 種類あり、1 つは機能選択で、iic、uart、または通常の gpio として使用できます。もう 1 つは gpio の機能構成、つまりプルアップ、プルダウン、駆動能力、速度の構成です。 

要約すると、Linux Pinctrl サブシステムによって提供される機能は次のとおりです。

  • システム内のすべての制御可能なピンを管理します。システムの初期化時に、すべての制御可能なピンを列挙し、これらのピンを識別します。
  • これらのピンの多重化を管理します (多重化)。SOC の場合、そのピンを通常の GPI0 として構成することに加えて、いくつかのピンで特定の機能を持つピン グループを形成することもできます。すべてのピン グループを管理するピン制御サブシステム。
  • これらのピンの特性を設定します。たとえば、ピンのプルアップ抵抗とプルダウン抵抗を有効または無効にし、ピンのドライバ強度を構成します。

2 番目に、Pinctrl の特定のフレームワーク

Pinctrl のドライバー モジュール全体は 4 つの部分に分割できます。

  • pinctrl API: 上位レベルのユーザーに提供されるインターフェース
  • pinctrl 共通フレームワーク: 上位ユーザーに提供されるインターフェース
  • pinctrl ドライバー: プラットフォームが実装する必要があるドライバー
  • ボード構成: デバイスのピン構成情報。

  • Pinctrl コアには、デフォルト、スリープ、アイドルの 3 つの状態があることがわかります。システムが正常に動作しているときは、最初はデフォルト設定に従うか、アイドル状態になります。システムがスリープ状態に入ると、電力消費を節約するために、デバイス ピンの別の設定セットが必要になります。
  • Pinctrl フレームワークは主に pinstate、pinmux、pinconfig の 3 つの関数を扱います。マッピング関係は上図に示されています。

3. 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 は上記の uart0 ピンに対応し、ピンはピン 18 および 19 に対応する uart 機能として設定されます。pinctrl-1 は上記の uart0_sleep_pins に対応し、システムがスリープに入ると、ここのピンは gpio 機能として設定されます。

おすすめ

転載: blog.csdn.net/weixin_42373086/article/details/130914052