M_Andrey
Mar 25 2011, 09:34
Отлаживаю плату.
Имеется LPC2478 + SDRAM 32 бита (K4S561632C - 2 шт) + TFT 640x480x(R6-G6-B6) (OSD056TN53).
Схема один в один со стартеркитом Olimex, разводка моя. Завелась без проблем, но столкнулся с неприятным эффектом мерцания чет/нечет. строк, особенно если смотреть под углом. Стал повышать частоту LCDDCLK - остановился на 9Мгц (LCD_CFG_bit.CLKDIV = 7), т.к. при дальнейшем увеличении частоты начинается нестабильная работа других узлов - отваливается USB и/или срывается синхронизация изображения. Да и для этой частоты пришлось настраивать AHB:
AHBCFG1_bit.SHDL = 0; // Priority scheduling.
AHBCFG1_bit.EP1 = 1; // CPU
AHBCFG1_bit.EP2 = 5; // GPDMA
AHBCFG1_bit.EP3 = 4; // AHB1
AHBCFG1_bit.EP4 = 3; // USB
AHBCFG1_bit.EP5 = 2; // LCD
Решил попробовать режим 5-6-5 и тут началось самое интересное. При выводе любой информации на дисплей она случайным образом искажается. Смотрю под отладчиком - действительно записываю одно значение - считываю совсем другое. Вывожу черный текст (0x0000) на сером фоне (0xCE9A), а получаю чаще розовый с черными вкраплениями на сером с зелеными вкраплениями:
0x0000 -> 0x081A
0xCE9A -> 0xС098, 0xC680, 0x0E02
Частота LCDDCLK = 18Мгц (LCD_CFG_bit.CLKDIV = 3), кадровая 43Гц.
Понижал частоту до 3 МГц - ошибок меньше, но они есть!
В 8-8-8 режиме ничего подобного не было.
Полноцветная картинка выведенная до включения LCD_CTRL_bit.LcdEn = 1 и LCD_CTRL_bit.LcdPwr = 1 отображается правильно без искажений и практически не мерцает (что и хотел получить). Но после включения вновь записываемые данные искажаются.
Написал тест SDRAM с 32, 16 и 8-битным доступом - до включения TFT проходит полностью, после - только для 32-битного доступа, для 16 и 8-битного - ошибки. Кто-нибудь сталкивался с подобным, что я делаю не так?
Исходники работы с TFT и SDRAM брал из примеров IAR EWARM 5.50, только подправил для вывода 16-битного цвета.
M_Andrey
Mar 25 2011, 10:07
Цитата(DpInRock @ Mar 25 2011, 13:03)

Плата 2 слойная.
Это вопрос или ответ? Если вопрос, то плата действительно двухслойная.
DpInRock
Mar 25 2011, 10:13
Это ответ.
--
Т.е. начните борьбу с чистоты питания и прочего. Конденсаторы там, проводки ...
M_Andrey
Mar 25 2011, 10:20
Цитата(DpInRock @ Mar 25 2011, 13:13)

Это ответ.
Но 32-битный доступ работает без ошибок. Если выводить на дисплей информацию в Int32, то пишется и отображается правильно.
DpInRock
Mar 25 2011, 10:26
Ну и что.
Значит адресные линии еще врут. При 0 работают, а как надо в 1 приподняться - не успевают...
Пропаяйте переходные отверстия, например.
Или снизьте вдвое частоту SDRAM, посмотрите что будет.
И не трогайте AHB. От тут вообще никакого значение не имеет.
M_Andrey
Mar 25 2011, 16:13
Разобрался
Цитата(M_Andrey @ Mar 25 2011, 12:34)

Схема один в один со стартеркитом Olimex
Соврал. Для упрощения разводки поменял местами разряды шины данных и теперь эти грабли всплыли. Надо было хотя-бы при этом соблюсти привязку DQMOUT0-D0..D7, DQMOUT1-D8..D15, DQMOUT2-D16..D23, DQMOUT3-D24..D31. Теперь придется плату переразводить, а пока софтом изголяться.
DpInRock
Mar 25 2011, 17:37
Цитата
до включения TFT проходит полностью
?
Рек. 4 слоя.
Делал на этом проце с таким примерно экраном 4 модификации платы (требовались разные механические изменения).
Как ни изголялся - все работают без сбоев.
Разводил строго автоматическим разводчиком. (Кроме тех линий, которые не лень было разводить руками).
Стоит ненамного дороже.
В вашем случае - вы бы даже сэкономили бы. (Ибо обмен местами линий шины - это как раз проблема 2 слоев).
M_Andrey
Mar 25 2011, 18:03
Цитата(DpInRock @ Mar 25 2011, 20:37)

?
До инициализации TFT.
После рестарта сначала инициализация SDRAM, тест SDRAM правильный, затем идет инициализация TFT, снова тест SDRAM но уже с ошибками. Похоже что даже при 8- и 16-битном доступе EMC пытается работать с полной шиной. Но когда работает DMA LCD контроллера, EMC экономит шину и тут всплывают мои грабли.
DpInRock
Mar 25 2011, 18:10
Нет.
Обращение к контроллеру памяти у всех единообразное.