組み込み開発では、制御したいハードウェアの仕様を理解し、そのハードウェアを制御するために、
知っておかなければならない基本知識がたくさんあります。
その1つとして「GPIO」があります。
GPIOは、組み込み知識の中で、一番重要と言っても過言ではありません。
ここでは、最低限知っておくと役に立つ「GPIO」の基本知識を簡単に解説していきたいと思います。
1.GPIOとは?
GPIO(General Purpose Input/Output)とは、CPUの機能を使用するためのインターフェースとなる端子で、
外部機器を接続して通信を行う時などに使用します。
CPUによりますが、少なくとも数十本以上のGPIOピンがあり、
各々のGPIOピンには使用できる機能が割り当てられています。
割り当てられている機能の中から使用したい機能をGPIOピンに設定することで、
I2C通信、SPI通信、UART通信などができるようになります。
実際の組み込み開発では、GPIOピンの機能の中からシステムに必要な機能を選択していき、開発システムのハード構成を設計していきます。
このような設計は、製品企画チームから出された企画書をもとにハード設計チームが、
各GPIOピンの機能を選択していき、GPIO端子表のような名前で設計書を作成します。
その次に、ソフトウェアチームでは、このGPIO端子表をもとに、システム起動時に設定していきます。
2.GPIOピンの機能について
各々GPIOピンには、どの機能が使用できるか決まっており、その詳細はCPUのデータシートに記載されています。
例えば、ラズパイ4のCPU(BroadCom bcm2711)のデータシートに記載されているGPIO機能表の一部を抜粋して見てみると、以下のような感じになっています。
GPIO番号 | Pull | ALT0 | ALT1 | ALT2 | ALT3 | ALT4 | ALT5 |
---|---|---|---|---|---|---|---|
GPIO0 | High | SDA0 | SA5 | PCLK | SPI3_CEO_N | TXD2 | SDA6 |
GPIO1 | High | SCL0 | SA4 | DE | SPI3_MISO | RXD2 | SCL6 |
GPIO2 | High | SDA1 | SA3 | LCD_VSYNC | SPI3_MOSI | CTS2 | SDA3 |
GPIO3 | High | SCL1 | SA2 | LCD | SPI3_CEO_N | TXD2 | SDA3 |
このように、1つのGPIOピンに対して、ALT0~ALT5までの機能が割り当てており、
この中から1つだけ、機能を選択して使用することができます。
同時に2つの機能を使用することはできません。
例えば、GPIO0でSDA0(I2C0のデータ線)を設定すると、他の機能は使用できません。
そして、Pullは、GPIOラインの電位状態をHighにしておくのかLowにしておくのかを設定する項目になります。
例えば、I2Cを使用する場合は、クロック線(SCL)とデータ線(SDA)をHigh状態にしておく必要がありますので、
Pullの項目は、Highに設定しておきます。また、High状態にすることをプルアップするとも言います。
これらの設定は、プログラム中で、機能を変更をすることはできますが、
組み込み開発では、一度決めた機能を変更することは、あまりありません。
また、ALT0~ALT5までの機能を使用せずに、単にGPIO機能として、使用することもできます。
3.GPIO機能について
GPIOピンには、割り当てられた機能以外に全てのGPIOピンが持っているGPIO機能というものがあります。
このGPIO機能は、2項のGPIO機能表でALT0~5の機能をどれも設定していない状態の場合に動作します。
GPIO機能には、出力設定と入力設定があり、出力設定にすると、
そのGPIOピンの電位をHighにしたり、Lowにしたりと自分で操作することができます。
また、入力設定にすると外部デバイスからの信号(割り込み)を受けることができます。
GPIO機能の用途としては、LEDを点灯/消灯する時やデバイスの電源をON/OFFする時など、
そもそもGPIO機能として使いたい場合や、
不具合解析の時に、I2C通信波形に合わせて割り込みが発生するタイミングや処理時間を見るために、
割り込みハンドラ関数の入口/出口で、システム的に使用していないGPIOピンをHigh/Lowして見たりする時などに使用します。
4.自宅でGPIOの動作を確認するためには?
自宅でGPIOの動作を見るためには、Raspberry Pi (以下、ラズパイ)のような組み込みボードが必要になります。
また、波形レベルでGPIOの動作を見るためには、
・ブレッドボードやジャンパー線
などの機材が必要になります。
Windowsが搭載されているAT機のデスクトップパソコンでは、なかなか難しいので、
やはりラズパイ のような組み込みボードの方が簡単に扱いやすいです。
このブログでは、
RaspberryPi 3B+でLEDの点灯・消灯・点滅のやり方 - 水瓶座列車
RaspberryPi 3B+で人感センサーの動作確認(感知したときにLEDを点灯する。) - 水瓶座列車
で、ラズパイのGPIOを使用していますので、GPIOがどういうものかをイメージするために参考になると思います。
5.最後に
組み込み開発で必要となる「GPIO」に関する知識は、基本中の基本になります。
I2CやSPI、UARTなどのシリアル通信を理解する前に、まずは、GPIOがどのようなものかを理解しておくと良いです。
<関連・おすすめ記事>
Linux勉強用の中古パソコンおすすめショップランキング - 水瓶座列車
プログラミングを独学で勉強するためのLinuxパソコン準備手順 - 水瓶座列車
C言語の始め方と基本構造、コンパイルから実行までを解説 - 水瓶座列車
RaspberryPi (ラズパイ)の購入時に最低限必要なものとおすすめセット - 水瓶座列車
RaspberryPi 3B+でLEDを徐々に点灯、消灯させる方法 - 水瓶座列車
RaspberryPi 3B+で人感センサーの動作確認(感知したときにLEDを点灯する。) - 水瓶座列車
Raspberry Pi 3B+ のGPIOピン割り当ての解説 - 水瓶座列車