Руководство по отладке ЖК-дисплея Allwinner Tina Linux поддерживает MIPI DSI RGB LVDS I8080 SPI и другие интерфейсы. Плата разработки поддерживает Baiwen.com T113 D1-H Nezha DongshanPI-D1s V853.
Руководство по отладке ЖК-дисплея Allwinner Tina Linux поддерживает MIPI DSI RGB LVDS I8080 SPI и другие интерфейсы. Плата разработки поддерживает Baiwen.com T113 D1-H Nezha DongshanPI-D1s V853.

1 Обзор

  • Цель написания В этом документе описывается метод отладки ЖК-дисплея в модуле Display Engine платформы Sunxi.
  1. Методы отладки ЖК-дисплея и методы отладки.
  2. Написание драйвера ЖК-дисплея.
  3. Пояснение каждого атрибута в узле lcd0.
  4. Типичная конфигурация интерфейса ЖК-дисплея.

Область применения: настройка параметров ЖК-экрана на платформе Sunxi DE1.0/DE2.0.

2 Введение в связанные термины

Таблица 2-1: Термины, относящиеся к ЖК-дисплею

термин

Объяснение

SUNXI

Серия аппаратных платформ SoC Allwinner

LCD

Жидкокристаллический дисплей

MIPI

Mobile Industry Processor Interface

DSI

Последовательный интерфейс дисплея, последовательный интерфейс дисплея

I8080

Интерфейс Intel 8080LCD

RGB

Это относится к интерфейсу ЖК-дисплея, который передает компоненты RGB без какого-либо кодирования.

LVDS

Дифференциальная передача сигналов низкого напряжения. Интерфейс ЖК-дисплея, характеризующийся низким напряжением и дифференциальной передачей сигналов.

3 характеристики микросхемы

Характеристики ЖК-интерфейса:

  1. Поддержка двойного дисплея и дифференциального дисплея. То есть содержимое дисплея может быть разным, разрешение дисплея может быть разным, а интерфейс экрана также может быть разным.
  2. Поддерживает интерфейс MIPI-DSI, количество одно. Максимальное поддерживаемое разрешение — 1920x1200@60, ширина и высота не должны превышать 2048, а частота пикселей не должна превышать 180 МГц.
  3. Поддержка интерфейса RGB, количество 2. Среди них основной дисплей поддерживает параллельный RGB666, а дополнительный дисплей параллельно поддерживает RGB888. Параллельный интерфейс RGB поддерживает максимальное разрешение 1920x1200@60, а ширина и высота не должны превышать 2048, например.

Поддерживаются основные тактовые частоты, не превышающие 180 МГц. Или два последовательных интерфейса RGB, максимальное разрешение последовательного RGB не превышает 800*480@60.

  1. Поддерживает два двухканальных канала. LVDS интерфейс, Максимальная поддержка 1920x1200@60 Разрешение, ширина и высота не должны превышать 2048, а частота пикселей не должна превышать 180 МГц. Всеподдерживать.или4 однозвенный LVDS ловить

порт поддерживает разрешение до 1366*768@60.

  1. Два I8080 Интерфейс. Разрешение поддерживается до 800*480@60.
  2. LVDS Порт ловить поддерживает одновременное отображение сигналов. Каждые два сингла link LVDS ловить Рот должен быть точно таким же, как ловитьприез Лжать ВДС Ловить из экрана, отправит точно такие же данные, как и на оба экрана, сделайте то же самое, что и сигнал прибытия. так

Теоретически T509 может иметь 4 дисплея, из которых первые два и последние два могут иметь разное разрешение. Разрешение между ними должно быть одинаковым, и они должны быть подключены к одному и тому же ЖК-экрану.

иллюстрировать

В сценарии с несколькими дисплеями вышеуказанные интерфейсы можно свободно сопоставлять, за исключением того, что на основном дисплее необходимо использовать MIPI-DSI.

Навык

Двухканальный интерфейс LVDS имеет всего 20 линий. Его можно разделить на два одноканальных интерфейса LVDS, предполагая, что при выборе одного канала для отображения необходимо выбрать lvds0.

4 Знакомство с модулем

4.1 Шаги по добавлению драйвера экрана

  1. Для версий linux4.9 и ниже необходимо изменить всего три места (т. е. первые три пункта ниже). Для Linux5.4 необходимо изменить четыре места. Подробную информацию см. в расположении исходного кода драйвера экрана. .

• хранилище исходного кода Linux.

• хранилище исходного кода uboot. В uboot также есть драйверы дисплея и экрана, целью которых является отображение логотипа.

• Хранилище конфигурации dts на уровне платы. Целью является настройка некоторых общих параметров конфигурации ЖК-дисплея через board.dts. Для Linux 4.9 эта конфигурация действует как для ядра, так и для uboot. Для Linux-5.4 обратитесь к следующей статье.

• Для Linux5.4 необходимо настроить дополнительное хранилище конфигурации dts на уровне платы, специфичное для uboot.

  1. Убедитесь, что конфигурация ядра платформы отображения Allwinner включена, проверьте конфигурацию меню. Конфигурацияиллюстрировать。
  2. Заранее подготовьте следующие материалы и информацию:

• Руководство по эксплуатации экрана. В основном он описывает основную информацию, электрические характеристики экрана и т. д. и запрашивает ее у производителя экрана.

• Руководство по микросхеме драйвера. В основном он описывает подробную информацию об микросхеме экрана. В основном здесь приводится подробное объяснение каждой команды, которое полезно для инициализации и настройки. Обратитесь за этим к производителю экрана.

• На экране появится информация о времени. Пожалуйста, обратитесь к заводскому экрану. Для получения дополнительной информации см. параметры экрана синхронизации, иллюстрированные.

• Код инициализации экрана. , пожалуйста, обратитесь к производителю экрана. Как правило, экраны DSI и I8080 требуют команд инициализации для инициализации экрана.

• Мультиметр. Регулировка экрана не может избежать измерения соответствующих напряжений.

  1. Прежде чем добавлять драйвер экрана, вам необходимо сначала разобраться с драйвером экрана. См. структуру драйвера экрана.
  2. пройти 3-е место Перейдя к информации, найдите тип экрана, а затем выберите существующий драйвер экрана в качестве шаблона для драйвера экрана, чтобы добавить или напрямую поймать и изменить его, как указано выше.
  3. Измените Panel.c и Panel.h в каталоге драйвера экрана. Добавьте указатель переменной, только что добавленный strcut_lcd_panel, в переменную глобальной структуры Panel_array. Добавлен звук strcut lcd_panel в Panel.h.

яркий.

  1. Измените Makefile. Добавьте драйвер экрана .o, только что добавленный в disp-objs в файле Makefile на верхнем уровне каталога драйверов экрана lcd.
  2. Изменить board.dts ЖК0 в формате . Видим RGB ловитьрот,MIPI-DSI ловитьрот,I8080 ловитьротиLVDS ловитьрот,Он знакомит с различнымиловитьрот Типичная форма. Параметры оборудования иллюстрировать, в этой главе есть все lcd0. Фестиваль

Нажмите на настраиваемые свойства для подробного объяснения.

  1. Скомпилируйте uboot, ядро, пакет и программу. Обратите внимание, что разные SDK имеют разные методы компиляции. Некоторые SDK не компилируют uboot по умолчанию.
  2. отлаживать. С помощью методов отладки мы можем изначально обнаружить проблему, а также есть часто задаваемые вопросы, которые также полезны для настройки экрана.

4.2 Инструкции по драйверу экрана

4.2.1 Расположение исходного кода драйвера экрана

Ядро версии Linux 3.4:

linux3-4/drivers/video/sunxi/disp2/disp/lcd/

Ядро версии Linux 3.10:

linux3-10/drivers/video/sunxi/disp2/disp/lcd/

Ядро Linux версии 4.9 и выше:

linux-4.9/drivers/video/fbdev/sunxi/disp2/disp/lcd/

uboot-2014:

brandy/u-boot-2014.07/drivers/video/sunxi/disp2/disp/lcd

uboot-2018:

brandy/brandy-2.0/u-boot-2018/drivers/video/sunxi/disp2/disp/lcd

Конфигурация уровня платы, среди которой «модель чипа», например R818, и «название платы», например демонстрационная, замените ее в соответствии с реальной ситуацией.

устройство/конфигурация/чипы/модель чипа/конфигурации/имя платы/board.dts

Конфигурация уровня платы Uboot, используемая для Linux5.4:

устройство/конфигурация/чипы/модель чипа/конфигурации/имя платы/uboot-board.dts

Конфигурация уровня платы ядра, используемая для linux5.4:

устройство/конфигурация/чипы/модель чипа/configs/имя платы/linux-5.4/board.dts

4.2.2 Инструкции по настройке менюconfig

Коды, связанные с ЖК-дисплеем, включены в модуль драйвера disp. Войдите в корневой каталог ядра и выполните команду make ARCH=arm menuconfig или make ARCH=arm64 menuconfig (64-битная платформа), чтобы войти в основной интерфейс конфигурации.

лапша. и выполните следующие действия:

Соответствующие платформы DE1.0: R6 (linux-3.10), R16 (linux-3.4).

Соответствующие платформы DE2.0: кроме R6 и R16.

Рисунок 4-1: Схема конфигурации меню DE1.0

Рисунок 4-2: Схема конфигурации меню DE2.0.

за 40 рэндов Например, конкретный каталог конфигурации: Устройство. Drivers->Graphics support->Support for frame buffer devices->Video Support for sunxi -> DISP Driver Support(sunxi-disp2)。

4.2.3 Декомпозиция драйвера экрана

В расположении исходного кода драйвера экрана он в основном разделен на четыре типа файлов:

  1. Panel.c и Panel.h, когда пользователь добавляет новый драйвер экрана, эти два файла необходимо изменить. Переменную структуры экрана необходимо добавить к глобальной переменной структуры Panel_array.
  2. lcd_source.cи lcd_source.h, эти две реализации искусства предназначены для того, чтобы драйвер экрана использовал функцию ловить порт, например выключатель питания, gpio, dsi. Чтение и запись ловить порты и т. д. пользователям не нужно его модифицировать, им просто нужно его использовать.
  3. драйвер экрана. В дополнение к упомянутым выше исходным файлам обычно файлы c и h представляют собой драйвер экрана.
  4. На один уровень выше исходного кода драйвера экрана находится Makefile, который пользователю необходимо изменить.

Мы можем открыть driver/video/fbdev/sunxi/disp2/disp/lcd/default_panel.c в качестве примера драйвера экрана в конце файла.

Язык кода:javascript
копировать
struct __lcd_panel default_panel = {
    /* panel driver name, must mach the lcd_drv_name in board.dts */
    .name = "default_lcd",
        .func = {
        .cfg_panel_info = LCD_cfg_panel_info,
        .cfg_open_flow = LCD_open_flow,
        .cfg_close_flow = LCD_close_flow,
        }
    ,
};

Имя элемента глобальной переменной default_panel должно совпадать с именем lcd_driver_name. Это связано с тем, сможет ли драйвер найти указанный файл.

Далее идет инициализация члена func, где в основном реализованы три функции обратного вызова. LCD_cfg_panel_info, LCD_open_flow и LCD_close_flow.

Процесс включения и выключения экрана — это процесс включения и выключения экрана, который представляет собой последовательность включения и последовательность выключения питания в руководстве по экрану или в руководстве по микросхеме драйвера.

Процесс работы переключения экрана показан на рисунке ниже.

Среди них LCD_open_flow и LCD_close_flow называются функциями процесса переключения экрана, а функции в блоке, такие как LCD_power_on, называются пошаговыми функциями переключения экрана.

Для ЖК-экранов, не требующих операций инициализации, таких как lvds-экраны, RGB-экраны и т. д., функции LCD_panel_init и LCD_panel_exit могут быть пустыми.

Рисунок 4-3: Процесс переключения ЖК-экрана

Функция: LCD_open_flow

Функция: Функция LCD_open_flow будет вызываться только один раз во время инициализации системы. Выполнение каждой функции LCD_OPEN_FUNC заключается в регистрации соответствующей функции шага открытия экрана и ее выполнении в первую очередь, но она не выполняется немедленно.

Выполните функцию шага открытия экрана.

прототип:

Язык кода:javascript
копировать
static s32 LCD_open_flow(u32 sel)

Часто используемые функции:

Язык кода:javascript
копировать
static __s32 LCD_open_flow(__u32 sel)
{
    LCD_OPEN_FUNC(sel, LCD_power_on,10);
    LCD_OPEN_FUNC(sel, LCD_panel_init, 50);
    LCD_OPEN_FUNC(sel, sunxi_lcd_tcon_enable, 100);
    LCD_OPEN_FUNC(sel, LCD_bl_open, 0);
    return 0;
}

Как и выше, четырехкратный вызов LCD_OPEN_FUNC регистрирует четыре функции обратного вызова, соответствующие четырем процессам открытия экрана. Сначала зарегистрируйтесь и сначала выполните. Фактически, пользователь сам решает, сколько функций зарегистрировать, если это разумно.

  1. LCD_power_on то есть открыть ЖК-дисплей питание, а затем задержка 10 мс. Этот шаг обычно используется для включения ЖК-дисплея; Взаимно Выключите питаниеи Взаимно выключить Приколоть, например, перезагрузить ступня Здесь обычно используется функция управления питанием. Приколотьконтроль

Функция иллюстрировать выполняет операции.

  1. LCD_panel_init — это экран инициализации, а затем задерживается на 50 мс; для экранов, не требующих инициализации, этот шаг обычно используется для отправки команд инициализации на экран для инициализации экрана. Если это экран DSI, посмотрите фазу DSI.

Выключена функция иллюстрировать, если это I8080 Экран I8080 ловить функцию порта, иллюстрировать, если это другие ситуации, такие как i2c Или спи Вы можете увидеть, используя iic/spi Инициализация последовательного интерфейса, также можно использовать GPIO выполнить моделирование.

  1. sunxi_lcd_tcon_enable включает TCON и задерживает 100 мс, этот шаг фиксирован и означает начало отправки сигналов изображения.
  2. LCD_bl_open Открыть подсветку, затем задержка 0мс. Включайте подсветку только после выполнения первых трех шагов, чтобы не видеть мерцания приезжающих. Здесь обычно используется функция «Из». См. иллюстрацию функции управления подсветкой.

Как показано ниже, это типичная диаграмма последовательности включения питания в руководстве по экрану. Когда мы пишем драйвер экрана, мы также должны обращать внимание на задержку.

Рисунок 4-4: включение питания

Функция: LCD_OPEN_FUNC

Функция: зарегистрировать функцию шага открытия экрана в процессе открытия экрана. Помните, что это регистрация, а не выполнение!

прототип:

Язык кода:javascript
копировать
void LCD_OPEN_FUNC(__u32 sel, LCD_FUNC func, __u32 delay)

параметриллюстрировать:

func — это указатель на функцию, его тип: void (*LCD_FUNC) (__u32 sel). Пользовательские функции также должны использовать унифицированную форму. например:

Язык кода:javascript
копировать
void user_defined_func(__u32 sel)
{
    //do something
}

задержка — время задержки после выполнения этого шага, единица времени — миллисекунды.

Второй параметр LCD_OPEN_FUNC — это длительность задержки двух шагов до и после, в мс. Обратите внимание, что значение здесь должно быть заполнено в соответствии с правилами руководства по экрану. Случайное заполнение может привести к некорректной инициализации экрана или экрана. время переключения истечет.

долго, влияя на пользовательский опыт.

LCD_open_flow соответствует LCD_close_flow, который используется для регистрации функции закрытия экрана. Используйте LCD_CLOSE_FUNC для регистрации функции. Сначала зарегистрируйтесь и сначала выполните. Здесь функция обратного вызова только регистрируется, а не выполняется немедленно.

ХОРОШО.

Язык кода:javascript
копировать
static s32 LCD_close_flow(u32 sel)
{
    /* close lcd backlight, and delay 0ms */
    LCD_CLOSE_FUNC(sel, LCD_bl_close, 0);
    /* close lcd controller, and delay 0ms */
    LCD_CLOSE_FUNC(sel, sunxi_lcd_tcon_disable, 50);
    /* open lcd power, than delay 200ms */
    LCD_CLOSE_FUNC(sel, LCD_panel_exit, 100);
    /* close lcd power, and delay 500ms */
    LCD_CLOSE_FUNC(sel, LCD_power_off, 0);
    return 0;
}
  1. Предварительно отключите подсветку, чтобы пользователь не видел процесс мерцания в течение всего процесса выключения экрана.
  2. Необходимо закрыть TCON, а значит прекратить отправку данных. Задержка еще 50 мс.
  3. Выполните код выключения экрана и задержите его на 200 мс (этот шаг можно пропустить для экранов, не требующих инициализации).
  4. Наконец выключите питание и задержите 0 мс.

На рисунке ниже представлена ​​типичная временная диаграмма отключения экрана.

Рисунок 4-5: выключение питания

Функция: LCD_cfg_panel_info

Функция: настроены расширенные параметры TCON, такие как гамма-функция и функция цветового отображения.

прототип:

Язык кода:javascript
копировать
static void LCD_cfg_panel_info(__panel_extend_para_t * info)

Расширенные параметры TCON можно настроить только в файле экрана. Определение параметров см. в параметрах, связанных с эффектом отображения.

Если требуется гамма-коррекция или цветовое отображение, установите параметр включения соответствующего модуля равным 1 в board.dts, lcd_gamma_en, lcd_cmap_en и заполните 3 таблицы коэффициентов, lcd_gamma_tbl,

lcd_cmap_tbl, часть кода показана ниже. Примечание: гамма, шаблон предоставляет 18 значений точек перегиба, а затем интерполирует все значения (255). Если вы считаете, что она недостаточно подробна, вы можете добавить ее в соответствующую таблицу.

ребенок. Размер cmap_tbl фиксирован, размер таблицы нельзя уменьшить или увеличить.

Окончательно сгенерированная запись таблицы гаммы состоит из трех значений гаммы, rgb, каждое из которых занимает 8 бит. В представленном на данный момент шаблоне три значения гаммы одинаковы.

Язык кода:javascript
копировать
static void LCD_cfg_panel_info(struct panel_extend_para *info)
{
    u32 i = 0, j = 0;
    u32 items;
    u8 lcd_gamma_tbl[][2] = {
        /* {input value, corrected value} */
        {0, 0},
        {15, 15},
        {30, 30},
        {45, 45},
        {60, 60},
        {75, 75},
        {90, 90},
        {105, 105},
        {120, 120},
        {135, 135},
        {150, 150},
        {165, 165},
        {180, 180},
        {195, 195},
        {210, 210},
        {225, 225},
        {240, 240},
        {255, 255},
    };
    u32 lcd_cmap_tbl[2][3][4] = {
    {
        {LCD_CMAP_G0, LCD_CMAP_B1, LCD_CMAP_G2, LCD_CMAP_B3},
        {LCD_CMAP_B0, LCD_CMAP_R1, LCD_CMAP_B2, LCD_CMAP_R3},
        {LCD_CMAP_R0, LCD_CMAP_G1, LCD_CMAP_R2, LCD_CMAP_G3},
        },
        {
        {LCD_CMAP_B3, LCD_CMAP_G2, LCD_CMAP_B1, LCD_CMAP_G0},
        {LCD_CMAP_R3, LCD_CMAP_B2, LCD_CMAP_R1, LCD_CMAP_B0},
        {LCD_CMAP_G3, LCD_CMAP_R2, LCD_CMAP_G1, LCD_CMAP_R0},
        },
    };
    items = sizeof(lcd_gamma_tbl) / 2;
    for (i = 0; i < items - 1; i++) {
    	u32 num = lcd_gamma_tbl[i + 1][0] - lcd_gamma_tbl[i][0];
        for (j = 0; j < num; j++) {
            u32 value = 0;
            value =
            lcd_gamma_tbl[i][1] +
            ((lcd_gamma_tbl[i + 1][1] -
            lcd_gamma_tbl[i][1]) * j) / num;
            info->lcd_gamma_tbl[lcd_gamma_tbl[i][0] + j] =
            (value << 16) + (value << 8) + value;
        }
    }
    info->lcd_gamma_tbl[255] =
        (lcd_gamma_tbl[items - 1][1] << 16) +
        (lcd_gamma_tbl[items - 1][1] << 8) + lcd_gamma_tbl[items - 1][1];
    memcpy(info->lcd_cmap_tbl, lcd_cmap_tbl, sizeof(lcd_cmap_tbl));
}
4.2.4 Описание функции задержки

Файл:sunxi_lcd_delay_ms / sunxi_lcd_delay_us

Функция: функция задержки, соответственно задержка уровня миллисекунды/микросекунды.

прототип:s32 sunxi_lcd_delay_ms(u32 ms) / s32 sunxi_lcd_delay_us(u32 us)

4.2.5 Описание функции включения данных изображения

Файл: sunxi_lcd_tcon_enable / sunxi_lcd_tcon_disable

Функция: Включите контроллер ЖК-дисплея и начните обновление ЖК-дисплея. Выключите контроллер ЖК-дисплея и прекратите обновление данных.

прототип:void sunxi_lcd_tcon_enable(u32 screen_id)

void sunxi_lcd_tcon_disable(u32 screen_id)

4.2.6 Описание функции управления подсветкой

функция: sunxi_lcd_backlight_enable / sunxi_lcd_backlight_disable

Функция: включение/выключение подсветки с помощью gpio, настроенного lcd_bl в board.dts. См. lcd_bl_en.

прототип:void sunxi_lcd_backlight_enable(u32 screen_id)

void sunxi_lcd_backlight_disable(u32 screen_id)

Параметр: sunxi_lcd_pwm_enable / sunxi_lcd_pwm_disable

Функция: включение/выключение ШИМ-контроллера. При включении ШИМ будет выводить сигнал ШИМ. Соответствует ШИМ, соответствующему lcd_pwm_ch.

прототип:s32 sunxi_lcd_pwm_enable(u32 screen_id)

s32 sunxi_lcd_pwm_disable(u32 screen_id)

4.2.7 Описание функции управления мощностью

функция: sunxi_lcd_power_enable / sunxi_lcd_power_disable

Функция: включение/выключение питания ЖК-дисплея, операция lcd_power/lcd_power1/lcd_power2 в board.dts (pwr_id идентифицирует индекс мощности).

прототип:void sunxi_lcd_power_enable(u32 screen_id, u32 pwr_id)

void sunxi_lcd_power_disable(u32 screen_id, u32 pwr_id)

  1. pwr_id = 0: соответствует board.dts. lcd_power в формате .
  2. pwr_id = 1: соответствует board.dts. lcd_power1 в формате .
  3. pwr_id = 2: соответствует board.dts. lcd_power2 в формате .
  4. pwr_id = 3: соответствует board.dts. lcd_power3 в формате .

Функция: sunxi_lcd_pin_cfg

Функция: Настройка ЖК-IO.

прототип:s32 sunxi_lcd_pin_cfg(u32 screen_id, u32 bon)

иллюстрировать:Конфигурацияlcd данные/клк Дождитесь вывода, соответствующего board.dts. lcdd0-lcdd23/lcddclk/lcdde/lcdhsync/lcdvsync в формате .

Поскольку dsi является выделенным контактом, интерфейсной панели dsi не нужно настраивать этот набор контактов в board.dts, но соответствующие контакты также будут включаться и выключаться в этом функциональном интерфейсе.

Bon: 1: означает включение, 0: означает настройку на отключение состояния.

4.2.8 Описание функций, связанных с DSI

MIPI DSI экран, большую часть которого необходимо инициализировать с помощью DSI-D0 Канал ЛП модель Инициализировать。поставлятьизловитьротфункцияиллюстрироватьследующее:

Файл: sunxi_lcd_dsi_clk_enable / sunxi_lcd_dsi_clk_disble

Функция: используется только на экране интерфейса dsi. Включает/отключает вывод высокоскоростного тактового сигнала dsi. Его необходимо вызвать во время инициализации.

прототип:s32 sunxi_lcd_dsi_clk_enable(u32 scree_id)

s32 sunxi_lcd_dsi_clk_disable(u32 scree_id)

Функция: sunxi_lcd_dsi_dcs_wr

Функция: операция записи постоянного тока на экран.

прототип:__s32 sunxi_lcd_dsi_dcs_wr(__u32 sel,__u8 cmd,__u8* para_p,__u32 para_num)

параметриллюстрировать:

• cmd: dcs записывает содержимое команды.

• para_p: начальный адрес параметра команды записи dcs.

• para_num: количество параметров для команды записи dcs, в байтах.

Функция: sunxi_lcd_dsi_dcs_wr_2para

Функция: операция записи dcs на экран. Эта команда принимает два параметра.

прототип:__s32 sunxi_lcd_dsi_dcs_wr_2para(__u32 sel,__u8 cmd,__u8 para1,__u8 para2)

параметриллюстрировать:

• cmd: dcs записывает содержимое команды.

• para1: Содержимое первого параметра команды записи dcs.

• para2: Содержимое второго параметра команды записи dcs.

sunxi_dsi_dcs_wr_0para,sunxi_dsi_dcs_wr_1para,sunxi_dsi_dcs_wr_3para,sunxi_dsi_dcs_wr_4para,

Определение sunxi_dsi_dcs_wr_5para аналогично определению dsi_dcs_wr_2para, разница заключается в количестве параметров.

Функция: sunxi_lcd_dsi_dcs_read

Функция: операция чтения dsi.

прототип:s32 sunxi_lcd_dsi_dcs_read(u32 sel, u8 cmd, u8 result, u32 num_p)

параметриллюстрировать:

• sel, отображать идентификатор.

• cmd, регистр для чтения.

• результат: массив, используемый для хранения интерфейса чтения. Пользователь должен убедиться, что имеется достаточно места для сохранения интерфейса чтения.

• num_p, указатель используется для хранения количества считываемых байтов, и пользователь должен убедиться, что это не нулевой указатель.

4.2.9 Описание функций интерфейса I8080

Драйвер дисплея предоставляет для использования 5 функций интерфейса. следующее:

Функция: sunxi_lcd_cpu_write

Функция: Установить указанный регистр экрана ЦП на указанное значение.

прототип:void sunxi_lcd_cpu_write(__u32 sel, __u32 index, __u32 data)

Содержимое функции:

Язык кода:javascript
копировать
Void sunxi_lcd_cpu_write(__u32 sel, __u32 index, __u32 data)
{
    sunxi_lcd_cpu_write_index(sel, index);
    sunxi_lcd_cpu_wirte_data(sel, data);
}

Реализованы две операции записи на шине 8080.

sunxi_lcd_cpu_write_index реализует первую операцию записи. В это время вывод RS PIN (A1) имеет низкий уровень, а содержимое данных шины представляет собой значение индекса параметра.

Sunxi_lcd_cpu_wirte_data реализует вторую операцию записи. В это время вывод RS PIN (A1) имеет высокий уровень, а содержимое данных шины представляет собой значение данных параметра.

Функция: sunxi_lcd_cpu_write_index

Функция: Установить экран ЦП в указанный регистр.

прототип:

Язык кода:javascript
копировать
void sunxi_lcd_cpu_write_index(__u32 sel,__u32 index)

специфическийиллюстрировать Видетьsunxi_lcd_cpu_write。

Функция: sunxi_lcd_cpu_write_data

Функция: Установите значение регистра экрана ЦП на указанное значение.

прототип:

Язык кода:javascript
копировать
void Sunxi_lcd_cpu_write_data(__u32 sel, __u32 data);

Функция: tcon0_cpu_rd_24b_data

Функция: операция чтения.

прототип:

Язык кода:javascript
копировать
s32 tcon0_cpu_rd_24b_data(u32 sel, u32 index, u32 *data, u32 size)

параметриллюстрировать:

• sel: отображать идентификатор.

• индекс: регистр для чтения.

• data: используется для хранения указателя массива интерфейса чтения. Пользователь должен убедиться, что в нем достаточно места для хранения данных.

• размер: количество байтов для чтения.

4.2.10 Описание функции управления контактами

Функция: sunxi_lcd_gpio_set_value

Функция: PIN-вывод LCD_GPIO выводит высокий или низкий уровень.

прототип:s32 sunxi_lcd_gpio_set_value(u32 screen_id, u32 io_index, u32 value)

параметриллюстрировать:

• io_index = 0: соответствует lcd_gpio_0 в board.dts.

• io_index = 1: соответствует lcd_gpio_1 в board.dts.

• io_index = 2: соответствует lcd_gpio_2 в board.dts.

• io_index = 3: соответствует lcd_gpio_3 в board.dts.

• значение = 0: соответствует низкому уровню выхода ввода-вывода.

• Значение = 1: соответствует высокому уровню выхода ввода-вывода.

Используется только тогда, когда GPIO определен как выход.

Функция: sunxi_lcd_gpio_set_direction

Функция: установите PIN-код LCD_GPIO в режим ввода или вывода.

прототип:

Язык кода:javascript
копировать
s32 sunxi_lcd_gpio_set_direction(u32 screen_id, u32 io_index, u32 direction);

параметриллюстрировать:

• io_index = 0: соответствует lcd_gpio_0 в board.dts.

• io_index = 1: соответствует lcd_gpio_1 в board.dts.

• io_index = 2: соответствует lcd_gpio_2 в board.dts.

• io_index = 3: соответствует lcd_gpio_3 в board.dts.

• направление = 0: соответствующий ввод-вывод установлен на ввод.

• направление = 1: соответствующий ввод-вывод настроен на выход.

Некоторые экраны необходимо инициализировать. В функции шага открытия экрана, соответствующей функции LCD_panel_init, предусмотрено несколько методов инициализации экрана.

Экран DSI инициализируется через канал DSI-D0. Экран ЦП инициализируется через шину 8080 и использует LCDIO (PD, PH). В этом методе инициализации биты контактов его шины

Определение настройки соответствует экрану ЦП.

Следующие интерфейсы определены и реализованы в lcd_source.c и lcd_source.h, пути которых указаны в декомпозиции драйвера экрана.

4.2.11 Инициализация с использованием последовательного интерфейса iic/spi

Доступ устройства iic/spi к последовательному интерфейсу необходимо зарегистрировать в драйвере экрана.

Используйте аппаратный spi для проверки или передачи IC для инициализации, как показано в следующем фрагменте кода.

Сначала вызовите функцию spi_init для инициализации оборудования spi. Функцию spi_init можно разделить на несколько этапов. Сначала получите мастер в соответствии с фактическим подключением оборудования, выберите spi (если это выбрано в коде).

Если на этом этапе возвращается ошибка о том, что spi настроен неправильно, обратитесь к лицу, отвечающему за драйвер spi. Второй шаг — настройка устройства spi, которое включает максимальную скорость, режим передачи spi и количество бит, содержащихся в каждом слове. Наконец, вызовите spi_setup для завершения.

Отношения между мастером и устройством.

comm_out — это пример передачи spi, а ядром является функция spi_sync_transfer.

Язык кода:javascript
копировать
static int spi_init(void)
{
    int ret = -1;
    struct spi_master *master;
    master = spi_busnum_to_master(1);
    if (!master) {
        lcd_fb_wrn("fail to get master\n");
        goto OUT
    }
    spi_device = spi_alloc_device(master);
    if (!spi_device) {
        lcd_fb_wrn("fail to get spi device\n");
        goto OUT;
    }
spi_device->bits_per_word = 8;
    spi_device->max_speed_hz = 60000000; /*50MHz*/
    spi_device->mode = SPI_MODE_0;
    ret = spi_setup(spi_device);
    if (ret) {
        lcd_fb_wrn("Faile to setup spi\n");
        goto FREE;
    }
	lcd_fb_inf("Init spi1:bits_per_word:%d max_speed_hz:%d mode:%d\n",
        spi_device->bits_per_word, spi_device->max_speed_hz,
        spi_device->mode);
	ret = 0;
	goto OUT;
FREE:
    spi_master_put(master);
    kfree(spi_device);
    spi_device = NULL;
OUT:
    return ret;
}
static int comm_out(unsigned int sel, unsigned char cmd)
{
    struct spi_transfer t;
    if (!spi_device)
    	return -1;
    DC(sel, 0);
    memset(&t, 0, sizeof(struct spi_transfer));
    t.tx_buf = &cmd;
    t.len = 1;
    t.bits_per_word = 8;
    t.speed_hz = 24000000;
    return spi_sync_transfer(spi_device, &t, 1);
}

Использование аппаратного i2c на ЖК-дисплей& Микросхема адаптера Инициализируйте, инициализируйте i2c Основная функция оборудования — i2c_add_driver, и вам нужно инициализировать структуру его параметров. i2c_driver。

it66121_id содержит имя устройства и индекс шины i2c (i2c0, i2c1...).

it66121_i2c_probe Если вы можете войти в эту функцию, вы можете начать использовать i2c. В сегменте кода глобальной переменной-указателю присваивается только параметр cilent, который понадобится позже.

it66121_match, это таблица соответствия dts. Поскольку вы добавляете драйвер в disp2, таблица соответствия здесь представляет собой таблицу соответствия disp2. Обратите внимание.

Заполните неправильную форму. Функция tv_i2c_detect здесь очень важна. Эта функция вызывается раньше, чем функция зонда. Только после ее успешного вызова можно запустить i2c. Вызов strlcpy означает успех.

normal_i2c Заполнен ли ЖК-дисплей из списка адресов устройства? или Микросхема адаптера Адрес подчиненного устройства и i2c индекс.

Сможете ли вы начать использовать I2C, зависит от того, вызывается ли функция зонда.

Использование i2c_smbus_write_byte_data или i2c_smbus_read_byte_data для чтения и записи может удовлетворить большинство сценариев.

Язык кода:javascript
копировать
#define IT66121_SLAVE_ADDR 0x4c
#define IT66121_I2C_ID 0
static const struct i2c_device_id it66121_id[] = {
    { "IT66121", IT66121_I2C_ID },
    { /* END OF LIST */ }
};
MODULE_DEVICE_TABLE(i2c, it66121_id);
static int it66121_i2c_probe(struct i2c_client *client, const struct i2c_device_id *id)
{
    this_client = client;
    return 0;
}
static const struct of_device_id it66121_match[] = {
    {.compatible = "allwinner,sun8iw10p1-disp",},
    {.compatible = "allwinner,sun50i-disp",},
    {.compatible = "allwinner,sunxi-disp",},
    {},
};
static int tv_i2c_detect(struct i2c_client *client, struct i2c_board_info *info)
{
    const char *type_name = "IT66121";
    if (IT66121_I2C_ID == client->adapter->nr) {
    	strlcpy(info->type, type_name, 20);
    } else
		pr_warn("%s:%d wrong i2c id:%d, expect id is :%d\n", __func__, __LINE__,
    		client->adapter->nr, IT66121_I2C_ID);
    return 0;
}
static unsigned short normal_i2c[] = {IT66121_SLAVE_ADDR, I2C_CLIENT_END};
static struct i2c_driver it66121_i2c_driver = {
    .class = I2C_CLASS_HWMON,
    .id_table = it66121_id,
    .probe = it66121_i2c_probe,
    .remove = it66121_i2c_remove,
    .driver = {
        .owner = THIS_MODULE,
        .name = "IT66121",
        .of_match_table = it66121_match,
    },
    .detect = tv_i2c_detect,
    .address_list = normal_i2c,
};
static void LCD_panel_init(u32 sel)
{
    int ret = -1;
    ret = i2c_add_driver(&it66121_i2c_driver);
    if (ret) {
        pr_warn("Add it66121_i2c_driver fail!\n");
        return;
    }
    //start init chip with i2c
}
void it6612_twi_write_byte(it6612_reg_set* reg)
{
    u8 rdata = 0;
    u8 tmp = 0;
    rdata = i2c_smbus_read_byte_data(this_client, reg->offset);
    tmp = (rdata & (~reg->mask))|(reg->mask&reg->value);
    i2c_smbus_write_byte_data(this_client, reg->offset, tmp);
}
4.2.12 Меры предосторожности при использовании драйвера экрана U-boot

Шаги по написанию драйверов экрана в U-boot такие же, как и для ядра, и файлы пути к коду организованы таким же образом. Вот на что нужно обратить внимание.

1. Чтобы ускорить отображение U-boot, между несколькими функциями, открывающими экран, применяется асинхронный вызов. Принцип состоит в том, чтобы использовать прерывание таймера для регулярного вызова функции открытия экрана, поэтому в данном случае используется платформа bootGUI. загружается и

Это не означает, что открытие экрана завершено, но когда вы увидите открытый ЖК-дисплей, завершите печать.

Предложение: Чтобы максимально использовать преимущества асинхронных вызовов, укажите необходимую задержку при регистрации обратного вызова. Например, задержка в 10 мс, указанная ниже, использует асинхронный обратный вызов по таймеру. В течение этих 10 мс uboot.

Вы можете сделать и другие вещи для достижения цели асинхронного вызова.

Язык кода:javascript
копировать
LCD_OPEN_FUNC(sel, LCD_power_on,10);

2. Функцию sunxi_lcd_power_enable и sunxi_lcd_pin_cfg нельзя вызывать вне LCD_power_on, иначе uboot будет ненормальным.

Строго говоря, его можно вызвать только в первой функции обратного вызова, зарегистрированной в LCD_OPEN_FUNC.

4.3 RGB-интерфейс

4.3.1 Обзор

Ниже представлена ​​платформа Quanzhi RGB. И пример конфигурации, как отображать lcd0 под каждым атрибутом.

Интерфейс RGB также называется интерфейсом HV (горизонтальная синхронизация и вертикальная синхронизация) на платформе Allwinner.

Для инициализации экрана RGB:

Некоторые ЖК-экраны поддерживают расширенные функции, такие как настройка гаммы, формата пикселей и т. д., но сам протокол RGB не поддерживает передачу других данных, кроме данных изображения, поэтому ЖК-экран нельзя настроить через контакты RGB.

