Quantcast
Channel: OSAKANA TAROのメモ帳
Viewing all articles
Browse latest Browse all 816

ラズパイ用Waveshare / Kuman 3.5インチ 320×480タッチパネル付き液晶をOrange Piで使う

$
0
0

正月にアマゾンで「Kuman Raspberry Pi 3 2用ディスプレイ タッチパネル 3.5インチ 320*480 SPI インターフェース Raspberry Pi Model B B+ A+ A SC06」というのがタイムセールで売っていたので買ってみた。

買ったまましまってあったのをすっかり忘れていたので、今頃になって使ってみた。

この製品はWaveshareの「3.5inch RPi LCD (A), 320×480」のコピー製品。
なので、情報はWaveshare側で追う必要がある。

いろいろ面倒な試行錯誤があったのですが、最終結果を書いておきます。

2017/04/10の時点では、液晶表示はできました。
タッチパネル動作については、まだ全然できていません。


Orange Pi PCでSPI接続の液晶で表示をする場合に必要な設定

インストールしておくもの

フレームバッファの動作チェックに使うfbiコマンド

apt install fbi

X-Windowを今回のLCDに出力するために使う

apt install xserver-xorg-video-fbdev

モジュールを読み込むための /etc/modules-load.d/waveshare.conf の内容

flexfb
fbtft_device

上記で指定したモジュールのパラメータ指定 /etc/modprobe.d/waveshare.conf の内容

options flexfb width=320  height=480  regwidth=16 init=-1,0xb0,0x0,-1,0x11,-2,250,-1,0x3A,0x55,-1,0xC2,0x44,-1,0xC5,0x00,0x00,0x00,0x00,-1,0xE0,0x0F,0x1F,0x1C,0x0C,0x0F,0x08,0x48,0x98,0x37,0x0A,0x13,0x04,0x11,0x0D,0x00,-1,0xE1,0x0F,0x32,0x2E,0x0B,0x0D,0x05,0x47,0x75,0x37,0x06,0x10,0x03,0x24,0x20,0x00,-1,0xE2,0x0F,0x32,0x2E,0x0B,0x0D,0x05,0x47,0x75,0x37,0x06,0x10,0x03,0x24,0x20,0x00,-1,0x36,0x28,-1,0x11,-1,0x29,-3
options fbtft_device debug=3 rotate=90 name=flexfb speed=16000000 gpios=reset:2,dc:71

X-Windowで表示させるための /usr/share/X11/xorg.conf.d/98-fbdev.conf の内容

Section "Device"
  Identifier "myfb"
  Driver "fbdev"
  Option "fbdev" "/dev/fb8"
EndSection

注: /dev/fb8 は環境によっては番号が変わるはずです

これで再起動することで、LCDに表示されるようになりました….

ただ・・・時々、うまく表示されないことがあるのが謎です・・・

armbianフォーラムの「[SOLVED] Orange PI PC H3 Winner, compiled with igorpecovnik jessie desktop」に/boot/bin/orangepipc.binをfexに変換し、[disp_init]と[hdmi_para]にある下記項目を変更する、という話があった。

[disp_init]
disp_init_enable = 1
disp_mode = 0
screen0_output_type = 3
screen0_output_mode = 5
screen1_output_type = 3
screen1_output_mode = 5
fb0_width = 800
fb0_height = 480
fb1_width = 800
fb1_height = 480
 
[hdmi_para]
hdmi_used = 1
hdmi_x = 800
hdmi_y = 480
hdmi_power = "vcc-hdmi-18"
hdmi_cts_compatibility = 1

この情報を元に関連する記述を下記の様に書き換えたところ、安定して表示されるようになった。

[disp_init]
disp_init_enable = 1
disp_mode = 0
screen0_output_type = 3
screen0_output_mode = 5
screen1_output_type = 3
screen1_output_mode = 5
fb0_format = 0
fb0_width = 320
fb0_height = 480
fb1_format = 0
fb1_width = 320
fb1_height = 480
hdcp_enable = 1
hdmi_cts_compatibility = 0

[hdmi_para]
hdmi_used = 1
hdmi_power = "vcc-hdmi-18"
hdcp_enable = 0
hdmi_cts_compatibility = 1
hdmi_x = 320
hdmi_y = 480

もちろん、元のbinファイルを「bin2fex orangepipc.bin orangepipc.fex」でテキスト形式のfexファイルに変換し、編集したあと、
「fex2bin orangepipc.fex orangepi.bin」でbinファイルに戻すという手順も行っています。


参考にしたサイト

・Raspberry PiとOrange PiのGPIO指定の違いについて
RaspBerry Piで遊んでみる」の「WiringPiとWiringOP」の記載と
このページで紹介されていた「WiringOP

実際に実行してみて得られた下記の実行結果からGPIOの番号を得ました

osakanataro@orangepipc:/work/lcd/LCD-show$ gpio readall
 +-----+-----+----------+------+---+-Orange Pi+---+---+------+---------+-----+--+
 | BCM | wPi |   Name   | Mode | V | Physical | V | Mode | Name     | wPi | BCM |
 +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+
 |     |     |     3.3v |      |   |  1 || 2  |   |      | 5v       |     |     |
 |  12 |   8 |    SDA.0 | ALT5 | 0 |  3 || 4  |   |      | 5V       |     |     |
 |  11 |   9 |    SCL.0 | ALT5 | 0 |  5 || 6  |   |      | 0v       |     |     |
 |   6 |   7 |   GPIO.7 | ALT3 | 0 |  7 || 8  | 0 | ALT3 | TxD3     | 15  | 13  |
 |     |     |       0v |      |   |  9 || 10 | 0 | ALT3 | RxD3     | 16  | 14  |
 |   1 |   0 |     RxD2 | ALT3 | 0 | 11 || 12 | 0 | ALT3 | GPIO.1   | 1   | 110 |
 |   0 |   2 |     TxD2 | ALT3 | 1 | 13 || 14 |   |      | 0v       |     |     |
 |   3 |   3 |     CTS2 | ALT3 | 0 | 15 || 16 | 0 | ALT3 | GPIO.4   | 4   | 68  |
 |     |     |     3.3v |      |   | 17 || 18 | 0 | ALT3 | GPIO.5   | 5   | 71  |
 |  64 |  12 |     MOSI | ALT4 | 0 | 19 || 20 |   |      | 0v       |     |     |
 |  65 |  13 |     MISO | ALT4 | 0 | 21 || 22 | 0 | ALT3 | RTS2     | 6   | 2   |
 |  66 |  14 |     SCLK | ALT4 | 0 | 23 || 24 | 0 | ALT4 | CE0      | 10  | 67  |
 |     |     |       0v |      |   | 25 || 26 | 0 | ALT3 | GPIO.11  | 11  | 21  |
 |  19 |  30 |    SDA.1 | ALT4 | 0 | 27 || 28 | 0 | ALT4 | SCL.1    | 31  | 18  |
 |   7 |  21 |  GPIO.21 | ALT3 | 0 | 29 || 30 |   |      | 0v       |     |     |
 |   8 |  22 |  GPIO.22 | ALT3 | 0 | 31 || 32 | 0 | ALT3 | RTS1     | 26  | 200 |
 |   9 |  23 |  GPIO.23 | ALT3 | 0 | 33 || 34 |   |      | 0v       |     |     |
 |  10 |  24 |  GPIO.24 | ALT3 | 0 | 35 || 36 | 0 | ALT3 | CTS1     | 27  | 201 |
 |  20 |  25 |  GPIO.25 | ALT3 | 0 | 37 || 38 | 0 | ALT3 | TxD1     | 28  | 198 |
 |     |     |       0v |      |   | 39 || 40 | 0 | ALT3 | RxD1     | 29  | 199 |
 +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+
 | BCM | wPi |   Name   | Mode | V | Physical | V | Mode | Name     | wPi | BCM |
 +-----+-----+----------+------+---+-Orange Pi+---+------+----------+-----+-----+
