Перейти к содержанию
    

Не могу подружить SDRAM и LTDC

6 minutes ago, MementoMori said:

Господа, уж очень неадекватные скорости чтения SDRAM....

Процессором скорость чтения проверьте.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 мегабайт в секунду.

Попробую ка я его запустить на дискавери....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кошмар... на дискавери, где такая же микросхема, но в ней задействованы лишь 16 бит,  сканируется за 8 секунд...

Надо бы попробовать через DMA...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

34 minutes ago, MementoMori said:

Выполняется примерно за 3 секунды.

Запредельно медленно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Запредельно медленно - с точки зрения возможностей SDRAM - да.

Запредельно медленно исходя из хотелок - да.

ЗАпредельно ли медленно исходя из возможностей SDRAM+FMC конкретного контроллера? Можете ответить?

 

P.S. что-то не получилось у меня пока с DMA измерить. Заполнение работает, а вот прерывания transfer complete не ловятся, хотя установлены.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 minutes ago, MementoMori said:

ЗАпредельно ли медленно исходя из возможностей SDRAM+FMC конкретного контроллера? Можете ответить?

Никогда не использовал STM32 с SDRAM (и едва ли буду), но не должно быть настолько плохо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

MPU_Config();

 SCB_EnableICache();

 SCB_EnableDCache();

Если отключаю это - то еще медленнее....
 

Господа....

Неловко просить, но вдруг у кого будет время - можете глянуть проект. Там только настройки периферии, никакого кода. Посмотрите, может кто увидит где у меня косяк и почему так медленно работает SDRAM.....

 

https://cloud.mail.ru/public/2XX8/4nDNie3iu

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

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 :)

Изменено пользователем Шаманъ

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 minutes ago, Шаманъ said:

обычный цикл с записью словами по 32бита

в асме писали код или на C?

Тот код, что у меня выше - может  там дофига лишних команд. Но ведь я и на железном уровне работал, c LTDC - та же петрушка. Около 3,3 мб/сек.  Чтение приведенным выше кодом - 5 мб/сек (измерения неточные). 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Just now, MementoMori said:

в асме писали код или на C?

На С. 

2 minutes ago, MementoMori said:

измерения неточные

Так замеряйте встроенным в МК таймером

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 minute ago, Шаманъ said:

Так замеряйте встроенным в МК таймером

Зачем, если и так понятно, что отличия в десятки раз... мне это ничего не даст. Вас не затруднит глянуть мой проект?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

41 minutes ago, Шаманъ said:

Вы еще учитывайте, что кроме чтения LTDC часть пропускной способности FMC заберет рисование. В зависимости от того что Вы будете выводить это может быть и больше, чем нужно LTDC :)

Я пока ничего не рисую. То есть я нарисовал один раз, а потом LTDC просто перерисовывает экран, я ему не мешаю

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, MementoMori said:

Вас не затруднит глянуть мой проект?

Только поверхностно, HALом не пользуюсь, поэтому даже при желании и наличии времени всех нюансов не увижу. Из того, что "бросилось в глаза":

1. Обычно на таких частотах память нормально работает с CAS LATENCY 2, у Вас стоит 3. Я бы посмотрел датащит на память на предмет правильного значения.

2. Зачем у Вас стоит флаг SDRAM_MODEREG_BURST_LENGTH_2, если FMC не поддерживает эту фичу (стоит посмотреть датащит на предмет правильного значения этого флага)?

Кстати, а Вы проверяли на какой частоте реально работает SDRAM, LTDC?

Изменено пользователем Шаманъ

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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.  Но без него, при простом обращении по адресу в памяти скорость чтения тоже невысока, повторюсь, я не знаю точной скорости, но мне очевидно, что она в десятки раз ниже.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 minutes ago, MementoMori said:

Нет пока такой реальной возможности.

Можно вывести на пин частоту после делителя. Ну и таймер какой-нибудь надо освоить - без внутреннего источника времени не измерить ничего толком.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...