реклама на сайте
подробности

 
 
6 страниц V  « < 2 3 4 5 6 >  
Reply to this topicStart new topic
> DMA2D в stm32f4хх, реально такой убогий, или я что-то не понимаю?
Шаманъ
сообщение Nov 3 2015, 12:44
Сообщение #46


Знающий
****

Группа: Участник
Сообщений: 600
Регистрация: 27-08-08
Пользователь №: 39 839



Цитата(Genadi Zawidowski @ Nov 3 2015, 11:14) *
Вопрос - DMA2D работает ли с flash памятью?

Да.

Цитата(SasaVitebsk @ Nov 3 2015, 11:49) *
А зачем ему работать с индексированным цветом, если с ним работает сам LCD контроллер? Ему просто надо копировать любые байтовые форматы. Насколько я понимаю.

Просто копировать это слишком просто wink.gif, но даже в этом случае копировать побайтно он не сможет - только по 16бит. Нормальное функционирование DMA2D возможно только при 16битном и выше цвете на выходе.

Чтобы Вы понимали, я сейчас "сделал наброски" и DMA2D по всему сможет делать все по части графики - начиная от заливки прямоугольника и заканчивая выводом текста, картинок и даже некоторой специфической для моего проекта графики sm.gif - согласитесь немного больше "просто копирования". Цена этого, как я уже писал бОльшие затраты памяти (хотя и возможности при этом получаются побольше). Осталось сделать плату и проверить все это rolleyes.gif
Go to the top of the page
 
+Quote Post
Шаманъ
сообщение Feb 5 2017, 12:42
Сообщение #47


Знающий
****

Группа: Участник
Сообщений: 600
Регистрация: 27-08-08
Пользователь №: 39 839



Цитата(Шаманъ @ Nov 3 2015, 15:44) *
Осталось сделать плату и проверить все это rolleyes.gif

Сделал, проверил. Запросы правда за это время немного "подросли" - проц. stm32f746, 8М SDRAM и 800х480хRGB565 TFT.

В общем нормально DMA2D работает.

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

Да, может кому будет интересно - рисование битмапа 534х137 с преобразованием из L8 в RGB565 занимает:
1. Через DMA2D для простого рисования 1.29мс (если пересчитать на весь экран, то выходит 150fps однако)
2. Через DMA2D для наложения с прозрачностью
3. Через CPU с выключенным кэшем 12.8мс
4. Через CPU с включенным кэшем 4.2мс
Это для рисования прямо в видеобуфер, параллельно вычитываемый через LTDC, частоте CPU 180МГц, памяти 90МГц, картинка во флеше.

Также потестил как поменяется скорость для 1го варианта (см. выше) если картинка лежит не в флеше:
1. Для картинки в SRAM1 скорость такая же как из флеша - 1.29ms.
2. Для картинки в том же банке SDRAM - 5.03мс
3. Для картинки в другом банке SDRAM - 4.10мс

Да, на последовательной записи CPU=>SDRAM получается 54Mtps, рандомные чтение/запись 5.6Mtps, в разных банках 6.6Mtps. Это без кэша данных и с работающим LTDC.

Можно сказать я почти доволен sm.gif Огорчили китайцы - панель должна была быть с бОльшим углом обзора снизу, поэтому я ее предусмотрительно перевернул, а оказалось, что у нее лучшие углы обзора сверху laughing.gif ... надо будет поискать какую-нить панель с более "правильными" углами обзора.
Go to the top of the page
 
+Quote Post
Aner
сообщение Feb 5 2017, 13:27
Сообщение #48


Гуру
******

Группа: Свой
Сообщений: 4 361
Регистрация: 28-02-08
Из: СПБ
Пользователь №: 35 463



Что за панель? Какой интерфейс у неё? И есть ли емкостной мультитач, хотябы на пять?
Go to the top of the page
 
+Quote Post
Мусатов Констант...
сообщение Feb 5 2017, 20:04
Сообщение #49


Частый гость
**

Группа: Участник
Сообщений: 186
Регистрация: 10-10-06
Пользователь №: 21 172



Цитата(Шаманъ @ Feb 5 2017, 15:42) *
Если бы добавили третий канал с фоном (сплошной заливкой) то некоторые вещи было бы намного удобнее делать.


