вторник, 27 сентября 2016 г.

Подключение сенсорного экрана и семидюймового дисплея Waveshare Beaglebone LCD CAPE (7inch)

У нас имеется расширительная плата для BBB LCD Cape (7 inch), симидюймовая сенсорная панель, провода и USB2UART преобразователь, который шел в комплекте.

Изначально прошьем имеющийся на сайте 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):

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 тачскрин-панели подробно описана тут.

Сформируем microsd-карту для записи и прошьем наш beagle bone в соответствии с этим руководством.

Использованный материал:
1) http://www.waveshare.com/wiki/LCD_CAPE_(7inch)

Ссылки (написание своего драйвера для тачскрина waveshare):
1) https://habr.com/ru/post/267655/

Обновление прошивки операторской панели Weintek MT607i

У нас есть операторская панель Weintek MT607i ( описание ), которая работает на базе WinCE 5.0. Процедура прошивки устройства обновленным бинарником выглядит следующим образом (в официальном описании пункт "WinCE Image Updating Only"). Скачиваем стабильный бинарник из следующей папки ftp-сервера Weintek. На момент написания статьи файл Readme.txt, содержащий описание имеющихся там файлов, говорил, что последней стабильной для английского языка является версия за 2012/4/25 NK_20120425.zip, разархивируем, получим файл NK.bin. Копируем на пустую SD-карту, отформатированную в Fat32, файл NK.bin (ВАЖНО! Карта должна быть размером 1GB (может быть 2GB - не тестил, но 4GB, 8GB и больше железка не видит и читать NK.bin c них не хочет)). Ставим переключатель 3 на задней части панели (DIP switch 3 ON). Включаем операторскую панель и ждем, пока горит красный светодиод под надписью COM на передней части панели. Потом выключаем панель, вынимаем карту. Операторская панель содержит обновленный образ WinCE.

Использованный материал:
1) ftp://ftp.weintek.com/mt600/DataSheet/MT607i_DataSheet_ENG_120814.pdf
2) ftp://ftp.weintek.com/mt600/MT600iV1/MT600i_WinCE_OS_Update_Procedure-05182010.pdf