いままで説明で「GPIO」という言葉を普通に使っていましたが、初心者だと
「そもそもGPIOってなに?」
だと思いますので、今回簡単に説明したいと思います。
GPIO=General Purpose Input/Output
汎用のインプット・アウトプットです。
CPUには電源ピンやJTAG用・専用機能のための特殊ピンも多いですが、それ以外のほとんどはこのGPIO用のピンとなっています。
CPUのほとんどのピンがGPIOということからも、このGPIOが如何に重要なものかと分かるかと思います。
このGPIOは何ができるのでしょうか。
まず、入力と出力の機能があって、その機能は切り替え式です。
出力機能:
HIGH(ほぼ電源電圧)を出す。
LOW(ほぼ0V)を出す。
入力機能:
入ってきている電圧がHIGH/LOWのどちらかを判別する。
これだけです。
「これだけでなにができるんだ??」
と思うかもしれませんが、実はこれでなんでもできるんです。
出力にしてそのさきにLEDをつなげれば、LEDを点灯・消灯できます。
出力にしてそのさきにトランジスタなどをつなげれば、大電力が必要なモーターもコントロールできます。
もっといえば、高度な機能がないIC類、例えばモータードライバだとか電源ICなんていうのは、そのICのピンをHIGHにするかLOWにするかだけで動作ON・OFFが切り替わりますので、このGPIOだけで制御できてしまうわけです。
そういったICは状態出力もHIGH・LOWだけなので、それを入力モードにしたGPIOで受ければCPUで状態を判定できるわけです。
デジタル出力のセンサーとかも入力モードのGPIOで受ければいいわけです。
基本的にはデジタル回路はHIGH・LOWだけなので、実はこのGPIOだけで(原理的には)すべての事ができるんです。
ただし、GPIOでも(原理的にはできるけど)実際にやろうとすると難しいこともあります。
例えば、通信です。
UARTやSPIやI2Cなどの通信プロトコルは、CPUにその周辺機器が乗っていれば「◯◯のデータを送ってね」というだけで、周辺機器が勝手にデータを送ってくれて、送信が終わったら「送信終わったよ」と周辺機器が教えてきてくれます。
しかし、これをGPIOでやると、プログラムで全部操作しないといけないので、
「クロックのポートをHIGH出力にして、データ送信のポートをnbit目の状態にして、そして?us待ってからまたくクロックのポートをLOW出力にして・・・」
ということを全部やらないといけません。
これをやると、無理矢理なので遅い・CPUが他のことが出来ないという問題があるので、普通はこんなことはやりません。
(世の中にはGPIOで通信機能を実現しているものもないことはないです。特殊例ですが)
とまぁ、原理的にはデジタル系のことはなんでもできますが、唯一通信機能は苦手ということです。
逆に言うと、それ以外はほとんどなんでもできるので、これがないとなにもできません。
以上、小田切でした。
最近のコメント