BBB Rev.Cにグラフィック液晶の接続を試みたので記録に残す。
選んだLCDは秋月の1850円LCDであるTFT液晶モジュールATM0430D25。
これまではいわゆる秋月の3000円LCDであるTFT液晶モジュールATM0430D5を付けようかと長い間迷っていたが、部品代合計が5000円を超えてくる。
4DCAPE-43Tを通販で購入した方がむしろ安くなってしまうので踏ん切りが付かずにいた。
4DCAPE-43Tを買って付けるのでは面白みに欠けるが、だからといってタッチスクリーンが無くて値段が高いものを作るのも興醒めだ。
1850円のLCDならばギリギリ電子工作のモチベーションを満たせるというわけだ。
とは言え、LCD接続に関しては多くの先人が数年前に踏破しつくしている領域で、新しいことは何もない。
なのでせめて、できるだけ再現性に関して注意を払ってみようと思う。
ハンダ付けは20ピンの細ピンヘッダ2個だけであるので、簡単にカラーグラフィック液晶を試す事ができる。
回路図は以下。
部品表も一応示す。
記号 | 型番 | 仕様/諸元等 | 定数等 | 数量 | 入手先 |
L1 | ATM0430D25 | TFT液晶モジュール | 1 | 秋月電子 | |
DB1 | AE-CNCONV-40P-0.5 | フレキコネクタDIP化基板 | 1 | 秋月電子 | |
U1 | MAU104 | 1W級絶縁型DC-DCコンバータ | 12V84mA | 1 | 秋月電子 |
R1,R2 | アキシャルリードカーボン抵抗 | 33Ω | 2 | 秋月電子 | |
R3 | アキシャルリードカーボン抵抗 | 57KΩ | 1 | 秋月電子 | |
J1,J2 | 細ピンヘッダ | 20P | 2 | 秋月電子 | |
2.54mm用フラットケーブル オス-メス※ (QIコネクタ コード付き) |
40P 20cm | 1 | サトー電気 |
※必要に応じて切り分ける
この他にブレッドボードとブレッドボード用の配線部材が若干必要。
この作例ではRGB565の16bitカラーとなる。
BBBもATM0430D25も実はRGB888の24bitカラーをサポートする。
なのでRGB888フルカラー実装とすることも可能だと思われる。
実際BB-BONE-LCD4-01の設定を見る限りbpp=24となっているのでドライバレベルではRGB888で動作しているもののGPIO設定はRGB565分のみ
有効化されているようだ。
有効化されていないdata線をdtsファイルで有効化させ、LCDと結線すればRGB888の24bitカラー表示が可能になるものと思われるが試していない。
不足している設定は以下のPINのもの。
P8.19 mode1:lcd_data23 B0 P8.13 mode1:lcd_data22 G0 P8.14 mode1:lcd_data21 R0 P8.17 mode1:lcd_data20 B1 P8.12 mode1:lcd_data19 G1 P8.11 mode1:lcd_data18 R1 P8.16 mode1:lcd_data17 B2 P8.15 mode1:lcd_data16 R2
ちなみにAM335XにはLCD周りにSilicon Errataがあり、RGB565の場合とRGB888の場合でRとBの結線が入れ替わってしまう。
普通に考えると、RGB565の結線を選ぶならばFrame bufferもRGB565で運用した方がメモリ効率の点でも処理速度の点でもメリットがあるが、RGB565とRGB888を同じ結線にはできないのでどちらかを選ぶ必要があるわけだ。
RGB565での結線にしてしまうと将来RGB888への変更が(ハード変更無しでは)できなくなるのでメモリ効率と処理速度を犠牲にしてRGB888での結線を選択するのも一手であろう。
ATM0430D25はSYNC modeとSYNC-DE modeの二つの同期手段をサポートし、HSYNCとVSYNCをGNDに短絡させることでSYNC-DE modeにすることができる。
SYNC-DE modeはATM0430D5の制御方式とほぼ同一となり一定クロックの間DEが入らなかった場合VSYNCが発生したものとしてラスタ同期を行う仕様のようだ。
VSYNC/HSYNCが不要となり、DEだけの制御となるので簡略化される。
良く考えられたI/Fだと思う。
写真では多くのジャンパ線が飛んでいるが、フレキコネクタDIP化基板の方で端子処理を行ってしまえば、VLED+, VLED-, VDD, GND, R3~R7, G2~G7, B3~B7, PCLK, DEの22本の結線となる。
この程度ならデングラを除く信号線18本をポリウレタン線で引き回す気にもなるので工作として自由度が高いのではないだろうか。
バックライトLEDは12Vが必要なのでDC-DCコンバータMAU104で5Vから生成する。
R3はMAU104を出力無負荷にすると電圧が跳ね上がるのでLCDを繋げていない場合での負荷として入れてある。
R1/R2はダンパ抵抗。
BBBの設定としては4DCAPE-43T用のものが流用できる。
具体的にはBB-BONE-LCD4-01をcape_mgrに食べさせてやれば良い。
タッチスクリーン系の設定やボタン入力の設定等余計なものもあるが、とりあえずLCDを試すだけであれば十分だ。
ただし、BBBではデフォルトでlcd_data0~lcd_data15, lcd_vsync, lcd_hsync, lcd_pclk, lcd_ac_bias_enといった信号がHDMI出力サポートの為に使用されている。
これらの信号線を使うためにはBB-BONELT-HDMIとBB-BONELT-HDMINの二つの仮想CapeをDisableにする必要がある。
このためには/boot/uboot/uEnv.txtを編集する。
ついでにBB-BONE-LCD4-01が電源投入でenableになるようにする。
debian@beaglebone:~$ sudo -s root@beaglebone:/home/debian# export SLOTS=/sys/devices/bone_capemgr.9/slots root@beaglebone:/home/debian# cat $SLOTS 0: 54:PF--- 1: 55:PF--- 2: 56:PF--- 3: 57:PF--- 4: ff:P-O-L Bone-LT-eMMC-2G,00A0,Texas Instrument,BB-BONE-EMMC-2G 5: ff:P-O-L Bone-Black-HDMI,00A0,Texas Instrument,BB-BONELT-HDMI root@beaglebone:/home/debian# cp /boot/uboot/uEnv.txt /boot/uboot/uEnv.txt.backup root@beaglebone:/home/debian# nano -w /boot/uboot/uEnv.txt root@beaglebone:/home/debian# diff -u /boot/uboot/uEnv.txt.backup /boot/uboot/uEnv.txt --- /boot/uboot/uEnv.txt.backup 2014-10-26 13:18:42.000000000 +0000 +++ /boot/uboot/uEnv.txt 2016-02-07 13:48:00.000000000 +0000 @@ -12,7 +12,10 @@ #cape_disable=capemgr.disable_partno=BB-BONELT-HDMI,BB-BONELT-HDMIN,BB-BONE-EMMC-2G ##Disable HDMI -#cape_disable=capemgr.disable_partno=BB-BONELT-HDMI,BB-BONELT-HDMIN +cape_disable=capemgr.disable_partno=BB-BONELT-HDMI,BB-BONELT-HDMIN + +#Enable LCD4 +cape_enable=capemgr.enable_partno=BB-BONE-LCD4-01 ##Audio Cape (needs HDMI Audio disabled) #cape_disable=capemgr.disable_partno=BB-BONELT-HDMI root@beaglebone:/home/debian#
再起動。
root@beaglebone:/home/debian# sync root@beaglebone:/home/debian# sync root@beaglebone:/home/debian# sync root@beaglebone:/home/debian# reboot
結線が正しければLCDの左上に足の裏が黄色いペンギンが表示され、しばらくコンソール画面となり最終的に潰れたX-Windowの画面が表示されるはずだ。
この状態でもUSBキーボードとUSBマウスを繋げれば一応使うことができるが、このサイズのLCDではGUIはあまり実用的ではない。
SSHのコンソールからcapemgrでの登録状況を確認する。
debian@beaglebone:~$ sudo -s root@beaglebone:/home/debian# export SLOTS=/sys/devices/bone_capemgr.*/slots root@beaglebone:/home/debian# cat $SLOTS 0: 54:PF--- 1: 55:PF--- 2: 56:PF--- 3: 57:PF--- 4: ff:P-O-L Bone-LT-eMMC-2G,00A0,Texas Instrument,BB-BONE-EMMC-2G 5: ff:P-O-- Bone-Black-HDMI,00A0,Texas Instrument,BB-BONELT-HDMI 6: ff:P-O-- Bone-Black-HDMIN,00A0,Texas Instrument,BB-BONELT-HDMIN 7: ff:P-O-L Override Board Name,00A0,Override Manuf,BB-BONE-LCD4-01 root@beaglebone:/home/debian#
意図通りの設定となっている。
GUIは使わないのでXの起動を抑制する。
root@beaglebone:/home/debian# cd /etc/init.d root@beaglebone:/etc/init.d# chmod 0 lightdm root@beaglebone:/etc/init.d# chmod 0 x11-common root@beaglebone:/etc/init.d# chmod 0 xrdp root@beaglebone:/etc/init.d#
再起動を行う。
root@beaglebone:/etc/init.d# sync root@beaglebone:/etc/init.d# sync root@beaglebone:/etc/init.d# sync root@beaglebone:/etc/init.d# reboot
自動再起動後、LCD画面上ではX-Windowの起動は行われず、CUIのterminal画面のままとなる。
USBキーボードが繋がっていればこの状態でキーボードの入力がLCDに反映され、ログインすることが可能となる。
日本語表示を行わないならばこの状態でスタンドアロンPCの完成だ。
実に簡単だ。
Frame bufferは/dev/fb0として認識されている。
debian@beaglebone:~$ ls -la /dev | grep fb crw-rw---T 1 root video 29, 0 Jan 1 2000 fb0 debian@beaglebone:~$
Frame Bufferの設定を確認する。
debian@beaglebone:~$ fbset mode "480x272" geometry 480 272 480 272 24 timings 0 0 0 0 0 0 0 accel true rgba 8/16,8/8,8/0,0/0 endmode debian@beaglebone:~$
折角だから画像表示を試みる。
Frame Buffer用の画像ビューアとしてfbiをインストールする。
debian@beaglebone:~$ sudo apt-get install fbi Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed: fbi 0 upgraded, 1 newly installed, 0 to remove and 174 not upgraded. Need to get 57.2 kB of archives. After this operation, 136 kB of additional disk space will be used. Get:1 http://ftp.us.debian.org/debian/ wheezy/main fbi armhf 2.07-10 [57.2 kB] Fetched 57.2 kB in 0s (76.2 kB/s) Selecting previously unselected package fbi. (Reading database ... 64717 files and directories currently installed.) Unpacking fbi (from .../archives/fbi_2.07-10_armhf.deb) ... Processing triggers for man-db ... Processing triggers for mime-support ... Setting up fbi (2.07-10) ... debian@beaglebone:~$ fbi This program displays images using the Linux framebuffer device. Supported formats: PhotoCD, jpeg, ppm, gif, tiff, xwd, bmp, png. It tries to use ImageMagick's convert for unknown file formats. usage: fbi [ options ] file1 file2 ... fileN -h -help print this help text -V -version print fbi version number -store write cmd line args to config file -l -list read image filelist from file -P -text switch into text reading mode -a -autozoom automagically pick useful zoom factor -(no)autoup like the above, but upscale only -(no)autodown like the above, but downscale only -(no)fitwidth use width only for autoscaling -v -(no)verbose show filenames all the time -u -(no)random show files in a random order -1 -(no)once don't loop (for use with -t) -(no)comments display image comments -e -(no)edit enable editing commands (see man page) -(no)backup create backup files when editing -(no)preserve preserve timestamps when editing -(no)readahead read ahead images into cache -cachemem image cache size in megabytes -blend image blend time in miliseconds -T -vt start on virtual console -s -scroll scroll image by pixels -t -timeout load next image after sec without user input -r -resolution pick PhotoCD resolution (1..5) -g -gamma set display gamma (doesn't work on all hardware) -f -font use font (anything fontconfig accepts) -d -device use framebuffer device -m -mode use video mode (from /etc/fb.modes) Large images can be scrolled using the cursor keys. Zoom in/out works with '+' and '-'. Use ESC or 'q' to quit. Space and PgDn show the next, PgUp shows the previous image. Jumping to a image works with g. Return acts like Space but additionally prints the filename of the currently displayed image to stdout. debian@beaglebone:~$
サンプル画像をダウンロードする。
debian@beaglebone:~$ wget https://homepages.cae.wisc.edu/~ece533/images/baboon.png --2016-02-11 13:03:25-- https://homepages.cae.wisc.edu/~ece533/images/baboon.png Resolving homepages.cae.wisc.edu (homepages.cae.wisc.edu)... 144.92.13.84 Connecting to homepages.cae.wisc.edu (homepages.cae.wisc.edu)|144.92.13.84|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 637192 (622K) [image/png] Saving to: `baboon.png' 100%[======================================>] 637,192 358K/s in 1.7s 2016-02-11 13:03:32 (358 KB/s) - `baboon.png' saved [637192/637192] debian@beaglebone:~$
直接LCD側のCUI terminalから表示を行う場合は以下の様にする。
debian@beaglebone:~$ fbi -a baboon.png
-aオプションを付けることにより画像を画面に自動的にフィットさせる。
qをUSBキーボードから入力することにより画像表示を終了できる。
SSHからLCDに表示させる場合は以下のようにする。
debian@beaglebone:~$ sudo fbi -T 1 -a baboon.png using "DejaVu Sans Mono-16", pixelsize=16.67 file=/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansMono.ttf debian@beaglebone:~$
この場合はLCD側のCUI terminalには戻れなくなる。
SSHから別の画像をLCDのFrame bufferに表示させることは可能。
何の問題も無くLCDに画像を表示させることができた。
ドライバのサポートがあるので後は普通のLCDディスプレイとして機能する。
Frame bufferに画像データを書き込むことにより任意の表示を行うことができるわけだ。
音関連もそうだが、画像関連は電子工作として非常に満足度が高い上に応用範囲が広い。
しばらく遊んでみることとする。