作れるものはなんでも作ります
過去の記事で、Raspberry PiでSPIディスプレイを使うにはfbcp-ili9341を使って表示させる方法を記載しましたが、残念ながらfbcp-ili9341は64bitに対応できない・参照しているライブラリが古いとの理由で開発終了となりました。
一方で、Raspberry PiでSPIディスプレイを扱うのにあたって新しいドライバがLinuxカーネルに組み込まれるようになりました。mipi-dbi-spiです。この記事では、64bit版Raspberry Pi OSでの適用方法を記載します。
mipi-dbi-spi経由のSPIディスプレイ制御を行うにあたり、次の対応が必要になっています。
これらの対応で、Raspberry Pi起動後にデスクトップをそのままSPIディスプレイに表示できるようになります。
/boot/firmware/config.txt の末尾に、次のように記載します。
dtoverlay=mipi-dbi-spi,spi0-0,speed=70000000
dtparam=width=320,height=240
dtparam=reset-gpio=24,dc-gpio=22
dtparam=backlight-gpio=23
GPIO(Reset/DC/Backlight)は、自身の接続先に合わせて調整してください。
ILI9341の場合、データシートを読むと100nsが最小(18.3.4 Display Serial Interface Timing Characteristics (4-line SPI system)のtwcの値)なので、最速は10MHzとなりますが、真面目に10MHzに設定するとカクカクして扱いづらいです。実力値で70MHzを設定しているようです。
これが一番肝心なようです。Raspberry Pi環境で実行する場合、mipi-dbi-spiドライバは特に指定がない場合は/lib/firmware/panel.binをファームウェアとしてSPIディスプレイに適用します。これは下記の手順にてビルドができます。
うまく設定できた場合、dmesgに次のように記録されます。フレームバッファが設定され、ディスプレイにデスクトップ画面が表示されます。
[ 10.320278] [drm] Initialized panel-mipi-dbi 1.0.0 20220103 for spi0.0 on minor 2
[ 10.949283] panel-mipi-dbi-spi spi0.0: [drm] fb0: panel-mipi-dbid frame buffer device
SPIのディスプレイでかなりスムーズに表示できるぞ pic.twitter.com/5UZmNeDWhw
— niccolli (@niccolli) April 4, 2024
もたつくようなこともなくスムーズに表示されています。じっと見つめていると反映されていない箇所もあるように見えますが、動画の場合はすぐ書き換えられるのであまり気にならないと言えるでしょう。
mipi-dbi-spiは、Wayland環境を前提としているようです。BookwormはWayland が標準になりましたが、Raspberry Pi 3以前(+Zeroシリーズ)では引き続きX11が標準で使われています。
Raspberry Pi 3以前の環境でWaylandを使う場合、/boot/firmware/cmdline.txtに設定を追加する必要があります。raspi-config上での設定は反映されないので注意が必要です。