RaspberryPi のGPIO

RasPiは普通 Linux で動かすので、GPIOのレジスタを直接アクセスすることはない。

また、CPUはARM Cortex-A53 であり、MMUを持っている。物理アドレス論理アドレスに変換し、ページングされたメモリ空間がOSからアプリに渡される。

 

GPIOやタイマ、ADCなどの他のペリフェラルは、それぞれの制御レジスタ・データレジスタを持っている。メモリマップドIOでメモリ空間にマッピングされている。

Broadcom BCM2837 のハードウェアマニュアルに記載があるらしい。

[BCM2837 ARM Peripherals]

https://web.stanford.edu/class/cs140e/docs/BCM2837-ARM-Peripherals.pdf

p5 に物理アドレスMMUと仮想アドレスの図があった。

 

/dev/mem はルート権限が必要で使いにくいので、RasPi には /dev/gpiomem が追加されている。こちらはルート権限は不要で、ユーザが gpio グループに所属していれば良い。そして、デフォルトの pi ユーザは gpio グループに所属している。

これは、RasPi固有の話で、Linux 全般に通じる話ではない。

 

疑似ファイルシステム sysfs は、Linux全般に通じる話。/proc 以下が整理がつかずわかりにくくなったため、 /sys が設計・実装されたらしい。知らなかった。(汗

/sys/class/gpio にアクセスすれば良いらしい。

qiita.com

RPi GPIO Code Samples - eLinux.org

 

tool-lab.com

tool-lab.com

karaage.hatenadiary.jp