Так там есть регистр - цвет бэкграунда. Если у нижнего слоя режим с альфой, то тот бэкграунд просвечивает.
Сам пользуюсь блендированием из двух экранов с индексированными цветами в один RGB565. На двух экранах.
Выяснил проблемы с FMC, на котором у меня висит 16 битная SRAM. При байтной записи часто ошибается. Приходится и блендирование и операции кодом выравнивать до 16 битных.
Go to the top of the page
 
+Quote Post
Шаманъ
сообщение Feb 5 2017, 20:39
Сообщение #50


Знающий
****

Группа: Участник
Сообщений: 600
Регистрация: 27-08-08
Пользователь №: 39 839



Цитата(Aner @ Feb 5 2017, 16:27) *
Что за панель?

AT070TN92
Цитата
Какой интерфейс у неё?

RGB
Цитата
И есть ли емкостной мультитач, хотябы на пять?

Сама она голая, но у меня есть тачскрин к ней (емкостной) и я сваял контроллер для него на stm32f103. Мне достаточно 2х касаний, в принципе можно и больше сделать. Пять для такой маленькой панели наверное уже перебор.

Цитата(Мусатов Константин @ Feb 5 2017, 23:04) *
Так там есть регистр - цвет бэкграунда. Если у нижнего слоя режим с альфой, то тот бэкграунд просвечивает.

Это в LTDC, а в DMA2D такого нет, а было бы хорошо, если бы был - я про это.

В DMA2D просвечивает только при комбинировании двух слоев, один из которых сплошной фон.
Go to the top of the page
 
+Quote Post
Мусатов Констант...
сообщение Feb 5 2017, 22:35
Сообщение #51


Частый гость
**

Группа: Участник
Сообщений: 186
Регистрация: 10-10-06
Пользователь №: 21 172



Цитата(Шаманъ @ Feb 5 2017, 23:39) *
В DMA2D просвечивает только при комбинировании двух слоев, один из которых сплошной фон.

По описанию да.
У меня реально регистр DMA2D_BGCOLR просвечивает не только в режиме А4 и А8, как в документации, но и в АL44 на fore и back. Возможно это баг и надеяться на это не стоит. Мне это не надо было и я некоторое время потратил на поиски паразитных цветов, а оказалось, что регистр был не черный.
Go to the top of the page
 
+Quote Post
Шаманъ
сообщение Feb 6 2017, 04:48
Сообщение #52


Знающий
****

Группа: Участник
Сообщений: 600
Регистрация: 27-08-08
Пользователь №: 39 839



Цитата(Мусатов Константин @ Feb 6 2017, 01:35) *
По описанию да.
У меня реально регистр DMA2D_BGCOLR просвечивает не только в режиме А4 и А8, как в документации, но и в АL44 на fore и back.

Когда экспериментировал, то с RGB565 форматом в background слое DMA2D_BGCOLR у меня не просвечивал. За информацию по AL44 спасибо sm.gif
Go to the top of the page
 
+Quote Post
Шаманъ
сообщение Mar 1 2017, 13:39
Сообщение #53


Знающий
****

Группа: Участник
Сообщений: 600
Регистрация: 27-08-08
Пользователь №: 39 839



Интересно, рисование через DMA2D занимает не намного больше времени, чем копирование нарисованного участка. Например, рисование 10мс, копирование 13мс, или рисование 3мс, копирование 2.3мс. В итоге получилось, что зачастую проще (а иногда и быстрее) тупо перерисовывать все каждый раз, чем поделить на участки и сохранять промежуточные результаты в разных буферах, чтобы не рисовать одно и то же.