Таким образом, если вы получаете экран интерфейса RGB, вам либо не нужна команда инициализации, либо на экране будут предусмотрены дополнительные контакты для настройки SoC, такие как SPI и I2C.

4.3.2 Контакты интерфейса RGB

Рисунок 4-6: Контакты RGB

Для получения информации о конкретных выводах SoC и функциях (функции мультиплексирования выводов) вышеуказанных выводов см. таблицу мультиплексирования выводов. Названия функций мультиплексирования выводов обычно начинаются с «LCDX_», где X — число.

Количество выводов данных не обязательно равно 24. RGB подразделяется на несколько интерфейсов, которые выбираются установкой lcd_hv_if.

Таблица 4-1: Классификация интерфейсов RGB

разрядность

тактовый цикл

Подсчитайте количество и формат цвета

24 bits

1 cycle

16.7M colors, RGB888

18 bits

1 cycle

262K colors, RGB666

16 bits

1 cycle

65K colors, RGB565

6 bits

3 cycles

262K colors, RGB666

6 bits

3 cycles

65K colors, RGB565

иллюстрировать

тактовый циклномеризм означает: сколько тактовых нужно для одного пикселя цикл был отправлен и значит из.

когдатактовый цикл1 Когда мы называем это RGB Порт ловить — это параллельный порт, а в других случаях — последовательный порт. Более общий принцип заключается в том, что требуется несколько тактов. цикл может отправить только один пиксель, изловить порт является последовательным

интерфейс.

Как определить, поддерживается ли 24-битная версия изразрядность, проще всего использовать pinmux Подсчитайте количество выводов данных в таблице, если их 24. Рут поддерживает 24бит, если есть только 18 Рут поддерживает 18бит.

Аппаратное подключение

Для параллельного RGB изловитьрот, когда разрядность меньше 24 час,Аппаратное подключение должно выбрать подключение ловителя каждой массы в верхнем положении и отказаться от нижнего положения.,Причиной этого является потеря меньшего количества цвета.

Для последовательного RGB ловитьрот,Аппаратное подключение Можно ссылатьсяRGB и I8080 синхронизация на схеме конфигурации контактов RGB Эти колонны.

Интерфейс RGB имеет два метода синхронизации. По опыту попробуйте использовать второй метод. Убедитесь, что контакт DE подключен к оборудованию.

  1. Hsync+Vsync
  2. DE(Data Enable)
4.3.3 Пример конфигурации параллельного интерфейса RGB

Когда мы настраиваем параллельный RGB интерфейса, нет необходимости различать 24 и 24 в конфигурации. немного, 18 битовая сумма 16 Бит, разрядность которого наибольшая, является опорным выводом. mux Таблица ЖК-дисплея экрансамподдерживаетсяразрядность СравниватьSoC поддерживается

Если у вас меньшая разрядность, конечно, вы можете выбрать только ту, у которой меньше из.

Поскольку он не требует инициализации, с интерфейсом RGB возникает очень мало проблем. Сосредоточьтесь на рациональности синхронизации ЖК-дисплея, то есть рациональности атрибутов lcd_ht, lcd_hspw, lcd_hbp, lcd_vt, lcd_vspw и lcd_vbp.

секс.

Ниже приведен типичный пример конфигурации board.dts с параллельным интерфейсом RGB, в котором пустые строки используются для разделения конфигурации на несколько частей.

  1. Первая часть определяет, используется ли конфигурация и какой драйвер экрана использовать. lcd_driver_name определяет, какой драйвер экрана использовать для инициализации. Здесь задан параметр default_lcd, который не требует инициализации.

RGB-экран

  1. Вторая часть определяет, является ли следующая конфигурация параллельной конфигурацией RGB.
  2. Третья часть определяет SoC середина ЖК-дисплей Чтобы узнать время отправки модуля, проверьте параметры времени на экране, иллюстрировать.
  3. Четвертая часть определяет подсветку (ШИМ ilcd_bl_en). Пожалуйста, обратите внимание на параметр «Взаимно выключена подсветка».
  4. Пятая часть — это настройка части эффектов отображения. Если это не 24-битный RGB, то обычно вам нужно установить lcd_frm.
  5. Шестая часть — это блок питания и конфигурация контактов. Решение о том, использовать ли RGB666 или RGB888, необходимо принимать в соответствии с фактической таблицей pinmux. Если чип имеет только 18 данных RGB, это может быть только RGB18. Пожалуйста, посмотрите источник питания и контакты

параметр.

Язык кода:javascript
копировать
&lcd0 {
    /* part 1 */
    lcd_used = <1>;
    lcd_driver_name = "default_lcd";
    /* part 2 */
    lcd_if = <0>;
    lcd_hv_if = <0>;
    /* part 3 */
    lcd_width = <150>;
    lcd_height = <94>;
    lcd_x = <800>;
    lcd_y = <480>;
    lcd_dclk_freq = <33>;
    lcd_hbp = <46>;
    lcd_ht = <1055>;
    lcd_hspw = <0>;
    lcd_vbp = <23>;
    lcd_vt = <525>;
    lcd_vspw = <0>;
    /* part 4 */
    lcd_backlight = <50>;
    lcd_pwm_used = <1>;
    lcd_pwm_ch = <8>;
    lcd_pwm_freq = <10000>;
    lcd_pwm_pol = <1>;
    lcd_bl_en = <&pio PD 27 1 0 3 1>;
    lcd_bright_curve_en = <0>;
    /* part 5 */
    lcd_frm = <0>;
    lcd_io_phase = <0x0000>;
    lcd_gamma_en = <0>;
    lcd_cmap_en = <0>;
    lcd_hv_clk_phase = <0>;
    lcd_hv_sync_polarity= <0>;
    /* part 6 */
    lcd_power = "vcc-lcd";
    lcd_pin_power = "vcc-pd";
    pinctrl-0 = <&rgb24_pins_a>;
    pinctrl-1 = <&rgb24_pins_b>;
};

4.3.4 Типичная конфигурация последовательного интерфейса RGB

СерийныйRGB да Взаимно Для параллельного RGB Это не означает, что он использует только одну линию для отправки данных, поскольку он использует несколько тактовых строк. цикл может отправить один пиксель из данных, затем этот изRGB ловитьрот Сразуда СерийныйRGB。

То же самое с параллельным RGB Как и ловить, конфигурация не требует и не может отражать конкретный СерийныйRGB. ловитьрот, нужно сделать из это поставить Аппаратное подключениеверно。

поддатипичный СерийныйRGB интерфейсная плата.dts Пример конфигурации, в нем всего 8 Нижний колонтитул корневых данных, в котором используются пустые строки для разделения конфигурации на несколько частей.

  1. Первая часть определяет, используется ли конфигурация и какой драйвер экрана использовать. lcd_driver_name определяет, какой драйвер экрана использовать для инициализации.
  2. Второе подразделение решило, что следующая конфигурация — это СерийныйRGB. конфигурация.
  3. Третья часть определяет SoC середина ЖК-дисплей Чтобы узнать время отправки модуля, проверьте параметры времени на экране, иллюстрировать.

Навык Здесь следует отметить, что для этого интерфейса SoC Для выпуска одного требуется в общей сложности три цикла.pixel,Поэтому, когда мы настраиваем время из,нужно быть удовлетвореннымlcd_dclk_freq3=lcd_htlcd_vt60,или

lcd_dclk_freq=lcd_ht3lcd_vt60Или3 раз lcd_htor или 3 раза lcd_dclk_freq.

  1. Четвертая часть определяет подсветку. Это ШИМ и lcd_bl_en. Пожалуйста, ознакомьтесь с параметрами, связанными с подсветкой.
  2. Пятая часть — настройки эффектов отображения.
  3. Шестая часть Приколыти власть из определения. Пожалуйста, посмотрите источник питания.

иллюстрировать

Микросхема драйвера ЖК-дисплея в приведенном ниже примере — stv7789v, которую необходимо инициализировать. Инициализированный протокол интерфейса — SPI, поэтому в драйвере используется еще несколько конфигураций контактов SPI для имитации протокола SPI, поэтому вот конфигурации.

функция gpio.

Язык кода:javascript
копировать
&lcd0 {
    /* part 1 */
    lcd_used = <1>;
    lcd_driver_name = "st7789v";
    /* part 2 */
    lcd_if = <0>;
    lcd_hv_if = <8>;
    /* part 3 */
    lcd_x = <240>;
    lcd_y = <320>;
    lcd_width = <108>;
    lcd_height = <64>;
    lcd_dclk_freq = <19>;
    lcd_hbp = <120>;
    ;10 + 20 + 10 + 240*3 = 760 real set 1000
    lcd_ht = <850>;
    lcd_hspw = <2>;
    lcd_vbp = <13>;
    lcd_vt = <373>;
    lcd_vspw = <2>;
    /* part 4 */
    lcd_backlight = <50>;
    lcd_pwm_used = <1>;
    lcd_pwm_ch = <8>;
    lcd_pwm_freq = <50000>;
    lcd_pwm_pol = <1>;
    lcd_pwm_max_limit = <255>;
    lcd_bl_en = <&pio PB 1 1 0 3 1>;
    lcd_bright_curve_en = <1>;
    /* part 5 */
    lcd_frm = <1>;
    lcd_hv_clk_phase = <0>;
    lcd_hv_sync_polarity= <0>;
    lcd_hv_srgb_seq = <0>;
    lcd_io_phase = <0x0000>;
    lcd_gamma_en = <0>;
    lcd_cmap_en = <0>;
    lcd_rb_swap = <0>;
    /* part 6 */
    lcd_power = "vcc-lcd";
    lcd_pin_power = "vcc-pd";
    /*reset */
    lcd_gpio_0 = <&pio PD 9 1 0 3 1>;
    /* cs */
    lcd_gpio_1 = <&pio PD 10 1 0 3 0>;
    /*sda */
    lcd_gpio_2 = <&pio PD 13 1 0 3 0>;
    /*sck */
    lcd_gpio_3 = <&pio PD 12 1 0 3 0>;
    pinctrl-0 = <&rgb8_pins_a>;
    pinctrl-1 = <&rgb8_pins_b>;
};

4.4 Интерфейс MIPI-DSI

4.4.1 Обзор

MIPI-DSI, мгновенная мобильность Промышленный интерфейс процессора Последовательный интерфейс дисплея, процессор индустрии мобильной связи ловить порт последовательного интерфейса дисплея.

Пользователям необходимо знать:

  1. Command режим,аналогичный MPU ловитьрот,требуется микросхема Внутри есть GRAM в буфер.
  2. Video режим. Похоже на: RGB ловить, GRAM нет, нужно продолжать идти к панели Сбросить данные. где видео Режим разделен на три подрежима.

• Non-burst mode with sync pulses

• Non Burst mode with sync Events

• Пакетный режим. Простое понимание состоит в том, что эффективный коэффициент передачи данных выше и эффективность передачи выше.

  1. полоса означает пару штифтов дифференциала.
4.4.2 Контакты MIPI-DSI

MIPI-DSI Выводы встречаются в большинстве микросхем. посвящён, в board.dtsi Не внутринуждаться Конфигурация,Пока оборудование подключеноловить Это нормально ХОРОШО.

Однако контакты DSI некоторых микросхем не выделены и повторно используются с контактами других функций. В этом случае необходимо настроить pinctrl-0 и pinctrl-1.

Выводы mipi-dsi являются дифференциальными и разделены на два типа выводов: один — тактовый, а другой — вывод данных. Количество выводов данных является переменным, а единица измерения — полоса. две линии.

Вообще говоря,ЖК-дисплей. экраниллюстрироватьвнутри книгиизобъяснятьпереулок Число относится к количеству контактов данных, исключая контакты тактирования. Например, определенное 4 lane MIPI-DSI Экран имеет общую площадь (4+1)*2 фута.

4.4.3 Источник питания MIPI-DSI

Как правило, модуль MIPI-DSI питается от источника питания. Его можно рассматривать как питание на выводах или питание модуля. Разные микросхемы могут иметь разные требования к напряжению для этого источника питания. После определения модели микросхемы требования к напряжению. источник питания

Если напряжение этой цепи будет изменено без разрешения, модуль может выйти из строя.

Рисунок 4-7: контактный мультиплексор

4.4.4 Определите, поддерживается ли определенный экран MIPI-DSI

​ 1. Ограничение разрешения. Есть переулок Ограничение скорости, мы можем получить максимальный предел разрешения, формула расчета следующая, при условии, что полоса_скорости Не более, чем указанная выше микросхема Спецификация Регулированиеизскорость,Так что теоретически это последствия,

Пожалуйста, проверьте характеристики микросхемы.

lane_speed=lcd_vt * lcd_ht * fps * bit_per_pixel / lane_num / 1e9

• Единица измерения: Гбит/с.

• fps: ожидаемая частота обновления, которую можно узнать из руководства к экрану, обычно составляет 60. Пожалуйста, смотрите lcd_dclk_freq.

• bit_per_pixel: количество битов, содержащихся в каждом пикселе, обычно 24 или 18, устанавливается через lcd_dsi_format.

• Lane_num: номер полосы, установленный lcd_dsi_lane.

• 1e9:1000000000 записано в экспоненциальной записи.

  1. При выборе разрешения необходимо учитывать пропускную способность системы, DE способность,Так что даже если порт ловить поддерживает это разрешение,Не обязательно поддерживается всей системой,Например, в целях экономии средств оборудование выбирает скорость

Использовать очень медленную память DDR и при этом хотеть выбрать экран с высоким разрешением явно нереально.

  1. ограничение количества полос. Большинство микросхем Allwinner поддерживают до 4 полос MIPI-DSI. Если вы видите экран с более чем 4 полосами, он определенно не будет его поддерживать. Некоторые микросхемы поддерживают до 8 полос, поэтому вам следует выбрать эту модель.

IC。

  1. MIPI-DSI Стандарты несовместимы. Пожалуйста, проверьте характеристики микросхемы.
4.4.5 Вычисление тактовой частоты MIPI-DSI

С помощью осциллографа измерьте тактовый сигнал MIPI-DSI, чтобы определить, соответствует ли его частота потребностям экрана.

Во-первых, мы можем вычислить частоту теоретического сигнала CLK по заданной частоте пикселя и номеру полосы следующим образом:

Язык кода:javascript
копировать
Freq_dsi_clk = (Dclk * colordepth * 3 / lane ) / 2
  1. Freq_dsi_clk: частота тактового вывода dsi, которую мы хотим измерить. Единица измерения — МГц.
  2. Dclk:картинабелыйчасколокол。Зависит отlcd_htlcd_vtfps/1e6Рассчитать формулу。
  3. Цветовая глубина: глубина цвета, обычно 8. или6。
  4. Умножение на 3 означает, что имеется 3 компонента RGB.
  5. Lane:dsi переулок количество.
  6. Делится на 2: поскольку тактовый сигнал dsi дискретизируется по обоим фронтам.
4.4.6 Пример конфигурации экрана видеорежима MIPI-DSI

Большинство экранов MIPI-DSI настроены в видеорежиме.

Ниже приведен типичный пример конфигурации board.dts для видеорежима MIPI-DSI, в котором пустые строки используются для разделения конфигурации на несколько частей.

  1. Первая часть определяет, используется ли конфигурация и какой драйвер экрана использовать. lcd_driver_name определяет, какой драйвер экрана использовать для инициализации.
  2. Вторая часть, решаем, какая конфигурация dsi ловитьрот,И ДСИ ловитьротиспользоватьиздаvideo mode。
  3. Третья часть определяет SoC середина ЖК-дисплей Чтобы узнать время отправки модуля, проверьте параметры времени на экране, иллюстрировать.
  4. Четвертая часть, подсветка Взаимно выключена из настроек. Пожалуйста, обратите внимание на параметр «Взаимно выключена подсветка».
  5. Часть 5, ДСИ ловитьротиз Детальные настройки.
  6. Шестая часть отображает настройки эффектов.
  7. Часть седьмая, Приколоти настройки электропитания. Пожалуйста, посмотрите источник питания.
Язык кода:javascript
копировать
&lcd0 {
    /* part 1 */
    lcd_used = <1>;
    lcd_driver_name = "k101im2qa04";
    /* part 2 */
    lcd_if = <4>;
    lcd_dsi_if = <0>;
    /* part 3 */
    lcd_x = <800>;
    lcd_y = <1280>;
    lcd_width = <135>;
    lcd_height = <216>;
    lcd_dclk_freq = <68>;
    lcd_hbp = <36>;
    lcd_ht = <854>;
    lcd_hspw = <18>;
    lcd_vbp = <12>;
    lcd_vt = <1320>;
    lcd_vspw = <4>;
    /* part 4 */
    lcd_backlight = <50>;
    lcd_pwm_used = <1>;
    lcd_pwm_ch = <0>;
    lcd_pwm_freq = <50000>;
    lcd_pwm_pol = <1>;
    lcd_pwm_max_limit = <255>;
    lcd_bl_en = <&pio PB 8 1 0 3 1>;
    lcd_bright_curve_en = <0>;
    /* part 5 */
    lcd_dsi_lane = <4>;
    lcd_dsi_format = <0>;
    lcd_dsi_te = <0>;
    /* part 6 */
    lcd_frm = <0>;
    lcd_gamma_en = <0>;
    lcd_cmap_en = <0>;
    /* part 7 */
    lcd_pin_power = "dcdc1";
    lcd_pin_power1 = "eldo3";
    lcd_power = "dc1sw";
    lcd_gpio_0 = <&pio PD 22 1 0 3 1>;
    pinctrl-0 = <&dsi4lane_pins_a>;
    pinctrl-1 = <&dsi4lane_pins_b>;
};
4.4.7 Пример конфигурации экрана сверхвысокого разрешения MIPI-DSI

По уровню разрешения его обычно разделяют на несколько режимов настройки. 1080p Разрешение и ниже: нужно только установить lcd_dsi_if Для управления просто ХОРОШО.Команда mode Как правило, это экран низкого разрешения и видео mode

А серийный режим предназначен для высокого разрешения. Если разрешение достигает 2к, требуются дополнительные настройки.

Экрану с разрешением 2К или выше фактически требуется до 8 полос данных для нормального отображения, из которых четыре полосы отправляют нечетные пиксели в изображении, а другое изображение отправляет нечетные пиксели.

иллюстрировать

Обратите внимание, что только некоторые микросхемы поддерживают сверхвысокое разрешение. Подробности см. в части MIPI-DSI спецификаций чипа.

Ниже приведен пример конфигурации Board.dts MIPI-DSI с высоким и сверхвысоким разрешением (более 2 КБ), в котором пустые строки используются для разделения конфигурации на несколько частей.

  1. Первая часть определяет, используется ли конфигурация и какой драйвер экрана использовать. lcd_driver_name определяет, какой драйвер экрана использовать для инициализации.
  2. Вторая часть, решаем, какая конфигурация dsi ловитьрот,И ДСИ ловитьротиспользоватьиздаvideo mode。
  3. Третья часть определяет SoC середина ЖК-дисплей Чтобы узнать время отправки модуля, проверьте параметры времени на экране, иллюстрировать.
  4. четвертыйчасть,Подсветка заранее выключена в настройках,Пожалуйста, обратите внимание на параметр «Взаимно выключена подсветка».
  5. Часть 5, ДСИ ловитьротиз Детальные настройки.

