Руководство по разработке основных компонентов Allwinner R128 — драйвер ЖК-дисплея SPI
Руководство по разработке основных компонентов Allwinner R128 — драйвер ЖК-дисплея SPI

Драйвер ЖК-дисплея SPI

Введение

Платформа R128 предоставляет интерфейс SPI TFT ACCC SPI DBI, который имеет следующие функции:

  • Supports DBI Type C 3 Line/4 Line Interface Mode
  • Supports 2 Data Lane Interface Mode
  • Supports data source from CPU or DMA
  • Supports RGB111/444/565/666/888 video format
  • Maximum resolution of RGB666 240 x 320@30Hz with single data lane
  • Maximum resolution of RGB888 240 x 320@60Hz or 320 x 480@30Hz with dual data lane
  • Supports tearing effect
  • Supports software flexible control video frame rate

В то же время для экранов SPI предусмотрена среда драйверов SPILCD.

Драйвер модуля

инструкции по настройке менюконфига

Конфигурация менюconfig модуля SPILCD следующая (на примере экрана kld2844b):

Язык кода:javascript
копировать
Drivers Options  --->
    soc related device drivers  --->
        SPILCD Devices  --->
            [*] DISP Driver Support(spi_lcd)
            [*]   spilcd hal APIs test           //spilcdТестовые примеры модулей
            LCD_FB panels select  --->           //spilcd screendriveConfiguration
                [*] LCD support kld2844B panel
                [ ] LCD support kld35512 panel
            Board select  --->
                [ ] board kld2844b support       //Отображение уровня платыиспользоватьдрайвер приватный режим дисплея из элемента Конфигурация, в то время как режим Usesys_config.fex не использует Конфигурацию

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

  • DRIVERS_SPI
  • DRIVERS_DBI
  • DRIVERS_PWM
Введение в структуру исходного кода

Структура исходного кода и основные файлы драйверов следующие:

Язык кода:javascript
копировать
spilcd/
├── lcd_fb/
│   ├── dev_lcd_fb.c				# spilcd driver слой
│   ├── disp_display.c
│   ├── disp_lcd.c
│   ├── lcd_fb_intf.c
│   └── panels/					    # ЖК-драйвер, связанный
│       ├── kld2844b.c
│       ├── lcd_source.c
│       ├── panels.c
│       └── panels.h
└── soc/
    ├── disp_board_config.c			# Уровень совета Конфигурацияанализировать    └── kld2844b_config.c			# Показать приватный режим на уровне платы Файлы конфигурации

Конфигурация параметров модуля

Текущий дисплей уровня платы поддерживает два метода настройки. Один из них — использование. sys_config.fex изспособ Конфигурация,Во-вторых, он не поддерживаетsys_config.fex В этом случае вы можете настроить его, сделав драйвер дисплея частным. Эти два метода описаны ниже.

Настройте с помощью sys_config.fex

FreeRTOSсистемный путь:имя платы/чипа/имя решения/configs/sys_config.fex

Конкретный файл конфигурации зависит от фактического используемого решения чипа. Имя файла конфигурации также может быть sys_config_xxx.fex (xx — идентификатор решения хранилища, например sys_config_nor.cfg, sys_config_nand.cfg).

Конкретные примеры конфигурации следующие:

Язык кода:javascript
копировать
;----------------------------------------------------------------------------------
;lcd_fb0 configuration
;----------------------------------------------------------------------------------
[lcd_fb0]
lcd_used            = 1              ; использовать Отображать
lcd_model_name      = "spilcd"       ; Модель: spilcd
lcd_driver_name     = "jlt35031c"    ; Драйвер экрана: jlt35031c
lcd_x               = 320            ; разрешение ширины экрана
lcd_y               = 480            ; Экран высокого разрешения
lcd_width           = 49             ; физическая ширина экрана
lcd_height          = 74             ; Физическая высота экрана
lcd_data_speed      = 60             ; SPI Частота привода 60MHz
lcd_pwm_used        = 1              ; lcdisпользовать ШИМ подсветку
lcd_pwm_ch          = 1              ; lcdisпользовать ШИМ 1 канал преступный мир
lcd_pwm_freq        = 5000           ; lcdisпользовать ШИМ подсветкучастота5000Hz
lcd_pwm_pol         = 0              ; lcdisпользовать ШИМ подсветку Фаза0
lcd_if              = 0              ; lcdиспользоватьspiинтерфейс,0-spi, 1-dbi
lcd_pixel_fmt       = 11             
lcd_dbi_fmt         = 2
lcd_dbi_clk_mode    = 1
lcd_dbi_te          = 1
fb_buffer_num       = 2
lcd_dbi_if          = 4
lcd_rgb_order       = 0
lcd_fps             = 60
lcd_spi_bus_num     = 1
lcd_frm             = 2
lcd_gamma_en        = 1
lcd_backlight       = 100

lcd_power_num       = 0
lcd_gpio_regu_num   = 0
lcd_bl_percent_num  = 0

lcd_spi_dc_pin      = port:PA19<1><0><3><0> ; Нога постоянного тока
;RESET Pin
lcd_gpio_0          = port:PA20<1><0><2><0> ; Сброс PIN-кода
lcd_driver_name

Lcdдрайвер экранаизимя(нить),Должен быть подключен к драйверу экранасерединаstrcut __lcd_panelпеременнаяизnameЧлены единодушны。

lcd_model_name

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

lcd_if

Lcd Interface

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

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

spiинтерфейс Это общее имяиз4Линейный режим,Это потому, чтодля Требуется дополнительная помощь при отправке данныхDCлинии для различения команд и данных,иsclk,csиsdaВсего четыре строки。

Вставьте сюда описание изображения
Вставьте сюда описание изображения

Если установленоdbiинтерфейс,Тогда нам нужно еще различатьdbiинтерфейс,Нужно установить lcd_dbi_if

lcd_dbi_if

Настройки интерфейса LCD dbi.

Этот параметр доступен только в том случае, еслиlcd_if=1Действительно только тогда, когда。

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

Язык кода:javascript
копировать
0:L3I1
1:L3I2
2:L4I1
3:L4I2
4:D2LI

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

L3I1иL3I2это три Линейный режим(ненужныйDCступня),Разница заключается во времени чтения.,То есть нужны ли дополнительные выводы для чтения регистра. Временная диаграмма чтения и записи выглядит следующим образом:

Вставьте сюда описание изображения
Вставьте сюда описание изображения
Вставьте сюда описание изображения
Вставьте сюда описание изображения

L4I1иL4I2Это четыре Линейный режим,То же, что и соглашение о спиинтерфейсе.,Разница в том, что постоянного токиз Контроль, контролируется ли он автоматически,кроме тогоI2иI1из Разница заключается во времени чтения.,То есть нужны ли дополнительные выводы для чтения регистра.

Вставьте сюда описание изображения
Вставьте сюда описание изображения
Вставьте сюда описание изображения
Вставьте сюда описание изображения

D2LIэто дваdata laneмодель。Отправить командучастьчаспоследовательностьичитатьчаспоследовательностьиL3I1последовательный,На рисунке ниже показана временная последовательность при отправке данных.,Количество тактов различно для разных форматов пикселей.

Вставьте сюда описание изображения
Вставьте сюда описание изображения
lcd_dbi_fmt

DBIинтерфейс Формат пикселей。

Язык кода:javascript
копировать
0:RGB111
1:RGB444
2:RGB565
3:RGB666
4:RGB888

выбиратьиз Основой является приемный конечный экранDriver ICиз Статус поддержки,пожалуйста, проверьтеDriver ICВручную или обратитесь к производителю экрана.。

Тогда вам придется сотрудничатьlcd_pixel_fmtизвыбирать,Например, при выборе RGB565,lcd_pixel_fmtТакже выберите565Формат。

lcd_dbi_te

Включите триггер.

te означает (эффект разрыва), что означает разрыв. Из-за различий в чтении и письме происходит разрыв. Функция стопы - синхронизировать чтение и запись. Частота стопы - это частота обновления экрана, поэтому стопа может. Также может использоваться как ножка vsync (ножка вертикальной синхронизации).

Язык кода:javascript
копировать
0: Запрещенный
1: Триггер по заднему фронту
2: Триггер по нарастающему фронту

Дополнительные инструкции см. в разделе «Экран с ножками».

lcd_dbi_clk_mode

Выберите режим поведения часов dbi.

Язык кода:javascript
копировать
0: Автоматическая остановка. Если есть данные, будут часы. Если данные не отправляются, часов не будет.
1: Всегда держите. Часы есть независимо от того, отправляются данные или нет.

Обратите внимание, что приведенные выше параметры относятся к совместимости экрана.

lcd_rgb_order

Настройки распознавания последовательности входных данных изображения RGB, действительны только при lcd_if=1.

Язык кода:javascript
копировать
0:RGB
1:RBG
2:GRB
3:GBR
4:BRG
5:BGR
6:G_1RBG_0
7:G_0RBG_1
8:G_1BRG_0
9:G_0BRG_1

Для формата, отличного от RGB565, используйте значения от 0 до 5.

Описание формата rgb565 выглядит следующим образом:

Формат rgb565 может столкнуться с большими и малыми проблемами с порядком байтов. Платформа Arm и платформа хранения ПК имеют прямой порядок байтов (младшие байты размещаются по младшим адресам, старшие байты размещаются по старшим адресам), но многие экраны SPI по умолчанию используют обратный порядок байтов (Big). Эндиан).

То есть сохраненный порядок байтов не соответствует отправленному порядку байтов.

В это время выберите 6 или ниже, и интерфейс DBI автоматически преобразует прямой порядок байтов в обратный порядок байтов.

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

6 Вышеупомянутый формат объясняется следующим образом:

R — 5 бит, G — 6 бит, B — 5 бит, а затем разделите G на старшие 3 бита (G_1) и младшие 3 бита (G_0). Итак, следующие два заказа:

Вставьте сюда описание изображения
Вставьте сюда описание изображения
  1. R-G_1-G_0-B, обратный порядок байтов.
  2. G_0-B-R-G_1, что соответствует цифре 9 выше, с прямым порядком байтов.
lcd_x

Количество пикселей по горизонтали на экране дисплея. Обратите внимание: если экран поддерживает горизонтальное и вертикальное вращение, lcd_x и lcd_y также необходимо поменять местами.

lcd_y

Количество строк дисплея. Обратите внимание: если экран поддерживает горизонтальное и вертикальное вращение, lcd_x и lcd_y также необходимо поменять местами.

lcd_data_speed

Используется для установки тактовой частоты интерфейса SPI/DBI в МГц.

  1. Максимальный предел передатчика (SOC) составляет 100 МГц.
  2. Ресивер (драйвер экрана IC) ограничения, пожалуйста, проверьте соответствующий драйвер. ICруководствоили Обратитесь за поддержкой к производителю экрана。
  3. Превышение вышеуказанных пределов может привести к ненормальному отображению.
lcd_fps

Установите частоту обновления экрана в Гц. Если lcd_dbi_te включен, этот параметр значения недействителен.

lcd_pwm_used

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

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

lcd_pwm_ch

Pwm channel used

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

lcd_pwm_freq

Lcd backlight PWM Frequency

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

lcd_pwm_pol

Lcd backlight PWM Polarity

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

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

Lcd backlight PWM

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

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

lcd_backlight

Значение подсветки по умолчанию находится в диапазоне от 0 до 255. Чем больше значение, тем ярче.

lcd_bl_en

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

lcd_spi_dc_pin

Обозначается как контакт постоянного тока при использовании для интерфейса spi.

lcd_gpio_x

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

lcd_spi_bus_num

Выберите идентификатор шины spi Только spi1 поддерживает протокол DBI, поэтому здесь обычно выбирается 1.

Диапазон значений: от 0 до 1.

lcd_pixel_fmt

Выберите формат пикселей для передаваемых данных.

Необязательные значения следующие: Когда вы меняете порядок компонентов RGB, вы также должны соответствующим образом изменить lcd_rgb_order или изменить порядок компонентов RGB драйвера экрана (обычно регистр 3Ah).

Интерфейс DBI поддерживает только RGB32 и RGB16.

Интерфейс SPI поддерживает только RGB16.

Язык кода:javascript
копировать
		enum lcdfb_pixel_format {
			LCDFB_FORMAT_ARGB_8888 = 0x00,	// MSB  A-R-G-B  LSB
			LCDFB_FORMAT_ABGR_8888 = 0x01,
			LCDFB_FORMAT_RGBA_8888 = 0x02,
			LCDFB_FORMAT_BGRA_8888 = 0x03,
			LCDFB_FORMAT_XRGB_8888 = 0x04,
			LCDFB_FORMAT_XBGR_8888 = 0x05,
			LCDFB_FORMAT_RGBX_8888 = 0x06,
			LCDFB_FORMAT_BGRX_8888 = 0x07,
			LCDFB_FORMAT_RGB_888 = 0x08,
			LCDFB_FORMAT_BGR_888 = 0x09,
			LCDFB_FORMAT_RGB_565 = 0x0a,
			LCDFB_FORMAT_BGR_565 = 0x0b,
			LCDFB_FORMAT_ARGB_4444 = 0x0c,
			LCDFB_FORMAT_ABGR_4444 = 0x0d,
			LCDFB_FORMAT_RGBA_4444 = 0x0e,
			LCDFB_FORMAT_BGRA_4444 = 0x0f,
			LCDFB_FORMAT_ARGB_1555 = 0x10,
			LCDFB_FORMAT_ABGR_1555 = 0x11,
			LCDFB_FORMAT_RGBA_5551 = 0x12,
			LCDFB_FORMAT_BGRA_5551 = 0x13,
		};
fb_buffer_num

Отображает количество кадровых буферов. Для плавного отображения обычно равно 2. Его также можно изменить на 1 для экономии памяти.

Пример конфигурации модуля sys_config.fex
Типичная конфигурация с двумя линиями передачи данных

Некоторые экраны поддерживают передачу данных по двум линиям для ускорения передачи данных. В этом случае необходимо использовать протокол DBI. Типичная конфигурация следующая:

Язык кода:javascript
копировать
[lcd_fb0]
lcd_used          = 1
lcd_driver_name   = "kld2844b"
lcd_if            = 1
lcd_dbi_if        = 4
lcd_data_speed    = 60
lcd_spi_bus_num   = 1
lcd_x             = 320
lcd_y             = 240
lcd_pwm_used      = 1
lcd_pwm_ch        = 4
lcd_pwm_freq      = 5000
lcd_pwm_pol       = 0
lcd_pixel_fmt     = 0
lcd_dbi_fmt       = 3
lcd_rgb_order     = 0
fb_buffer_num     = 2
lcd_backlight     = 200
lcd_fps           = 60
lcd_dbi_te        = 0
lcd_bl_en         = port:PB04<1><0><default><1>
lcd_gpio_0        = port:PB02<1><0><default><1>
  1. При аппаратном подключении второй вывод данных подключается к исходному 1. data laneиз Нога постоянного тока,Это можно понять так: при передаче данных две линии данных несут информацию D/C (данные/команды).,Так получаетсяиз Нога постоянного тока Это будет бесплатно для работыдля Вторая строка данных。
  2. На экране драйвера 2 необходимо включить режим полосы данных, проверьте соответствующие регистры в руководстве по драйверу IC и обратитесь к производителю экрана.
  3. Ключевыми параметрами здесь для двух линий данных являются lcd_if, lcd_dbi_if, lcd_dbi_fmt и lcd_spi_bus_num.
  4. lcd_x и lcd_y — разрешения экрана. Если экран поддерживает вращение (поворот по горизонтали и по вертикали), здесь его также необходимо поменять местами.
  5. Начиная с lcd_pwm, lcd_backlight и lcd_bl_en относятся к настройкам подсветки, если имеются соответствующие аппаратные подключения.
  6. lcd_pixel_fmt и fb_buffer_num — настройки отображаемого фреймбуфера.
  7. С lcd_gpio_ начинаются пользовательские настройки gpio (например, контакт сброса).
  8. lcd_fps и lcd_dbi_te — настройки, относящиеся к режиму обновления.
Исходная конфигурация экрана интерфейса SPI

Если микросхема поддерживает интерфейс DBI, нет необходимости использовать интерфейс SPI. Протокол интерфейса DBI может охватывать все ситуации.

Некоторые микросхемы не поддерживают DBI, поэтому вы можете использовать только интерфейс spi (установив lcd_if). Если вы используете интерфейс spi, у него есть некоторые ограничения.

  1. 2 линии передачи данных не поддерживаются.
  2. Должно быть указано Нога постоянного тока。Это связано Протокол сspi не контролирует автоматически Нога постоянного тока, чтобы различать команды данных,Этой цели можно достичь, установив lcd_spi_dc_pin,Для этого контакта нет необходимости использовать внутренние контакты spi.
  3. Поддерживается только формат пикселей rgb565. Поскольку имеется только одна линия передачи данных, скорость слишком низкая, а форматы выше rgb565 непрактичны.
Язык кода:javascript
копировать
[lcd_fb0]
lcd_used          = 1
lcd_driver_name   = "kld2844b"
lcd_if            = 0
lcd_data_speed    = 60
lcd_spi_bus_num   = 1
lcd_x             = 320
lcd_y             = 240
lcd_pwm_used      = 1
lcd_pwm_ch        = 4
lcd_pwm_freq      = 5000
lcd_pwm_pol       = 0
lcd_pixel_fmt     = 10
lcd_rgb_order     = 0
fb_buffer_num     = 2
lcd_backlight     = 200
lcd_fps           = 60
lcd_dbi_te        = 0
lcd_bl_en         = port:PB04<1><0><default><1>
lcd_gpio_0        = port:PB02<1><0><default><1>
lcd_spi_dc_pin    = port:PA19<1><0><3><1>
Экран с ножками

