Mysteo 0 March 22 Posted March 22 · Report post Всем здравствуйте! Проблема следующего характера, не могу причитать данные с дисплея. Запись данных в дисплей работает. На максимальных частотах и на самых быстрых таймингах все отрабатывает идеально. Логического анализатора нету, но осциллограффом 4 канала просматривал сигналы: CS , DCX , WRX, RDX все идеально. Также смотрел что на DATA пинах происходит - там действительно ерунда либо 0x0000 либо 0x0FFFF все время. такое ощущение что дисплей на восходящий строб RDX совсем не реагирует. Кто-нибудь сталкивался с таким явлением ? Quote Share this post Link to post Share on other sites More sharing options...
jcxz 81 March 22 Posted March 22 · Report post 17 минут назад, Mysteo сказал: Кто-нибудь сталкивался с таким явлением ? Обычное дело. Ваш контроллер дисплея просто не поддерживает чтение. Quote Share this post Link to post Share on other sites More sharing options...
Mysteo 0 March 22 Posted March 22 · Report post On 3/22/2023 at 10:54 PM, jcxz said: Обычное дело. Ваш контроллер дисплея просто не поддерживает чтение. Спасибо! Первый раз с дисплеями сталкиваюсь. Три дня ломал голову, в чем может быть проблема. А для чего тогда в даташите на контроллер дисплея описывают эти функции ? Quote Share this post Link to post Share on other sites More sharing options...
Obam 13 March 22 Posted March 22 · Report post Надеюсь, ID получали 4-мя последовательными чтениями, а не одним единственным? А если под отладчиком, да вручную (без FMC, ногодрыгом) сформировать всю сигналограмму? И не спеша посмотреть, что на шине происходит. Quote Share this post Link to post Share on other sites More sharing options...
Mysteo 0 March 23 Posted March 23 · Report post On 3/23/2023 at 12:14 AM, Obam said: Надеюсь, ID получали 4-мя последовательными чтениями, а не одним единственным? Да , четырьмя последовательными и это касается не только ID. Пробовал и вручную ножками дергать - тоже самое, отвечает какой-то билибердой. В основном либо все биты данных в 1 выставляет либо в ноль. Все 10 дисплеев так себя ведут. Но запись работает нормально на любых таймингах. Фиг с ним с этим чтением. Как использовать синхронизацию пока не очень понимаю. Ножка TE выкидывает прерывания с частотой 60 Гц. Получается что за время между прерываниями я должен обновить информацию на дисплее ? Quote Share this post Link to post Share on other sites More sharing options...
AlanDrakes 0 March 23 Posted March 23 (edited) · Report post TE - Tearing Effect - специальный пин, который взводится в 1 в тот момент, когда контроллер дисплея обновляет на матрице определённую строку. Ищите по даташиту соответствующий регистр. Возможно по "Tearing line" или похожему сочетанию. Используется для синхронизации вывода изображения из контроллера в память экрана для устранения эффекта полукадра. Регистр 0x44 - STE (Set Tear ScanLine ) - устанавливает линию, на которой будет генерироваться прерывание. Про эффект разрыва - смотрите пункт 10.8.3 Example 1: MPU Write is faster than panel read. В даташите, который имеется у меня, изображение-пример с данными кадра относится к 10.8.4 Example 2: MPU write is slower than panel read 14 часов назад, Mysteo сказал: Проблема следующего характера, не могу причитать данные с дисплея. Запись данных в дисплей работает. На максимальных частотах и на самых быстрых таймингах все отрабатывает идеально. Кто-нибудь сталкивался с таким явлением ? Не с именно этим контроллером, но похожую ситуацию ловил на ILI9341 Лично мне пришлось немного ухудшать тайминги работы с дисплеем перед чтением. Попробуйте вот такой код: Спойлер #define LCD_REG *(volatile uint8_t *) (0x60000000) #define LCD_DATA *(volatile uint8_t *) (0x60040000) <...> // Чтение-запись. После подачи питания пытаюсь прочитать ID чипа по разным адресам: FSMC_Bank1->BTCR[1] = (0x0 << 28) // Reserved [31:30] & ACCMOD [29:28] == 0000 | (0x0 << 24) // Latch (Don't Care) | (0x0 << 20) // ClockDiv (Don't Care) | (0x0 << 16) // BusTurn (0 - not required @200MHz). | (0x15 << 8) // DataPhase (5+ ticks @ 200MHz). | (0x0 << 4) // AddressHold (Don't Care) | (0x2 << 0); // AddressSet (minimal: 2 @ 200MHz). // Sync for (i=0;i<4;i++) { LCD_REG = 0x00; }; delay_us(2000); for (i=0;i<4;i++) { LCD_REG = 0x00; }; delay_us(2000); v = LCD_DATA; v = v << 8; v |= LCD_DATA; v = v << 8; v |= LCD_DATA; v = v << 8; v |= LCD_DATA; console_timestamp(); console_put("LCD_ID (INDX reg): "); console_put_hex_word(v); console_put("\r\n"); LCD_REG = 0x04; v = LCD_DATA; v = v << 8; v |= LCD_DATA; v = v << 8; v |= LCD_DATA; v = v << 8; v |= LCD_DATA; console_timestamp(); console_put("LCD_ID (ILIxxxx 04 like): "); console_put_hex_dword(v); console_put("\r\n"); LCD_REG = 0xD3; v = LCD_DATA; v = v << 8; v |= LCD_DATA; v = v << 8; v |= LCD_DATA; v = v << 8; v |= LCD_DATA; console_timestamp(); console_put("LCD_ID (ILIxxxx D3 like): "); console_put_hex_dword(v); console_put("\r\n"); <...> // После того, как контроллер определён - ужимаем такты шины. Чтение в процессе работы не будет использоваться: FSMC_Bank1->BTCR[1] = (0x0 << 28) // Reserved [31:30] & ACCMOD [29:28] == 0000 | (0x0 << 24) // Latch (Don't Care) | (0x0 << 20) // ClockDiv (Don't Care) | (0x0 << 16) // BusTurn (0 - not required @200MHz). | (0x05 << 8) // DataPhase (5+ ticks @ 200MHz). | (0x0 << 4) // AddressHold (Don't Care) | (0x2 << 0); // AddressSet (minimal: 2 @ 200MHz). <...> Edited March 23 by AlanDrakes Quote Share this post Link to post Share on other sites More sharing options...
Mysteo 0 March 23 Posted March 23 · Report post Спасибо! Не помогло изменение таймингов перед чтением. С синхронизацией разобрался. Quote Share this post Link to post Share on other sites More sharing options...
AVI-crak 0 March 23 Posted March 23 · Report post FMC имеет раздельные настройки для записи и чтения, а вот конкретно st7799 имеет время чтения 350nc - в 23 раза больше записи. И кажется не поддерживает автоадрес. То-есть читать рам память - это к огромным тормозам. Quote Share this post Link to post Share on other sites More sharing options...
Mysteo 0 April 2 Posted April 2 · Report post Здравствуйте ! Чтобы не плодить новую тему , напишу здесь! В чем может быть ошибка а данном случае? Стартовый экран корректно выводится и даже нормально работает часть экрана , но при попытке скролла других элементов не понятные артефакты возникают. Использую FMC 16 BIT TouchGFX и partial buffer Quote Share this post Link to post Share on other sites More sharing options...
Mysteo 0 April 2 Posted April 2 · Report post Кажется я догадываюсь , что проблема может быть в функции заполнения прямоугольной области экрана, если начальная точка равна 0 , 0 то проблем не возникнет , а если Х смещен , то вроде происходит кирдык, завтра на работе проверю Quote Share this post Link to post Share on other sites More sharing options...
EdgeAligned 13 April 2 Posted April 2 · Report post Неверно заданы границы изображений, неверно задан формат пикселя. Достаточно ошибки размера на один пиксель, и всё уже пойдет наперекосяк. Quote Share this post Link to post Share on other sites More sharing options...
Mysteo 0 April 3 Posted April 3 · Report post Разобрался, ошибка была именно в функции заполнения прямоугольной области Quote Share this post Link to post Share on other sites More sharing options...