osakanataro@orangepipc:/work/lcd/LCD-show$

・Waveshare 3.5インチTFTパネルのメーカ公式情報
3.5inch RPi LCD (A), 320×480 製品ページ」と「3.5inch RPi LCD (A)情報ページ
最終的には、ピンをどのような用途で使っているか、しか参考になる情報は無かった。

・Waveshare 3.5インチTFTパネルを汎用のflexfbで認識させるパラメータ
おっさんエンジニアの実験室」の「Waveshare 3.5 Spotpear TFTパネルをRPi2に付けて・・」で紹介されているfbtftのIssue#215「Support for Waveshare 3.5 Spotpear」の「fergie4000さんのコメント

modprobe flexfb  width=320  height=480  regwidth=16 init=-1,0xb0,0x0,-1,0x11,-2,250,-1,0x3A,0x55,-1,0xC2,0x44,-1,0xC5,0x00,0x00,0x00,0x00,-1,0xE0,0x0F,0x1F,0x1C,0x0C,0x0F,0x08,0x48,0x98,0x37,0x0A,0x13,0x04,0x11,0x0D,0x00,-1,0xE1,0x0F,0x32,0x2E,0x0B,0x0D,0x05,0x47,0x75,0x37,0x06,0x10,0x03,0x24,0x20,0x00,-1,0xE2,0x0F,0x32,0x2E,0x0B,0x0D,0x05,0x47,0x75,0x37,0x06,0x10,0x03,0x24,0x20,0x00,-1,0x36,0x28,-1,0x11,-1,0x29,-3
modprobe fbtft_device debug=3 rotate=90 name=flexfb speed=16000000 gpios=reset:25,dc:24

fbtft_deviceのgpios指定はRaspberry Piの場合で、そのままOrange Pi PCで使うとセグメンテーションフォルト。
WiringOPを実行(gpio readall)して、resetで使う22ピンのRST、dcで使う18ピンのLCD_RSがOrange Pi PCでは何番にあたるかを確認。
wPiなら「gpios=reset:6,dc:19」、BCMなら「gpios=reset:2,dc:71」ということで、試してみた結果、後者の「gpios=reset:2,dc:71」となった、

・fbtft_deviceとflexfbのパラメータの意味
fbtft_device」と「flexfb
とはいえ、flexfbのinitパラメータに関しては完全に呪文

・fbtftの表示動作確認で使えるコマンド
fbtft公式の「Framebuffer use」。
fbiコマンドで画像出力する、というのが簡単。

・armbianでのモジュールパラメータの設定方法
Allwinner(Generic)のEnable Hardware Features」の「Connect your LCD Display

・Waveshare 3.5インチTFTパネルのタッチパネルを認識させるパラメータ
fbtftのIssue#215「Support for Waveshare 3.5 Spotpear」の「pykoonさんのコメント
fbtft wikiの「Touchpanel

ただし、armbian環境ではads7846_device が無く、ads7846 しかない。

ラズパイではoverlaysで制御するようだが、armbian wikiの「Allwinner DT overlays」にあるarmbian-add-overlayを実行しようとしても無いので、使えなさそう・・・
armbian forumの「ads7846 / Banana pro」を見ると使えそうなことが書いてあるんですが・・・

99-calibration.confのサンプル

Section "InputClass"
        Identifier      "calibration"
        MatchProduct    "ADS7846 Touchscreen"
        Option  "Calibration"   "3932 300 294 3801"
        Option  "SwapAxes"      "1"
EndSection

・バックライト関連
fbtftのwikiに「Backlight」という項目はあるのだが、製品ページのピン配列を見ると該当しそうなものが見当たらない。
制御できないのではないか?


Viewing all articles
Browse latest Browse all 816

Trending Articles