te означает (эффект разрыва), что означает разрыв. Это явление разрыва, вызванное асинхронным чтением и записью. Функция стопы — синхронизировать чтение и запись. Частота стопы — это частота обновления экрана. te foot. Ее также можно рассматривать как ножку vsync (ножку вертикальной синхронизации).

  1. Этап проектирования оборудования,Вывод экрана необходимо подключить к выводу интерфейса ICizDBI.
  2. Конфигурацияначальствоинтерфейсиспользоватьdbiинтерфейс。
  3. Затем включите lcd_dbi_te.
  4. Драйвер экрана включает функцию te. Обычно регистр составляет 35h. Подробную информацию см. в руководстве по микросхеме драйвера, соответствующему экрану.
  5. Драйвер экрана устанавливает частоту кадров и выбирает разумную частоту кадров на основе скорости передачи, которую может принять экран (например, в ST7789H2 c6h используется для установки частоты te).
Язык кода:javascript
копировать
[lcd_fb0]
lcd_used          = 1
lcd_driver_name   = "kld2844b"
lcd_if            = 1
lcd_dbi_if        = 4
lcd_data_speed    = 60
lcd_spi_bus_num   = 1
lcd_x             = 320
lcd_y             = 240
lcd_pwm_used      = 1
lcd_pwm_ch        = 4
lcd_pwm_freq      = 5000
lcd_pwm_pol       = 0
lcd_pixel_fmt     = 0
lcd_dbi_fmt       = 3
lcd_rgb_order     = 0
fb_buffer_num     = 2
lcd_backlight     = 200
lcd_fps           = 60
lcd_dbi_te        = 1
lcd_bl_en         = port:PB04<1><0><default><1>
lcd_gpio_0        = port:PB02<1><0><default><1>
Горизонтальное и вертикальное вращение экрана
  1. Платформа не имеет возможности ротации оборудования, а ротация программного обеспечения происходит слишком медленно и нагружает процессор.
  2. Многие spi-экраны поддерживают внутреннее вращение.,Его необходимо установить при инициализации драйвера экрана.,Обычно36hзарегистрироваться。
Язык кода:javascript
копировать
// Преобразовать в альбомную ориентацию
sunxi_lcd_cmd_write(sel, 0x36);
sunxi_lcd_para_write(sel, 0xa0);
  1. lcd_fb0izКонфигурациясередина необходимо поменять местами значения lcd_x и lcd_yiz.,В это время программное обеспечение будет отображаться горизонтально.
  2. Эффект изображения может быть хуже, если экран повернут внутри экрана. Рекомендуется напрямую выбирать направление при выборе экрана.
Контроль частоты кадров

Частота обновления экрана ограничена многими аспектами:

  1. Аппаратная скорость передачи данных SPI/DBI, которая представляет собой частоту тактового контакта. Настройка lcd_data_speed позволяет установить аппаратную скорость передачи данных максимум до 100 МГц. Если экран может нормально его воспринимать, чем больше значение, тем лучше.
  2. Возможность приема IC драйвера экрана. В руководстве по микросхеме драйвера будет указан максимальный цикл sclk, который может принять экран.
  3. Используйте 2 data полоса по-прежнему 1 data переулок, теоретически 2 data Скорость движения по полосе увеличится вдвое. См. Типичная конфигурация с двумя линиями передачи данных。
  4. Пиксельный формат. Формат пикселей определяет объем данных, которые необходимо передать. Чем меньше количество цветов в формате пикселей, тем выше частота кадров, но тем хуже эффект.
  5. Экран с ножками середина Мы знаем, что соответствующие настройки напрямую влияют на частоту обновления экрана.
  6. Если т.е. не поддерживается, то можно управлять частотой кадров, задав lcd_fps. Нужно выбрать подходящее значение, исходя из первого и второго пункта.
Управление подсветкой
  1. Аппаратное обеспечение должно поддерживать схему подсветки ШИМ.
  2. Драйвер поддерживает регулировку подсветки ШИМ.,Просто нужна Конфигурация хорошего начала lcd_pwm,Можно использовать lcd_backlight и lcd_bl_en и другие конфигурации, связанные с подсветкой.
Связано с форматом пикселей
  1. lcd_pixel_fmt, этот элемент настройки используется для установки формата пикселей fbdev.
  2. lcd_dbi_fmt,Используется для настройки отправки интерфейса DBI в формате пикселей.

Нет необходимости отправлять альфа-канал, когда SPI/DBI отправляет данные, но уровень приложения имеет соответствующий альфа-канал, например, в формате ARGB8888.

В это время аппаратное обеспечение будет автоматически обрабатывать альфа-канал за нас, поэтому, когда lcd_pixel_fmt выбирает формат с альфа-каналом, lcd_dbi_fmt может выбрать rgb666 или rgb888, которые не обязательно должны быть одинаковыми.

Конфигурация питания

Если имеется несколько источников питания, просто используйте lcd_power1, lcd_power2... а затем вызовите интерфейс sunxi_lcd_power_enable в драйвере экрана.

Инструкции по настройке GPIO

lcd_bl_en, lcd_spi_dc_pin и lcd_gpio_x относятся к типам атрибутов GPIO.

Ниже в качестве примера используется lcd_spi_dc_pin, чтобы конкретно объяснить значение значений параметров атрибутов GPIO:

Язык кода:javascript
копировать
lcd_spi_dc_pin   = port:PA19<1><0><3><1>

Описание контакта: порт: порт < Функция повторного использования >< Потяните вверх и вниз >< способность вождения >< Выходное значение >

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

  • PA19:порт,выражатьGPIOТрубкаступня。PAвыражатьPA组Трубкаступня,19выражать Нет.19根Трубкаступня;Прямо сейчасPA19Трубкаступня。
  • <1>:Функция повторного использования,Указывает тип мультиплексирования GPIO. 1 означает выбор общей функции GPIO PA19.,0длявхода,1для вывода.
  • <0>:Потяните вверх и вниз означает встроенное сопротивление. использовать0из, что указывает на высокое состояние внутреннего сопротивления, в случае 1 это подтягивание внутреннего резистора,2 представляет собой понижение внутреннего резистора. Остальные данные недействительны.
  • <3>:выражатьспособность вождения. 1 — уровень по умолчанию, чем выше номер способности. вождение сильнее, максимум 3.
  • <1>:выражать Значение выходного уровня по умолчанию。0длянизкий уровень,1для высокого уровня.
