BeagleBoneGreenでGPSを受信する02で書いた/boot/uEnv.txtを編集する方法で端子設定をするとconfig-pin
を使ったGPIOの機能設定ができなくなります。(他の方法があるかもしれない。。)
PCのu-centerからGPSモジュールの設定を変更したい場合にUART端子にPCからのUART入出力を接続するのですが、出力(送信)がBeagleBoneと衝突してしまい、現在の設定値を取得するコマンドや設定するコマンドが正しく送信できません。BeagleBoneの端子設定をGPIO入力にすれば回避できますが、/boot/uEnv.txtを編集して再起動を毎回するのは面倒ですので他の方法でGPIOの設定を行います。
参考:https://gist.github.com/pdp7/d4770a6ba17e666848796bf5cfd0caee
#スタートアップスクリプトの作成
GPIO端子をUART端子に変更する設定を記述します。
$ sudo nano /usr/bin/enable-uart-pins.sh
#!/bin/bash
config-pin p9.24 uart
config-pin p9.26 uart
enable-uart-pins.shのパーミッションを変更します。
$ sudo chmod 755 /usr/bin/enable-uart-pins.sh
#サービス起動スクリプトの作成
enable-uart-pins.shが起動時に実行されるようにします。
$ sudo nano /lib/systemd/system/enable-uart-pins.service
[Unit]
Description=Enable UART pins
After=generic-board-startup.service
[Service]
Type=simple
ExecStart=/usr/bin/enable-uart-pins.sh
[Install]
WantedBy=multi-user.target
#サービス起動設定
システム起動時に作成したサービスが起動するようにします。
sudo systemctl daemon-reload
sudo systemctl enable enable-uart-pins.service
#動作確認
再起動後にサービスが起動されていることとGPIO設定が変更されていることを確認します。
$ sudo systemctl status enable-uart-pins.service
● enable-uart-pins.service - Enable UART pins
Loaded: loaded (/lib/systemd/system/enable-uart-pins.service; enabled; vendor
Active: inactive (dead) since Sun 2019-03-10 09:31:34 JST; 1h 16min ago
Process: 2061 ExecStart=/usr/bin/enable-uart-pins.sh (code=exited, status=0/SU
Main PID: 2061 (code=exited, status=0/SUCCESS)
3月 10 09:31:33 beaglebone systemd[1]: Started Enable UART pins.
lines 1-7/7 (END)
$ config-pin -q p9.24 && config-pin -q p9.26
P9_24 Mode: uart
P9_26 Mode: uart
これでu-centerの設定を行うときはconfig-pin p9.24 gpio
で一時的にBeagleBoneの送信端子をGPIOに変更しUART出力を無効にできます。UARTに戻すときはconfig-pin p9.24 uart
で。
#GPIOの入出力設定
GPIOは通常は入力がデフォルトです。GPIOが出力の場合、これもPCのUART出力と衝突してしまうため設定変更が必要です。BeagleBoneのP9.24とP9.26は初期状態は入力です。
(ちなみに、JTAG兼用端子などはデフォルトが出力に設定されている場合があります。これはプロセッサまたはマイコンによって異なるためデータシートで確認して下さい。)
GPIOの入出力設定は/sys/class/gpio/gpio**/direction
にin
またはout
を書き込むことで設定できます。
$ sudo echo in > /sys/class/gpio/gpio24/direction