Display TFT SPI na Labrador

De Caninos Loucos
Ir para navegação Ir para pesquisar

Em alguns casos utilizar uma tela TFT SPI pode ser uma boa escolha ao invés de uma tela HDMI, seja por custo ou qualquer outro fator, a intenção deste tópico é descrever como conectar e ligar essas telas a Labrador.

  • Nos exemplos é usado uma tela 3.5" touch screen;
    • Driver da tela: ILI9486
    • Driver do touch: XPT2046

Preparando o Kernel da Labrador para o display

1 - Habilitar o SPI na Labrador, siga o procedimento descrito na nossa WIKI, [SPI].

2 - Verifique se os drivers de sua tela estão habilitados no Kernel da labrador.

  • No repositório onde contem o seu Kernel Labrador com SPI já habilitado, execute o comando make com o parâmetro menuconfig;
$make menuconfig
  • habilite o driver do seu touchscreen em;
Device Drivers -> Input devices support -> Touchscreens --> /*Seu dispositivo*/
Exemplo: Habilitando o driver touch do XPT2046=TSC2046/ADS7846
Device Drivers -> Input devices support -> Touchscreens --> 
  | |    <M>   ADS7846/TSC2046/AD7873 and AD(S)7843 based touchscreens    │ │  
  │ │    <M>   AD7877 based touchscreens                                  │ │  
  │ │    <M>   Analog Devices AD7879-1/AD7889-1 touchscreen interface     │ │  
  │ │    <M>     support I2C bus connection                               │ │  
  │ │    <M>     support SPI bus connection                               | |
  • habilite o driver do display
Device Drivers -> Staging drivers-> Support for small TFT LCD display modules --> /*Seu dispositivo*/
Exemplo: habilitando o driver da tela ILI9486
Device Drivers -> Staging drivers-> Support for small TFT LCD display modules --> 
<M>   FB driver for the ILI9486 LCD Controller
  • salve o arquivo .config com o nome caninos.config
faça um backup do arquivo linux/arch/arm/configs/caninos_labrador_defconfig
$mv linux/arch/arm/configs/caninos_labrador_defconfig linux/arch/arm/configs/caninos_labrador_defconfig_backup  
copie o seu arquivo caninos.config no lugar do caninos_labrador_defconfig 
$cp build/caninos.config linux/arch/arm/configs/caninos_labrador_defconfig  

3 - Configurar a device-tree do Kernel

  • abra a device-tree da labrador com um editor de texto da sua preferência;
gedit linux/arch/arm/boot/caninos-labrador.dts
  • configure a device-tree de acordo com as características da sua tela touch screen, dentro do nó spi0.
Exemplo: adicionando as configurações do display ILI9486 e o touchscreen XPT2046
        spi0: spi@b0200000 {
		#address-cells = <1>;
		#size-cells = <0>;
		compatible = "caninos,caninos-spi";
		reg = <0xb0200000 0x4000>;
		interrupts = < 0 19 0x4 >;
		pinctrl-names = "default";
		pinctrl-0 = <&spi0_state_default>;
		status = "okay";

		displayPi35@0{//LCD DISPLAY DRIVER
			compatible = "ilitek,ili9486";
			reg = <0>;
			fps = <30>;
			bgr;
			buswidth = <8>;
			spi-max-frequency = <20000000>;
		        dc-gpios = <&gpio 70 0>; //GPIOC6
		        reset-gpios = <&gpio 69 0>; //GPIOC5
			led-gpios = <&gpio 68 1>; //Pin 11 Header DIsplay => GPIOC0
		        //rotation = <270>;
			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
			0x1000011 
			0X1000029>;
			status = "okay";
		};
		
		tsc2046@1 {//TOUCH SCREEN DEVICE
			compatible = "ti,tsc2046";
			reg = <1>;
			spi-max-frequency = <1000000>;
			interrupt-parent = <&gpio 64>; //GPIOC0
			interrupts = <3 17>; //Ainda nao entendi isso
			pendown-gpio = <&gpio 64 0>;
			ti,x-min = /bits/ 16 <0>;
			ti,x-max = /bits/ 16 <480>;
			ti,y-min = /bits/ 16 <0>;
			ti,y-max = /bits/ 16 <320>;
			ti,x-plate-ohms = /bits/ 16 <100>;
			ti,pressure-max = /bits/ 16 <255>;
			wakeup-source;
			status = "okay";
		};
	    };

4 - Compile o e atualize o Kernel de sua labrador

$make

5 - Reinicie a Labrador

6 - Confira se os módulos do Kernel foram todos carregados corretamente com lsmod, caso tenha problemas investigue o carregamento do driver com o comando dmesg

$lsmod
$sudo dmesg

Configurando o Debian 10

para conseguir configurar o X para enviar os quadros ao display SPI, é necessário reconfigurar o framebuffer de saída.

para isso instale;

sudo apt-get install xserver-xorg-video-fbdev

Crie o arquivo: /usr/share/X11/xorg.conf.d/99-fbdev.conf

Altere o arquivo com um editor de texto, e insira o seguinte conteúdo ao arquivo;

Section "Device"  
  Identifier "myfb"
  Driver "fbdev"
  Option "fbdev" "/dev/fb2"
EndSection
      • O campo Option deve ser preenchido com o framebuffer padrão desejado, para consultar qual é framebuffer da tela procure no comando dmesg o log que mostra modulo do driver do seu display, o padrão da Labrador é HDMI(/dev/fb0), caso não tenha outros framebuffers adicionados, o framebuffer padrão do modulo SPI deve ser /dev/fb2.

outra alternativa é utilizar o seguinte comando;

Tela SPI:
$FRAMEBUFFER=/dev/fb2 startx
Tela HDMI:
$FRAMEBUFFER=/dev/fb0 startx

para mais informações sobre framebuffer, consulte diretamente no Notro;

Conecte os sinais do display na Labrador

Observe o display 3.5inch Rpi Display por exemplo pode ser conectado diretamente ao barramento de GPIOs da Labrador, consulte a seção Mapeamento SPI, dentro de SPI

Iniciar o display sem alterar a device-tree

Para Kernel com versão menor que 5.4(utilize o comando "$uname -a) é possivél invocar o driver do display sem alterar o Device-Tree do Linux, o que precisa ser recompilada e atualizar na labrador, então pode-se usar outra ferramenta do Notro, o fbtft_device.

Exemplo: Invocando o display 3.5inch RPI DISPLAY na Labrador 32bits
fbtft_device name=piscreen speed=32000000 cs=0 mode=SPI_MODE_0 rotate=90 fps=30 gpios=reset:69,dc:70,cs:87,led:68