несколько дисплеев
  1. Определите, имеет ли оборудование резервный интерфейс SPI/DBI.
  2. Необходимо добавить lcd_fb1 в sys_config.fex.,Конфигурация Способиlcd_fb0Такой же(илисуществовать Показать приватный режим на уровне платы Файлы конфигурации Добавлено внутриg_lcd1_config,Конфигурация аналогична g_lcd0_config),Его серединаlcd_spi_bus_num не может быть одинаковым.
Зависит от конфигурации драйвера

Модуль spilcd использует spi, dbi, pwm и другие драйверы.

Настройка с использованием приватного режима отображения

путь:rtos-hal/hal/source/spilcd/soc/

Конкретные файлы конфигурации дисплея на уровне платы см. kld2844b_config.c файл конфигурации.

Этот файл имитирует sys_config.fexПриходить Конфигурация Некоторый Уровень совета Связанныйизресурс,исходный файлсерединанужно определение4общая ситуацияпеременная:g_lcd0_configg_lcd1_configg_lcd0_config_lenиg_lcd1_config_len,И имя переменной фиксировано,Невозможно изменить.

Конкретные инструкции заключаются в следующем:

  1. g_lcd0_config:первый экраниз Конфигурацияпеременная,struct property_tтип данных。
  2. g_lcd1_config:второй экраниз Конфигурацияпеременная,struct property_tтип данных。
  3. g_lcd0_config_lenиg_lcd1_config_lenсоответствуетначальство Два массивапеременнаяиздлина,Просто скопируйте его.

struct property_tтип данных,Используется для определения атрибута информации:

  1. свойствоимя。соответствующий его членамname,нить。
  2. Тип недвижимости。соответствующий его членамtype,смотретьenum proerty_typeизопределение,Есть целые числа,нить,GPIO,Отдельный контакт и источник питания.
  3. значение атрибута。в соответствии сначальстволапшаиз Тип недвижимости Приходитьвыбиратьunionсерединачлен Приходить Назначение。

Примеры вышеупомянутых часто используемых типов атрибутов:

Целочисленный тип:

Язык кода:javascript
копировать
	{
		.name = "lcd_used",
		.type = PROPERTY_INTGER,
		.v.value = 1,
	},

Нить:

Язык кода:javascript
копировать
	{
		.name = "lcd_driver_name",
		.type = PROPERTY_STRING,
		.v.str = "kld2844b",
	},

GPIO:

Язык кода:javascript
копировать
	{
		.name = "lcd_spi_dc_pin",
		.type = PROPERTY_GPIO,
		.v.gpio_list = {
			.gpio = GPIOA(19),
			.mul_sel = GPIO_DIRECTION_OUTPUT,
			.pull = 0,
			.drv_level = 3,
			.data = 1,
		},
	},

Значение g_lcd0_config соответствует вышеупомянутому lcd_fb0 в методе sys_config.fex.

Написание драйвера экрана

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

Язык кода:javascript
копировать
rtos-hal/hal/source/spilcd/lcd_fb/panels
  1. Скопируйте существующий драйвер экрана, включая файлы заголовков и исходные файлы, в папку с исходным кодом драйвера экрана, а затем измените имя файла на осмысленное имя, например модель экрана.
  2. Исправлятьисходный файлвstrcut __lcd_panelпеременнаяизимя,ки этопеременнаячленnameизимя,этотимядолжени sys_config.fex середина [lcd_fb0](или Уровень совета Конфигурациядокументсерединаg_lcd0_config)изlcd_driver_nameпоследовательный。
  3. существоватьдрайвер экранав каталоге Исправлятьpanel.cиpanel.h。существоватьглобальная структурапеременнаяpanel_arrayсередина Новое Только что добавленоstrcut __lcd_panelизпеременнаяуказатель。panel.hсередина Новыйstrcut __lcd_panelиззаявление。и заключен в макросы Приходить。
  4. Исправлятьrtos-hal/hal/source/spilcd/lcd_fb/panels/Kconfig,Добавить новую конфигурацию,Соответствует третьему пункту, упомянутому в макросе.
  5. Исправлятьrtos-hal/hal/source/spilcd/lcd_fb/путь ВнизизMakefileдокумент。Даватьlcd_fb-objпеременная Новый Только что присоединилсяизисходный файлпереписываться.o
  6. Согласно данному руководству и руководству по экрану, Драйвер ICруководство Исправлятьsys_config.fexв[lcd_fb0]узел(или Показать приватный режим на уровне платы Файлы конфигурациивg_lcd0_configКонфигурацияпеременная)подизсвойство
  7. 实现屏исходный файлвLCD_open_flow,LCD_close_flow,LCD_panel_init,LCD_power_onждатьфункция
Анализ функций процесса экрана переключения

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

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

Вставьте сюда описание изображения
Вставьте сюда описание изображения
LCD_open_flow

Функция: инициализация шагов по открытию экрана.

прототип:

Язык кода: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, lcd_fb_black_screen, 100); 
	LCD_OPEN_FUNC(sel, LCD_bl_open, 0);
	return 0;
}

Как указано выше, инициализация всего процесса открытия экрана состоит из четырех шагов:

  1. Включите питание ЖК-дисплея и задержите на 10 мс.
  2. Инициализируйте экран, а затем задержите на 50 мс (для экранов, не требующих инициализации, этот шаг можно пропустить);
  3. Отправьте на экран полностью черные данные. Этот шаг необходим и его нужно выполнить до включения подсветки.
  4. Включите подсветку и задержите 0 мс.

LCD_open_flow Функция будет вызываться только один раз во время инициализации системы и выполняет каждый раз. LCD_OPEN_FUNC Прямо сейчасда把переписыватьсяиз Зарегистрируйте функцию шага открытия экрана,Функция шага открытия экрана не выполняется немедленно.。LCD_open_flowфункцияиз Контент должен использоваться единообразно LCD_OPEN_FUNC(sel, function, delay_time) Выполните регистрацию функции, чтобы обеспечить нормальную регистрацию на этапе открытия экрана.

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

LCD_close_flow

Функция: Инициализировать пошаговый процесс выключения экрана.

прототип:

Язык кода:javascript
копировать
static __s32 LCD_close_flow(__u32 sel)

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

Язык кода:javascript
копировать
static __s32 LCD_close_flow(__u32 sel)
{
	LCD_CLOSE_FUNC(sel, LCD_bl_close, 50);
	LCD_CLOSE_FUNC(sel, LCD_panel_exit, 10);
	LCD_CLOSE_FUNC(sel, LCD_power_off, 10);
	return 0;
}
  1. LCD_bl_close — отключить подсветку. После выключения подсветки вы можете заниматься другими делами и не повлияете на зрение пользователя.
  2. LCD_panel_exit — отправьте команду, позволяющую экрану выйти из рабочего состояния.
  3. Выключите питание и выполните сброс, чтобы полностью выключить экран.
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_power_on

Это первый шаг в процессе открытия экрана. Обычно в этой функции sunxi_lcd_gpio_set_value используется для управления GPIO, а функция sunxi_lcd_power_enable используется для включения питания.

См. последовательность включения питания в руководстве по экрану.

LCD_panel_init

Это второй шаг процесса открытия экрана. Обычно sunxi_lcd_cmd_write и sunxi_lcd_para_write используются для инициализации регистра экрана.

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

lcd_fb_black_screen

Необходим интерфейс, передающий на экран полностью черные данные, иначе при включении подсветки появится экран-снежинка.

LCD_bl_open

Это включение подсветки, фиксированный вызов.

  1. sunxi_lcd_backlight_enable, включите пин lcd_bl_en.
  2. sunxi_lcd_pwm_enable, включить ШИМ.
LCD_bl_close

Это отключает подсветку. Следующие две функции вызываются постоянно:

  1. sunxi_lcd_backlight_disable, lcd_bl_en выключен
  2. sunxi_lcd_pwm_disable, закрыть ШИМ.
LCD_power_off

Это последний шаг в процессе отключения экрана. Обычно в этой функции sunxi_lcd_gpio_set_value используется для управления GPIO, а функция sunxi_lcd_power_enable используется для включения питания.

См. последовательность выключения питания в руководстве по экрану.

sunxi_lcd_delay_ms

функция:sunxi_lcd_delay_ms/sunxi_lcd_delay_us

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

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

sunxi_lcd_backlight_enable

функция:sunxi_lcd_backlight_enable/ sunxi_lcd_backlight_disable

Функция: включение/выключение подсветки, операция 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_enable / sunxi_lcd_pwm_disable

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

прототип:

  • s32 sunxi_lcd_pwm_enable(u32 screen_id);
  • s32 sunxi_lcd_pwm_disable(u32 screen_id);
sunxi_lcd_power_enable

функция:sunxi_lcd_power_enable / sunxi_lcd_power_disable

Функция: включение/выключение питания ЖК-дисплея,действоватьизда Уровень совета Конфигурациядокументвlcd_power/lcd_power1/lcd_power2。(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: соответствует файлу конфигурации вlcd_power.
  2. pwr_id = 1: соответствует файлу конфигурации вlcd_power1.
  3. pwr_id = 2: соответствует файлу конфигурации вlcd_power2.
  4. pwr_id = 3: соответствует файлу конфигурации vlcd_power3.
sunxi_lcd_cmd_write

функция:sunxi_lcd_cmd_write

Функция: используйте spi/dbi для отправки команд.

прототип:s32 sunxi_lcd_cmd_write(u32 screen_id, u8 cmd);

sunxi_lcd_para_write

функция:sunxi_lcd_para_write

Функция: используйте spi/dbi для отправки параметров.

прототип:s32 sunxi_lcd_para_write(u32 screen_id, u8 para);

sunxi_lcd_gpio_set_value

функция: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.
  • io_index = 1: соответствует файлу конфигурации в lcd_gpio_1.
  • io_index = 2: соответствует файлу конфигурации в lcd_gpio_2.
  • io_index = 3: соответствует файлу конфигурации в lcd_gpio_3.
  • значение = 0: соответствует низкому уровню выхода ввода-вывода.
  • Значение = 1: соответствует высокому уровню выхода ввода-вывода.

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

sunxi_lcd_gpio_set_direction

функция: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.
  • io_index = 1: соответствует файлу конфигурации в lcd_gpio_1.
  • io_index = 2: соответствует файлу конфигурации в lcd_gpio_2.
  • io_index = 3: соответствует файлу конфигурации в lcd_gpio_3.
  • направление = 0: соответствует настройке ввода-вывода для входа.
  • direction = 1: соответствует настройке ввода-вывода для вывода.

Тестовые примеры модулей

Язык кода:javascript
копировать
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <unistd.h>

#include <hal_cache.h>
#include <hal_mem.h>
#include <hal_log.h>
#include <hal_cmd.h>
#include <hal_lcd_fb.h>

static uint32_t width;
static uint32_t height;
static long int screensize = 0;
static char *fbsmem_start = 0;

static void lcdfb_fb_init(uint32_t yoffset, struct fb_info *p_info)
{
    p_info->screen_base = fbsmem_start;
    p_info->var.xres = width;
    p_info->var.yres = height;
    p_info->var.xoffset = 0;
    p_info->var.yoffset = yoffset;
}

int show_rgb(unsigned int sel)
{
    int i = 0, ret = -1;
    struct fb_info fb_info;
    int bpp = 4;
    unsigned char color[4] = {0xff,0x0,0xff,0x0};

    width = bsp_disp_get_screen_width(sel);
    height = bsp_disp_get_screen_height(sel);

    screensize = width * bpp * height;
    fbsmem_start = hal_malloc_coherent(screensize);

    hal_log_info("width = %d, height = %d, screensize = %d, fbsmem_start = %x\n",
            width, height, screensize, fbsmem_start);

    memset(fbsmem_start, 0, screensize);
    for (i = 0; i < screensize / bpp; ++i) {
        memcpy(fbsmem_start+i*bpp, color, bpp);
    }

    memset(&fb_info, 0, sizeof(struct fb_info));
    lcdfb_fb_init(0, &fb_info);
    hal_dcache_clean((unsigned long)fbsmem_start, screensize);
    bsp_disp_lcd_set_layer(sel, &fb_info);

    hal_free_coherent(fbsmem_start);
    return ret;
}

static int cmd_test_spilcd(int argc, char **argv)
{
    uint8_t ret;

    hal_log_info("Run spilcd hal layer test case\n");

    ret = show_rgb(0);

    hal_log_info("spilcd test finish\n");

    return ret;
}

FINSH_FUNCTION_EXPORT_CMD(cmd_test_spilcd, test_spilcd, spilcd hal APIs tests)

Тестовая команда:

Язык кода:javascript
копировать
test_spilcd

Результаты испытаний:

Язык кода:javascript
копировать
1. Если ЖК-дисплей имеет формат пикселей ARGB8888, после выполнения команды отобразится фиолетовая рамка.
2. Если ЖК-дисплей имеет формат пикселей RGB565, после выполнения команды (SPI Соглашение имеет желтую картинку (без РБ). Swap))