иллюстрировать lcd_dsi_lane Все еще ставлю 4 переулок Причина в том, что это установка dsi переулок Количество: для этого экрана требуется два dsi. В сумме получается 8 переулок。

В настоящее время три параметра lcd_tcon_mode, lcd_dsi_port_num и lcd_tcon_en_odd_even_div должны быть специально установлены. Нажмите, чтобы просмотреть конкретное значение. Если это экран с разрешением 1080p и ниже (используйте только).

4lane или ниже), то эти три конфигурации по умолчанию равны 0 Вот и все. 6. Шестая часть показывает настройки части эффектов. 7.седьмойчасть,да Приколотьиисточник питанияконфигурация.Пожалуйста, следуйте принципиальной схеме Конфигурация。Пожалуйста, посмотритеисточник питанияи Приколотьпараметр.

Язык кода:javascript
копировать
&lcd0 {
    /* part 1 */
    lcd_used = <1>;
    lcd_driver_name = "lq101r1sx03";
    /* part 2 */
    lcd_if = <4>;
    lcd_dsi_if = <0>;
    /* part 3 */
    lcd_x = <2560>;
    lcd_y = <1600>;
    lcd_width = <216>;
    lcd_height = <135>;
    lcd_dclk_freq = <268>;
    lcd_hbp = <80>;
    lcd_ht = <2720>;
    lcd_hspw = <32>;
    lcd_vbp = <37>;
    lcd_vt = <1646>;
    lcd_vspw = <6>;
    /* part 4 */
    lcd_backlight = <50>;
    lcd_pwm_used = <1>;
    lcd_pwm_ch = <0>;
    lcd_pwm_freq = <50000>;
    lcd_pwm_pol = <1>;
    lcd_pwm_max_limit = <255>;
    lcd_bl_en = <&pio PH 10 1 0 3 1>;
    /* part 5 */
    lcd_dsi_lane = <4>;
    lcd_dsi_format = <0>;
    lcd_dsi_te = <0>;
    lcd_dsi_port_num = <1>;
    lcd_tcon_mode = <4>;
    lcd_tcon_en_odd_even_div = <1>;
    /* part 6 */
    lcd_frm = <0>;
    lcd_io_phase = <0x0000>;
    lcd_gamma_en = <0>;
    lcd_bright_curve_en = <0>;
    lcd_cmap_en = <0>;
    /* part 7 */
    lcd_power = "vcc18-lcd";
    lcd_power1 = "vcc33-lcd";
    lcd_pin_power = "vcc-pd";
    lcd_gpio_0 = <&pio PH 11 1 0 3 1>;
    lcd_gpio_1 = <&pio PH 12 1 0 3 1>;
};
4.4.8 Пример конфигурации экрана командного режима MIPI-DSI

Экран DSI в командном режиме аналогичен интерфейсу I8080. Внутри экрана имеется ОЗУ для буферизации и обработки изображений. В этом случае обычно необходимо использовать вывод te экрана для запуска прерывания вертикальной синхронизации, поэтому он отличается. от других типов DSI.

Отличие от экрана в том, что здесь необходимо установить вывод lcd_vsync. Вывод te экрана подключен к lcd_vsync, а lcd_dsi_te установлен в значение 1.

Настройка контакта te очень важна. Вообще говоря, если на экране есть контакт te, его необходимо подключить. В противном случае экран будет разрываться при отображении динамических изображений, и программное обеспечение не сможет решить эту проблему, что напрямую приведет к повреждению. последнее оборудование невозможно производить серийно.

фрукты.

Здесь мы перечисляем только ключевые отличия от видеорежима MIPI-DSI. Дополнительную информацию см. в предыдущем разделе.

  1. Первая часть определяет, используется ли конфигурация и какой драйвер экрана использовать. lcd_driver_name определяет, какой драйвер экрана использовать для инициализации.
  2. Вторая часть, решаем, какая конфигурация dsi ловить порт, а lcd_dsi_if установлен в 1 Указать команду mode。
  3. Третья часть определяет SoC середина ЖК-дисплей Чтобы узнать время отправки модуля, проверьте параметры времени на экране, иллюстрировать.
  4. Четвертая часть, подсветка Взаимно выключена из настроек. Пожалуйста, обратите внимание на параметр «Взаимно выключена подсветка».
  5. Часть 5, ДСИ ловитьротиз Детальные настройки. lcd_dsi_te, установите здесь 1 Указывает на включение курок.
  6. Шестая часть отображает настройки эффектов.
  7. Часть 7, настройки контактов и питания. lcd_vsync, вот это Контакт: этот контакт необходимо подключить к контакту ловитьприезжатьэкранизте на аппаратном обеспечении, а в программном обеспечении для него необходимо установить режим vsync. Функция.
Язык кода:javascript
копировать
&lcd0 {
    /* part 1 */
    lcd_used = <1>;
    lcd_driver_name = "h245qbn02";
    /* part 2 */
    lcd_if = <4>;
    lcd_dsi_if = <1>;
    /* part 3 */
    lcd_x = <240>;
    lcd_y = <432>;
    lcd_width = <52>;
    lcd_height = <52>;
    lcd_dclk_freq = <18>;
    lcd_hbp = <96>;
    lcd_ht = <480>;
    lcd_hspw = <2>;
    lcd_vbp = <21>;
    lcd_vt = <514>;
    lcd_vspw = <2>;
    /* part 4 */
    lcd_backlight = <100>;
    lcd_pwm_used = <1>;
    lcd_pwm_ch = <0>;
    lcd_pwm_freq = <50000>;
    lcd_pwm_pol = <1>;
    lcd_pwm_max_limit = <255>;
    lcd_bright_curve_en = <0>;
    lcd_bl_en = <&pio PB 3 1 0 3 1>;
    /* part 5 */
    lcd_dsi_lane = <1>;
    lcd_dsi_format = <0>;
    lcd_dsi_te = <1>;
    lcd_frm = <0>;
    lcd_io_phase = <0x0000>;
    lcd_gamma_en = <0>;
    lcd_cmap_en = <0>;
    /* part 7 */
    lcd_power = "axp233_dc1sw"
    lcd_power1 = "axp233_eldo1"
    lcd_gpio_0 = <&pio PB 2 1 0 3 0>;
    lcd_vsync = <&pio PD 21 2 0 3 0>;
};
4.4.9 Пример конфигурации с двумя экранами MIPI-DSI VR

Фактическая сцена представляет собой два физических экрана, каждый экран имеет разрешение 1080p, и каждый экран имеет 4 экрана. переулок, требование состоит в том, чтобы на каждом из двух экранов отображалось изображение кадра из левой и правой половины, в зависимости от соотношения сторон, а также горизонтального и вертикального экрана и DE. коэффициенты мощности обработки,

Одного DE+ одного tcon+ двух DSI уже недостаточно. Для управления одним dsi необходимо использовать два tcon, но два дисплея должны быть синхронизированы, что требует использования режима синхронизации двух tcon.

  1. LCD0 помечен как подчиненный tcon, который управляется ведущим tcon (установлен lcd_tcon_mode).
  2. LCD1 помечен как главный tcon и отвечает за все питание, подсветку и переключатели контактов двух экранов.
  3. Включите контакты, подачу питания и т. д. на LCD1. Сначала включается LCD0, и соответствующие регистры модуля инициализируются, но питание не включается. Затем включите LCD1. сработала для отправки данных вместе. Сделайте это одновременно

Включение и выключение.

иллюстрировать

Примечание. Лишь немногие микросхемы поддерживают этот режим.

Язык кода:javascript
копировать
&lcd0 {
    lcd_used = <1>;
    lcd_driver_name = "lpm025m475a";
    ;lcd_bl_0_percent = <0>;
    ;lcd_bl_40_percent = <23>;
    ;lcd_bl_100_percent = <100>;
    lcd_backlight = <50>;
    lcd_if = <4>;
    lcd_x = <1080>;
    lcd_y = <1920>;
    lcd_width = <31>;
    lcd_height = <56>;
    lcd_dclk_freq = <141>;
    lcd_pwm_used = <0>;
    lcd_pwm_ch = <0>;
    lcd_pwm_freq = <20000>;
    lcd_pwm_pol = <0>;
    lcd_pwm_max_limit = <255>;
    lcd_hbp = <100>;
    lcd_ht = <1212>;
    lcd_hspw = <5>;
    lcd_vbp = <8>;
    lcd_vt = <1936>;
    lcd_vspw = <2>;
    lcd_dsi_if = <0>;
    lcd_dsi_lane = <4>;
    lcd_dsi_format = <0>;
    lcd_dsi_te = <0>;
    lcd_dsi_eotp = <0>;
    lcd_frm = <0>;
    lcd_io_phase = <0x0000>;
    lcd_hv_clk_phase = <0>;
    lcd_hv_sync_polarity= <0>;
    lcd_gamma_en = <0>;
    lcd_bright_curve_en = <0>;
    lcd_cmap_en = <0>;
    lcd_dsi_port_num = <0>;
    lcd_tcon_mode = <3>;
    lcd_slave_stop_pos = <0>;
    lcd_sync_pixel_num = <0>;
    lcd_sync_line_num = <0>;
    };
&lcd1 {
    lcd_used = <1>;
    lcd_driver_name = "lpm025m475a";
    ;lcd_bl_0_percent = <0>;
    ;lcd_bl_40_percent = <23>;
    ;lcd_bl_100_percent = <100>;
    lcd_backlight = <50>;
    lcd_if = <4>;
    lcd_x = <1080>;
    lcd_y = <1920>;
    lcd_width = <31>;
    lcd_height = <56>;
    lcd_dclk_freq = <141>;
    lcd_pwm_used = <1>;
    lcd_pwm_ch = <0>;
    lcd_pwm_freq = <20000>;
    lcd_pwm_pol = <0>;
    lcd_pwm_max_limit = <255>;
    lcd_hbp = <100>;
    lcd_ht = <1212>;
    lcd_hspw = <5>;
    lcd_vbp = <8>;
    lcd_vt = <1936>;
    lcd_vspw = <2>;
    lcd_dsi_if = <0>;
    lcd_dsi_lane = <4>;
    lcd_dsi_format = <0>;
    lcd_dsi_te = <0>;
    lcd_dsi_eotp = <0>;
    lcd_frm = <0>;
    lcd_io_phase = <0x0000>;
    lcd_hv_clk_phase = <0>;
    lcd_hv_sync_polarity= <0>;
    lcd_gamma_en = <0>;
    lcd_bright_curve_en = <0>;
    lcd_cmap_en = <0>;
    lcd_dsi_port_num = <0>;
    lcd_tcon_mode = <1>;
    lcd_tcon_slave_num = <0>;
    lcd_slave_stop_pos = <0>;
    lcd_sync_pixel_num = <0>;
    lcd_sync_line_num = <0>;
    lcd_bl_en = <&pio PH 10 1 0 3 1>;
    lcd_power = "vcc-dsi";
    lcd_power1 = "vcc18-lcd";
    lcd_power2 = "vcc33-lcd";
    lcd_gpio_0 = <&pio PH 8 1 0 3 1>;
    lcd_gpio_1 = <&pio PH 11 1 0 3 1>;
    lcd_gpio_2 = <&pio PH 12 1 0 3 1>;
    lcd_pin_power = "vcc-ph"
};

4.5 Интерфейс I8080

4.5.1 Обзор

Экран интерфейса Intel 8080 (также известный как интерфейс MCU) — это очень старый протокол, который обычно используется на экранах с очень маленьким разрешением.

Сигнальная линия:

• Сигнал выбора чипа CS, определяет, работает ли чип.

• Сигнал выбора регистра RS, низкий уровень означает выбор индексного регистра или регистра состояния, высокий уровень означает выбор регистра управления. В реальных сценариях он обычно подключается к выводу LCD_DE (вывод разрешения данных) SoC.

• Сигнал различения команды данных /WR (низкий уровень означает запись данных), который представляет собой тактовый сигнал записи, обычно подключаемый к выводу LCD_CLK SoC.

• Сигнал чтения данных /RD (низкий уровень означает чтение данных), который является тактовым сигналом чтения, обычно подключается к выводу LCD_HSYNC SoC.

• RESET Сбросьте ЖК-дисплей (для сброса используйте фиксированную серию команд 0 1 0).

• Шина данных данных для двунаправленной передачи.

I8080 По данным из разрядностиловить есть 8/9/16/18, даже какая опорная нога, даже разрядность одинаковая, даже из Приколоть разная, также учитывайте из-фактор - RGB Формат.

  1. RGB565, всего 65 тысяч цветов.
  2. RGB666, всего 262 тыс. цветов.
  3. Для 9 бит установлено значение 262 КБ.

Из мануала: разрядность экрана, количество цветов, см. RGB. и I8080 Приколоть схему конфигурации Аппаратного подключение。

4.5.2 Типичный пример конфигурации экрана интерфейса I8080

Ниже приведен типичный RGB565. из,разрядностьдля8 Биты I8080 board.dts экрана интерфейса Пример конфигурации

​ 1. Первая часть определяет, используется ли конфигурация и какой драйвер экрана использовать. lcd_driver_name определяет, какой драйвер экрана использовать для инициализации.

​ 2. Во второй части решено, что конфигурация представляет собой интерфейс I8080 и формат RGB565 8 бит/2 цикла.

Навык Почему он называется 8bit/2cycle? RGB565 Ну во-первых, его формат RGB565, то есть один пиксель 16битный, а потом 8битный. изразрядность, нужно два тактовых Для отправки одного пикселя требуется цикл, поэтому

Называется 2 цикл.

  1. Третья часть определяет SoC середина ЖК-дисплей Чтобы узнать время отправки модуля, проверьте параметры времени на экране, иллюстрировать.этотвнутри Сравнивать Более особенныйизданастраиватькартинабелыйчасколокол要满足以下公式:lcd_dclk_freq2>=lcd_htlcd_vtfps,илиlcd_dclk_freq=lcd_ht 2lcd_vt60, То есть либо двойной lcd_ht, либо двойной lcd_dclk_freq.
  2. Четвертая часть, подсветка Взаимно выключена из настроек. Пожалуйста, обратите внимание на параметр «Взаимно выключена подсветка».
  3. Часть 5, процессор ловитьротиз Детальные настройки. Здесь lcd_cpu_teиlcd_cpu_mode включен, а это значит, что используется триггер и указан интервал триггера. Это очень критическая настройка.
  4. Шестая часть отображает настройки Включение lcd_frm здесь также является ключевой настройкой. Нажмите, чтобы просмотреть подробное значение.
  5. Часть 7, настройки контактов и питания. Чтобы использовать te для запуска здесь, также необходимо установить lcd_vsync. Определение функции этой ноги уже включено в pinctrl-0. Здесь настраивается набор пинов. Эталонный RGB и

I8080 Схема конфигурации контактов, определяемая I8080 изразрядность,Формат пикселей (кол-во цветов),Определите по таблице, какой Приколоть нужно соединить. Пожалуйста, посмотрите источник питания.

Язык кода:javascript
копировать
&pio {
    I8080_8bit_pins_a: I8080_8bit@0 {
        allwinner,pins = "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD18", "
        PD19", "PD20", "PD21";
        allwinner,pname = "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD18", "
        PD19", "PD20", "PD21";
        allwinner,function = "I8080_8bit";
        allwinner,muxsel = <2>;
        allwinner,drive = <3>;
        allwinner,pull = <0>;
    };
    I8080_8bit_pins_b: I8080_8bit@1 {
        allwinner,pins = "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD18", "
        PD19", "PD20", "PD21";
        allwinner,pname = "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD18", "
        PD19", "PD20", "PD21";
        allwinner,function = "I8080_8bit_suspend";
        allwinner,muxsel = <7>;
        allwinner,drive = <3>;
        allwinner,pull = <0>;
	};
};
&lcd0 {
    /* part 1 */
    lcd_used = <1>;
    lcd_driver_name = "s2003t46g";
    /* part 2 */
    lcd_if = <1>;
    lcd_cpu_if = <14>;
    /* part 3 */
    lcd_x = <240>;
    lcd_y = <320>;
    lcd_width = <108>;
    lcd_height = <64>;
    lcd_dclk_freq = <16>;
    lcd_hbp = <20>;
    lcd_ht = <298>;
    lcd_hspw = <10>;
    lcd_vbp = <8>;
    lcd_vt = <336>;
    lcd_vspw = <4>;
    /* part 4 */
    lcd_pwm_used = <1>;
    lcd_pwm_ch = <8>;
    lcd_pwm_freq = <50000>;
    lcd_pwm_pol = <1>;
    lcd_pwm_max_limit = <255>;
    lcd_bright_curve_en = <1>;
    /* part 5 */
    lcd_cpu_mode = <1>;
    lcd_cpu_te = <1>;
    /* part 6 */
    lcd_frm = <1>;
    lcd_gamma_en = <0>;
    lcd_cmap_en = <0>;
    lcd_rb_swap = <0>;
    /* part 7 */
    lcd_power = "vcc-lcd";
    lcd_pin_power = "vcc-pd";
    ;reset pin
    lcd_gpio_0 = <&pio PD 9 1 0 3 1>;
    ;cs pin
    lcd_gpio_1 = <&pio PD 10 1 0 3 0>;
    pinctrl-0 = <&I8080_8bit_pins_a>;
    pinctrl-1 = <&I8080_8bit_pins_a>;
};

4.6 Интерфейс LVDS

4.6.1 Обзор

LVDS Это низковольтная дифференциальная сигнализация — это интерфейс дифференциальной сигнализации низкого напряжения.

4.6.2 Типичная конфигурация LVDS с одним каналом

Для интерфейса LVDS контакты lvds, соответствующие lcd0, и контакты lvds, соответствующие lcd1, фиксированы и различны.

из-за лвд Протокол не имеет возможности передавать данные. Как правило, экран не требует никакой инициализации, необходимо инициализировать только SoC. конец Вот и все.Так вот изlcd_driver_name Это по-прежнему "default_lcd", конечно, можно.

Специальная оптимизация выполняется для задержки запуска инициализации.

Ниже приведен типичный сингл link lvds экранная доска.dts Пример конфигурация, где пустые строки используются для разделения конфигурации на несколько частей.

  1. Первая часть — решить, использовать ли эту конфигурацию и какой драйвер экрана использовать, lcd_driver_name. Решите, какой экран использовать драйвер для инициализации.
  2. Вторая часть — решить, является ли конфигурация lvds. ловитьрот, и это сингл link。 Навык Если двойной Link экран, то помимо изменения lcd_lvds_if 1 Кроме того, с точки зрения контактов, lcd1 должен быть Выводы перемещаются вниз вместе, то есть PD0 нужно настраивать суммарно. к PD9 и настройте PD10 приезжать

Всего двадцать контактов PD19 выполняют функции контактов lvds (функция 3). Конечно, время экрана также необходимо изменить в соответствии с экраном.

  1. Третья часть определяет SoC середина ЖК-дисплей Чтобы узнать время отправки модуля, проверьте параметры времени на экране, иллюстрировать.
  2. Четвертая часть, подсветка Взаимно выключена из настроек. Пожалуйста, обратите внимание на параметр «Взаимно выключена подсветка».
  3. Часть 5, лвдс ловитьротиз Детальные настройки.
  4. Шестая часть отображает настройки эффектов.
  5. Часть седьмая, Приколоти настройки электропитания. Пожалуйста, посмотрите источник питания.
Язык кода:javascript
копировать
&lcd0 {
    /* part 1 */
    lcd_used = 1
    lcd_driver_name = "default_lcd";
    /* part 2 */
    lcd_if = 3
    lcd_lvds_if = 0
    /* part 3 */
    lcd_x = 1280
    lcd_y = 800
    lcd_width = 150
    lcd_height = 94
    lcd_dclk_freq = 70
    lcd_hbp = 20
    lcd_ht = 1418
    lcd_hspw = 10
    lcd_vbp = 10
    lcd_vt = 814
    lcd_vspw = 5
    /* part 4 */
    lcd_pwm_used = 1
    lcd_pwm_ch = 0
    lcd_pwm_freq = 50000
    lcd_pwm_pol = 0
    lcd_pwm_max_limit = 255
    lcd_backlight = 50
    lcd_bright_curve_en = 0
    lcd_bl_en = <&pio PD 21 1 0 3 1>;
    /* part 5 */
    lcd_lvds_colordepth = 1
    lcd_lvds_mode = 0
    /* part 6 */
    lcd_frm = 1
    lcd_hv_clk_phase = 0
    lcd_hv_sync_polarity= 0
    lcd_gamma_en = 0
    lcd_cmap_en = 0
    /* part 7 */
    lcd_power = "vcc-lcd"
    pinctrl-0 = <&lvds0_pins_a>;
    pinctrl-1 = <&lvds0_pins_b>;
};

4.6.3 Типичная двухканальная конфигурация LVDS

Если экран Dual Link:

  1. lcd_lvds_if настройка 1 (сцена 1) или 2 (сценарий 2).
  2. Что касается конфигурации контактов, число линий данных также изменилось с 4 до 8, включая в общей сложности 20 контактов на линии clk.

Сценарий 1, физическое подключение экрана, 8 data lane,SoC к каждому 4 переулок Перенесите половину пикселей, нечетные или четные пиксели.

Язык кода:javascript
копировать
&lcd1 {
    lcd_used = <1>;
    lcd_driver_name = "bp101wx1";
    lcd_backlight = <50>;
    lcd_if = <3>;
    lcd_x = <2560>;
    lcd_y = <800>;
    lcd_width = <150>;
    lcd_height = <94>;
    lcd_dclk_freq = <138>;
    lcd_pwm_used = <0>;
    lcd_pwm_ch = <2>;
    lcd_pwm_freq = <50000>;
    lcd_pwm_pol = <1>;
    lcd_pwm_max_limit = <255>;
    lcd_hbp = <40>;
    lcd_ht = <2836>;
    lcd_hspw = <20>;
    lcd_vbp = <10>;
    lcd_vt = <814>;
    lcd_vspw = <5>;
    lcd_lvds_if = <1>;
    lcd_lvds_colordepth = <0>;
    lcd_lvds_mode = <0>;
    lcd_frm = <0>;
    lcd_hv_clk_phase = <0>;
    lcd_hv_sync_polarity= <0>;
    lcd_gamma_en = <0>;
    lcd_bright_curve_en = <0>;
    lcd_cmap_en = <0>;
    lcd_fsync_en = <0>;
    lcd_fsync_act_time = <1000>;
    lcd_fsync_dis_time = <1000>;
    lcd_fsync_pol = <0>;
    deu_mode = <0>;
    lcdgamma4iep = <22>;
    smart_color = <90>;
    lcd_bl_en = <&pio PJ 27 1 0 3 1>;
    lcd_gpio_0 = <&pio PI 1 1 0 3 1>;
    lcd_pin_power = "bldo5";
    lcd_power = "dc1sw";
    pinctrl-0 = <&lcd1_lvds2link_pins_a>;
    pinctrl-1 = <&lcd1_lvds2link_pins_b>;
};

Сценарий 2 (частичный IC Поддержка), физически подключите два экрана, каждый экран имеет 4 переулок, оба экрана одинаковой модели, разрешения и синхронизации То же, в настоящее время некоторые микросхемы Поддерживает отправку всех пикселей на каждый экран для достижения

Двойной дисплей (двойное отображение сигнала). Обратите внимание, что в настоящее время время ЖК-дисплея соответствует времени одного экрана, а lcd_lvds_if равно 2.

Язык кода:javascript
копировать
lcd1: lcd1@01c0c001 {
    lcd_used = <1>;
    lcd_driver_name = "bp101wx1";
    lcd_backlight = <50>;
    lcd_if = <3>;
    lcd_x = <1280>;
    lcd_y = <800>;
    lcd_width = <150>;
    lcd_height = <94>;
    lcd_dclk_freq = <70>;
    lcd_pwm_used = <0>;
    lcd_pwm_ch = <2>;
    lcd_pwm_freq = <50000>;
    lcd_pwm_pol = <1>;
    lcd_pwm_max_limit = <255>;
    lcd_hbp = <20>;
    lcd_ht = <1418>;
    lcd_hspw = <10>;
    lcd_vbp = <10>;
    lcd_vt = <814>;
    lcd_vspw = <5>;
    lcd_lvds_if = <2>;
    lcd_lvds_colordepth = <0>;
    lcd_lvds_mode = <0>;
    lcd_frm = <0>;
    lcd_hv_clk_phase = <0>;
    lcd_hv_sync_polarity= <0>;
    lcd_gamma_en = <0>;
    lcd_bright_curve_en = <0>;
    lcd_cmap_en = <0>;
    lcd_fsync_en = <0>;
    lcd_fsync_act_time = <1000>;
    lcd_fsync_dis_time = <1000>;
    lcd_fsync_pol = <0>;
    deu_mode = <0>;
    lcdgamma4iep = <22>;
    smart_color = <90>;
    lcd_bl_en = <&pio PJ 27 1 0 3 1>;
    lcd_gpio_0 = <&pio PI 1 1 0 3 1>;
    lcd_pin_power = "bldo5";
    lcd_power = "dc1sw";
    pinctrl-0 = <&lcd1_lvds2link_pins_a>;
    pinctrl-1 = <&lcd1_lvds2link_pins_a>;
};

4.7 Схема конфигурации контактов RGB и I8080

Рисунок 4-8: контактный мультиплексор

4.8 Примечания по переходу с sys_config.fex на board.dtsi

В целях стандартизации и по другим причинам некоторые платформы помещают конфигурацию в board.dtsi. осознал в. иллюстрировать Изменить board.dtsi меры предосторожности.

4.8.1 Определение контактов

Настройка RGB-экранилиLVDS Теперь нет необходимости в сложных определениях, нет необходимости знать, какие пины нужно настроить, и нет необходимости в узле lcd0_suspend. где имя rgb24_pins_a

После определения вы можете использовать его напрямую. Как правило, конфигурации, доступные непосредственно для ЖК-экранов, будут указаны в комментариях. Вы можете использовать платформу-pinctrl в каталоге ядра Arch/arm/boot/dts или Arch/arm64/boot/. текст dts.

Найдите его в файле.

пример:

Язык кода:javascript
копировать
pinctrl-0 = <&rgb24_pins_a>;
pinctrl-1 = <&rgb24_pins_b>;//впадать в спячкучасждатьизопределение,io_disable

Конечно, вы также можете настроить набор ножек и записать его в board.dtsi. середина,Пока имя не требуетсяи Существующее имя дублируется ХОРОШО.

В целях стандартизации мы будем поддерживать одинаковые имена на всех платформах, где суффикс a означает, что вывод включен, а b означает, что io_disable используется при выключении устройства.

В настоящее время доступны следующие определения контактов:

Таблица 4-2: Таблица названий контактов дисплея

Имя контакта

описывать

rgb24_pins_a и rgb24_pins_b

RGB-экранловитьрот,А разрядность данных 24,RGB888

rgb18_pins_a и rgb18_pins_b

RGB-экранловитьрот,А разрядность данных 16,RGB666

lvds0_pins_a и lvds0_pins_b

Определение контактов 0 одноканального интерфейса LVDS (основной дисплей lcd0)

lvds1_pins_a и lvds1_pins_b

Одноканальный интерфейс LVDS, определение контактов 1 (основной дисплей lcd0)

lvds2link_pins_a и lvds2link_pins_b

Определение контактов двухканального интерфейса LVDS (основной дисплей lcd0)

lvds2_pins_a и lvds2_pins_b

Определение контактов 0 одноканального интерфейса LVDS (основной дисплей lcd1)

lvds3_pins_a и lvds3_pins_b

Определение контактов одноканального интерфейса LVDS (основной дисплей lcd1)

lcd1_lvds2link_pins_a и lcd1_lvds2link_pins_b

Определение контактов двухканального интерфейса LVDS (основной дисплей lcd1)

dsi4lane_pins_a и dsi4lane_pins_b

Определение контакта интерфейса экрана DSI, 4 полосы, только если это другой номер полосы

4.8.2 Определение источника питания

Нет необходимости обращать внимание на определение источника питания в старом SDK. Вы можете напрямую присвоить строку псевдонима axp такому атрибуту, как lcd_power. Однако в новом SDK, если вам нужно использовать определенный источник питания, вы можете это сделать. сначала должен

Он определен в узле disp, а строка, используемая в части lcd, должна соответствовать строке, определенной в disp. Например, следующий пример:

Язык кода:javascript
копировать
disp: disp@01000000 {
    disp_init_enable = <1>;
    disp_mode = <0>;
    /* VCC-LCD */
    dc1sw-supply = <&reg_sw>;
    /* VCC-LVDS and VCC-HDMI */
    bldo1-supply = <&reg_bldo1>;
    /* VCC-TV */
    cldo4-supply = <&reg_cldo4>;
};

Среди них «-поставка» дазафиксированныйиз,Строка перед ней произвольная из,Однако рекомендуется использовать осмысленныеизимя。И позадиизкартина<&reg_sw> тогда это должно быть в board.dtsi регулятор0 найден в узле.

Затем в узле lcd0, если вы хотите использовать reg_sw, просто напишите его следующим образом: dc1sw соответствует dc1sw-supply.

Язык кода:javascript
копировать
lcd_power=”dc1sw”

Поскольку в u-boot также есть драйвер axp и драйвер дисплея, они считывают ту же конфигурацию, что и ядро. Для совместимости друг с другом существуют следующие ограничения при именовании.

В u-boot 2018 драйвер axp распознает только имена, определенные из чипа axp, например bldo1, поэтому при присвоении имени xxxsupply лучше всего называть его в соответствии с определением чипа axp.

4.8.3 Другие меры предосторожности

board.dtsi может содержать только lcd0, но не lcd1, или только tv0, но не tv1. Если вы хотите добавить его сейчас, вам нужно обратиться к соответствующей платформе в каталоге ядра Arch/arm/boot/dts или Arch/. Arm64/загрузка/dts.

.dtsi-файл. Самое критичное — строка адресов после @ должна соответствовать определению в ядре, например:

Язык кода:javascript
копировать
lcd1: lcd1@01c0c000

5 Описание параметров оборудования

5.1 Описание параметров интерфейса ЖК-дисплея

5.1.1 lcd_driver_name

Имя драйвера ЖК-экрана (строка) должно соответствовать имени драйвера экрана.

5.1.2 lcd_model_name

Название модели ЖК-экрана (необязательно) можно использовать в одном и том же драйвере экрана для дальнейшего различения разных экранов.

5.1.3 lcd_if

Lcd Interface

Соответствующее значение установки соответствующего значения:

Язык кода:javascript
копировать
0:HV RGBловитьрот
1:CPU/I80ловитьрот
2:Reserved
3:LVDSловитьрот
4:DSIловитьрот
5.1.4 lcd_hv_if

Lcd HV panel Interface

Этот параметр действителен только в том случае, если lcd_if=0. Определите несколько типов интерфейса на экране синхронизации RGB.

Соответствующее значение установки соответствующего значения:

Язык кода:javascript
копировать
0:Parallel RGB
8:Serial RGB
10:Dummy RGB
11:RGB Dummy
12:Serial YUV (CCIR656)
5.1.5 lcd_hv_clk_phase

Lcd HV panel Clock Phase

Этот параметр действителен только в том случае, если lcd_if=0. Определите фазовое соотношение между часами и данными экрана синхронизации RGB. Всего для регулировки доступны 4 фазы.

Соответствующее значение установки соответствующего значения:

Язык кода:javascript
копировать
0: 0 degree
1: 90 degree
2: 180 degree
3: 270 degree
5.1.6 lcd_hv_sync_polarity

Lcd HV panel Sync signals Polarity

Этот параметр доступен только при lcd_if=0. Это действительно только тогда, когда. ОпределитьRGB hsync для синхронизации экрана и вертикальная синхронизация изстолбсекс.

Соответствующее значение установки соответствующего значения:

Язык кода:javascript
копировать
0:vsync active low,hsync active low
1:vsync active high,hsync active low
2:vsync active low,hsync active high
3:vsync active high,hsync active high
5.1.7 lcd_hv_srgb_seq

Lcd HV panel Serial RGB output Sequence

Этот параметр доступен только при lcd_if=0. И lcd_hv_if=8 (последовательный RGB) действителен.

Определите порядок вывода RGB для нечетных строк:

Язык кода:javascript
копировать
0: Odd lines R-G-B; Even line R-G-B
1: Odd lines B-R-G; Even line R-G-B
2: Odd lines G-B-R; Even line R-G-B
4: Odd lines R-G-B; Even line B-R-G
5: Odd lines B-R-G; Even line B-R-G
6: Odd lines G-B-R; Even line B-R-G
8: Odd lines R-G-B; Even line B-R-G
9: Odd lines B-R-G; Even line G-B-R
10: Odd lines G-B-R; Even line G-B-R
5.1.8 lcd_hv_syuv_seq

Lcd HV panel Serial YUV output Sequence

Этот параметр доступен только при lcd_if=0. И lcd_hv_if=12 (последовательный YUV) действителен.

Определите выходной формат YUV:

Язык кода:javascript
копировать
0:YUYV
1:YVYU
2:UYVY
3:VYUY
5.1.9 lcd_hv_syuv_fdly

Lcd HV panel Serial YUV F line Delay

Этот параметр доступен только при lcd_if=0. И lcd_hv_if=12 (последовательный YUV) действителен.

Определите количество строк, в которых F задерживается относительно допустимых строк при кодировании CCIR656:

Язык кода:javascript
копировать
0:F toggle right after active video line
1:Delay 2 lines (CCIR PAL)
2:Delay 3 lines (CCIR NTSC)
5.1.10 lcd_cpu_if

Lcd CPU panel Interface

Этот параметр доступен только при lcd_if=1. Это действительно только тогда, когда Чтобы узнать конкретное время, обратитесь к RGB. и I8080 ЦП на схеме конфигурации контактов Эти колонны.

Соответствующее значение установки соответствующего значения:

Язык кода:javascript
копировать
0:18bit/1cycle (RGB666)
2: 16bit/3cycle (RGB666)
4:16bit/2cycle (RGB666)
6:16bit/2cycle (RGB666)
8:16bit/1cycle (RGB565)
10:9bit/1cycle (RGB666)
12:8bit/3cycle (RGB666)
14:8bit/2cycle (RGB565)
5.1.11 lcd_cpu_te

Lcd CPU panel tear effect

Соответствующее значение установки соответствующего значения заключается в том, что при значении 0 интервал обновления составляет lcd_ht × lcd_vt, при значении 1 или 2 интервал обновления составляет два импульса te:

Lcd CPU panel tear effect

Соответствующее значение установки соответствующего значения заключается в том, что при значении 0 интервал обновления составляет lcd_ht × lcd_vt, при значении 1 или 2 интервал обновления составляет два импульса te:

Язык кода:javascript
копировать
0:frame trigged automatically
1:frame trigged by te rising edge
2:frame trigged by te falling edge
5.1.12 lcd_lvds_if

Lcd LVDS panel Interface

Соответствующее значение установки соответствующего значения:

Язык кода:javascript
копировать
0:Single Link( 1 clock pair+3/4 data pair)
1:Dual Link(8 data пер, на каждые 4переулокловить влияет половина пикселей, нечетные пиксели и четные пиксели)
2: Dual Link (Каждый4переулокловитьполучить всекартинабелый,Обычно используется в физическом двойном экране.,И оба экрана одинаковые)

lcd_lvds_if равно 2 Сценарий состоит в том, чтобы соединить два одинаковых экрана, а затем на этих двух экранах будет отображаться одно и то же содержимое. Другое время Вам нужно заполнить время только одного экрана Вот и все.

5.1.13 lcd_lvds_colordepth

Lcd LVDS panel color depth

Соответствующее значение установки соответствующего значения:

Язык кода:javascript
копировать
0:8bit per color(4 data pair)
1:6bit per color(3 data pair)

5.1.14 lcd_lvds_mode

Lcd LVDS Mode

Этот параметр действителен только в том случае, если lcd_lvds_bitwidth=0.

Соответствующее значение установки соответствующего значения (см. рисунок ниже):

Язык кода:javascript
копировать
0:NS mode
1:JEIDA mode

Рисунок 5-1: режим lvds

5.1.15 lcd_dsi_if

Lcd MIPI DSI panel Interface

Этот параметр действителен только в том случае, если lcd_if=4. Определите два типа экранов MIPI DSI.

Соответствующее значение установки соответствующего значения:

Язык кода:javascript
копировать
0:Video mode
1:Command mode
2:video burst mode

Примечание. ЖК-экран в режиме «Видео» обновляет экран в реальном времени и имеет определение параметров синхронизации, таких как ht и hbp; экран в командном режиме имеет буфер отображения на экране и обычно имеет вывод TE;

5.1.16 lcd_dsi_lane

Lcd MIPI DSI panel Data Lane number

Этот параметр действителен только в том случае, если lcd_if=4.

Соответствующее значение установки соответствующего значения:

Язык кода:javascript
копировать
1:1 data lane
2:2 data lane
3:3 data lane
4:4 data lane
5.1.17 lcd_dsi_format

Lcd MIPI DSI panel Data Pixel Format

Этот параметр действителен только в том случае, если lcd_if=4.

Соответствующее значение установки соответствующего значения:

Язык кода:javascript
копировать
0:Package Pixel Stream, 24bit RGB
1:Loosely Package Pixel Stream, 18bit RGB
2:Package Pixel Stream, 18bit RGB
3:Package Pixel Stream, 16bit RGB
5.1.18 lcd_dsi_te

Lcd MIPI DSI panel Tear Effect

Этот параметр действителен только в том случае, если lcd_if=4.

Соответствующее значение установки соответствующего значения:

Язык кода:javascript
копировать
0:frame trigged automatically
1:frame trigged by te rising edge
2:frame trigged by te falling edge

Примечание. Установите значение 0. Когда интервал обновления экрана равен lcd_ht. × ЖК_ВТ; установлено значение 1 или 2 Когда интервал обновления экрана составляет два тепульс。

Функция этого заключается в отправке сигнала со стороны экрана на конец SoC для сигнала синхронизации. Если эта переменная включена, внутреннее прерывание дисплея SoC будет запускаться этим внешним контактом.

5.1.19 lcd_dsi_port_num

Количество портов экрана DSI

Этот параметр действителен только в том случае, если lcd_if=4.

Соответствующее значение установки соответствующего значения:

Язык кода:javascript
копировать
0: порт
1: Два порта

Одной из функций этой опции является то, что один ЖК-дисплей Экран 8 переулок Когда, если нужно инициализировать только один из драйверов IC, то эта настройка равна 1, если два драйвера IC Все инициализированы, здесь установлено значение 0. и используйте lcd_source.c Определенная функция для инициализации.

5.1.20 lcd_tcon_mode

Режим Ткон

Этот параметр действителен только в том случае, если lcd_if=4.

Соответствующее значение установки соответствующего значения:

Язык кода:javascript
копировать
0:normal mode
1:tcon master режим (первая синхронизация данных)
2::tcon master режим (синхронизируется каждый кадр)
3:tcon slave режим (зависит от мастера режим для запуска)
4:one tcon driver two dsi(8переулок)
5.1.21 lcd_slave_tcon_num
5.1.21 lcd_slave_tcon_num

Серийный номер ведомого Tcon

Этот параметр доступен только при lcd_if=4. время и lcd_tcon_mode равен 1 или 2 эффективен. Раньше говорил мастеру tcon в режиме, из tcon Какой серийный номер у.

Соответствующее значение установки соответствующего значения:

Язык кода:javascript
копировать
0:tcon_lcd0
1:tcon_lcd1
5.1.22 lcd_tcon_en_odd_even_div

Этот параметр доступен только при lcd_if=4. и lcd_tcon_mode=4 Это действительно только тогда, когда.

Соответствующее значение установки соответствующего значения:

Язык кода:javascript
копировать
0: tcon делит кадр изображения на левую и правую половины и отправляет его в Два DSI-модуль
1: tcon отправляет кадр изображения в Два отдельно. DSI-модуль
5.1.23 lcd_sync_pixel_num

Этот параметр доступен только при lcd_if=4. и lcd_tcon_mode равно 2 или 3 Это действительно только тогда, когда.

Установите начальный пиксель синхронизации из tcon.

Целое число: не более lcd_ht

5.1.24 lcd_sync_line_num

Этот параметр доступен только при lcd_if=4. и lcd_tcon_mode равно 2 или 3 Это действительно только тогда, когда.

Установить синхронизацию из tcon изначинать ХОРОШО.

Целое число: не более lcd_vt

5.1.25 lcd_cpu_mode

Режим ЦП ЖК-дисплея, управление.

Соответствующее значение установки соответствующего значения заключается в том, что при значении 0 интервал обновления составляет lcd_ht × lcd_vt, при значении 1 или 2 интервал обновления составляет два импульса te:

Язык кода:javascript
копировать
0: Автоматическое прерывание по времени, внутреннее посредством сигнала гашения поля.
1: Прерывание инициируется на основании данных счетчика блоков или внешних текурок.
5.1.26 lcd_fsync_en

ЖК-дисплей включает функцию fsync, которая используется для запуска датчика для вывода изображений для синхронизации. Некоторые микросхемы поддерживают ее.

Язык кода:javascript
копировать
0:disable
1:enable
5.1.27 lcd_fsync_act_time

Функция fsync ЖК-дисплея, эффективная продолжительность времени уровня, единица измерения: количество тактовых импульсов пикселей.

Язык кода:javascript
копировать
0~lcd_ht-1
5.1.28 lcd_fsync_dis_time

Функция fsync ЖК-дисплея, длительность недопустимого уровня, единица измерения: количество тактовых импульсов пикселей.

Язык кода:javascript
копировать
0~lcd_ht-1
5.1.29 lcd_fsync_pol

Функция fsync ЖК-дисплея соответствует допустимому уровню пола.

Язык кода:javascript
копировать
0: эффективный уровень низкий.
1: эффективный уровень высок

5.2 Описание параметров синхронизации экрана

Следующие параметры очень важны для настройки экрана и определяют время отправки данных отправляющей стороной (SoC). Поскольку он предполагает отладку отправителя и получателя, кроме разрешения и размера, остальные значения не являются абсолютно неправильными.

Да, два экрана с одинаковым разрешением и одинаковым интерфейсом могут иметь разные значения.

Способы его получения следующие:

  1. Спросите производителя ЖК-экрана.
  2. отэкранруководствоилиDriver IC Найдите его в инструкции (эти документы запросите у производителя экрана), как показано на рисунке ниже.

Рисунок 5-2: lcd_info1

Рисунок 5-3: lcd_info2

  1. Если вы не можете сделать это правильно на первых двух шагах, вы можете настроить его в соответствии со стандартами vesa, в основном стандартами DMT и CVT.

Среди них DMT относится к «VESA и отраслевым стандартам и рекомендациям по синхронизации мониторов компьютеров (DMT)». Загрузите стандарт, который содержит различные часто используемые разрешения.

время. CVT относится к «Стандарту согласованной синхронизации видео (CVT) VESA», который предоставляет общую формулу для расчета времени указанного разрешения, частоты обновления и других параметров.

Вы можете скачать этот лист Excel для расчета генератора синхронизации видео VESA.

Из следующих двух формул нам не нужно задавать параметры lcd_hfp и lcd_vfp, поскольку драйвер автоматически вычислит lcd_hfp и lcd_vfp на основе нескольких других известных параметров.

Язык кода:javascript
копировать
lcd_ht = lcd_x + lcd_hspw + lcd_hbp + lcd_hfp
lcd_vt = lcd_y + lcd_vspw + lcd_vbp + lcd_vfp
5.2.1 lcd_x

Количество пикселей дисплея по горизонтали, которое соответствует ширине разрешения экрана.

5.2.2 lcd_y

Количество вертикальных линий на экране дисплея, что соответствует самому высокому разрешению экрана.

5.2.3 lcd_ht

Horizontal Total time

Относится к общему количеству циклов dclk подряд. Смотрите картинку ниже:

Рисунок 5-4: ЖК-дисплей

5.2.4 lcd_hbp

Horizontal Back Porch

Это относится к количеству циклов dclk между действительными строками, началом сигнала синхронизации строк (hsync) и началом действительных данных, включая область сигнала синхронизации. См. рисунок выше. Обратите внимание, что сегмент hspw включен.

иллюстрировать Он включает в себя hspw сегмент, то есть lcd_hbp= фактическое hbp+ настоящий hspw

5.2.5 lcd_hspw

Horizontal Sync Pulse Width

Относится к ширине сигнала горизонтальной синхронизации. Единицей измерения является время 1 dclk (то есть время 1 цикла данных). См. картинку выше.

5.2.6 lcd_vt

Vertical Total time

Относится к общему количеству строк в поле. Смотрите картинку ниже:

Рисунок 5-5: ЖК-телевизор

5.2.7 lcd_vbp

Vertical Back Porch

Относится к количеству строк между началом сигнала синхронизации поля (vsync) и началом действительной строки данных, включая область сигнала синхронизации поля.

иллюстрировать

Он содержит сегмент vspw, то есть lcd_vbp=actual vbp+actual vspw.

5.2.8 lcd_vspw

Vertical Sync Pulse Width

Относится к ширине сигнала синхронизации поля. Единица ХОРОШО. См. рисунок выше.

5.2.9 lcd_dclk_freq

Dot Clock Frequency

Частота передачи пикселей передачи. Единица измерения — МГц.

fps = (lcd_dclk_freq×1000×1000) / (ht×vt)。

Это значение рассчитывается по следующей формуле:

lcd_dclk_freq=lcd_htlcd_vtfps

Уведомление:

  1. Следующие три параметра взяты из инструкции по экрану, а fps вообще 60.
  2. Если это последовательный порт,Для отправки одного пикселя требуется от 2 до 3 циклов.
Язык кода:javascript
копировать
lcd_dclk_freq * cycles = lcd_ht*lcd_vt*fps

или

Язык кода:javascript
копировать
lcd_dclk_freq = lcd_ht*cycles*lcd_vt*fps
5.2.10 lcd_width

Width of lcd panel in mm

этотпараметрописыватьlcd Физическая ширина экрана, мм. Используется для расчета dpi.

5.2.11 lcd_height

height of lcd panel in mm

этотпараметрописыватьlcd Физическая высота экрана, мм. Используется для расчета dpi.

5.3 Параметры, связанные с подсветкой

В настоящее время широко используется регулировка подсветки с помощью ШИМ. Принцип заключается в использовании эффекта высокочастотного мерцания, создаваемого импульсными переключателями ШИМ, для обмана человеческого глаза и регулировки яркости путем регулировки рабочего цикла.

5.3.1 lcd_pwm_used

Использовать ли ШИМ.

Этот параметр определяет, использовать ли ШИМ для управления яркостью подсветки.

5.3.2 lcd_pwm_ch

Pwm channel used

Этот параметр определяет используемый канал ШИМ. Здесь он относится к тому, какой канал ШИМ используется SoC. Это можно узнать, посмотрев на схему подключения.

5.3.3 lcd_pwm_freq

Lcd backlight PWM Frequency

Этот параметр настраивает частоту сигнала ШИМ в Гц.

иллюстрировать Частота не должна быть слишком низкой, иначе будет легко заметить мерцание, а частота не должна быть слишком высокой, иначе эффект регулировки подсветки будет плохим. В некоторых руководствах по экранам указывается разрешенный ШИМ. Диапазон частот. Следуйте инструкциям на экране, чтобы установить фиксированный диапазон. Легко увидеть мерцание при низкой яркости, что является нормальным явлением. В настоящее время известно использование ШИМ. То же самое касается и подсветки.

5.3.4 lcd_pwm_pol

Lcd backlight PWM Polarity

Этот параметр настраивает ШИМ. Сигнализ Оккупированный Сравниватьизстолбсекс.Соответствующее значение установки соответствующего значения:

Язык кода:javascript
копировать
0:active high
1:active low
5.3.5 lcd_pwm_max_limit

Максимальный предел ШИМ подсветки ЖК-дисплея, выраженный в значении яркости

Например, 150 означает, что подсветку можно регулировать только до 150, а значение яркости в диапазоне 0–255 будет линейно отображаться в диапазоне 0–150. Используется для управления максимальной яркостью подсветки и экономии энергопотребления.

5.3.6 lcd_bl_en

Контакт включения подсветки,Не обязательно,Проверьте принципиальную схему, чтобы увидеть, есть ли она,Используется для включения и отключения цепи подсветки и напряжения.

Пример: lcd_bl_en = port:PD24<1><2><1>

Значение: Включите подсветку ЖК-дисплея, когда PD24 выдает высокий уровень, потяните его вниз, по умолчанию — высокий уровень;

• Первая угловая скобка: назначение функции 1 – выход;

• Вторая угловая скобка: встроенный резистор; если используется 0, это означает, что внутренний резистор находится в состоянии с высоким импедансом, если это 1, это означает, что внутренний резистор подтягивается, а если это 2, это означает, что внутренний резистор тянет вниз. Использование значения по умолчанию представляет состояние по умолчанию, то есть резистор включен.

тянуть. Остальные данные недействительны.

• Третья угловая скобка: способность управлять столом по умолчанию — уровень 1;

• Четвертая угловая скобка: уровень 0 — низкий уровень, 1 — высокий уровень.

Драйвер экрана должен вызывать соответствующий интерфейс для управления включением и выключением.

иллюстрировать

Вообще говоря, включен высокий уровень. Исходя из этого, рекомендуется установить внутреннее сопротивление на понижение, чтобы предотвратить повышение, вызванное аппаратными средствами, что приводит к преждевременному включению подсветки. Пожалуйста, укажите уровень по умолчанию как высокий, как показал uboot.

Градусный дисплей, плавный и без мерцания.

5.3.7 lcd_bl_n_percent

Значение отображения подсветки, n (0–100).

Эта функция предназначена для ЖК-дисплеев с нелинейной яркостью. экраниз,Отрегулируйте изменения яркости в соответствии с конфигурацией метода кривой яркости.,чтобы сделать изменение яркости более линейным.

Например, lcd_bl_50_percent = 60 означает, что значение яркости 50% корректируется до 60%, то есть яркость увеличивается на 10% по сравнению с исходным значением.

иллюстрировать

Неправильная модификация этого свойства может привести к ухудшению эффекта регулировки подсветки.

5.3.8 lcd_backlight

Значение подсветки по умолчанию: 0–255.

Этот атрибут определяет яркость на этапе отображения логотипа в uboot. При входе в ядро ​​считывается сохраненная конфигурация для определения яркости.

иллюстрировать

На этапе отображения логотипа обычно требуется относительно яркая яркость, что практикуется в отрасли.

5.4 Отображение параметров, связанных с эффектом

5.4.1 lcd_frm

Lcd Frame Rate Modulator

FRM призван решить проблему глубины цвета, вызванную уменьшением PIN-кода.

этотиндивидуальныйпараметр Соответствующее значение установки соответствующего значения:

Язык кода:javascript
копировать
0:RGB888 -- RGB888 direct
1:RGB888 -- RGB666 dither
2:RGB888 -- RGB565 dither

Формат пикселей некоторых ЖК-экранов имеет глубину цвета 18 бит (RGB666) или глубину цвета 16 бит (RGB565). Рекомендуется включить функцию FRM и компенсировать глубину цвета с помощью дизеринга, чтобы отображение достигало 24. -битовая глубина цвета (RGB888)

изэффектфрукты.Как показано ниже,Изображение вышедаглубина цветадляRGB66 ЖК-дисплей экран, на рисунке ниже показано открытие дизеринга После отображения откройте дизеринг Окончательный цветовой градиент слишком сглажен.

Рисунок 5-6: lcd_frm открыт

Рисунок 5-7: Закрытие lcd_frm

5.4.2 lcd_gamma_en

Lcd Gamma Correction Enable

Соответствующее значение установки соответствующего значения:

Язык кода:javascript
копировать
0: Закрытие функции коррекции LcdizGamma
1: Функция коррекции LcdizGamma включена.

Если установлено значение 1, lcd_gamma_tbl[256] необходимо назначить в драйвере экрана.

5.4.3 lcd_cmap_en

Lcd Color Map Enable

Соответствующее значение установки соответствующего значения:

Язык кода:javascript
копировать
0: Закрытие функции отображения цветов ЖК-дисплея
1: функция отображения цветов ЖК-дисплея включена.

Если установлено значение 1, таблице цветов ЖК-дисплея необходимо назначить lcd_cmap_tbl [2][3][4].

Каждый пиксель имеет три единицы: R, G и B. Каждые четыре пикселя представляют собой выборку, всего 12 вариантов. Первое измерение массива представляет нечетные и четные строки, второе измерение представляет RGB пикселя, а третье измерение представляет номер пикселя.

Содержимое представляет содержимое, сопоставленное с местоположением.

LCD CMAP Это функция вывода отображения пикселей. Только пиксели имеют особое расположение ЖК-дисплея. Экран необходимо настроить.

LCD CMAP определяет 4 пикселя в каждой строке как общую единицу, и каждый пиксель делится на 3 маленьких единицы: R, G и B, всего 12 маленьких единиц. Определите отношение отображения через lcd_cmap_tbl, и каждая небольшая единица вывода может быть

Он предназначен для сопоставления с одним из 12 небольших подразделений.

Язык кода:javascript
копировать
__u32 lcd_cmap_tbl[2][3][4] = {
    {
        {LCD_CMAP_G0,LCD_CMAP_B1,LCD_CMAP_G2,LCD_CMAP_B3},
        {LCD_CMAP_B0,LCD_CMAP_R1,LCD_CMAP_B2,LCD_CMAP_R3},
        {LCD_CMAP_R0,LCD_CMAP_G1,LCD_CMAP_R2,LCD_CMAP_G3},
    },
    {
        {LCD_CMAP_B3,LCD_CMAP_G2,LCD_CMAP_B1,LCD_CMAP_G0},
        {LCD_CMAP_R3,LCD_CMAP_B2,LCD_CMAP_R1,LCD_CMAP_B0},
        {LCD_CMAP_G3,LCD_CMAP_R2,LCD_CMAP_G1,LCD_CMAP_R0},
    },
};

Как указано выше, три верхние строки представляют расположение пикселей строк с нечетными номерами, а три нижние строки представляют расположение пикселей строк с четными номерами.

Каждые четыре пикселя представляют собой единицу измерения, первый столбец представляет первую карту пикселей каждых четырех пикселей, второй столбец представляет вторую карту пикселей каждых четырех пикселей и так далее.

Как определено выше, формат вывода пикселей показан на рисунке ниже.

Рисунок 5-8: cmap

5.4.4 lcd_rb_swap

Замените компонент R и компонент B в RGB модуля tcon.

Язык кода:javascript
копировать
0: без изменений
1: Заменить RмассаиBмасса

5.5 Источник питания и параметры выводов

5.5.1 Обзор

Если необходимо использовать определенный источник питания, он должен быть определен в узле [disp], а строка, используемая в части [lcd], должна соответствовать строке, определенной в disp. Например, следующий пример:

Язык кода:javascript
копировать
disp: disp@01000000 {
    disp_init_enable = <1>;
    disp_mode = <0>;
    /* VCC-LCD */
    dc1sw-supply = <&reg_sw>;
    /* VCC-LVDS and VCC-HDMI */
    bldo1-supply = <&reg_bldo1>;
    /* VCC-TV */
    cldo4-supply = <&reg_cldo4>;
};

Где -предложение фиксировано из,Строка перед -supply является произвольной.,Однако рекомендуется использовать осмысленныеизимя。существовать=позжеизкартина<&reg_sw>тогда это должно быть в board.dtsi регулятор0найден в узле.

Затем в узле lcd0, если вы хотите использовать reg_sw, просто напишите его следующим образом: dc1sw соответствует dc1sw-supply.

Язык кода:javascript
копировать
lcd_power=”dc1sw”

Поскольку u-boot также имеет драйвер axp, драйвер дисплея и ядро, все они считывают одну и ту же конфигурацию. Чтобы быть совместимыми друг с другом, при именовании существуют следующие ограничения:

В u-boot 2018 драйвер axp распознает только имена, определенные из чипа axp, например bldo1, поэтому при присвоении имени xxxsupply лучше всего называть его в соответствии с определением чипа axp.

5.5.2 lcd_power

