aaarrr 69 26 января, 2020 Опубликовано 26 января, 2020 · Жалоба 6 minutes ago, MementoMori said: Господа, уж очень неадекватные скорости чтения SDRAM.... Процессором скорость чтения проверьте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MementoMori 4 26 января, 2020 Опубликовано 26 января, 2020 · Жалоба Just now, aaarrr said: Процессором скорость чтения проверьте. Как? В цикле вызывать a=*(__IO uint32_t*)(SDRAM_BANK_ADDR + 4*(uwIndex) ? Я в ассемблере полный ноль, боюсь, что такой код на С сформирует много ненужных тактов. У меня память 32 бит* 1 Meg* 4 банка. Нижеследующий код for (uwIndex = 0; uwIndex < 4194304; uwIndex++) { ADDRESS=*(__IO uint32_t*)(SDRAM_BANK_ADDR + 4*(uwIndex)); } Выполняется примерно за 3 секунды. Получается что около 5,5 мегабайт в секунду. Попробую ка я его запустить на дискавери.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MementoMori 4 26 января, 2020 Опубликовано 26 января, 2020 · Жалоба Кошмар... на дискавери, где такая же микросхема, но в ней задействованы лишь 16 бит, сканируется за 8 секунд... Надо бы попробовать через DMA... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 26 января, 2020 Опубликовано 26 января, 2020 · Жалоба 34 minutes ago, MementoMori said: Выполняется примерно за 3 секунды. Запредельно медленно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MementoMori 4 26 января, 2020 Опубликовано 26 января, 2020 · Жалоба Запредельно медленно - с точки зрения возможностей SDRAM - да. Запредельно медленно исходя из хотелок - да. ЗАпредельно ли медленно исходя из возможностей SDRAM+FMC конкретного контроллера? Можете ответить? P.S. что-то не получилось у меня пока с DMA измерить. Заполнение работает, а вот прерывания transfer complete не ловятся, хотя установлены. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 26 января, 2020 Опубликовано 26 января, 2020 · Жалоба 2 minutes ago, MementoMori said: ЗАпредельно ли медленно исходя из возможностей SDRAM+FMC конкретного контроллера? Можете ответить? Никогда не использовал STM32 с SDRAM (и едва ли буду), но не должно быть настолько плохо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MementoMori 4 26 января, 2020 Опубликовано 26 января, 2020 · Жалоба MPU_Config(); SCB_EnableICache(); SCB_EnableDCache(); Если отключаю это - то еще медленнее.... Господа.... Неловко просить, но вдруг у кого будет время - можете глянуть проект. Там только настройки периферии, никакого кода. Посмотрите, может кто увидит где у меня косяк и почему так медленно работает SDRAM..... https://cloud.mail.ru/public/2XX8/4nDNie3iu Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Шаманъ 1 26 января, 2020 Опубликовано 26 января, 2020 (изменено) · Жалоба 1 hour ago, MementoMori said: У меня 1 слой. Слой, то один, но до этого времени Вы упорно пытались ARGB8888 выводить, что в общем-то очень плохая идея. 52 minutes ago, MementoMori said: ЗАпредельно ли медленно исходя из возможностей SDRAM+FMC конкретного контроллера? Можете ответить? Специально для Вас проверил (правда F7 у меня нет, проверял на STM32H743, память на 100МГц) заполнение 128МБ SDRAM у меня занимает 342.5мс, кэш данных практически не влияет (что логично для такой операции). Код далек от оптимального (может правда GCC в этот раз смог :)) - обычный цикл с записью словами по 32бита, тем не менее выходит 373.7МБ/с, что почти соответствует максимальной пропускной способности SDRAM в 400МБ/сек. Т.е. где-то в 80раз быстрее, чем у Вас. Я бы смотрел инициализацию FMC и, возможно, настройки тактирования. Вы еще учитывайте, что кроме чтения LTDC часть пропускной способности FMC заберет рисование. В зависимости от того что Вы будете выводить это может быть и больше, чем нужно LTDC :) Изменено 26 января, 2020 пользователем Шаманъ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MementoMori 4 26 января, 2020 Опубликовано 26 января, 2020 · Жалоба 2 minutes ago, Шаманъ said: обычный цикл с записью словами по 32бита в асме писали код или на C? Тот код, что у меня выше - может там дофига лишних команд. Но ведь я и на железном уровне работал, c LTDC - та же петрушка. Около 3,3 мб/сек. Чтение приведенным выше кодом - 5 мб/сек (измерения неточные). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Шаманъ 1 26 января, 2020 Опубликовано 26 января, 2020 · Жалоба Just now, MementoMori said: в асме писали код или на C? На С. 2 minutes ago, MementoMori said: измерения неточные Так замеряйте встроенным в МК таймером Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MementoMori 4 26 января, 2020 Опубликовано 26 января, 2020 · Жалоба 1 minute ago, Шаманъ said: Так замеряйте встроенным в МК таймером Зачем, если и так понятно, что отличия в десятки раз... мне это ничего не даст. Вас не затруднит глянуть мой проект? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MementoMori 4 26 января, 2020 Опубликовано 26 января, 2020 · Жалоба 41 minutes ago, Шаманъ said: Вы еще учитывайте, что кроме чтения LTDC часть пропускной способности FMC заберет рисование. В зависимости от того что Вы будете выводить это может быть и больше, чем нужно LTDC :) Я пока ничего не рисую. То есть я нарисовал один раз, а потом LTDC просто перерисовывает экран, я ему не мешаю Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Шаманъ 1 26 января, 2020 Опубликовано 26 января, 2020 (изменено) · Жалоба 1 hour ago, MementoMori said: Вас не затруднит глянуть мой проект? Только поверхностно, HALом не пользуюсь, поэтому даже при желании и наличии времени всех нюансов не увижу. Из того, что "бросилось в глаза": 1. Обычно на таких частотах память нормально работает с CAS LATENCY 2, у Вас стоит 3. Я бы посмотрел датащит на память на предмет правильного значения. 2. Зачем у Вас стоит флаг SDRAM_MODEREG_BURST_LENGTH_2, если FMC не поддерживает эту фичу (стоит посмотреть датащит на предмет правильного значения этого флага)? Кстати, а Вы проверяли на какой частоте реально работает SDRAM, LTDC? Изменено 26 января, 2020 пользователем Шаманъ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MementoMori 4 26 января, 2020 Опубликовано 26 января, 2020 · Жалоба 16 minutes ago, Шаманъ said: CAS LATENCY 2, у Вас стоит 3 В даташите написано что поддерживает 1,2,3, во всех примерах в сети на эту микру и в примере для куба от ST - стоит 3 Я поставил 2 - не скорость не повлияло. 16 minutes ago, Шаманъ said: SDRAM_MODEREG_BURST_LENGTH_2 Даташит говорит "the Burst Length (BL) of 1 must be selected by configuring the M[2:0] bits to 000 in the mode register. Refer to SDRAM device datasheet." Больше о нем ни слова. Я перебрал все значения - на скорость не влияет. 16 minutes ago, Шаманъ said: стати, а Вы проверяли на какой частоте реально работает SDRAM, LTDC? Нет пока такой реальной возможности. Осциллограф у меня слабенький. Сужу по факту низкого обмена данными. Я кстати, не писал что именно SDRAM так работает, она так работает в связке с LTDC. Но без него, при простом обращении по адресу в памяти скорость чтения тоже невысока, повторюсь, я не знаю точной скорости, но мне очевидно, что она в десятки раз ниже. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 26 января, 2020 Опубликовано 26 января, 2020 · Жалоба 3 minutes ago, MementoMori said: Нет пока такой реальной возможности. Можно вывести на пин частоту после делителя. Ну и таймер какой-нибудь надо освоить - без внутреннего источника времени не измерить ничего толком. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться