Перейти к содержанию

Формат пикселя

Один и тот же дисплей 240 × 320 принимает кадр в 115, 153 или 230 Кбайт — в зависимости от того, сколько бит отведено на цвет точки. Формат пикселя определяет и число цветов, и объём памяти под кадр, и сколько кадров в секунду пролезет через SPI.

Обновлено Редакция GAW

Формат пикселя (pixel format, глубина цвета) — способ записать цвет одной точки: сколько бит отведено на красную, зелёную и синюю составляющие и как эти биты разложены по байтам. В цветных TFT-контроллерах формат выбирает команда 3Ah (COLMOD); контроллер дисплея хранит изображение в своей памяти в полной глубине и сам приводит к ней входные данные.

Распространённые форматы

ФорматБит R-G-BБит на точкуЦветовПараметр 3Ah у ST7789V
RGB4444-4-412409603h
RGB5655-6-51665 53605h
RGB6666-6-618262 14406h

Число цветов — 2 в степени числа бит; у Sitronix и Ilitek оно обозначено как 4K, 65K и 262K. У ILI9341 в поле DBI[2:0] команды 3Ah значение 101 означает 16 бит, 110 — 18 бит, после включения питания и аппаратного сброса параметр равен 66h (программный сброс его не меняет); поэтому в инициализации почти всегда стоит 3Ah, 55h. Подробнее о командах — на страницах ILI9341 и ST7789 и ST7735.

Как точка ложится в байты

  • RGB565 — ровно два байта: старшие биты Rx4, Gx5 и Bx4, зелёному отдан лишний бит. Упаковка: (R5 << 11) | (G6 << 5) | B5.
  • RGB666 по последовательному интерфейсу — три байта, в каждом шесть значащих старших бит и два неиспользуемых. Данных в 1,5 раза больше, чем в RGB565 (наш пересчёт: 3 байта против 2).
  • RGB444 — 12 бит, то есть полтора байта на точку (наш пересчёт): самый компактный цветной формат из трёх.

Внутренняя память ILI9341 хранит 18 бит на точку: 240 · 320 · 18 / 8 = 172 800 байт, как и указано в даташите. Шестнадцатибитный цвет контроллер расширяет до 18 бит по таблице, которую задаёт команда RGBSET (2Dh).

Формат, память и скорость

Размер кадра 240 × 320 — наш пересчёт: 153 600 байт в RGB565, 230 400 в RGB666 по SPI, 115 200 в RGB444. Такт записи ILI9341 по SPI — не меньше 100 нс, то есть до 10 МГц; полный кадр RGB565 занимает тогда 153 600 · 8 / 10 МГц ≈ 0,12 с, и выше примерно восьми кадров в секунду по SPI не подняться (наш пересчёт). Реальную частоту кадров поднимают обновлением только изменившейся области и передачей через DMA с двойным буфером, пока процессор готовит следующую полосу.

Формат пикселя не меняет кривую яркости: за неё отвечает гамма-коррекция. Монохромные OLED-контроллеры вроде SSD1306 устроены иначе: точка там либо светится, либо нет, и цветового формата у них нет.

Частые вопросы

Почему почти все выбирают RGB565, а не RGB666?

Из-за объёма данных. В RGB565 точка занимает ровно два байта, а RGB666 по SPI передаётся тремя байтами, из которых в каждом используются только шесть старших бит. Кадр 240 × 320 — это 153 600 байт против 230 400 (наш пересчёт): в RGB666 данных в 1,5 раза больше, и кадр в RGB565 передаётся в 1,5 раза быстрее при той же частоте SPI. Взамен теряется по одному младшему биту красного и синего: 65 536 цветов вместо 262 144.

Как упаковать цвет в RGB565?

Пять старших бит красного, шесть зелёного и пять синего: значение = (R5 << 11) | (G6 << 5) | B5. Из 8-битных составляющих это (r >> 3) << 11 | (g >> 2) << 5 | (b >> 3). Чистый красный — 0xF800, зелёный — 0x07E0, синий — 0x001F, белый — 0xFFFF (наш пересчёт). По SPI старший байт передают первым.

Сколько памяти нужно на кадровый буфер?

Ширина × высота × байт на точку. Для 240 × 320 в RGB565 — 153 600 байт, в RGB444 — 115 200, в RGB666 по три байта — 230 400 (наш пересчёт). Это больше всей ОЗУ многих микроконтроллеров, поэтому кадр рисуют полосами или пишут сразу в память кадра контроллера дисплея; у ILI9341 своя GRAM на 172 800 байт — 18 бит на точку.

Источники

  1. ILI Technology. ILI9341 a-Si TFT LCD Single Chip Driver 240RGBx320 Resolution and 262K color, Specification V1.11 (ILI9341_DS_V1.11) — разд. 2: 240 × RGB × 320, встроенная память кадра 172 800 байт, интерфейсы MCU 8/9/16/18 бит, RGB 6/16/18 бит, 3- и 4-проводной последовательный; 262K цветов в полноцветном режиме, 8 цветов в режиме Idle; разд. 7: GRAM 172 800 байт — 18 бит на точку для 240 × 320; разд. 8.2.23: RGBSET (2Dh) — таблица преобразования 16-битного цвета в 18-битный, 128 байт; разд. 8.2.33: COLMOD (3Ah) — DPI[2:0] для RGB-интерфейса и DBI[2:0] для MCU-интерфейса: 101 — 16 бит на точку, 110 — 18 бит; таблица значений по умолчанию: 66h после включения питания и аппаратного сброса, программный сброс поле не меняет; разд. 18.3.3: такт записи по последовательному интерфейсу tscycw не менее 100 нс
  2. Sitronix. ST7789V 240RGB x 320 dot 262K Color with Frame Memory Single-Chip TFT Controller/Driver, Version 1.3 (2014-03) — разд. 8.8: форматы записи — 12 бит на точку RGB 4-4-4, 4K цветов, 3Ah = 03h; 16 бит RGB 5-6-5, 65K цветов, 3Ah = 05h; 18 бит RGB 6-6-6, 262K цветов, 3Ah = 06h; разд. 8.8.38: в 16-битном формате старшие биты Rx4, Gx5, Bx4; разд. 8.8.39: при 18 битах по последовательному интерфейсу на точку уходят три байта, в каждом шесть значащих старших бит, два младших не используются

Нашли ошибку?