Видетьвыше Обзормеры предосторожности.

Язык кода:javascript
копировать
Пример: lcd_power = «vcc-lcd»

Настройка регулятора изName. После настройки Драйвер экрана должен вызывать соответствующий интерфейс для управления включением и выключением.

Уведомление:Если необходимо несколько источников питания Открыть,Затем определите lcd_power1,lcd_power2 ждать.

5.5.3 lcd_pin_power

Использование lcd_power такое же. Разница в том, что после того, как пользователь устанавливает его, нет необходимости использовать его в драйвере экрана. Вместо этого платформа драйвера включает его перед драйвером экрана и отключает после драйвера экрана.

Язык кода:javascript
копировать
Пример: lcd_pin_power = «vcc-pd»

Уведомление:Если вам нужно несколько групп,Затем добавьте lcd_pin_power1,lcd_pin_power2 ждать.кроме lcddx Кроме того, питание здесь может быть еще и ШИМ. Питание соответствующего вывода.

5.5.4 lcd_gpio_0
Язык кода:javascript
копировать
Пример: lcd_gpio_0 = port:PD25<0><0><default><0>

Значение: контакт lcd_gpio_0 — PD25.

• Первая угловая скобка: назначение функции: 0 – вход, 1 – выход.

• Вторая угловая скобка: встроенный резистор; если используется 0, это означает, что внутренний резистор находится в состоянии с высоким импедансом, если это 1, это означает, что внутренний резистор подтягивается, а если это 2, это означает, что внутренний резистор тянет вниз. Использование значения по умолчанию представляет состояние по умолчанию, то есть резистор включен.

тянуть. Остальные данные недействительны.

• Третья угловая скобка: способность управлять столом по умолчанию — уровень 1;。

• Четвертая угловая скобка: указывает значение по умолчанию, то есть при установке на выход уровень вывода контакта: 0 — низкий уровень, 1 — высокий уровень.

Необходимо вызвать ответный порт «изловить» в драйвере экрана, чтобы подтянуть и опустить из управления. См. функцию управления «Приколоть» иллюстрировать

Уведомление:Если есть несколькоgpio Если выводом необходимо управлять, определите lcd_gpio_0, lcd_gpio_1. ждать.

5.5.5 lcddx

Пример: ЖКД0 = port:PD00<3><0>

Значение: этот вывод lcdd0, а именно PD0, настроен как выход LVDS.

• Первая угловая скобка: назначение функции; 0 — вход, 1 — выход, 2 — выход ЖК-дисплея, 3 — выход интерфейса LVDS и 7 — отключение.

• Вторая угловая скобка: встроенный резистор; если используется 0, это означает, что внутренний резистор находится в состоянии с высоким импедансом, если это 1, это означает, что внутренний резистор подтягивается, а если это 2, это означает, что внутренний резистор тянет вниз. Использование значения по умолчанию представляет состояние по умолчанию, то есть резистор включен.

тянуть. Остальные данные недействительны.

• Третья угловая скобка: способность управлять столом по умолчанию — уровень 1;。

• Четвертая угловая скобка: указывает значение по умолчанию, то есть при установке на выход уровень вывода контакта: 0 — низкий уровень, 1 — высокий уровень.

Конфигурация PIN-кода ЖК-дисплея следующая:

LCD для ВН RGB-экран,CPU/I80 экране, соответствующий ввод-вывод должен быть определен Рот для ЖК-дисплея вывод (если 0 вывод, первая угловая скобка равна 2, если она равна 1; вывод, первая угловая скобка — 3).

Для получения информации о конкретном соответствии ввода-вывода обратитесь к руководству пользователя по настройке.

Все вводы-выводы PIN-кода ЖК-дисплея можно отменить с помощью комментариев, и драйвер дисплея не инициализирует вводы-выводы комментариев.

Драйвер экрана должен вызывать соответствующий интерфейс для управления включением и выключением.

Уведомление:Нетда Это должно называтьсяlcdd0 Если вы измените это имя на другое, это не окажет никакого влияния на драйвер. Это просто для удобства запоминания.

5.5.6 pinctrl-0 и pinctrl-1

При настройке узла lcd0, когда вам нужно настроить повторное использование контактов, вам нужно только назначить pinctrl-0 и pinctrl-1. Вы можете использовать контакты, определенные заранее, или вы можете использовать свои собственные контакты, определенные заранее.

Чтобы найти его в каталоге ядра Arch/arm/boot/dtsiliarch/arm64/boot/dts: Platform-pinctrl.dtsi Найдите определение в .

пример:

Язык кода:javascript
копировать
pinctrl-0 = <&rgb24_pins_a>;
pinctrl-1 = <&rgb24_pins_b>;//впадать в спячкучасждатьизопределение,io_disable

Таблица 5-1: Определите это заранее контакта

Имя контакта

описывать

rgb24_pins_a и rgb24_pins_b

RGB-экранловитьрот,А разрядность данных 24,RGB888

rgb18_pins_a и rgb18_pins_b

RGB-экранловитьрот,А разрядность данных 16,RGB666

lvds0_pins_a и lvds0_pins_b

Определение контактов 0 одноканального интерфейса LVDS (основной дисплей lcd0)

lvds1_pins_a и lvds1_pins_b

Single link LVDS Интерфейс 1 Определение контактов (основной дисплей lcd0)

lvds2link_pins_a и lvds2link_pins_b

Определение контактов двухканального интерфейса LVDS (основной дисплей lcd0)

lvds2_pins_a и lvds2_pins_b

Определение контактов 0 одноканального интерфейса LVDS (основной дисплей lcd1)

lvds3_pins_a и lvds3_pins_b

Определение контактов одноканального интерфейса LVDS (основной дисплей lcd1)

lcd1_lvds2link_pins_a и lcd1_lvds2link_pins_b

Определение контактов двухканального интерфейса LVDS (основной дисплей lcd1)

dsi4lane_pins_a и dsi4lane_pins_b

Определение контактов интерфейса 4-полосного экрана DSI

Персонализируйте набор ножек

Запишите его в board.dtsi, если имя не повторяет существующее имя, сначала определите, принадлежит ли контакт, который вам нужно использовать, к большому домену процессора или к маленькому домену процессора, и используйте это, чтобы определить, нужно ли определение контакта для размещения в пио (большой процессор

домен) или под r_pio (домен небольшого процессора).

пример:

Язык кода:javascript
копировать
&pio {
    I8080_8bit_pins_a: I8080_8bit@0 {
        allwinner,pins = "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD18", "
        	PD19", "PD20", "PD21";
        allwinner,pname = "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD18", "
            PD19", "PD20", "PD21";
            allwinner,function = "I8080_8bit";
            allwinner,muxsel = <2>;
            allwinner,drive = <3>;
            allwinner,pull = <0>;
        };
        I8080_8bit_pins_b: I8080_8bit@1 {
        allwinner,pins = "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD18", "
        	PD19", "PD20", "PD21";
        allwinner,pname = "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD18", "
        	PD19", "PD20", "PD21";
            allwinner,function = "I8080_8bit_suspend";
            allwinner,muxsel = <7>;
            allwinner,drive = <3>;
            allwinner,pull = <0>;
    };
};

• булавки, специальные булавки.

• pname,Имя контакта,Бери все, что хочешь。

• функция, имя функции вывода, выберите ее случайно.

• Muxsel, выбор функции контакта. Выберите соответствующую функцию в соответствии со спецификацией порта.

• диск, емкость диска. Чем больше значение, тем больше емкость диска.

• тянуть, тянуть вверх и вниз, использовать 0 Если да, отметьте состояние высокого сопротивления внутреннего сопротивления, если оно равно 1 Затем внутренний резистор подтягивается, 2 Это означает, что внутренний резистор тянет вниз. Использовать по умолчанию означает состояние по умолчанию, то есть резистортянуть。Другие номера

Данные недействительны.

В целях стандартизации мы будем поддерживать согласованные имена на всех платформах, где суффикс a означает включение контакта, а суффикс b — io_disable, когда устройство выключено.

иногда,Вам необходимо использовать два разных набора функций из Приколоть.,Вот и все можно определить следующим образом.

Язык кода:javascript
копировать
pinctrl-0 = <&rgb24_pins_a>, <&xxx_pins_a>;
pinctrl-1 = <&rgb24_pins_b>, <&xxx_pins_b>;//впадать в спячкучасждатьизопределение,io_disable

5.6 Функция автоматического восстановления обнаружения статического электричества ESD

Эта функция реализована в ветках продуктов sunxi linux4.9 и linux 3.10. Если вам нужна эта функция, вам необходимо выполнить следующие шаги.

Сначала откройте следующую конфигурацию ядра:

Рисунок 5-9: Конфигурация ядра ESD

Измените драйвер экрана и реализуйте три функции обратного вызова:

В следующем примере добавьте функцию обратного вызова, связанную с ESD, на экран he0801a068. (linux-4.9/drivers/video/fbdev/sunxi/disp2/disp/lcd/he0801a068.c).

Рисунок 5-10: Добавлена ​​функция драйвера экрана ESD

Прототип функции esd_check:

Язык кода:javascript
копировать
S32 esd_check(u32 sel)

Функция: предоставление обратной связи верхнему уровню о состоянии текущего экрана.

Возвращаемое значение: Если экран нормальный, верните 0, если нет, верните не 0;

sel:показыватьиндекс.

Поскольку существует множество типов экранных интерфейсов, разные экраны определяют разные состояния. Вообще говоря, внутренняя информация (идентификатор) экрана считывается через интерфейс драйвера. или Другие регистры),Если сбор данных нормальный, считается, что экран в порядке.,теряться

Если это не удается, экран считается ненормальным. Например, следующий метод для экрана DSI:

Рисунок 5-11: Реализация функции драйвера экрана ESD

Кроме того, в нормальных условиях команда 0x0A (получить режим питания) будет считываться через интерфейс dsi, чтобы определить, является ли экран нормальным.

Язык кода:javascript
копировать
sunxi_lcd_dsi_dcs_read(sel, 0x0A, result, &num)

Рисунок 5-12: Регистр состояния ESD MIPI

reset_panel функцияпрототип:

Язык кода:javascript
копировать
s32 reset_panel(u32 sel)

Функция: операция сброса, необходимая в случае неисправности экрана.

Возвращаемое значение: 0, если сброс выполнен успешно, не равно 0, если сброс не выполнен.

sel:показыватьиндекс.

Инициализация каждого экрана различна.,Последовательность действий другая,общийиз Приходитьобъяснять Сразудаосуществлятьчастьиливесьизэкран Внутри драйвераизclose_flow японскийopen_flow Определенная функция обратного вызова. Гибко написано в соответствии с реальной ситуацией

эта функция.

Стоит отметить, что на некоторых экранах dsi команды sunxi_lcd_dsi_clk_disable (отключение высокоскоростных часов dsi) и sunxi_lcd_dsi_clk_enable (включение высокоскоростных часов) должны быть выполнены хотя бы один раз, в противном случае это может привести к

Функция чтения dsi ненормальна.

На следующем рисунке показан пример функции сброса:

Рисунок 5-13: Функция сброса ESD 1

Прототип функции set_esd_info:

Язык кода:javascript
копировать
s32 set_esd_info(struct disp_lcd_esd_info *p_info)

Функция: Управляйте конкретным поведением обнаружения ESD. Например, как часто выполнять обнаружение, уровень сброса и место вызова функции обнаружения.

Возвращаемое значение: Возвращает 0 в случае успешной установки, в противном случае — не 0.

p_info: структура поведения ESD, которую необходимо установить.

Пример: Как показано на рисунке ниже, прерывание дисплея обнаруживается каждые 60 раз (вызывается функция esd_check, если частота кадров дисплея 60 кадров в секунду, то это происходит раз в секунду), а затем оно будет выполняться в прерывании дисплея. функция обработки

Функция обнаружения, член esd_check_func_pos определяет место вызова функции esd_check. Если оно равно 0, функция обнаружения выполняется вне прерывания. Причиной использования этой опции является отображение ресурса прерывания (местоположения прерывания).

Время обработки) является очень ценным ресурсом и зависит от частоты кадров дисплея. Уровень на картинке ниже 1 Указывает на сброс Allwinner SoC. ЖК-дисплей Связанные модули и reset_panel Операции внутри, уровень 0 выражается, когда

Выполняйте операции только внутри reset_panel.

Рисунок 5-14: Функция информации о настройках ESD

Текущую информацию ESD можно получить через cat /sys/class/disp/disp/attr/sys.

Язык кода:javascript
копировать
screen 0:
de_rate 594000000 hz, ref_fps:60
mgr0: 2560x1600 fmt[rgb] cs[0x204] range[full] eotf[0x4] bits[8bits] unblank err[0]
force_sync[0]
dmabuf: cache[0] cache max[0] umap skip[0] overflow[0]
capture: dis req[0] runing[0] done[0,0]
lcd output(enable) backlight( 50) fps:60.9 esd level(1) freq(300) pos(1)
reset(244) 2560x1600
err:0 skip:0 skip T.O:50 irq:73424 vsync:0 vsync_skip:0
BUF en ch[1] lyr[0] z[0] prem[N] fbd[N] a[globl 255] fmt[ 0] fb
[2560,1600;2560,1600;2560,1600] crop[ 0, 0,2560,1600] frame[ 0, 0,2560,1600]
addr[98100000,00000000,00000000] right[00000000,00000000,00000000] flags[0x00] trd[0,0]
depth[ 0]
acquire: 0, 25.5 fps
release: 0, 25.5 fps
display: 0, 25.5 fps

esd level(1) freq(300) pos(1) reset(244)

Значение esd levele, freq и pos см. в объяснении прототипа функции set_esd_info выше.

Число после сброса указывает, сколько раз экран был сброшен (то есть сколько раз экран был успешно обнаружен и сброшен после того, как ESD вызвал зависание экрана).

Проблемы, с которыми вы можете столкнуться при использовании этой функции.

  1. Он зависает из-за статического электричества, но считываемое значение по-прежнему верно. Решения этой проблемы нет.
  2. Операция чтения Dsi зависла, застряла в прерывании. Эта проблема может быть связана со скоростью в режиме lp DSI, а скорость lp связана с частотой dclk. На этом этапе вы можете попробовать изменить файл de_dsi_28.c().

dsi_basic_cfg, значение регистра, указанное в красном поле, как показано на рисунке ниже. Этот регистр представляет собой значение деления тактовой частоты режима Lp. Вообще говоря, чем меньше значение, тем выше скорость LP. Попробуйте изменить его на меньшее. значение, чтобы увидеть, застревает ли он по-прежнему.

жить.

Рисунок 5-15: Значение делителя тактовой частоты в режиме Lp

6 методов отладки

После запуска системы вы можете прочитать некоторую информацию из sysfs для помощи в отладке.

6.1 Способы ускорения отладки

Очевидно, что будет неудобно, если вы будете отлаживать ЖК-экран на Android. Время компиляции Android и прошивки Android слишком велико. Каждый раз, когда вы модифицируете ядро, проверка может занять 10 минут, что слишком неэффективно.

Если он низкий, можно воспользоваться следующими методами:

  1. использовать Linux прошивка вместо прошивки Android. SDK Он поддерживает только компиляцию Linux Прошивка, обычно настроенная личи илиlongan При упаковке выбирайте linux, а при упаковке используйте личи илиlongan корневой каталог

build.sh под Упаковать это просто ХОРОШО Потому что Linux. Ядро намного меньше, компилируется быстрее и его легче отлаживать.

  1. Используйте ядро ​​для отладки ЖК-экрана. Мы знаем, что и в Uboot, и в ядро ​​необходимо добавить драйверы ЖК-дисплея, чтобы логотип мог отображаться быстро, но uboot не удобен для отладки, поэтому иногда нам нужно изменить uboot.

показывать Выключите драйвер,Сосредоточьтесь на отладке ядра ЖК-дисплей После настройки драйвера я пересадил его в uboot. Еще одно преимущество этого подхода в том, что я могу очень удобно модифицировать ЖК-дисплей. timing Не нужно перезаписывать прошивку. то есть

Используйте команду fdt команды uboot для изменения дерева устройств. Например:

Язык кода:javascript
копировать
fdt set lcd0 lcd_hbp <40>

Дополнительные команды см. в справке fdt.

Как отключить отображение uboot? Обычно в файле inlcude/configs/platform.h по пути к исходному коду uboot закомментируйте CONFIG_SUNXI_MODULE_DISPLAY. Если это uboot 2018, закомментируйте его.

Удалите CONFIG_DISP2_SUNXI в configs/platform_defconfig.

6.2 Просмотр информации на дисплее

Следующая информация является наиболее важной из всех.

Язык кода:javascript
копировать
cat /sys/class/disp/disp/attr/sys
screen 0:
de_rate 297000000 hz, ref_fps:60
mgr0: 1280x800 fmt[rgb] cs[0x204] range[full] eotf[0x4] bits[8bits] err[0] force_sync[0]
unblank direct_show[false]
lcd output backlight( 50) fps:60.9 1280x 800
err:0 skip:31 irq:1942 vsync:0 vsync_skip:0
BUF enable ch[1] lyr[0] z[0] prem[N] a[globl 255] fmt[ 8] fb[1280, 800;1280,
800;1280, 800] crop[ 0, 0,1280, 800] frame[ 0, 0,1280, 800] addr[ 0,
0, 0] flags[0x 0] trd[0,0]

lcd output

Указывает, что текущий интерфейс дисплея — ЖК-выход.

1280x800

Указывает текущее разрешение ЖК-дисплея, которое совпадает с настройкой lcd0 в board.dts.

ref_fps:60

Это теоретическое значение, рассчитанное на основе времени, которое вы заполнили в lcd0 файла board.dts.

fps:60.9

Следующие значения представляют собой статистику в реальном времени. Обычно они должны быть около 60 (ожидаемый кадр в секунду). Если разница слишком велика, это ненормально. Еще раз проверьте синхронизацию экрана и наличие последовательности инициализации экранного драйвера. позвонили.

irq:1942

Это количество прерываний вертикальной синхронизации. Каждое приращение, равное 1, соответствует обновлению кадра. Обычно оно составляет 60 (ожидаемых кадров в секунду) раз в секунду. Если изменений нет, это ненормально.

BUF

Начало указывает на информацию о слое, строку BUF Представляет слой, если BUF Если ни один из них не появится, то это будет черный экран, но это не имеет никакого отношения к самому драйверу экрана. Следует проверить уровень приложения.amp; Каркасный слой.

err:0

Это означает пропущенные цифры,Если число большое и постоянно меняется,экран Занавес будет усыпан цветами или даже полностью черным.,все красныеждать.

skip:31

Это количество пропусков кадров. Если это значение велико и постоянно меняется, могут быть задержки. Если это число отличается от irq. позжеиз Цифры те же самые,иллюстрировать скачки в каждом кадре,Будет темно (с подсветкой).

6.3 Просмотр информации о питании

Чтобы проверить, включен ли определенный источник питания axp, вы можете использовать следующую команду. Конечно, это только для программного обеспечения, а реальные измерения следует проводить мультиметром.

