embeded/raspberry pi2015. 8. 8. 19:39

아쉽게도 라즈베리 파이에 있는 DSI 인터페이스는 아니고

[링크 : https://en.wikipedia.org/wiki/Display_Serial_Interface]


SPI를 이용한 터치 + 320x480 해상도의 LCD 이다.

DVD 하나가 들어있는데 라즈베리 img 파일이 거의 대부분의 용량을 차지하는데..

microSD의 용량이 참.. 많이도 커졌구나 싶은느낌...



이렇게 깔끔하게 장착된다 +_+


[링크 : http://eleparts.co.kr/EPXDR9TM]

    [링크 : http://cafe.naver.com/pipc/11690]


┌──────────┤ Raspberry Pi Software Configuration Tool (raspi-config) ├──────────┐

│                                                                               │

│    1 Expand Filesystem              Ensures that all of the SD card s         │

│    2 Change User Password           Change password for the default u         │

│    3 Enable Boot to Desktop/Scratch Choose whether to boot into a des         │

│    4 Internationalisation Options   Set up language and regional sett         │

│    5 Enable Camera                  Enable this Pi to work with the R         │

│    6 Add to Rastrack                Add this Pi to the online Raspber         │

│    7 Overclock                      Configure overclocking for your P         │

│    8 Advanced Options               Configure advanced settings               │

│    9 About raspi-config             Information about this configurat         │

│                                                                               │

│                                                                               │

│                                                                               │

│                     <Select>                     <Finish>                     │

│                                                                               │

└───────────────────────────────────────────────────────────────────────────────┘


┌──────────┤ Raspberry Pi Software Configuration Tool (raspi-config) ├──────────┐

│                                                                               │

│    A1 Overscan                      You may need to configure oversca         │

│    A2 Hostname                      Set the visible name for this Pi          │

│    A3 Memory Split                  Change the amount of memory made          │

│    A4 SSH                           Enable/Disable remote command lin         │

│    A5 Device Tree                   Enable/Disable the use of Device          │

│    A6 SPI                           Enable/Disable automatic loading          │

│    A7 I2C                           Enable/Disable automatic loading          │

│    A8 Serial                        Enable/Disable shell and kernel m         │

│    A9 Audio                         Force audio out through HDMI or 3         │

│    A0 Update                        Update this tool to the latest ve         │

│                                                                               │

│                                                                               │

│                     <Select>                     <Back>                       │

│                                                                               │

└───────────────────────────────────────────────────────────────────────────────┘


          ┌──────────────────────────────────────────────────────────┐

          │                                                          │

          │ Would you like the SPI interface to be enabled?          │

          │                                                          │

          │                                                          │

          │                                                          │

          │                                                          │

          │                                                          │

          │                                                          │

          │                                                          │

          │                                                          │

          │                                                          │

          │                                                          │

          │                                                          │

          │                                                          │

          │                                                          │

          │                                                          │

          │               <>                   <아니오>            │

          │                                                          │

          └──────────────────────────────────────────────────────────┘


          ┌──────────────────────────────────────────────────────────┐
          │                                                          │
          │ The SPI interface will be enabled after a reboot         │
          │                                                          │
          │                                                          │
          │                                                          │
          │                                                          │
          │                                                          │
          │                                                          │
          │                                                          │
          │                                                          │
          │                                                          │
          │                                                          │
          │                                                          │
          │                                                          │
          │                                                          │
          │                                                          │
          │                          <확인>                          │
          │                                                          │
          └──────────────────────────────────────────────────────────┘

          ┌──────────────────────────────────────────────────────────┐
          │                                                          │
          │ Would you like the SPI kernel module to be loaded by     │
          │ default?                                                 │
          │                                                          │
          │                                                          │
          │                                                          │
          │                                                          │
          │                                                          │
          │                                                          │
          │                                                          │
          │                                                          │
          │                                                          │
          │                                                          │
          │                                                          │
          │                                                          │
          │                                                          │
          │               <>                   <아니오>            │
          │                                                          │
          └──────────────────────────────────────────────────────────┘


          ┌──────────────────────────────────────────────────────────┐
          │                                                          │
          │ SPI kernel module will now be loaded by default          │
          │                                                          │
          │                                                          │
          │                                                          │
          │                                                          │
          │                                                          │
          │                                                          │
          │                                                          │
          │                                                          │
          │                                                          │
          │                                                          │
          │                                                          │
          │                                                          │
          │                                                          │
          │                                                          │
          │                          <확인>                          │
          │                                                          │
          └──────────────────────────────────────────────────────────┘ 


pi@raspberrypi ~/src/lcd $ git clone https://github.com/swkim01/waveshare-dtoverlays.git
Cloning into 'waveshare-dtoverlays'...
remote: Counting objects: 39, done.
remote: Total 39 (delta 0), reused 0 (delta 0), pack-reused 39
Unpacking objects: 100% (39/39), done.

3.5인치 모델이니까 waveshare35a 로 설정
pi@raspberrypi ~/src/lcd $ sudo cp waveshare-dtoverlays/waveshare35a-overlay.dtb /boot/overlays/
pi@raspberrypi ~/src/lcd $ sudo vi /boot/config.txt
dtparam=spi=on
dtoverlay=waveshare35a

pi@raspberrypi ~ $ sudo vi /usr/share/X11/xorg.conf.d/99-fbturbo.conf
# This is a minimal sample config file, which can be copied to
# /etc/X11/xorg.conf in order to make the Xorg server pick up
# and load xf86-video-fbturbo driver installed in the system.
#
# When troubleshooting, check /var/log/Xorg.0.log for the debugging
# output and error messages.
#
# Run "man fbturbo" to get additional information about the extra
# configuration options for tuning the driver.

Section "Device"
        Identifier      "Allwinner A10/A13 FBDEV"
        Driver          "fbturbo"
        Option          "fbdev" "/dev/fb1"

        Option          "SwapbuffersWait" "true"
EndSection

pi@raspberrypi ~/src/lcd $ sudo reboot

원래 전원인가 되면 이렇게 밝던 녀석이


dtoverlay 설정이 되면 약간 흐리게 화면이 나온다.


일단은.. HDMI가 위쪽으로 가는게 기본 방향인데..

터치랑 화면이랑 각도가 안 맞아서 이래저래 캘리브레이션을 해야 할 듯 ㅠㅠ


pi@raspberrypi ~ $ sudo apt-get install xinput
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다
상태 정보를 읽는 중입니다... 완료
다음 새 패키지를 설치할 것입니다:
  xinput
0개 업그레이드, 1개 새로 설치, 0개 제거 및 0개 업그레이드 안 함.
26.2 k바이트 아카이브를 받아야 합니다.
이 작업 후 84.0 k바이트의 디스크 공간을 더 사용하게 됩니다.
받기:1 http://mirrordirector.raspbian.org/raspbian/ wheezy/main xinput armhf 1.6.0-1 [26.2 kB]
내려받기 26.2 k바이트, 소요시간 1초 (19.1 k바이트/초)
Selecting previously unselected package xinput.
(데이터베이스 읽는중 ...현재 92893개의 파일과 디렉터리가 설치되어 있습니다.)
xinput 패키지를 푸는 중입니다 (.../xinput_1.6.0-1_armhf.deb에서) ...
man-db에 대한 트리거를 처리하는 중입니다 ...
xinput (1.6.0-1) 설정하는 중입니다 ...


pi@raspberrypi ~ $ sudo service lightdm restart
[ ok ] Stopping Light Display Manager: lightdm.
[ ok ] Starting Light Display Manager: lightdm.


pi@raspberrypi /boot/overlays $ ls -al /dev/fb*
crw-rw---T 1 root video 29, 0  1월  1  1970 /dev/fb0
crw-rw---T 1 root video 29, 1  1월  1  1970 /dev/fb1


그나저나.. fb0가 HDMI나 composite로 되어있어서
카메라 출력해보면 LCD로는 출력이 되지 않는다 -_-



+

2015.08.09 추가

으으 로컬에서 해야 하는거 느므시러 ㅠㅠ

$ wget http://tronnes.org/downloads/xinput-calibrator_0.7.5-1_armhf.deb

$ sudo dpkg -i -B xinput-calibrator_0.7.5-1_armhf.deb

$ xinput_calibrator

Unable to connect to X server 


그나저나 SPI라서 그런지 화면 갱신이 꽤나 느리네..

pi@raspberrypi ~ $ xinput_calibrator 

Calibrating EVDEV driver for "ADS7846 Touchscreen" id=9

current calibration values (from XInput): min_x=0, max_x=4095 and min_y=0, max_y=4095


Doing dynamic recalibration:

Swapping X and Y axis...

Setting new calibration data: 237, 3965, 3888, 214



--> Making the calibration permanent <--

  copy the snippet below into '/etc/X11/xorg.conf.d/99-calibration.conf'

Section "InputClass"

Identifier "calibration"

MatchProduct "ADS7846 Touchscreen"

Option "Calibration" "237 3965 3888 214"

Option "SwapAxes" "1"

EndSection 


위에 예제 대로 했더니 잘 안되서

X/Y 모두 스왑 / 축 바꾸기 전부 시전 ㄷㄷ

$ cat /usr/share/X11/xorg.conf.d/99-fbturbo.conf

# This is a minimal sample config file, which can be copied to

# /etc/X11/xorg.conf in order to make the Xorg server pick up

# and load xf86-video-fbturbo driver installed in the system.

#

# When troubleshooting, check /var/log/Xorg.0.log for the debugging

# output and error messages.

#

# Run "man fbturbo" to get additional information about the extra

# configuration options for tuning the driver.


Section "Device"

        Identifier      "Allwinner A10/A13 FBDEV"

        Driver          "fbturbo"

        Option          "fbdev" "/dev/fb1"


        Option          "SwapbuffersWait" "true"

EndSection


Section "InputClass"

        Identifier      "calibration"

        MatchProduct    "ADS7846 Touchscreen"

        Option  "Calibration"   "237 3965 3888 214"

        Option  "SwapAxes"      "1"

        Option "InvertX" "1"

        Option "InvertY" "1"

EndSection 


$ cat /boot/cmdline.txt

dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait fbcon=map:1



SPI로 하기 때문에 어쩔수 없이.. 16bit color인건가? RGB565로 걸리네



fbtft 의 덕택으로 편하게 쓰는.. 로그? ㅋ

pi@raspberrypi ~ $ dmesg | grep -i tft

[    3.611085] fbtft: module is from the staging directory, the quality is unknown, you have been warned.

[    3.700666] fbtft_of_value: regwidth = 16

[    3.709297] fbtft_of_value: buswidth = 8

[    3.716195] fbtft_of_value: debug = 0

[    3.733842] fbtft_of_value: rotate = 90

[    3.748195] fbtft_of_value: fps = 30 


dts 파일을 열어보니.. 먼소리인지 모르겠다? ㅋㅋ

아무튼

LCD는 16MHz SPI clk

터치는 2MHz SPI clk로 작동이라.. 저걸 변경해서 LCD쪽 SPI 클럭 올려주면 좀더 빠르려나?

pi@raspberrypi ~/src/lcd/waveshare-dtoverlays $ cat waveshare35a-overlay.dts

/*

 * Device Tree overlay for PiScreen 3.5" display shield by Ozzmaker

 *

 */


/dts-v1/;

/plugin/;


/ {

        compatible = "brcm,bcm2835", "brcm,bcm2708", "brcm,bcm2709";


        fragment@0 {

                target = <&spi0>;

                __overlay__ {

                        status = "okay";


                        spidev@0{

                                status = "disabled";

                        };


                        spidev@1{

                                status = "disabled";

                        };

                };

        };


        fragment@1 {

                target = <&gpio>;

                __overlay__ {

                        waveshare35a_pins: waveshare35a_pins {

                                brcm,pins = <17 25 24>;

                                brcm,function = <0 0 0>; /* in in in */

                        };

                };

        };


        fragment@2 {

                target = <&spi0>;

                __overlay__ {

                        /* needed to avoid dtc warning */

                        #address-cells = <1>;

                        #size-cells = <0>;


                        waveshare35a: waveshare35a@0{

                                compatible = "ilitek,ili9486";

                                reg = <0>;

                                pinctrl-names = "default";

                                pinctrl-0 = <&waveshare35a_pins>;


                                spi-max-frequency = <16000000>;

                                rotate = <90>;

                                bgr;

                                fps = <30>;

                                buswidth = <8>;

                                regwidth = <16>;

                                reset-gpios = <&gpio 25 0>;

                                dc-gpios = <&gpio 24 0>;

                                debug = <0>;


                                init = <0x10000b0 0x00

                                        0x1000011

                                        0x20000ff

                                        0x100003a 0x55

                                        0x1000036 0x28

                                        0x10000c2 0x44

                                        0x10000c5 0x00 0x00 0x00 0x00

                                        0x10000e0 0x0f 0x1f 0x1c 0x0c 0x0f 0x08 0x48 0x98 0x37 0x0a 0x13 0x04 0x11 0x0d 0x00

                                        0x10000e1 0x0f 0x32 0x2e 0x0b 0x0d 0x05 0x47 0x75 0x37 0x06 0x10 0x03 0x24 0x20 0x00

                                        0x10000e2 0x0f 0x32 0x2e 0x0b 0x0d 0x05 0x47 0x75 0x37 0x06 0x10 0x03 0x24 0x20 0x00

                                        /* piscreen -> waveshare35a */

                                        0x1000036 0x28

                                        0x1000011

                                        0x1000029>;

                        };


                        waveshare35a-ts@1 {

                                compatible = "ti,ads7846";

                                reg = <1>;


                                spi-max-frequency = <2000000>;

                                interrupts = <17 2>; /* high-to-low edge triggered */

                                interrupt-parent = <&gpio>;

                                pendown-gpio = <&gpio 17 0>;

                                ti,x-plate-ohms = /bits/ 16 <60>;

                                ti,pressure-max = /bits/ 16 <255>;

                        };

                };

        };

        __overrides__ {

                speed =         <&waveshare35a>,"spi-max-frequency:0";

                rotate =        <&waveshare35a>,"rotate:0";

                fps =           <&waveshare35a>,"fps:0";

                debug =         <&waveshare35a>,"debug:0";

        };

}; 


+
2015.08.11
스케마틱은 안보이니 이거라도..
아무튼.. 


어느게 몇번 핀인지 알게 머야 ㅠㅠ

[링크 : http://www.wvshare.com/product/3.5inch-RPi-LCD-A.htm]


핀번호로 매칭해보니.. 왼쪽의 SPI는 LCD 오른쪽의 SPI가 터치구나..


Posted by 구차니