FAQ

Как определить, прошла ли инициализация экрана успешно

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

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

Обычно конфигурация источника питания или ШИМ настроена неправильно. Обратитесь к соответствующей конфигурации в начале lcd_pwm.

Изображение отправлено, но не отображается

Действия по устранению неполадок:

  1. Выполнить первымspilcdмодультестовая командаtest_spilcd,если сможешь Нормальный Цветной экран загорается, что указывает на то, что канал отображения работает нормально, но приложению не удалось правильно отправить изображение через интерфейс. Если тестовый пример не может быть выполнен Нормальный цветной экран, выполните следующие действия.
  2. В драйвере экрана,существоватьLCD_open_flowсерединаудалитьlcd_fb_black_screenиззарегистрироваться,После запуска,Если инициализация экрана прошла успешно, он должен находиться в размытом состоянии (это относится к большинству экранов).
  3. Если экран не инициализируется успешно, проверьте питание экрана и состояние контакта сброса.
  4. Если инициализация экрана прошла успешно,Но его нельзя отобразить при отправке данных,Итак, мне нужно задуматься, не слишком ли высокая частота кадров?,проверятьсмотреть Контроль частоты кадров。
  5. Если источник питания Сброс PIN-коданормальный,пожалуйстаисследовать Конфигурация,lcd_dbi_if, Правильный ли lcd_dbi_fmt и поддерживает ли его экран? Если поддерживается, есть ли в драйвере экрана соответствующее?
  6. Попробуйте изменить lcd_dbi_clk_mode.
заставка

Вполне возможно, что скорость слишком высокая, см. раздел «Контроль частоты кадров».

Смещение экрана

По мере отправки данных изображение становится все больше и больше.

Попробуйте изменить lcd_dbi_clk_mode.

белый экран

экран белый, но подсветка включена

Вставьте сюда описание изображения
Вставьте сюда описание изображения

Белый экран вызван тем, что экран не был инициализирован. Необходимо проверить правильность последовательности инициализации экрана или данных инициализации.

Размытие экрана

Размытие экрана, неуправляемое

Вставьте сюда описание изображения
Вставьте сюда описание изображения

Huaping обычно вызван неправильной настройкой экрана после инициализации. addrwin,или Ошибка последовательности инициализации.

Цвета экрана LVGL неправильные

Появляется обратный цвет, цвет ненормальный

Вставьте сюда описание изображения
Вставьте сюда описание изображения

Пожалуйста, настройте LVGL LV_COLOR_DEPTH Параметры 16,LV_COLOR_16_SWAP для 1. Это вызвано SPI LCD определяется его характеристиками.

Вставьте сюда описание изображения
Вставьте сюда описание изображения
Показать обратный цвет

бегать test_spilcd , экран станет синим.

Это связано с активацией экрана RB СВОП, обычно 0x36 Зарегистрировать модификацию

Нормальный дисплей

Язык кода:javascript
копировать
sunxi_lcd_cmd_write(sel, 0X36);
sunxi_lcd_para_write(sel, 0x00);

Отображение в обратном цвете

Язык кода:javascript
копировать
sunxi_lcd_cmd_write(sel, 0X36);
sunxi_lcd_para_write(sel, 0x08);
Превышение размера DMA отображается в LVGL
Вставьте сюда описание изображения
Вставьте сюда описание изображения

Это связано с LVGL настроен LV_COLOR_DEPTH для 32, но SPI Конфигурация экрана для 16 бит. Пожалуйста, измените lv_conf.h

Вставьте сюда описание изображения
Вставьте сюда описание изображения
Появляется часть экрана
Вставьте сюда описание изображения
Вставьте сюда описание изображения
  • исследовать address Функция правильная?
  • исследовать sys_config.fex Разрешение экрана правильное?

Подвести итог

Отладка ЖК-дисплея на самом деле представляет собой процесс отладки микросхемы передатчика (Allwinner SOC) и микросхемы приемника (ИС драйвера на ЖК-экране):

  1. Чтобы добавить драйвер экрана, см. «Написание». драйвера экрана
  2. Внимательно прочтите руководство по эксплуатации экрана и руководство по микросхеме драйвера (если таковое имеется).
  3. Внимательно прочитайте подробное объяснение параметров отображения на уровне платы.
  4. Убедитесь, что все контакты питания, необходимые для ЖК-дисплея, исправны.
Проблемы, связанные с цветом SPI LCD

Прежде всего, необходимо сначала определить, использует ли дисплей интерфейс SPI или интерфейс DBI. Различные интерфейсы имеют разные способы анализа входных данных.

Полное имя интерфейса DBI: Display Bus Serial Interface , в паспорте дисплея середина обычно указано, что это SPI-интерфейс, поэтому некоторые люди могут ошибочно подумать, что для SPI-экрана можно использовать normal spi Перейти на прямой привод.

читатьlcd_dbi_ifчастьиз Введение может знать,В 3-проводном режиме,Перед отправкой команды имеется 1 бит A0, указывающий, что текущая отправка представляет собой данные.,Еще заказ. А данные, следующие за командой, не имеют бита А0.,Указывает, что SPI необходимо переключаться между 9-битным и 8-битным режимами.,И при чтении данных,Требуется еще большая задержка dummy clock читать данные,normal spi Все это трудно или даже невозможно достичь. так normal spi Можно моделировать только 4 Операции записи строки DBI.

