汎用入出力(GPIO )とは、集積回路または電子回路(例えば、MCU / MPU )基板上の、未割り当てのデジタル信号ピンであり、入力または出力、あるいはその両方として使用でき、ソフトウェアによって制御可能です。
GPIOにはあらかじめ定義された用途はなく、デフォルトでは使用されていません。[ 1 ] [ 2 ]使用される場合、GPIOの用途と動作は、上位アセンブリレベルの回路の設計者によって定義および実装されます。集積回路GPIOの場合は回路基板設計者、ボードレベルGPIOの場合はシステムインテグレーターです。
集積回路(IC)のGPIOは、さまざまな方法で実装されています。一部のICはGPIOを主要機能として提供しますが、他のICはGPIOを他の主要機能の便利な「アクセサリ」として提供します。前者の例としては、24個のGPIOをパラレル通信バスに接続するIntel 8255や、 I²CやSMBusなどのシリアル通信バスにGPIOを接続する各種GPIOエキスパンダICなどがあります。後者の例としては、オーディオコーデックという主要機能に加えて8個のGPIOを提供するRealtek ALC260 ICがあります。
マイクロコントローラICには通常、GPIO(汎用入出力ピン)が搭載されています。用途によっては、マイクロコントローラのGPIOは外部回路への主要なインターフェースとなる場合もあれば、アナログ信号入出力、カウンタ/タイマ、シリアル通信など、複数の入出力タイプのうちの1つとして使用される場合もあります。
一部のIC、特にマイクロコントローラでは、GPIOピンがGPIO以外の機能も担う場合があります。このような場合、GPIOの動作設定に加えて、そのピンをGPIOとして動作するように(他の機能との関連で)設定する必要が生じることがよくあります。一部のマイクロコントローラデバイス(例えば、Microchip社のdsPIC33ファミリ)には、GPIOをデバイスピンにプログラムでマッピングできる内部信号ルーティング回路が組み込まれています。フィールドプログラマブルゲートアレイ(FPGA)は、GPIOピンのマッピング、インスタンス化、およびアーキテクチャをプログラムで制御できるようにすることで、この機能をさらに拡張します。
一部のマイクロコントローラやFPGAでは、GPIOのビットバンギングというタスクを、プログラマブル入出力コントローラという別のデバイスにオフロードすることが可能です。
多くの回路基板では、基板レベルのGPIOが内蔵の電気コネクタを介して外部回路に接続されています。通常、各GPIOは専用のコネクタピンを介してアクセスできます。
IC ベースの GPIO と同様に、一部のボードでは GPIO はボードの主要機能を拡張する便利な補助リソースとしてのみ含まれていますが、他のボードでは GPIO がボードの中心的な主要機能となっています。通常、多機能 I/O ボードとして分類される一部のボードは、両方の組み合わせです。このようなボードは、GPIO と他のタイプの汎用 I/O を提供します。GPIO は、組み込みコントローラ ボードやArduino、BeagleBone、Raspberry Piなどのシングルボード コンピュータにも見られます。[ 3 ]
基板レベルのGPIOの中には、ICピンへの単純な接続であるものもありますが、多くはICベースのGPIOには通常備わっていない機能を備えています。例えば、シュミットトリガ入力、大電流出力ドライバ、光アイソレータ、あるいはこれらの組み合わせを用いて、GPIO信号のバッファリングや調整、基板回路の保護を行うことができます。また、入力デバウンス、入力信号エッジ検出、パルス幅変調(PWM)出力といった高レベル機能も実装されることがあります。
GPIOは多種多様なアプリケーションで使用されており、その用途はGPIOインターフェースの電気的およびタイミング仕様、そしてソフトウェアがGPIOと十分なタイミングでやり取りできる能力によってのみ制限される。
GPIOは通常、標準的な論理レベルを使用するため、出力負荷に大きな電流を供給することはできません。適切な大電流出力バッファ(または機械式リレーやソリッドステートリレー)を後段に接続することで、GPIOは照明、ソレノイド、ヒーター、モーター(ファンやブロワーなど)といった高出力デバイスの制御に使用できます。同様に、入力バッファ、リレー、またはフォトカプラは、互換性のない信号(高電圧など)をGPIOに必要な論理レベルに変換するためによく使用されます。
集積回路のGPIOは、基板上の他の回路(他のICを含む)の制御や監視によく使用されます。例えば、他の回路の動作(または電源供給)の有効化/無効化、基板上のスイッチや構成シャントの状態の読み取り、発光ダイオード(LED)ステータスインジケータの駆動などが挙げられます。後者の場合、多くの場合、GPIOは中間バッファを使用せずにLEDを直接駆動するのに十分な出力電流を供給できます。
複数のGPIOピンは、ビットバンギング通信インターフェースとして組み合わせて使用されることがあります。例えば、2つのGPIOピンを使用してI²C (Inter-Integrated Circuit )などのシリアル通信バスを実装したり、4つのGPIOピンを使用してSPI( Serial Peripheral Interface )バスを実装したりできます。これらは通常、ICや、センサー(温度センサー、圧力センサー、加速度センサーなど) 、モーターコントローラーといった互換性のあるシリアルインターフェースを備えたその他のデバイスとのシリアル通信を容易にするために使用されます。極端な場合、この方法を使用してパラレルバス全体を実装し、バス指向のICや回路基板との通信を可能にすることもできます。
GPIOは本質的にデジタルですが、アナログプロセスを制御するためによく使用されます。たとえば、GPIOを使用してモーター速度、光強度、または温度を制御することができます。通常、これはPWMによって行われ、GPIO出力信号のデューティサイクルによってプロセス制御信号の実効的な大きさが決まります。たとえば、光強度を制御する場合、GPIOのデューティサイクルを減らすことで光を暗くすることができます。一部のアナログプロセスでは、アナログ制御電圧が必要です。そのような場合、PWM出力として動作するGPIOをRCフィルタに接続して、シンプルで低コストのデジタル-アナログ変換器を作成することが可能です。
GPIOインターフェースは多種多様です。シンプルなものもあり、入力または出力にグループとして切り替えられるピンのグループとして機能します。一方、各ピンを個別に設定して、異なる論理電圧を受け入れたり、供給したりできるものもあり、駆動強度やプルアップ/プルダウン抵抗も構成可能です。入力電圧と出力電圧は通常、GPIOを備えたデバイスの電源電圧に制限されますが、常にそうとは限りません。それ以上の電圧をかけると、デバイスが損傷する可能性があります。
GPIOピンの状態は、メモリマップドI/O周辺機器や専用のI/Oポート命令など、さまざまなインターフェースを介してソフトウェア開発者に公開されます。一部のGPIOは 5V耐性入力を備えています。つまり、デバイスの電源電圧が低い場合(例えば2V )でも、5Vの電圧を印加してもデバイスは 損傷しません。
GPIOポートとは、GPIOピンのグループ(通常は8ピンだが、それより少ない場合もある)であり、グループとして配置され、グループとして制御される。
GPIO の機能には以下が含まれる場合があります: [ 2 ]