Язык кода:javascript
копировать
cat /sys/class/regulator/dump
pmu1736_ldoio2 : disabled 0 700000 supply_name:
pmu1736_ldoio1 : disabled 0 700000 supply_name:
pmu1736_dc1sw : enabled 1 3300000 supply_name: vcc-lcd
pmu1736_cpus : enabled 0 900000 supply_name:
pmu1736_cldo4 : disabled 0 700000 supply_name:
pmu1736_cldo3 : disabled 0 700000 supply_name:
pmu1736_cldo2 : enabled 1 3300000 supply_name: vcc-pf
pmu1736_cldo1 : disabled 0 700000 supply_name:
pmu1736_bldo5 : enabled 2 1800000 supply_name: vcc-cpvin vcc-pc
pmu1736_bldo4 : disabled 0 700000 supply_name:
pmu1736_bldo3 : disabled 0 700000 supply_name:
pmu1736_bldo2 : disabled 0 700000 supply_name:
pmu1736_bldo1 : disabled 0 700000 supply_name:
pmu1736_aldo5 : enabled 0 2500000 supply_name:
pmu1736_aldo4 : enabled 0 3300000 supply_name:
pmu1736_aldo3 : enabled 1 1800000 supply_name: avcc
pmu1736_aldo2 : enabled 0 1800000 supply_name:
pmu1736_aldo1 : disabled 0 700000 supply_name:
pmu1736_rtc : enabled 0 1800000 supply_name:
pmu1736_dcdc6 : disabled 0 500000 supply_name:
pmu1736_dcdc5 : enabled 0 1480000 supply_name:
pmu1736_dcdc4 : enabled 1 900000 supply_name: vdd-sys
pmu1736_dcdc3 : enabled 0 900000 supply_name:
pmu1736_dcdc2 : enabled 0 1160000 supply_name:
pmu1736_dcdc1 : enabled 4 3300000 supply_name: vcc-emmc vcc-io vcc-io vcc-io

6.4 Просмотр информации о ШИМ

Целью ШИМ здесь является обеспечение мощности подсветки.

Язык кода:javascript
копировать
cat /sys/kernel/debug/pwm
platform/7020c00.s_pwm, 1 PWM device
pwm-0 ((null) ): period: 0 ns duty: 0 ns polarity: normal
platform/300a000.pwm, 2 PWM devices
pwm-0 (lcd ): requested enabled period: 20000 ns duty: 3984 ns polarity:
normal
pwm-1 ((null) ): period: 0 ns duty: 0 ns polarity: normal

«Запрошенное включено» выше означает, что оно было запрошено и включено, а ЖК-дисплей в скобках означает, что оно было запрошено lcd.

6.5 Просмотр информации о контактах

Язык кода:javascript
копировать
cat /sys/kernel/debug/pinctrl/pio/pinmux-pins
pin 227 (PH3): twi1 (GPIO UNCLAIMED) function io_disabled group PH3
pin 228 (PH4): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 229 (PH5): (MUX UNCLAIMED) pio:229
pin 230 (PH6): (MUX UNCLAIMED) pio:230
pin 231 (PH7): (MUX UNCLAIMED) pio:231

Из приведенной выше информации мы знаем, что входы/выходы PH5 и PH6 применяются как обычные функции GPIO, а PH3 – как twi1.

6.6 Просмотр информации о часах

Язык кода:javascript
копировать
cat /sys/kernel/debug/clk/clk_summary

Эта команда может увидеть, какие часы включены и какова частота.

С дисплеем связаны tcon, pll_video, mipi. ждатьждать.

Язык кода:javascript
копировать
cat /sys/kernel/debug/clk/clk_summary | grep tcon
cat /sys/kernel/debug/clk/clk_summary | grep pll_video
cat /sys/kernel/debug/clk/clk_summary | grep mipi

6.7 Интерфейс просмотра поставляется с цветной панелью

Отображение представляет собой целую ссылку. Если в какой-либо из ссылок посередине есть ошибка, конечная производительность будет ненормальной. Существует несколько возможностей ненормального отображения изображения.

причина:

  1. Сам образ необычный.
  2. Изображение ненормальное после прохождения через DE (Display Engine).
  3. Изображение ненормальное после прохождения через модуль порта ловить. Это мы сосредоточены наиз точка.

Существует простой способ сделать предварительное заключение. Модули интерфейса (tcon и dsi и т. д.) могут выводить некоторые встроенные шаблоны (например, цветные полосы, изображения в оттенках серого, изображения в виде шахматной доски и т. д.), когда интерфейс выводит их. встроенные шаблоны,

время,Если оно отображается в это время, это будет ненормально.,этотиллюстрировать Понятно:

  1. Возникла проблема с настройкой драйвера ЖК-дисплея.
  2. ЖК-экран отображается ненормально из-за внешних условий.

Как отобразить встроенный шаблон:

В ядре Linux-4.9 и выше в sysfs disp есть атрибут, которым можно напрямую управлять и отображать:

Язык кода:javascript
копировать
echo X > /sys/class/disp/disp/attr/colorbar

Вышеуказанная операция предназначена для отображения цветовой панели, где X может принимать значения от 0 до 8, а соответствующее значение показано на рисунке ниже:

Рисунок 6-1: цветовая полоса

Если имеется несколько устройств отображения и вы хотите, чтобы второе устройство отображения отображало цветную полосу, сначала выполните следующие действия:

Язык кода:javascript
копировать
echo 1 > /sys/class/disp/disp/attr/disp

Затем снова выполните вышеуказанные операции.

Если такого атрибута нет, регистром можно управлять напрямую, то есть работать с младшими 3 битами смещения 040 регистра tcon.

В Linux откройте cd /sys/class/sunxi_dump, затем:

Язык кода:javascript
копировать
echo 0x06511040 > dump;cat dump

Это напечатает значение текущего регистра смещения 040 tcon, а затем изменит младшие 3 бита на основе приведенного выше значения на значение, указанное на рисунке выше. Пример метода модификации:

Язык кода:javascript
копировать
echo 0x06511040 0x800001f1 > write

Обратите внимание, что базовый адрес tcon не обязательно равен 0x06511000. Он различается на разных платформах. Чтобы получить базовый адрес tcon, обратитесь к документации SoC.

6.8 Скриншот DE

показывать Произошло исключениевремя,Есть три возможности:

  1. SoC Модуль порта+ЖК-дисплей Есть проблема с экраном.
  2. Проблема возникла после того, как изображение было обработано модулем синтеза изображений (DE) на стороне SoC.
  3. Что-то не так с самим источником изображения. В этой статье рассказывается, как дополнительно подтвердить, прошел ли источник изображения DE, при условии, что с самим источником изображения проблем нет. Есть ли проблемы с изображением после обработки?

грамматика:

Язык кода:javascript
копировать
echo экрануказатель акта> /sys/class/disp/disp/attr/disp
echo путь/bmpискусствопредмет> /sys/class/disp/disp/attr/capture_dump

первое эхо Функция состоит в том, чтобы определить, какой дисплей захвачен, «Индекс экрана». Необязательное значение: 0. или1。

Вторая функция echo предназначена для создания bmp-файла снимка экрана, чтобы гарантировать, что «путь» доступен для записи и имеет оставшееся место.

например:

Язык кода:javascript
копировать
echo 0 > /sys/class/disp/disp/attr/disp
echo /data/xx.bmp > /sys/class/disp/disp/attr/capture_dump

Это создаст снимок экрана 0 в формате BMP в каталоге /data, имя файла — xx.bmp.

Помимо bmp, он также поддерживает сохранение необработанных данных, включая цветовые пространства RGB и YUV. Они различаются суффиксами.

следующее:

Язык кода:javascript
копировать
# Перехват цветового пространства yuv420p из необработанных данных.
echo /data/xx.yuv420_p > /sys/class/disp/disp/attr/capture_dump
# Перехват цветового пространства yuv420_sp_uvuv из необработанных данных.
echo /data/xx.yuv420_sp_uvuv > /sys/class/disp/disp/attr/capture_dump
# Перехватите необработанные данные цветового пространства yuv420_sp_vuvu.
echo /data/xx.yuv420_sp_vuvu > /sys/class/disp/disp/attr/capture_dump
# Перехватите необработанные данные цветового пространства yuv420_sp_vuvu.
echo /data/xx.yuv420_sp_vuvu > /sys/class/disp/disp/attr/capture_dump
# Перехватить цветовое пространство argb8888 из необработанных данных.
echo /data/xx.argb8888 > /sys/class/disp/disp/attr/capture_dump
# Перехват цветового пространства abgr8888 из необработанных данных.
echo /data/xx.abgr8888 > /sys/class/disp/disp/attr/capture_dump
# Перехват цветового пространства rgb888 из необработанных данных.
echo /data/xx.rgb888 > /sys/class/disp/disp/attr/capture_dump
# Перехват цветового пространства bgr888 из необработанных данных.
echo /data/xx.bgr888 > /sys/class/disp/disp/attr/capture_dump
# Перехват цветового пространства rgba8888 из необработанных данных.
echo /data/xx.rgba8888 > /sys/class/disp/disp/attr/capture_dump
# Перехват цветового пространства bgra8888 из необработанных данных.
echo /data/xx.bgra8888 > /sys/class/disp/disp/attr/capture_dump

Уведомление:этотиндивидуальный Функция есть толькоlinux-4.9 Только последующие ядра поддерживают эту функцию.

7 FAQ

7.1 Ненормальное отображение экрана

Обобщая прошлый опыт, можно сказать, что большинство нарушений отображения экрана вызвано необоснованным временем включения и выключения питания.

См. временные параметры экрана, иллюстрирующие поломку драйвера экрана.

7.2 Черный экран – нет подсветки

Проблема с производительностью: Полностью черный экран без подсветки.

Есть две возможности:

  1. Не удалось добавить драйвер. Драйвер экрана не загрузился, в результате чего функция включения питания подсветки не работает. Это можно сделать через Метод. отладки Местоположение.
  2. pwm Проблемы с настройкой и цепью подсветки, ШИМ Для получения информации см. ШИМ. Информация о подсветке Взаимно выключена, а другая — Взаимно выключена. Приколоти напряжение измеряется непосредственно аппаратно.

7.3 Черный экран – с подсветкой

Черный экран с подсветкой может быть вызван различными причинами. Чтобы проверить, выполните следующие действия:

  1. Никакие слои не были отправлены. Если приложение не отправляет ни одного слоя, производительность будет черной.,Вы можете определить, отправлен ли слой, проверив на дисплее небольшую информацию Фестиваль. Если вы уверены, что слоев нет,Вы можете принести его, просмотрев ловить

Colorbar, подтвердите, может ли экран отображаться нормально.

  1. SoC Порт показывает, что на модуль порта не подается питание. SoC Естественно, терминальный модуль не может передавать видеосигналы без питания. Общий процессор терминальный модуль с питанием axp Имена: vcc-lcd, vcc-dsi, vcc33-lcd,

vcc18-dsi ждать.

  1. Контакт сброса не сбрасывается. Если имеется ножка для сброса настроек, убедитесь, что Аппаратное подключение правильное, убедитесь, что контакт сброса операции сброса вставлен в драйвер приезжатьэкрана.
  2. board.dts средний ЖК0 Есть серьезная ошибка. Первый из них — ЖК. время Слишком возмутительно, пожалуйста, строго следуйте инструкциям в инструкции к экрану! См. иллюстрировать параметры экрана синхронизации. Во-вторых, неправильный тип рта для ловить, например, ловить.

Экран DSI, конфигурация записана как LVDS.

  1. Команда инициализации экрана неверна. Включая последовательность каждого шага, задержку и т. д. В настоящее время обратитесь к производителю экрана, чтобы подтвердить команду инициализации.

7.4 Начальный экран

Разделяется на несколько типов:

  1. Весь экран мигает.

Скорее всего, это связано с нестабильным напряжением цепи подсветки. Проверьте напряжение.

  1. часть экрана мигает, вероятность секса.

Время заполнения board.dts необоснованно.

  1. На экране мигает прямоугольная область.

Если экран поляризован, он не будет работать, если вам нужно выключить телефон, отложить его в сторону, а затем снова включить.

7.5 Полосатая рябь

Формат пикселей некоторых ЖК-экранов имеет глубину цвета 18 бит (RGB666) или глубину цвета 16 бит (RGB565). Рекомендуется включить функцию FRM и компенсировать глубину цвета с помощью дизеринга, чтобы отображение достигало 24. -битовая глубина цвета (RGB888)

изэффектфрукты.Как показано ниже,Изображение вышедаглубина цветадляRGB66 ЖК-дисплей экран, на рисунке ниже показано открытие дизеринга После отображения откройте дизеринг Окончательный цветовой градиент слишком сглажен.

Установка атрибута lcd_frm [lcd0] может улучшить это явление. См. объяснение lcd_frm.

7.6 Подсветка слишком яркая или слишком темная

Пожалуйста, обратите внимание на параметр «Взаимно выключена подсветка».

7.7. Тестовый экран работает ненормально после перезапуска после выключения питания.

Первая причина размытия экрана заключается в том, что частота кадров слишком высока и превышает лимит экрана:

Ненормальное значение FPS — это очень серьезная проблема, связанная со стабильностью всей операционной системы. Если частота кадров слишком высока, это приведет к увеличению пропускной способности системы и ненормальному процессу отображения. также приводит к тому, что ЖК-экран становится размытым и нестабильным, что может легко привести к

Если ЖК-экран поврежден, а частота кадров слишком низкая, взаимодействие с пользователем будет плохим.

  1. Просматривая информацию о Фестивале, вы можете узнать текущую статистику кадров в секунду.
  2. если фпс Оно сильно отличается от обычного значения. Сначала проверьте board.dts. средний[lcd0] Фестиваль: заполненная информация должна соответствовать следующей формуле.
Язык кода:javascript
копировать
lcd_dclk_freq*num_of_pixel_clk=lcd_ht*lcd_vt*fps /1e9

Среди них num_of_pixel_clk Обычно 1, что означает, что для отправки одного пикселя требуется изтактовый цикл1 A, микроконтроллер низкого разрешения и последовательные интерфейсы обычно требуют 2 до 3 индивидуальныйтактовый Для отправки одного пикселя требуется цикл.

Если вышеуказанное заполнение верно, вы можете подтвердить информацию о частоте нескольких основных часов, проверив раздел «Просмотр информации о часах», и отправить эту информацию и board.dts мейнтейнеру для дальнейшего анализа.

7.8 Интерфейс RGB или интерфейс I8080 отображает дрожание и закономерности.

  1. Измените возможность привода тактового контакта. Ссылка lcd_gpio_0 маленькая Фестивалиpinctrl-0 и pinctrl-1 измените возможности драйвера и увеличьте его размер.

Есть и другой способ записи, например получается так:

Язык кода:javascript
копировать
lcdclk = port:PD18<2><0><2><default>

Можно изменить на:

Язык кода:javascript
копировать
lcdclk = port:PD18<2><0><3><default>
  1. Измените бит синхронизации, то есть измените lcd_hv_clk_phase. Из-за разных битов тактового сигнала передающей и принимающей стороны принимающая сторона декодирует несколько неправильных битов.

7.9 На ЖК-экране появляются поляризация и остаточное изображение.

Что такое явление поляризации жидких кристаллов: на самом деле это диэлектрическая поляризация жидких кристаллов. Под действием внешнего электрического поля внутри диэлектрика вдоль направления электрического поля возникает индуцированный дипольный момент. Явление появления в электролите поляризованных зарядов называется диэлектриком.

поляризации.

С точки зрения непрофессионала, при подаче определенного напряжения на ЖК-панель накапливается большое количество зарядов. Когда напряжение исчезает, эти накопленные заряды высвобождаются. Однако из-за диэлектрического эффекта эти накопленные заряды не высвобождаются. немедленно.

Потеря этих инертных зарядов, которые не исчезнут сразу, вызывает остаточный постоянный ток в жидком кристалле и формирует явление поляризации.

Несколько распространенных явлений поляризации жидких кристаллов

  1. Когда ЖК-дисплей все еще находится на определенном экране в течение длительного времени и при переключении на экран в оттенках серого, экран мигает, экран мигает некоторое время, а затем исчезает. Это явление относится к процессу разряда остаточного заряда.
  2. Когда ЖК-дисплей остается неподвижным на определенном экране в течение длительного времени, окружающая его часть становится черной, а середина становится белой. В отрасли это явление называется аномалией черно-белого телевизионного кадра.
  3. При незаконном выключении при повторном включении питания появится мерцание экрана, а через определенный период времени мерцание экрана исчезнет. То же, что и первая причина.
  4. Феномен остаточного изображения: когда ЖК-дисплей остается неподвижным на одном экране в течение длительного времени, изображение остается при переключении на другие экраны. Сущность остаточного изображения обусловлена ​​остаточным зарядом постоянного тока жидкого кристалла. В каком-то смысле оно также принадлежит поляризации жидкого кристалла.

Феномен.

Для устранения явления поляризации и остаточного изображения на ЖК-экране существуют следующие меры противодействия.

  1. настроить vcom размер напряжения. VCOM Это опорное напряжение для отклонения молекул жидкого кристалла. Оно должно быть стабильным и оказывать непосредственное влияние на жидкокристаллический дисплей. Удельное напряжение зависит от конкретного значения напряжения. входные данные и Vcom Высокое напряжение

Он определяется Сяолаем и используется для отображения различных оттенков серого, то есть для достижения цветного отображения ГАММА. Гамма-напряжение используется для управления серой шкалой дисплея. Обычно оно делится на уровни G0–G14.

Разница между напряжением и напряжением Vcom приводит к разным углам поворота жидкого кристалла, что приводит к разнице в яркости. Наилучшая ситуация для напряжения Vcom — между G0 и G14, поэтому наилучшее мерцание ЖК-экрана.

хороший.

Чтобы отрегулировать напряжение VCOM, если вывод экрана имеет вывод VCOM, напрямую отрегулируйте соответствующую схему. Если микросхема драйвера экрана предоставляет интерфейс регистра, размер можно регулировать через интерфейс регистра.

  1. Строго соблюдайте последовательность включения и выключения устройства. Многие явления поляризационного остаточного изображения вызваны не длительным статическим отображением определенного изображения, а несоблюдением строго последовательности выключения. при выключении.

Последовательность вызывает проблему, например, питание не отключается или задержка недостаточна.

8 Резюме

Отладка ЖК-дисплея на самом деле представляет собой процесс отладки передающего чипа (Allwinner SoC) и принимающего чипа (ИС драйвера на ЖК-экране):

  1. Чтобы добавить драйвер экрана, следуйте инструкциям по добавлению драйвера экрана и иллюстрированию драйвера экрана.
  2. Внимательно прочтите руководство по эксплуатации экрана и руководство по микросхеме драйвера.
  3. Внимательно прочтите характеристики оборудования.
  4. Убедитесь, что все контакты питания, необходимые для ЖК-дисплея, исправны.
boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose