У нас имеется расширительная плата для BBB LCD Cape (7 inch), симидюймовая сенсорная панель, провода и USB2UART преобразователь, который шел в комплекте.
Изначально прошьем имеющийся на сайте debian-образ для семидюймового дисплея на microsd-карту ( как ). Загружаемся с карты и имеем рабочую linux-машину на базе lxde.
Теперь попробуем добавить поддержку экрана и тачпанели в свою компиляцию ядра на базе Debian 8. Для этого нам понадобится отредактировать device tree и пересобрать ядро.
1) добавим файлы настройки lcd-панели с разрешением 800x480:
- файл настройки разрешения и частоты LCD (am335x-panel-800x480.dtsi):
&lcdc {
status = "okay";
};
/ {
/* Embest 7 inch LCD cape: */
panel {
compatible = "tilcdc,panel";
pinctrl-names = "default";
pinctrl-0 = <&lcd_cape_pins>;
panel-info {
ac-bias = <255>;
ac-bias-intrpt = <0>;
dma-burst-sz = <16>;
bpp = <32>;
fdd = <0x80>;
tft-alt-mode = <0>;
stn-565-mode = <0>;
mono-8bit-mode = <0>;
sync-edge = <0>;
sync-ctrl = <1>;
raster-order = <0>;
fifo-th = <0>;
};
display-timings {
native-mode = <&timing0>;
timing0: 800x480 {
hactive = <800>;
vactive = <480>;
hback-porch = <40>;
hfront-porch = <40>;
hsync-len = <48>;
vback-porch = <30>;
vfront-porch = <13>;
vsync-len = <3>;
clock-frequency = <30000000>;
hsync-active = <0>;
vsync-active = <0>;
};
};
};
};
- файл мультиплексирования LCD-пинов (am335x-pinmux-panel-800x480.dtsi):
#include <dt-bindings/board/am335x-bbw-bbb-base.h>
#include "am335x-panel-800x480.dtsi"
/* standard */
&am33xx_pinmux {
lcd_24bit_pins: pinmux_lcd_24bit_pins {
pinctrl-single,pins = <
0xa0 0x08
0xa4 0x08
0xa8 0x08
0xac 0x08
0xb0 0x08
0xb4 0x08
0xb8 0x08
0xbc 0x08
0xc0 0x08
0xc4 0x08
0xc8 0x08
0xcc 0x08
0xd0 0x08
0xd4 0x08
0xd8 0x08
0xdc 0x08
0xe0 0x00
0xe4 0x00
0xe8 0x00
0xec 0x00
>;
};
};
/ {
panel {
pinctrl-0 = <&lcd_24bit_pins>;
};
};
2) изменение файла am355x_boneblack.dts (который подключается в файле am355x_boneblack.dtb ):
- подключим использование только что созданных файлов lcd-панели:
#include "am335x-panel-800x480.dtsi"
#include "am335x-pinmux-panel-800x480.dtsi"
- закомментим подключение настроек hdmi-контроллера:
/* #include "am335x-peripheral-nxp-hdmi.dtsi" */
/* #include "am335x-bone-pinmux-nxp-hdmi.dtsi" */
3) изменения файла am33xx.dtsi:
- включаем использование контроллера lcdc:
lcdc: lcdc@4830e000 {
compatible = "ti,am33xx-tilcdc";
reg = <0x4830e000 0x1000>;
interrupt-parent = <0x1>;
interrupts = <0x24>;
ti,hwmods = "lcdc";
status = "okay";
};
- включаем использование четырех пинов tsc-/adc-контроллера для передачи информации о прикосновениях (4-wire touchscreen):
tscadc: tscadc@44e0d000 {
compatible = "ti,ti-tscadc";
reg = <0x44e0d000 0x1000>;
interrupt-parent = <&intc>;
interrupts = <16>;
ti,hwmods = "adc_tsc";
status = "okay";
tsc {
ti,wires = <4>;
ti,x-plate-resistance = <200>;
ti,coordinate-readouts = <5>;
ti,touch-type = <2>;
ti,wire-config = <0x00 0x11 0x22 0x33>;
};
adc {
ti,adc-channels = <4 5 6 7>;
};
};
cd /media/Data/Kernel/bbb/bb-kernel/
./tools/rebuild.sh
Нам нужно подключить в конфигурации сборку следующих модулей ядра:
1) ti_am335x_tscadc.ko(CONFIG_MFD_TI_AM335X_TSCADC);
2) ti_am335x_tsc.ko(CONFIG_TOUCHSCREEN_TI_AM335X_TSC);
3) ti_am335x_adc.ko(CONFIG_TI_AM335X_ADC).
Аналогичная сборка драйверов (модулей) для другой 4-wire тачскрин-панели подробно описана тут.
Использованный материал:
1) http://www.waveshare.com/wiki/LCD_CAPE_(7inch)
Ссылки (написание своего драйвера для тачскрина waveshare):
1) https://habr.com/ru/post/267655/
Изначально прошьем имеющийся на сайте debian-образ для семидюймового дисплея на microsd-карту ( как ). Загружаемся с карты и имеем рабочую linux-машину на базе lxde.
Теперь попробуем добавить поддержку экрана и тачпанели в свою компиляцию ядра на базе Debian 8. Для этого нам понадобится отредактировать device tree и пересобрать ядро.
В device tree для корректной работы lcd- и tsc-контроллеров надо внести следующие исправления (файлы, содержащие настройки device tree, у меня находятся в директории /media/Data/Kernel/bbb/bb-kernel/KERNEL/arch/arm/boot/dts):
1) добавим файлы настройки lcd-панели с разрешением 800x480:
- файл настройки разрешения и частоты LCD (am335x-panel-800x480.dtsi):
&lcdc {
status = "okay";
};
/ {
/* Embest 7 inch LCD cape: */
panel {
compatible = "tilcdc,panel";
pinctrl-names = "default";
pinctrl-0 = <&lcd_cape_pins>;
panel-info {
ac-bias = <255>;
ac-bias-intrpt = <0>;
dma-burst-sz = <16>;
bpp = <32>;
fdd = <0x80>;
tft-alt-mode = <0>;
stn-565-mode = <0>;
mono-8bit-mode = <0>;
sync-edge = <0>;
sync-ctrl = <1>;
raster-order = <0>;
fifo-th = <0>;
};
display-timings {
native-mode = <&timing0>;
timing0: 800x480 {
hactive = <800>;
vactive = <480>;
hback-porch = <40>;
hfront-porch = <40>;
hsync-len = <48>;
vback-porch = <30>;
vfront-porch = <13>;
vsync-len = <3>;
clock-frequency = <30000000>;
hsync-active = <0>;
vsync-active = <0>;
};
};
};
};
- файл мультиплексирования LCD-пинов (am335x-pinmux-panel-800x480.dtsi):
#include <dt-bindings/board/am335x-bbw-bbb-base.h>
#include "am335x-panel-800x480.dtsi"
/* standard */
&am33xx_pinmux {
lcd_24bit_pins: pinmux_lcd_24bit_pins {
pinctrl-single,pins = <
0xa0 0x08
0xa4 0x08
0xa8 0x08
0xac 0x08
0xb0 0x08
0xb4 0x08
0xb8 0x08
0xbc 0x08
0xc0 0x08
0xc4 0x08
0xc8 0x08
0xcc 0x08
0xd0 0x08
0xd4 0x08
0xd8 0x08
0xdc 0x08
0xe0 0x00
0xe4 0x00
0xe8 0x00
0xec 0x00
>;
};
};
/ {
panel {
pinctrl-0 = <&lcd_24bit_pins>;
};
};
2) изменение файла am355x_boneblack.dts (который подключается в файле am355x_boneblack.dtb ):
- подключим использование только что созданных файлов lcd-панели:
#include "am335x-panel-800x480.dtsi"
#include "am335x-pinmux-panel-800x480.dtsi"
- закомментим подключение настроек hdmi-контроллера:
/* #include "am335x-peripheral-nxp-hdmi.dtsi" */
/* #include "am335x-bone-pinmux-nxp-hdmi.dtsi" */
3) изменения файла am33xx.dtsi:
- включаем использование контроллера lcdc:
lcdc: lcdc@4830e000 {
compatible = "ti,am33xx-tilcdc";
reg = <0x4830e000 0x1000>;
interrupt-parent = <0x1>;
interrupts = <0x24>;
ti,hwmods = "lcdc";
status = "okay";
};
- включаем использование четырех пинов tsc-/adc-контроллера для передачи информации о прикосновениях (4-wire touchscreen):
compatible = "ti,ti-tscadc";
reg = <0x44e0d000 0x1000>;
interrupt-parent = <&intc>;
interrupts = <16>;
ti,hwmods = "adc_tsc";
status = "okay";
tsc {
ti,wires = <4>;
ti,x-plate-resistance = <200>;
ti,coordinate-readouts = <5>;
ti,touch-type = <2>;
ti,wire-config = <0x00 0x11 0x22 0x33>;
};
adc {
ti,adc-channels = <4 5 6 7>;
};
};
Запускаем пересборку ядра:
cd /media/Data/Kernel/bbb/bb-kernel/
./tools/rebuild.sh
Нам нужно подключить в конфигурации сборку следующих модулей ядра:
1) ti_am335x_tscadc.ko(CONFIG_MFD_TI_AM335X_TSCADC);
2) ti_am335x_tsc.ko(CONFIG_TOUCHSCREEN_TI_AM335X_TSC);
3) ti_am335x_adc.ko(CONFIG_TI_AM335X_ADC).
Аналогичная сборка драйверов (модулей) для другой 4-wire тачскрин-панели подробно описана тут.
Сформируем microsd-карту для записи и прошьем наш beagle bone в соответствии с этим руководством.
Использованный материал:
1) http://www.waveshare.com/wiki/LCD_CAPE_(7inch)
Ссылки (написание своего драйвера для тачскрина waveshare):
1) https://habr.com/ru/post/267655/
Комментариев нет:
Отправить комментарий