Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32F429IG + USB3300 + SDRAM +LTDC
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
king2
Приветствую!

Пытаюсь заставить работать WaveShare Open429I-C с ее же комплектными компонентами.
Выгрузил проект из CubeMX, FreeRTOS, включен LTDC на дисплей 7" (800x480), внешняя SDRAM 8 мегабайт (16 бит), ну и модуль ULPI USB3300 в режиме host-only.

По отдельности все работает, USB флешку опознает, пишет, читает. Включаю StemWin, врубается LTDC, USB начинает работать через одно место. Сначала инициализация StemWin была в самом начале - так USB3300 даже VBus не зажигал. Потом перенес инициализацию после хоста - зажигается VBus, но дальше не работает.

Отрубаю StemWin - все начинает летать.
Врубаю только LTDC, без StemWin, инициализирую слои, не включая - работает.
Включаю слой на отображение - USB перестает работать (подыхает где-то на нумерации).

Иногда при отладке USB3300 загоняется в какое-то положение, из которого только через ресет питания выходит. При этом стартуешь программу - она говорит что device attached (хотя на самом деле девайса уже нет).

Думал уже наводки, смотрел осциллом - ну, сигнал не суперчистый, но по идее ложных срабатываний быть не должно, это все еще вполне себе нули.

Всю голову поломал!
Может есть какие-то мысли?
mantech
Цитата(king2 @ Aug 20 2015, 19:15) *
Думал уже наводки, смотрел осциллом - ну, сигнал не суперчистый, но по идее ложных срабатываний быть не должно, это все еще вполне себе нули.


Вряд-ли аппаратная лажа, скорее всего в распределении памяти и размерах стеков.
scifi
Цитата(mantech @ Aug 20 2015, 19:59) *
Вряд-ли аппаратная лажа, скорее всего в распределении памяти и размерах стеков.

Или кривой куб.
king2
Цитата(mantech @ Aug 20 2015, 19:59) *
Вряд-ли аппаратная лажа, скорее всего в распределении памяти и размерах стеков.


Но как одна команда включения слоя в LTDC может поломать стеки и распределение памяти?
Тогда и другие глюки были бы, а тут только с ULPI.

Цитата(scifi @ Aug 20 2015, 20:14) *
Или кривой куб.

Да там от куба - только инициализация.
Насколько я могу судить - правильная.
И вот напрягает то, что изменение одной цифры (0 на 1) - ломает usb. Тут что-то явно завязанное на именно то, работает LTDC или не работает. Но вот что?..
adnega
Цитата(king2 @ Aug 20 2015, 19:15) *
Может есть какие-то мысли?

Как SDRAM используется?
С приоритетами прерываний порядок?
king2
Цитата(adnega @ Aug 20 2015, 21:09) *
Как SDRAM используется?
С приоритетами прерываний порядок?

SDRAM используется как видеобуфер, больше пока никак. Впрочем, пытался с качестве видеобуфера указывать и встроенный SRAM и FLASH - пофигу ему.

Зато если поставить для LTDC GPIO режим low speed - то на дисплее начинает все мелькать, а USB начинает работать (по крайней мере, флешку видит и распознать кто она такая может).

Если включить StemWin - то работать снова перестает sad.gif

Приоритеты прерываний все стоят 5, ну и FreeRTOS себе что-то-там побольше и получше берет, видимо.
Пробовал всех, кроме USB поставить 6, не помогло (впрочем, там и прерываний-то нет, программу уже обкарнал по самое немогу).

Похоже, что StemWin начинает брать видеобуфер из SDRAM, ну и на этом приехали.

p.s. Сделал чистый проект, там только FMC/SDRAM, LTDC и DMA2D (которое инитится, но не работает - его никто не дергает просто). Если поставить LTDC показывать видеобуфер из SDRAM (0xd0000000) - USB не работает. Если из SRAM (0x20000000) - работает. Если бы шины не хватало.. но причем тут USB? Естественно, что все стеки и прочие выделения памятей при этом абсолютно те же. LTDC прерываний не вызывает.. Ниччего не понимаю!

p.p.s. Без FreeRTOS та же петрушка.
pvo125
Тоже имеется такая плата (Open 429-I)экран пока не купил но планировал такой же 800 на 480. В процессе изучения нескольких вариантов файлов LCDConf появились некоторые сомнения. Хотел уточнить у ТС сколько буферов используется для рисования и отображения в StemWin? Потому как если просто заливать проект из куба там встречаются размеры экранов 320*240 480*272 640*480 и 1 или 3 NUM_BUFFERS и при этом используется 2 слоя. Я посчитал что если для экрана 800 на 480 режим ARGB(4 байта на пиксель) плюс тройная буферизация только так и не понял для чего она. И еще если включены 2 слоя то памяти в SDRAM получится задействовано 800*480*4*3*2=9 метров. У нас же запаяно 8. Можно конечно разные варианты типа rgb565 или 2 буфера или вообще один слой. Хотелось узнать как у Вас сконфигурировано. Может просто не хватает этой самой SDRAM. Прерывания от LTDC вроде в кубовсих проектах используются там происходит смена буферов для отображения LTDC и буфера для рисования stemwin. (front меняется на back и наоборот если в терминах emwina )
king2
Изначально было два слоя 800x480 ARGB8888 по одному буферу, то есть по два мега на слой примерно. SDRAM явственно хватает, и сам гуй работает как из пушки.

Сейчас у меня есть простой проект БЕЗ StemWin, БЕЗ RTOS, только инитятся слои на отображение хоть чего-нибудь хоть откуда-нибудь. И вот в ините слоя в строчке pLayerCfg1.FBStartAdress = 0x20000000 адрес меняю на 0xd0000000 - USB работать перестает.

В примерах от самого WaveShare они поступили мудро - там или USB HS ULPI, или экран. Вместе - нету.
Сдается мне, что разведено там через одно место, сначала по плате с процессором, потом по материнской, потом по плате с USB3300, через два разъема, а там 60МГц на минуточку и все дорожки должны быть одинаковой длины.

Кстати, пример StemWin который сами же вайвшаровцы дают - глючит.

UDA1380 пример для проигрывания есть, для записи - нету.
Я тут пытался запустить I2S (UDA1380) оттуда же, наткнулся на то, что у товарищей на платке электретный микрофон не подключен к питанию, а когда я поменял микрофон и подключил к питанию - то фон пробивается при записи. Причем не от микрофона, а по питанию кодека. А если сделать тактирование MCK от процессора - то трест пробивается, щуп осцилла с CLK подключаешь - треск пропадает. Однозначно неравные длины проводников, ну или что-то еще, уже задолбался разбираться с этим поделием.

Ну и питалово 3.3 вольта ВСЕЙ ПЛАТЫ сделать единственным 1117, расположенным на процессорной плате и без возможности запитать периферию от чего-то еще - это тоже надо быть альтернативно одаренным.

В общем, WaveShare я больше не покупаю и никому не посоветую..
Rash
Это макетка больше от неё ожидать не стоит. UDA1380 - хорошая микра, запускал их правда на 407 (тоже микрофон без питания был), проблем никаких, за исключением ремапа вроде 2-го I2S в 407 версии. Есть комбинация при которой поток данных идёт, синхра есть, а мк их не видит. Также если будите юзать UDA1380, заведите ресет на управление от мк иначе наловите граблей с инитом. с ULPI не работал, но думаю да данной плате слишком длинные дорожки и полигонов землю явно не хватает для неё.
Не думаю что поможет, но на такие частоты GPIO:
Код
  // Включить стабильности GPIO на частоте > 50 МГц
  RCC->APB2ENR |= RCC_APB2ENR_SYSCFGEN;
  if(SYSCFG->CMPCR & SYSCFG_CMPCR_READY)
     SYSCFG->CMPCR |= SYSCFG_CMPCR_CMP_PD;
king2
Цитата(Rash @ Aug 21 2015, 13:39) *
Не думаю что поможет, но на такие частоты GPIO:

Помогло, но немного совсем - теперь ИНОГДА оно все же нумеруется и залипает где-то в более позднем состоянии. Отключения флешки оно уже не видит. Видимо, придется оставаться на FS либо подтыкать SDIO. Но все равно спасибо!

UDA1380 - а как там электретный микрофон без питания работал-то вообще?
Инициализацию без ресета я как-то освоил, там просто не надо ресет программный давать ей (вернее, ждать после него надобно), ну и клоками ее кормить вовремя. У меня проблема была в том, что оно неустойчиво заводилось (да и сейчас так) на 16KHz, а вот на 44KHz - как из пушки. Ну и если записывать оттуда звук - то урчание какое-то идет кроме полезного звука, думаю, что это помехи от LCD экрана. Если AGC включить и полученное тут же выдавать на ее же выход - то урчание быстро переходит в космические звуки - оно завязывается само на себя.
Rash
на микрофон естественно припаял резюк, а не устойчиво заводится, думаю из-за ресета, см. даташит, там есть временной интервал для него. Последовательность такая ресет в 1, 10мсек паузы инит I2S, что бы тактирование было, а потом настройка регистров по I2C, иначе настройки не устанавливались нормально. Заводил даже на ней режим когда она работала сама на себя (причём 10Вт колонки смотрели в микрофон) и работало без заводки. Ножки использовал на 407 для I2S2: WS_PIN - B9; SCK_PIN - B10; SD_PIN - C3; I2S_EXT_SD_PIN - C2, при других конфигах ножки WS и SCK мк были проблемы. С DMA всё тоже хорошо работало. Настройки PLL I2S были такие PLLI2S_N = 258; PLLI2S_R = 3. Частота мк была 168Мгц, значение PLL как в дискавери.
king2
Цитата(Rash @ Aug 21 2015, 15:33) *
Последовательность такая ресет в 1, 10мсек паузы инит I2S, что бы тактирование было, а потом настройка регистров по I2C, иначе настройки не устанавливались нормально.

А в какой момент ресет отпускать надо?

Про неприпаянный и неразведенный на плате резюк к питанию микрофона пичалька, это дает нам понять насколько серьезно WaveShare подходит к разработке и тестированию своих плат sad.gif
Rash
При включении мк пин на вход, т.е. в 0., потом инит ножки и установка её в 1, задержка 10мсек, потом инит I2S, задержка 1мсек, сброс ножки ресет, инит UDA по I2C. Также для того что бы регистры установились должно быть тактирование для UDA по I2S (или внешнее - не пробовал). Вроде так всё делал.
king2
Ага, понял. То есть главная идея - когда отпускается ресет, на UDA1380 уже должен приходить SYSCLK?
Окей. А в такой кинфигурации (тактирование от SYSCLK, правильный инит) проверяли запись оттуда на 8-16 KHz?
Rash
делал по даташиту, там вроде всё есть, было пару лет назад, поэтому в чём идея точно не скажу. Работал кажись на 16 кГц. Работало всё и все входы и выходы. Там даже к цифре из I2S можно подмешать звук в самой UDA из AudioIn.
king2
Ну вот у меня работать-работает, но при тактировании от SYSCLK треск подмешивается (убирается если CLK немного задержать щупом осциллографа), при тактировании от WSPLL на 16KHz не заводился, на 44 - с песней.

Ну и шум страшный при записи. Буду пробовать питать от отдельного источника, ну и идею Вашу проверю с ресетом, спасибо!
king2
Пробую UDA1380 с ресетом.

Включаю SYSCLK (заодно подается CLKO и WSO), ресет в 1, жду 10мс, ресет в 0, пытаюсь общаться по i2c. Хренвам. На адрес говорит ACK, на первый байт - не говорит. Иногда в других местах почему-то нет ACK.

В даташите явно написано, что по умолчанию после ресета оно тактируется от SYSCLK, у меня тудыть аж 11МГц приходит. И вот как-то странновато она себя ведет.

То, что нет ACK - видно и на логическом анализаторе, и на осциллографе. Подтяжки стоят 10кОм на 3.3 вольта, но там даже и без них с фронтами все нормально. Скорость 30000.

Какая-то странная микросхема.. описания тактирования I2C вообще нет в даташите.

p.s. Выяснилось, что если при старте не давать ей SYSCLK, то она прекрасно общается по I2C, а если клок выдать - то как-то через раз, и практически нет возможности воткнуть туда конфигурацию. Уже и пониже частоту пробовал, то работает, то нет. Непонятно...
DrGluck
... попробуйте переведите графику в "байт-пиксель" - т.е. в палитру 256 цветов - ибо разрешение 800х480 + видеобуфер во внешней SDRAM приводит к тому, что любая другая цветовая схема слишком "тяжелая" и видеовывод "ломается" при .. например - тупом цикле чтения SDRAM - т.е. использования контроллера FMC одновременно LTDC и ядра. Увы ...

т.к. USB3300
- еще один "конкурент" на внешней шине ... sm.gif

P.S. 32F429I DISCOVERY 2.4" QVGA TFT LCD - "замануха" и там - все хорошо и красиво sm.gif внутренний SRAM 256 кило обеспечивает полноцвет на этом экранчике совершенно не затрагивая ресурса наружу ...
king2
Цитата(DrGluck @ Aug 23 2015, 22:39) *
... попробуйте переведите графику в "байт-пиксель" - т.е. в палитру 256 цветов - ибо разрешение 800х480 + видеобуфер во внешней SDRAM приводит к тому, что любая другая цветовая схема слишком "тяжелая" и видеовывод "ломается" при .. например - тупом цикле чтения SDRAM - т.е. использования контроллера FMC одновременно LTDC и ядра. Увы ...

Это догадка или факт?
Если факт, то как можно это все посчитать?
Имеется в виду, что 800x600x4 байта на пиксель x 2 слоя x 40 кадров в секунду = 146 мегабайт в секунду по DMA. SDRAM у меня 16-битный, то есть получается что оттуда мы берем со скоростью 73 Мб/c.

Слишком много?
С сколько не много? И какая вообще пропускная способность у шины этой?
И как посчитать?

USB3300 вроде бы по "соседней" шине проходить должно и не трогать никого..
DrGluck
RM0090 Reference manual

чудес не бывает sm.gif ...
А что за "соседняя шина" наружу ? (D0..D7)

P.S. SDRAM - динамическая память. В настройках FMC и "настраивательного" sm.gif регистра самой микросхемы есть всякие тайминги ... в том числе и обеспечение целостности информации ( рефреш ) ...
Динамическая память
king2
Дык в референс и смотрю, картинка 2, страница 62.
Там вроде FMC <-> LCD-TFT и USB_OTG <-> SRAM по отдельным узлам проходят и не пересекаются нигде..

Тайминги-таки имеются, и я бы понял, если бы картинка на дисплее была неправильная. Так дисплей, сволочь, работает как из пушки, а ULPI - не работает. sad.gif

Там сама плата сделана через одно место. UDA1380 - стоит одна микросхема (HN), схему дают для другой (TT).
Питалово сделано так, что при записи звука жестокий шум и рокотание, питаешь UDA1380 от батареек - тишь и гладь, ибо штатно все питается от одного мелкого 1117.

Короче, там неясно, то ли китайцы плату неправильно развели, то ли глюки ST USB библиотеки (адъ!), то ли я в лыжи обутый.

В общем, воткнул я USB_OTG_HS в режиме FS, пока вроде бы работает, звук на флешку пишет, правда, несжатый, но тут, как я понимаю, выше IMA не прыгнешь (MP3 кодера не нашел от слова "вообще").

Буду пытаться освоить высокие технологии ULPI на какой-нибудь другой плате, разведенной человеками для человеков.
DrGluck
"Там вроде FMC <-> LCD-TFT и USB_OTG <-> SRAM по отдельным узлам проходят и не пересекаются нигде.." ©

- дык это ВНУТРЕННИЕ ШИНЫ ... А физически то как на платке все зацеплено ?
Картинка "правильная" - это пока ядро свои гарантированные 60% ( если не ошибаюсь ) ресурса от тов. Арбитрова не получает ( см. выше про тупой цикл чтения SDRAM )

P.S. "меня терзают смутные сомнения" sm.gif ... USB_OTG - внутренняя компонента МК ... page 1235 "34.3.1 OTG full-speed core" © - нафига еще внешний контроллер USB ?
king2
Цитата(DrGluck @ Aug 24 2015, 00:14) *
- дык это ВНУТРЕННИЕ ШИНЫ ... А физически то как на платке все зацеплено ?
Картинка "правильная" - это пока ядро свои гарантированные 60% ( если не ошибаюсь ) ресурса от тов. Арбитрова не получает ( см. выше про тупой цикл чтения SDRAM )

P.S. "меня терзают смутные сомнения" sm.gif ... USB_OTG - внутренняя компонента МК ... page 1235 "34.3.1 OTG full-speed core" © - нафига еще внешний контроллер USB ?

Физически на платке это тоже разные ноги. 176 ног, есть куда развернуться. sm.gif
Про USB_OTG - дык внутри тока контроль, PHY внешний ему нужен для high speed.
DrGluck
Да, действительно ULPI выводятся на отдельные ноги ( альтернативная функция ) - OTG_HS_ULPI_xxxxxx.
Тогда подсказка №2 - уточнить какие ноги задействует графическая библиотека.
Смотрим схему Open429I-C
страница 1 (USB HS ULPI) ... берем навскидку PB0 (DATA1)
Смотрим доку на проц - "Table 12. STM32F429xx alternate function mapping"
TIM3_CH3 / TIM8_CH2N/OTG_HS_ULPI_D1/ETH_MII_RXD2 /TIM1_CH2N /LCD_R3 /EVENTOUT
Учитывая встречающиеся казусы с библиотеками от ST есть смысл просмотреть исходники.
В своем проекте я находил один момент как раз связанный с инициализацией LTDC :
HAL_LTDC_MspInit
.... для пина PB1 они снова задействовали GPIO_AF14_LTDC sm.gif хотя должны были использовать AF9 !

P.S. еще бы обратил внимание ( исходя из описанных в самом начале симптомов ) на :
PB5 - OTG_HS_ULPI_D7 - FMC_SDCKE1
PC0 - OTG_HS_ULPI_STP - FMC_SDNWE
PC2 - OTG_HS_ULPI_DIR - FMC_SDNE
PC3 - OTG_HS_ULPI_NXT - FMC_SDCKE0
king2
Цитата(DrGluck @ Aug 24 2015, 10:06) *
P.S. еще бы обратил внимание ( исходя из описанных в самом начале симптомов ) на :
PB5 - OTG_HS_ULPI_D7 - FMC_SDCKE1
PC0 - OTG_HS_ULPI_STP - FMC_SDNWE
PC2 - OTG_HS_ULPI_DIR - FMC_SDNE
PC3 - OTG_HS_ULPI_NXT - FMC_SDCKE0

Проверил. Там везде AF14 и ноги совпадают.
FMC/LTDC везде работает нормально, для них везде AF12/AF14. Если бы были ошибочные - не работало бы или работало бы с глюками.

ULPI может быть только AF10. D0 там PA3.
Но я учту, спасибо sm.gif
DrGluck
sm.gif ... хорошо, будем ждать инфы о причине глюка ...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.