Mysteo 0 22 марта, 2023 Опубликовано 22 марта, 2023 · Жалоба Всем здравствуйте! Проблема следующего характера, не могу причитать данные с дисплея. Запись данных в дисплей работает. На максимальных частотах и на самых быстрых таймингах все отрабатывает идеально. Логического анализатора нету, но осциллограффом 4 канала просматривал сигналы: CS , DCX , WRX, RDX все идеально. Также смотрел что на DATA пинах происходит - там действительно ерунда либо 0x0000 либо 0x0FFFF все время. такое ощущение что дисплей на восходящий строб RDX совсем не реагирует. Кто-нибудь сталкивался с таким явлением ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 22 марта, 2023 Опубликовано 22 марта, 2023 · Жалоба 17 минут назад, Mysteo сказал: Кто-нибудь сталкивался с таким явлением ? Обычное дело. Ваш контроллер дисплея просто не поддерживает чтение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mysteo 0 22 марта, 2023 Опубликовано 22 марта, 2023 · Жалоба On 3/22/2023 at 10:54 PM, jcxz said: Обычное дело. Ваш контроллер дисплея просто не поддерживает чтение. Спасибо! Первый раз с дисплеями сталкиваюсь. Три дня ломал голову, в чем может быть проблема. А для чего тогда в даташите на контроллер дисплея описывают эти функции ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 38 22 марта, 2023 Опубликовано 22 марта, 2023 · Жалоба Надеюсь, ID получали 4-мя последовательными чтениями, а не одним единственным? А если под отладчиком, да вручную (без FMC, ногодрыгом) сформировать всю сигналограмму? И не спеша посмотреть, что на шине происходит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mysteo 0 23 марта, 2023 Опубликовано 23 марта, 2023 · Жалоба On 3/23/2023 at 12:14 AM, Obam said: Надеюсь, ID получали 4-мя последовательными чтениями, а не одним единственным? Да , четырьмя последовательными и это касается не только ID. Пробовал и вручную ножками дергать - тоже самое, отвечает какой-то билибердой. В основном либо все биты данных в 1 выставляет либо в ноль. Все 10 дисплеев так себя ведут. Но запись работает нормально на любых таймингах. Фиг с ним с этим чтением. Как использовать синхронизацию пока не очень понимаю. Ножка TE выкидывает прерывания с частотой 60 Гц. Получается что за время между прерываниями я должен обновить информацию на дисплее ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlanDrakes 1 23 марта, 2023 Опубликовано 23 марта, 2023 (изменено) · Жалоба 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). <...> Изменено 23 марта, 2023 пользователем AlanDrakes Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mysteo 0 23 марта, 2023 Опубликовано 23 марта, 2023 · Жалоба Спасибо! Не помогло изменение таймингов перед чтением. С синхронизацией разобрался. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AVI-crak 0 23 марта, 2023 Опубликовано 23 марта, 2023 · Жалоба FMC имеет раздельные настройки для записи и чтения, а вот конкретно st7799 имеет время чтения 350nc - в 23 раза больше записи. И кажется не поддерживает автоадрес. То-есть читать рам память - это к огромным тормозам. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mysteo 0 2 апреля, 2023 Опубликовано 2 апреля, 2023 · Жалоба Здравствуйте ! Чтобы не плодить новую тему , напишу здесь! В чем может быть ошибка а данном случае? Стартовый экран корректно выводится и даже нормально работает часть экрана , но при попытке скролла других элементов не понятные артефакты возникают. Использую FMC 16 BIT TouchGFX и partial buffer Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mysteo 0 2 апреля, 2023 Опубликовано 2 апреля, 2023 · Жалоба Кажется я догадываюсь , что проблема может быть в функции заполнения прямоугольной области экрана, если начальная точка равна 0 , 0 то проблем не возникнет , а если Х смещен , то вроде происходит кирдык, завтра на работе проверю Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EdgeAligned 85 2 апреля, 2023 Опубликовано 2 апреля, 2023 · Жалоба Неверно заданы границы изображений, неверно задан формат пикселя. Достаточно ошибки размера на один пиксель, и всё уже пойдет наперекосяк. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mysteo 0 3 апреля, 2023 Опубликовано 3 апреля, 2023 · Жалоба Разобрался, ошибка была именно в функции заполнения прямоугольной области Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться