/var/log/messages

Sep 26, 2014 - 1 minute read - Comments - programming Linux

RasPI な GPIO で L チカなプログラム

ええと、以下な二種類の方法がある模様。

  • sysfs を使う
  • レジスタを mmap して直接書き込む

とりあえず sysfs について確認してみました。まず抵抗とか LED なんかをブレッドボードに取り付けて #1 な PIN と GND を接続しておきます。

あとは以下で LED が点灯。

$ sudo echo 18 > /sys/class/gpio/export $ ls /sys/class/gpio export gpio18 gpiochip0 unexport $ sudo echo out > /sys/class/gpio/gpio18/direction $ sudo echo 1 > /sys/class/gpio/gpio18/value

消灯は以下。

$ sudo echo 0 > /sys/class/gpio/gpio18/value

これは非常にお手軽ですね。C の実装例が elinux.org に出てます。

ちなみにレジスタ直接、というのは以下。

とりあえず確認

BCM2835 ARM Peripherals な PDF によれば I/O Peripherals な base address は 0x20000000 になっています。また、GPIO は base address に 0x200000 を加えた値になっているのが分かります。

ここまで分かっていれば mmap と /dev/mem を使って map なソレが取得できる模様。

あとは

  • GPFSEL? を操作する INP_GPIO とか OUT_GPIO なマクロ
  • GPSET0 レジスタなアドレスを提供する GPIO_SET なマクロ
  • GPCLR0 レジスタなアドレスを提供する GPIO_CLR なマクロ

を使ってもごもご、という事になるのか。とりあえず両方実装して動作確認してみます。