はじめに
このページではXillinuxのGPIOを使ってLチカ(LED点灯制御)をしてます。ベースになる環境はXillinux2.0(導入編)で構築したものです。
★★★セミナー情報★★★<広告>
〇手ぶらでOK!IoTプログラミング教室
-- IoT開発キットM5StickC Plus2で作る通信ガジェット
2025年2月28日(金) CQ出版社セミナルーム
1.GPIO番号の調査
1-1.トップ回路記述の確認
xillinuからGPIOを使ってLチカしようと思うのですがGPIO番号が分からない?
ドキュメントを斜め読みしてみますが、読むところが違うのか分からない?
そこで設計データのトップ回路記述(xillinux-eval-zybo-2.0c\verilog\srcxillydemo.v)を読んでみると
信号はPS_GPIO[54:0]が使われています。
xillydemo.vの抜粋
module xillydemo
(
input clk_100,
input otg_oc,
inout [55:0] PS_GPIO,
~~途中省略~~
// General signals
.clk_100(clk_100),
.otg_oc(otg_oc),
.PS_GPIO(PS_GPIO),
1-2.PIN配置制の確認
次にPIN配置制約(xillinux-eval-zybo-2.0c\vivado-essentials\xillydemo.xdc)を読んでみると
LED(PINロケーション:D18,G14.M15,M14)はPS_GPIOではなくGPIO_LED[3:0]に繋がっている.
コメントには
PS_GPIO[10:7]はLEDに接続、でもxillybusでは使えない...
LEDはピン配置変更しないとGPIOからは使えなさそうです。
xillydemo.xdcの抜粋(LED回り)
set_property -dict "PACKAGE_PIN M14 IOSTANDARD LVCMOS33" [get_ports "GPIO_LED[0]"]
set_property -dict "PACKAGE_PIN M15 IOSTANDARD LVCMOS33" [get_ports "GPIO_LED[1]"]
set_property -dict "PACKAGE_PIN G14 IOSTANDARD LVCMOS33" [get_ports "GPIO_LED[2]"]
set_property -dict "PACKAGE_PIN D18 IOSTANDARD LVCMOS33" [get_ports "GPIO_LED[3]"]
~~途中省略~~
# PS_GPIO pins:
# GPIO pin 0 was USB OTG PHY reset on Zedboard, now going from MIO46 directly
# GPIO pins 6-1 were connected to OLED on Zedboard, now unused
# GPIO pins 10-7 were connected to the four LEDS not used by Xillybus.
#
1-3.スライドスイッチのGPIO接続
Lチカは後回しにして、先にGPIOからスライドスイッチの読み込みをしてみます。
xillydemo.xdcではスライドスイッチ(ロケーション:T16,W13,P15,G15)がPS_GPIO[14:11]に接続してます。
xillydemo.xdcの抜粋(スライドスイッチ)
# On-board Slide Switches
set_property -dict "PACKAGE_PIN G15 IOSTANDARD LVCMOS33" [get_ports "PS_GPIO[11]"]
set_property -dict "PACKAGE_PIN P15 IOSTANDARD LVCMOS33" [get_ports "PS_GPIO[12]"]
set_property -dict "PACKAGE_PIN W13 IOSTANDARD LVCMOS33" [get_ports "PS_GPIO[13]"]
set_property -dict "PACKAGE_PIN T16 IOSTANDARD LVCMOS33" [get_ports "PS_GPIO[14]"]
2.GPIO操作
2-1.とりあえずGPIOで読んでみる
PS_GPIO[14:11]がスライドスイッチに接続しているので
素直に、xillinuxのコンソールからGPIO11にアクセスしてます。
アクセスできてない...
root@localhost:~# echo 11 > /sys/class/gpio/export
root@localhost:~# echo in > /sys/class/gpio/gpio11/direction
root@localhost:~# cat /sys/class/gpio/gpio11/value
1
~~スライドスイッチ0を動かして
root@localhost:~# !!
cat /sys/class/gpio/gpio11/value
1
~~値が変わらない読めてない...
2-2.GPIO番号の情報を探す
PIO番号と信号の番号が一致してないことはいつものことなので、Webで調べます
http://zedboard.org/content/accessing-leds-and-switches-xillinux
にオフセットが54と情報があります。
54+11=65と言うことで、コンソールからGPIO65を操作します。
スライドスイッチの値の読み込み成功です。
root@localhost:~# echo 65 > /sys/class/gpio/export
root@localhost:~# echo in > /sys/class/gpio/gpio65/direction
root@localhost:~# cat /sys/class/gpio/gpio65/value
0
~~スライドスイッチ0を動かして
root@localhost:~# !!
cat /sys/class/gpio/gpio65/value
1
~~値が変わった!!
3.Lチカ(LED点灯制御)
3-1.Vivadoでトップ回路記述変更
GPIOからLチカをするためには外部PINへの接続の変更が必要です。xillydemo.xdcで配置を変更してもよいのですが、Vivadoでの回路変更も試してみたいので、トップ回路記述でPS_GPIO[10:7]をGPIO_LED[3:0]に接続するように変更してみます。
Vivadoを起動してxillinuxの設計プロジェクトを読み込みます。以下を操作します。
①sourceのxillydemo.vをダブルクリックすると右側のテキストウインドにxillydemo.vが開く
②オリジナルのGPIO_LEDの接続をコメントアウトしてGPIO_LEDの接続先を空白してオープンにする。
③GPIO_LEDにPS_GPIO[10:7]を接続接続するassign文を追加する
その後はセーブしてBITファイルを生成する
3-2.MicroSDカードの回路情報変更
Xillinuxをhaltコマンドで終了してZYBOの電源を切ります。MicroSDカードを取り出してPCへ接続します。新しく作ったBITファイルをMicroSDカードへ上書きコピーして差し替えます。MicroSDカードをZYBOに戻して電源をれます。Xillinuxが立ち上がるります。GPIOのデフォルト値は1のようでLEDがはじめから点灯しています。
3-3.LED制御
PS_GOIO[7]がLD0のLEDに接続されているので
54+7=61でGPIO64を操作します。
root@localhost:~# echo 61 > /sys/class/gpio/export
root@localhost:~# echo out > /sys/class/gpio/gpio61/direction
directionをoutにした時点でLD0が消灯します。
valueに1をセットすると点灯
valueに0をセットすると消灯します
root@localhost:~# echo 1 > /sys/class/gpio/gpio61/value
root@localhost:~# echo 0 > /sys/class/gpio/gpio61/value
最後にLEDを1個おきに点灯してみます。
右のコマンドで
LD0=ON,LD1=OFF,LD2=N,LD3=OFF
になります。
xillydemo.xdcを確認するPMODとの接続も分かるので同様の操作でPMODも制御可能です。
GPIO・Lチカ編はここまで
root@localhost:~# echo 62 > /sys/class/gpio/export
root@localhost:~# echo 63 > /sys/class/gpio/export
root@localhost:~# echo 64 > /sys/class/gpio/export
root@localhost:~# echo out > /sys/class/gpio/gpio62/direction
root@localhost:~# echo out > /sys/class/gpio/gpio63/direction
root@localhost:~# echo out > /sys/class/gpio/gpio64/direction
root@localhost:~# echo 1 > /sys/class/gpio/gpio61/value
root@localhost:~# echo 0 > /sys/class/gpio/gpio62/value
root@localhost:~# echo 1 > /sys/class/gpio/gpio63/value
root@localhost:~# echo 0 > /sys/class/gpio/gpio64/value
★★★セミナー情報★★★<広告>
〇手ぶらでOK!IoTプログラミング教室
-- IoT開発キットM5StickC Plus2で作る通信ガジェット
2025年2月28日(金) CQ出版社セミナルーム