Для процессоров, таких как R128, которые поддерживают интерфейсы DBI, вы можете не понимать SPI. Если вам нужно использовать SPI для управления дисплеем, вы должны установить для дисплея прямой порядок байтов.

RGB565 и RGB666

Дисплеи SPI обычно поддерживают RGB444, RGB565. и RGB666, RGB444использовать сравнительно редко, поэтому мы обсуждаем только RGB565. и RGB666.

RGB565 представляет цвет точки, состоящей из 2 байтов, то есть R (красный) представлен 5 битами, G (зеленый) представлен 6 битами, а B (синий) представлен 5 битами, как показано на рисунке. следующий рисунок:

Вставьте сюда описание изображения
Вставьте сюда описание изображения

Цвет точки в RGB666 состоит из 3 байтов, каждый байт представляет цвет, а младшие 2 бита каждого байта игнорируются, как показано на следующем рисунке:

Вставьте сюда описание изображения
Вставьте сюда описание изображения
SPI-интерфейс

Потому что эффективность связи дляSPIинтерфейса невысока.,Поэтому рекомендуется использовать дисплей RGB565из,к jlt35031c Экран дисплея для примера, он же издрайвер чип чипа ST7789,настраиватьпоказывать Форматиз Путь в том, чтобы 3a зарегистрироватьсяписать0x55(RGB565)или 0x66(RGB666),существовать R128SDK в, уже jlt35031c из Формат связи жестко запрограммирован для 0x55,lcd_pixel_fmtКонфигурация Неверный вариант:

Язык кода:javascript
копировать
sunxi_lcd_cmd_write(sel, 0x3a);
sunxi_lcd_para_write(sel, 0x55);

В программе входные данные 0xff,0x00,0xff,0x00,дляSPIинтерфейс,Он отправляется байтами. на самом деле,Подпрограмме необходимо каждый раз отправлять только 2 байта.,потому чтодля Отправить вперед и впередизвсе равноизff 00, поэтому проблем не наблюдается.

В соответствии с 565 Для анализа данных мы разделили ff 00 Вы можете получить красный компонент как 0b11111,То есть 31,зеленый это0b111000,То есть 56,,синий это 0.Мы эквивалентно преобразуем в RGB888,иметь:

Язык кода:javascript
копировать
R = 31/31*255 = 255
G = 56/63*255 = 226

Введите соответствующий цвет в палитру, чтобы получить желтый

Вставьте сюда описание изображения
Вставьте сюда описание изображения
интерфейс ДБИ

потому чтодля DBI Эффективность связи высока, поэтому ее можно использовать RGB565 или RGB666,использовать DBI интерфейс, то есть lcd_if настраиватьдля1час,Водитель будет lcd_pixel_fmt регистр конфигурации в SDK в kld2844b.c например, это дисплей издрайвера дисплея也да ST7789,Но другой экран,Производитель ограничил способы связи при упаковке.,Таким образом, даже экран может использовать чип драйвера интерфейса ДБИиз.,Возможно, DBI нельзя использовать.

Язык кода:javascript
копировать
sunxi_lcd_cmd_write(sel, 0x3A); /* Interface Pixel Format */
/* 55----RGB565;66---RGB666 */
if (info[sel].lcd_pixel_fmt == LCDFB_FORMAT_RGB_565 ||
	info[sel].lcd_pixel_fmt == LCDFB_FORMAT_BGR_565) {
	sunxi_lcd_para_write(sel, 0x55);
	if (info[sel].lcd_pixel_fmt == LCDFB_FORMAT_RGB_565)
		rotate &= 0xf7;
	else
		rotate |= 0x08;
} else if (info[sel].lcd_pixel_fmt < LCDFB_FORMAT_RGB_888) {
	sunxi_lcd_para_write(sel, 0x66);
	if (info[sel].lcd_pixel_fmt == LCDFB_FORMAT_BGRA_8888 ||
		info[sel].lcd_pixel_fmt == LCDFB_FORMAT_BGRX_8888 ||
		info[sel].lcd_pixel_fmt == LCDFB_FORMAT_ABGR_8888 ||
		info[sel].lcd_pixel_fmt == LCDFB_FORMAT_XBGR_8888) {
		rotate |= 0x08;
	}
} else {
	sunxi_lcd_para_write(sel, 0x66);
}

для DBI Формат,Он больше не анализируется в виде байтов.,Вместо этого он анализируется с использованием метода «характер из».,для унифицированного,В программном обеспечении указано,RGB565 формат, размер слова составляет 2 байта, что составляет 16 бит, и RGB666 формате размер слова составляет 4 байта, что составляет 32 бита.

для RGB565 Формат, также установлен для 0xff,0x00。потому чтодля Экран с прямым порядком байтов,Метод хранения чипов имеет прямой порядок байтов.,Местокчипиз DBI модуль автоматически переставит данные, то есть фактически DBI Отправить данныечас,будет отправлен первым0x00,Отправить еще раз0xff,То есть красная компонента для0,зеленый компонентдля 0b000111,это 7,Синий компонент 0x11111,это 31,Мы также конвертируем в RGB888.

Язык кода:javascript
копировать
G = 7/63*255 = 28
B= 31/31*255 = 255

Войдите в палитру, чтобы получить синий цвет.

в случае RGB666,Хотя он занимает 3 байта,Но ни один процессор не выравнивается по 3 байтам.,Значит нужно ввести сразу 4 байта,Затем DBI Аппаратный модуль автоматически отбрасывает 1 байт, а программное обеспечение соглашается отбросить последний байт.

Продолжая использовать процедуру для в качестве примера, процедура вводится 0xff,0x00,0xff,0x00,для пояснения для удобства,Стандарт для 0xff(1),0x00(1),0xff(2),0x00(2),Чтосередина 0x00(2)будет отброшено,Затем发送顺последовательностьда0xff(2),0x00(1),0xff(1),То есть 0xff(2) это красный компонент,0xff(1) Это синий компонент, смешанный для получения фиолетового цвета.

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