Jump to content

    
Sign in to follow this  
MementoMori

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

Recommended Posts

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

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

Share this post


Link to post
Share on other sites

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

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

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

 

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

Share this post


Link to post
Share on other sites
2 minutes ago, MementoMori said:

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

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

Share this post


Link to post
Share on other sites

MPU_Config();

 SCB_EnableICache();

 SCB_EnableDCache();

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

Господа....

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

 

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

Share this post


Link to post
Share on other sites

 

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

Edited by Шаманъ

Share this post


Link to post
Share on other sites
2 minutes ago, Шаманъ said:

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

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

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

Share this post


Link to post
Share on other sites
1 minute ago, Шаманъ said:

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

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

Share this post


Link to post
Share on other sites
41 minutes ago, Шаманъ said:

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

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

Share this post


Link to post
Share on other sites
1 hour ago, MementoMori said:

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

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

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

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

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

Edited by Шаманъ

Share this post


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

Share this post


Link to post
Share on other sites
3 minutes ago, MementoMori said:

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this