И все же DMA2D весьма крут! Признаю, что был не прав, называя его "убогим" в начале темы rolleyes.gif (хотя некоторые простые модификации/дополнения были бы ну очень полезны). Опробовал более-менее реальный вывод достаточно динамичного интерфейса - спектр/водопад на 800х330точек, поверх него полупрозрачная сетка со шкалами + остальной интерфейс рядом 800х150 (фон с анимацией+два слоя поверх) + поверх всего этого небольшие (60х480) анимированные части интерфейса с альфа каналом в независимых буферах в форматах ARGB8888 и L8. TFT работает с частотой кадров 29к/с, процессор 216МГц, память соответственно 108МГц. В начале экспериментов немного разочаровался, ибо FPS прорисовки выше 10..14 не подымался, но потом "углубился в проблему" в итоге после "борьбы за FPS" имею рисование варианта интерфейса со спектром за 19.6мс (~51fps), загрузка процессора при 29к/с 25..26%, то же с водопадом рисуется за 17мс (~58fps), загрузка процессора при 29к/с 4.5%. Я немного удивлен цифрами более 50fps 08.gif

Получив такие цифры захотелось большего (не в плане FPS, а нарисовать больше, сохранив FPS прорисовки анимированных областей экрана выше частоты обновления ТФТ - 29к/с). Скорее всего придется рисовать в двух разноприоритетных потоках, можно конечно забить на незначительные "визуальные эффекты", но я не люблю компромиссы sm.gif.

В этом вопросе мог бы помочь второй слой LTDC, но увы ему полосы памяти на больших экранах маловато. В итоге в два слоя он при частоте обовления ТФТ больше чем 22к/с (один слой RGB565 второй ARGB4444) у меня не пошел, и то даже при такой низкой скорости иногда глюк проскакивают.

Go to the top of the page
 
+Quote Post
Hold
сообщение Apr 21 2017, 10:12
Сообщение #54





Группа: Участник
Сообщений: 8
Регистрация: 27-01-17
Пользователь №: 95 184



Вопросы к знаюшим людям, может что доброе подскажут:
- Плата 4-х слойка
- STM32F429BIT6 180 Мгц
- SDRAM MT48LC16M16A2 (16 бит шина данных)
- экран 800x480 AT070TN9x(4)(подключение 24бит) , драйвер питания TPS65150
- Питание 3.3, 3А, ST1S14



SDRAM включена на 90 Мгц (проверяли до 105 Мгц), проблем с чтением/записью или долговременным хранением нет, тайминги по ДЩ.
Был написан тестовый драйвер на LTDC, проверили вывод из SDRAM, никаких проблем не было. Частота клока на экран 33.3 МГц, согласно ДШ на экран.
Подключили STemWin, драйвер взяли готовый (использует ARGB), подправили инициализацию и тайминги LTDC, демка запустилась, но с косяками. Начали разбираться, убрали GUI, решили позаполнять экран на максимальной скорости в главном цикле. И тут вылезли проблемы.
Простейший код рисования прямоугольников синим цветом в режиме ARGB8888:
Код
      for (uint32_t i = 0; i < 800*480; i++)
      {
         for (uint32_t y = 0; y < i%480 +1; y++)
         {
            for (uint32_t x = 0; x < i/480 +1; x++)
            {
               LTDC_Lay1_Ram[(y*LCD_HS_SIZE + x)*LCD_BPP] = 0xFF;
               LTDC_Lay1_Ram[(y*LCD_HS_SIZE + x)*LCD_BPP + 1] = 0x00;
               LTDC_Lay1_Ram[(y*LCD_HS_SIZE + x)*LCD_BPP + 2] = 0x00;
               LTDC_Lay1_Ram[(y*LCD_HS_SIZE + x)*LCD_BPP + 3] = 0xFF;
            }
         }
      }


В итоге на экране во время рисования цветная каша. Но стоит остановить проц в дебаге, как на экране нужный прямоугольник без всякого шума. Сделали вывод, что проц и LTDC постоянно соревнуются за SDRAM, т.к. шина все же одна, и совместного доступа один фиг не получится. Проверили заполнение через DMA2D - ровно такая же картина. Уменьшили частоту клока до 23 мгц - экран стал отрисовываться без мусора. Поставил режим RGB888, т.е. на 1 байт на пиксель меньше, т.е. LTDC надо выводить ровно на 25% меньше данных. Увеличил частоту до 30.5 Мгц (больше на 25%) - выводится без проблем. Увеличиваем до 31 - опять мусор. Дабы убедиться, сделали второй буфер в другом банке SDRAM, и во время вывода статичного буфера на LTDC писали во второй буфер. В итоге опять мусор, хотя видеобуфер никто не трогал и не менял. Сейчас есть идея воткнуть SDRAM с шиной данных 32бит (либо две по 16 ), что даст теоретический прирост скорости обмена в 2 раза, но быть может я упускаю что-то совсем простое? Может все же SDRAM криво работает, но тогда бы терялись данные, а тут несколько иная картина. Увеличивал тактовую до 210 Мгц, не меняя клок на экран - проблемы уходили, пока не повысить клок на процент увеличения частоты проца.

Сообщение отредактировал Hold - Apr 21 2017, 10:13
Go to the top of the page
 
+Quote Post
Шаманъ
сообщение Apr 21 2017, 10:26
Сообщение #55


Знающий
****

Группа: Участник
Сообщений: 600
Регистрация: 27-08-08
Пользователь №: 39 839



Цитата(Hold @ Apr 21 2017, 13:12) *
В итоге опять мусор, хотя видеобуфер никто не трогал и не менял.

Не хватает полосы памяти. Прикиньте сами - ARGB8888 это 132МБ/сек

Цитата
Сейчас есть идея воткнуть SDRAM с шиной данных 32бит (либо две по 16 ), что даст теоретический прирост скорости обмена в 2 раза, но быть может я упускаю что-то совсем простое?

ИМХО, ничего Вы особенно не упускаете. Есть некоторые приемы работы с SDRAM, которые позволяют поднять производительность по максимуму, но в целом для таких разрешений полосы памяти недостаточно (плюс арбитр шины по всему не без проблем для такого применения). Могу посоветовать перейти на RGB565, тем более Ваш экран 24битный цвет скорее всего не поддерживает.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Apr 21 2017, 10:58
Сообщение #56


Гуру
******

Группа: Свой
Сообщений: 2 704
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(Шаманъ @ Apr 21 2017, 13:26) *
Могу посоветовать перейти на RGB565,

Сразу 2 зайца. И объём вдвое уменьшится и и выборка точки за раз будет осуществлятся. )
Цитата
тем более Ваш экран 24битный цвет скорее всего не поддерживает.

Ну скорее не "не поддерживает", а "реально не отображает"... )
Go to the top of the page
 
+Quote Post
Шаманъ
сообщение Apr 21 2017, 11:05
Сообщение #57


Знающий
****

Группа: Участник
Сообщений: 600
Регистрация: 27-08-08
Пользователь №: 39 839



Цитата(SasaVitebsk @ Apr 21 2017, 13:58) *
Ну скорее не "не поддерживает", а "реально не отображает"... )

Главное, что меня поняли sm.gif
Go to the top of the page
 
+Quote Post
Hold
сообщение Apr 21 2017, 11:42
Сообщение #58





Группа: Участник
Сообщений: 8
Регистрация: 27-01-17
Пользователь №: 95 184



Да, сейчас уже думаю перейти на RGB565, т.е. надо всего 2 байта на пиксель. Но надо тогда переделывать аппаратную часть, т.к. при подключении экрана по RGB565, согласно ДШ:
Цитата
As an example, in
the case of an LCD-TFT controller interfacing with a RGB565 16-bit display, the LCD display
R[4:0], G[5:0] and B[4:0] data lines pins must be connected to LCD-TFT controller
LCD_R[7:3], LCD_G[7:2] and LCD_B[7:3].

Т.е. Младшие пины экрана подключаются к старшим LTDC.
В режиме ARGB8888, на один пиксель получается 4 байта, т.е. SDRAM, при шине 16 бит должна успеть за 1 клок экрана сделать 2 чтения памяти. А т.к. чтение SDRAM еще и со своими задержками, то выходит что SDRAM должна отдавать данные с частотой в 2 с лишним раза больше чем частота клока. У нас при 33.3 мгц, SDRAM должна работать порядка 70 Мгц. А при общем клоке 90 мгц от канала, получается, ничего толком и не остается.
В чем же смысл тогда включеня по такой "жирной" шине, если SDRAM только и делает что отдает буфер LTDC? Не все экраны умеют работать на пониженных частотах, хотя например мелкий AT050TN33 480х272 работает на 9 Мгц всего. Смысл тогда от LTDC с максимальным разрешением 1024х768, если при режиме ARGB8888 ему даже не хватит канала SDRAM? В основном в TFT все тайминги написаны с учетом частоты перерисовки 60 гц, при экране 1024х768 в режиме ARGB8888 потребуется скармливать LTDC по 180 МБ/с, откуда взять такую пропускную у SDRAM 16 бит? Можно поставить 32 бит, но и то не уверен что STM протащит такой обмен, учитывая задержки SDRAM. Ведь есть и другие процессы, которые будут претендовать на SDRAM в процессе работы, любой их чих будет срывать отрисовку на ЖК. Смущает то, что драйвер для STemWin взяли от платы с экраном 640х480 и памятью 32 бит. И судя по всему, там это работало без проблем, т.е. пропускной способности хватало, на экран уходило около 70МБ/с. Переразведем плату на RGB565, поставим две памяти 16 бит на 32-бит шину.
Go to the top of the page
 
+Quote Post
Шаманъ
сообщение Apr 21 2017, 12:52
Сообщение #59


Знающий
****

Группа: Участник
Сообщений: 600
Регистрация: 27-08-08
Пользователь №: 39 839



Цитата(Hold @ Apr 21 2017, 14:42) *
Но надо тогда переделывать аппаратную часть, т.к. при подключении экрана по RGB565, согласно ДШ:Т.е. Младшие пины экрана подключаются к старшим LTDC.

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

Цитата
В режиме ARGB8888, на один пиксель получается 4 байта, т.е. SDRAM, при шине 16 бит должна успеть за 1 клок экрана сделать 2 чтения памяти. А т.к. чтение SDRAM еще и со своими задержками, то выходит что SDRAM должна отдавать данные с частотой в 2 с лишним раза больше чем частота клока. У нас при 33.3 мгц, SDRAM должна работать порядка 70 Мгц. А при общем клоке 90 мгц от канала, получается, ничего толком и не остается.

Ну где-то так... В некоторых случаях и похуже может выйти sm.gif

Цитата
В чем же смысл тогда включеня по такой "жирной" шине, если SDRAM только и делает что отдает буфер LTDC? Не все экраны умеют работать на пониженных частотах, хотя например мелкий AT050TN33 480х272 работает на 9 Мгц всего.

Открою секрет AT070TN92 (или TN90, не помню точно) тоже умеет работать при 8МГц sm.gif

Цитата
Смысл тогда от LTDC с максимальным разрешением 1024х768, если при режиме ARGB8888 ему даже не хватит канала SDRAM?

Может кому 1024х768, но L4 достаточно, а другому 320х240, но ARGB8888 и в два слоя sm.gif

ARGB8888 бывает очень полезен в DMA2D операциях в качестве промежуточного буфера. А вообще DMA2D весьма шустр - у меня успевает прорисовывать весь кадр (800х480хRGB565) с довольно сложной графикой за 10..15мс (при одновременной работе LTDC с частотой 29к/с). Самое интересное, что загрузка процессора при этом от 4 до 35% в зависимости от кадра.
Go to the top of the page
 
+Quote Post
Hold
сообщение Apr 21 2017, 14:53
Сообщение #60





Группа: Участник
Сообщений: 8
Регистрация: 27-01-17
Пользователь №: 95 184



Завтра попробую rgb565, неиспользуемые биты через gpio на землю кину. Поведайде секрет работы от 8 мгц, ведь даже не учитывая front porch и back porch,экран 800х480 на 8 мгц клока будет работать на 20 Гц всего... У себя ставил 20мгц клок, экран белеть начинал. AT070TN9x по таймингам все одинаковы, отличия лишь в наличии подсветки, яркости и углах обзора. По поводу слоев - у вас ltdc настроен на rgb565. Есть промежуточный буфер argb8888, в котором вы собираете кадр из разных виджетов, графиков и прочего с помощью dma2d или как то еще. А потом весь кадр копируете через dma2d в видео буфер с конвертацией в rgb565?
Go to the top of the page
 
+Quote Post

6 страниц V  « < 2 3 4 5 6 >
Reply to this topicStart new topic
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th April 2017 - 16:52
Рейтинг@Mail.ru


Страница сгенерированна за 0.0149 секунд с 7
ELECTRONIX ©2004-2016