Настройка оборудования
- Raspberry Pi Zero 2W
- Круглый дисплей HyperPixel 2.0 (480x480)
- Debian Linux 11
- Python 3.9.2
< li>Pygame 2.6.1
Мой файл /boot/config.txt содержит HyperPixel 2.0 Настройки раунда:
Код: Выделить всё
dtoverlay=hyperpixel2r:disable-touch
enable_dpi_lcd=1
dpi_group=2
dpi_mode=87
dpi_output_format=0x7f216
dpi_timings=480 0 10 16 55 480 0 15 60 15 0 0 0 60 0 19200000 6
dtparam=i2c_arm=on
Я пишу непосредственно в фреймбуфер (/dev/fb0), используя Python. Приложение создает поверхность pygame для рисования, а затем записывает буфер непосредственно в устройство кадрового буфера. Вот ключевая реализация:
Код: Выделить всё
pygame.display.init()
screen = pygame.Surface((480, 480))
screen.fill((0, 0, 0))
pygame.draw.circle(screen, (255, 0, 0), (240, 247), 100)
buffer = screen.convert(16, 0).get_buffer()
with open('/dev/fb0', 'wb') as fb:
fb.write(buffer)
fb.flush()
os.fsync(fb.fileno())
При записи буфера на дисплей каждый круг отображается на экране дублированным. Дубликат выглядит смещенным относительно оригинала. Это происходит последовательно с любой формой или содержимым, записанным в фреймбуфер.
Предпринятые действия по устранению неполадок
- Проверен правильный размер фреймбуфера и разрядность
- Реализована явная очистка кадрового буфера перед записью
- Добавлена очистка буфера и вызовы fsync
- Подтверждены размеры поверхности соответствовать дисплею (480x480)
- Проверялись различные глубины цвета и форматы пикселей.
< ol>
[*]Каков правильный формат и расположение буфера для записи в кадровый буфер HyperPixel 2.0 Round?
[*]Существуют ли особые требования к выравниванию памяти для интерфейса DPI этого дисплея?< /li>
Требует ли круглый форм-фактор дисплея особого внимания при записи в фреймбуфер?
[*]Существуют ли задокументированные примеры правильного доступа к необработанному фреймбуферу для этого дисплея?
Информация об отладке
Текущий анализ кадрового буфера показывает:
Код: Выделить всё
Framebuffer size: 460800 bytes (480x480x16bpp)
Surface format: 16-bit RGB
No hardware acceleration available
Writing full buffer size on each update
Подробнее здесь: https://stackoverflow.com/questions/793 ... framebuffe