Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

На какой частоте работает DMA? STM32

Ср окт 11, 2017 03:01:01

Всю голову сломал над этим вопросом. Сначала я думал, что DMA тактируется на частоте AHB, то есть МК. Ну то есть я думал, что AHB это и есть внутренняя частота. Я долго мучал DMA, пытаясь понять, чего он такой медленный. И экспериментальным путём выяснилось, что он не работает на частоте мк, а судя по всему просто игнорирует PLL.
То есть если я меняю в конфиге (keil) вот эту строку:

RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);

То есть если меняется умножение частоты внешнего кварца на 9, то скорость работы DMA не меняется. Почему? Мне нужно, чтобы DMA передавал с памяти в память на частоте в 36 мгц, то есть, я вычитал что в память он копирует с задержкой в один такт, то есть работая на частоте 72 мгц, он должен выдавать мне эти 36 000 000 передач, но он выдаёт мне много меньше. На всех блоксхемах тактирование DMA ведётся на частоте МК. Почему тогда меняя настроки PLL ничего не меняется?

Re: На какой частоте работает DMA? STM32

Ср окт 11, 2017 03:28:43

Я так понимаю у тебя F1, там самый медленный DMA, из порта(считай памяти) в память читает за 9 тактов, так что никакие 36MHz ты и близко не получишь.

Re: На какой частоте работает DMA? STM32

Ср окт 11, 2017 13:21:09

Я так понимаю у тебя F1, там самый медленный DMA, из порта(считай памяти) в память читает за 9 тактов, так что никакие 36MHz ты и близко не получишь.


Спасибо за ответ. А не подскажете место, где про это можно почитать в сравнении? Или только в даташитах на отдельные камни?

Re: На какой частоте работает DMA? STM32

Ср окт 11, 2017 13:49:34

Спасибо за ответ. А не подскажете место, где про это можно почитать в сравнении? Или только в даташитах на отдельные камни?

По даташитам скорость DMA не определишь, нужно измерять самому. Для F4 получается 4 такта, для F0/F3 - 5, F1 - 9. При простом софтовом копировании получается как минимум столько же, для F1 - 6 тактов, для F3 - всего 2, если код выполнять из CCM, для F4 самый быстрый способ копирования при помощи FPU.

Re: На какой частоте работает DMA? STM32

Ср окт 11, 2017 20:35:57

Спасибо за ответ. А не подскажете место, где про это можно почитать в сравнении? Или только в даташитах на отдельные камни?

По даташитам скорость DMA не определишь, нужно измерять самому. Для F4 получается 4 такта, для F0/F3 - 5, F1 - 9. При простом софтовом копировании получается как минимум столько же, для F1 - 6 тактов, для F3 - всего 2, если код выполнять из CCM, для F4 самый быстрый способ копирования при помощи FPU.


Попробовал ориентироваться на 9 тактов. Судя по всему вы правы. Я вывожу видео на vga и если делать рассчёт на 3 такта/пиксель, dma выводит как раз за раз 3 пикселя. Делаю через обычный memory to memory в регистр GPIO. Спасибо за инфу, учту при рассчётах.

Добавлено after 5 hours 16 minutes 23 seconds:
Ещё один вопрос появился по этой теме. Я был уверен, что DMA это полностью независимый модуль. Но практика опять же показывает, что на скорость работы DMA влияет и основное выполнение программы, что для меня недопустимо. Камень STM32F103C8T6. Возможно ли этого избежать?

Re: На какой частоте работает DMA? STM32

Ср окт 11, 2017 21:21:32

Ещё один вопрос появился по этой теме. Я был уверен, что DMA это полностью независимый модуль. Но практика опять же показывает, что на скорость работы DMA влияет и основное выполнение программы, что для меня недопустимо. Камень STM32F103C8T6. Возможно ли этого избежать?

На F1 вряд ли, там DMA даже без FIFO, разве что мк загонять в сон. Для F4 я видел реализации когда специально текущую строку сначала перекидывали процем из основной SRAM1 в SRAM2, чтобы избежать лагов при передаче по DMA. И еще есть операции которые проц не может разбивать на части, например такое происходит при невыровненном или bitband доступе, т.е. если их избегать, то неожиданных задержек будет меньше.

Re: На какой частоте работает DMA? STM32

Ср окт 11, 2017 23:38:57

Ещё один вопрос появился по этой теме. Я был уверен, что DMA это полностью независимый модуль. Но практика опять же показывает, что на скорость работы DMA влияет и основное выполнение программы, что для меня недопустимо. Камень STM32F103C8T6. Возможно ли этого избежать?

На F1 вряд ли, там DMA даже без FIFO, разве что мк загонять в сон. Для F4 я видел реализации когда специально текущую строку сначала перекидывали процем из основной SRAM1 в SRAM2, чтобы избежать лагов при передаче по DMA. И еще есть операции которые проц не может разбивать на части, например такое происходит при невыровненном или bitband доступе, т.е. если их избегать, то неожиданных задержек будет меньше.


Спасибо большое. С вашей помощью смог победить VGA. Избавился от DMA, сделал всё на одном таймере и прерывании. Что-то можно рисовать и остаётся немного мощности что-то делать на фоне. Для платы за 120 рублей, я считаю, неплохо. Хотя я ожидал, конечно, большего от DMA.

photo_2017-10-12_00-33-38.jpg
(78.35 KiB) Скачиваний: 616

photo_2017-10-12_00-38-13.jpg
(147.99 KiB) Скачиваний: 530

Re: На какой частоте работает DMA? STM32

Чт окт 12, 2017 00:06:24

Что-то можно рисовать и остаётся немного мощности что-то делать на фоне. Для платы за 120 рублей, я считаю, неплохо.

Это ты свой мини-компьютер делаешь?

Re: На какой частоте работает DMA? STM32

Чт окт 12, 2017 00:19:46

Что-то можно рисовать и остаётся немного мощности что-то делать на фоне. Для платы за 120 рублей, я считаю, неплохо.

Это ты свой мини-компьютер делаешь?


Ну, делаю я его уже давно X). Первый был на propeller parallax, тогда я написал дос подобную ось, ассемблер и текстовый редактор в одном чипе, программы могли вызывать функции апи из ядра ос. Потом было много попыток на других железках. С STM32 я пробовал на телевизор выводить, но потом быстро осознал, что цветную картинку так просто не получить, а чипы кодеры из rgb в композит были труднодоступны и единственным выходом дешёвым и практичным был scart разъём, куда гонятся именно разделённые составляющие цвета, но на этом идея и заглохла. Потом я написал некое подобие спрайтового движка для экранчика в 320х240 через SPI, тоже на этих камнях, тк у меня их с Китая набор. Потом была попытка на pic32, думал оценить MIPS, но что-то он совсем оказался проблемным и не стабильным. Возможно, просто китайский pickit фиговый. В итоге я снова однажды, не так давно решил взяться за эту идею, когда соскучился по паяльнику. Это такое хобби ещё с университетских времён. Создать самодостаточную коробочку, на которой можно для неё же писать код.

В общем-то основное отличие от подобных поделок и самоцель - максимально низкая цена и максимально простая сборка на макетках + достаточная производительность.

Re: На какой частоте работает DMA? STM32

Чт окт 12, 2017 00:27:16

Круто, но если так давно делаешь, то почему на F1? Для такого дела можно и F4 взять, может даже F429 с LTDC, если хочется именно на телевизор выводить.

Re: На какой частоте работает DMA? STM32

Чт окт 12, 2017 00:32:51

Круто, но если так давно делаешь, то почему на F1? Для такого дела можно и F4 взять, может даже F429 с LTDC, если хочется именно на телевизор выводить.


У меня есть f4 с sdram и дисплеем. Штука, безусловно, офигительная. Но одна из целей - цена, как я уже говорил. На данный момент стоимость компонентов не превышает 250 рублей + раскурочить какой-нибудь старый vga кабель. Я лично не видел stm32f4 плат дешевле 800 рублей по нынешним ценам, хотя сами камни f407 на али толкают по 300 рублей и их можно попробовать запаять. Портировать систему на более мощные камни - вообще не проблема. Если программы изолировать от периферии - арм есть арм.

Да и как практика показала, мне кажется проще сделать VGA, а переходников на все остальные разъёмы дешевых для него полно.
И монитор этот я достал через дорогу за косарь, списанный из офиса какого-то через авито. А телеков за косарь жк я не видел особо. А подключать свой дорогущий как-то боязно. Это тоже было причиной перехода на VGA.

Re: На какой частоте работает DMA? STM32

Чт окт 12, 2017 00:35:21

В общем-то основное отличие от подобных поделок и самоцель - максимально низкая цена и максимально простая сборка на макетках + достаточная производительность.

А, тогда ясно. У меня товарищ паял на переходнике F429ZI на 144 ноги, ставил сверху на чип мелкий радиатор, а поверху него выпаянную с планки SDRAM, тоже на переходнике, прямо сверху соединял проводками и все это втыкалось в макетку. Работает на 240MHz, SDRAM на 80MHz, так что на макетках тоже можно собирать достаточно продвинутые конструкции :) F429ZI мы с ним брали по 4$, плюс переходники 1.5$...

Re: На какой частоте работает DMA? STM32

Чт окт 12, 2017 00:42:04

В общем-то основное отличие от подобных поделок и самоцель - максимально низкая цена и максимально простая сборка на макетках + достаточная производительность.

А, тогда ясно. У меня товарищ паял на переходнике F429ZI на 144 ноги, ставил сверху на чип мелкий радиатор, а поверху него выпаянную с планки SDRAM, тоже на переходнике, прямо сверху соединял проводками и все это втыкалось в макетку. Работает на 240MHz, SDRAM на 80MHz, так что на макетках тоже можно собирать достаточно продвинутые конструкции :) F429ZI мы с ним брали по 4$, плюс переходники 1.5$...


У меня единственный вопрос на макетках вызывают конденсаторы. pic32 требует установки двух не дальше вроде 6 мм от входа в микруху между питанием и землёй. Я не смотрел ещё стартап в STM32, но полагаю там то же правило. Это единственное, что у меня в макетках вызывает вопрос. Фигачить их на весу? Но там же расстояние 0.5, довольно не надёжно выходит. Как он решил эту ситуацию?

Re: На какой частоте работает DMA? STM32

Чт окт 12, 2017 00:52:44

У меня единственный вопрос на макетках вызывают конденсаторы. pic32 требует установки двух не дальше вроде 6 мм от входа в микруху между питанием и землёй. Я не смотрел ещё стартап в STM32, но полагаю там то же правило. Это единственное, что у меня в макетках вызывает вопрос. Фигачить из на весу? Но там же расстояние 0.5, довольно не надёжно выходит. Как он решил эту ситуацию?

Переходник вот такой: Изображение
Паяется мк и гребенка, сверху между штырями гребенки паяются конденсаторы и сверху же довольно толстым эмалированным проводом соединяются все линии питания. Аналогично на переходнике памяти напаянны конденсаторы и все соединено с гребенкой на переходнике мк тонким эмалированным проводом. Я так пару раз делал, но только на 48-ми ногих. То что там расстояния больше 6 мм имеет значение если эту конструкцию в космос будут запускать, а для любительского применения все нормально работает при достаточно большом разгоне. Конечно если паять аккуратно :)
А, ты про конденсаторы для кварца? Они уже паяются на макетке в которую этот переходник втыкается, прямо между ногами кварца...

Re: На какой частоте работает DMA? STM32

Чт окт 12, 2017 02:02:35

У меня единственный вопрос на макетках вызывают конденсаторы. pic32 требует установки двух не дальше вроде 6 мм от входа в микруху между питанием и землёй. Я не смотрел ещё стартап в STM32, но полагаю там то же правило. Это единственное, что у меня в макетках вызывает вопрос. Фигачить из на весу? Но там же расстояние 0.5, довольно не надёжно выходит. Как он решил эту ситуацию?

Переходник вот такой: Изображение
Паяется мк и гребенка, сверху между штырями гребенки паяются конденсаторы и сверху же довольно толстым эмалированным проводом соединяются все линии питания. Аналогично на переходнике памяти напаянны конденсаторы и все соединено с гребенкой на переходнике мк тонким эмалированным проводом. Я так пару раз делал, но только на 48-ми ногих. То что там расстояния больше 6 мм имеет значение если эту конструкцию в космос будут запускать, а для любительского применения все нормально работает при достаточно большом разгоне. Конечно если паять аккуратно :)
А, ты про конденсаторы для кварца? Они уже паяются на макетке в которую этот переходник втыкается, прямо между ногами кварца...


Спасибо, учту в будущих экспериментах

Re: На какой частоте работает DMA? STM32

Сб мар 02, 2019 00:07:44

Тоже наткнулся на эти грабли.
Перекидываю из SDRAM в дисплей данные. Обычным циклом, типа :
Код:
        uint16_t* p = buf_sdram;
        for(uint32_t i=0; i<384000;i++)   *(uint16_t*)0x60020000 = *p++;
улетают за 23 ms. Через DMA - 40 ms.
Жесть... :cry:
Камень - F429.

PS: Вот ну никак я не ожидал такого от ST. Ну никак... :facepalm:

Re: На какой частоте работает DMA? STM32

Сб мар 02, 2019 01:07:40

Камень - F429.

Дисплей тоже к FMC подключен?

Re: На какой частоте работает DMA? STM32

Сб мар 02, 2019 04:37:21

улетают за 23 ms. Через DMA - 40 ms.

А в случае DMA, CPU стоит или чем-то занимается? Конкуренция за шину доступа к памяти между CPU и DMA была?

Re: На какой частоте работает DMA? STM32

Сб мар 02, 2019 06:28:30

Дисплей тоже к FMC подключен?
Да.

Добавлено after 2 minutes 31 second:
А в случае DMA, CPU стоит или чем-то занимается?
Естественно. Дисплей должен постоянно обновляться из буфера, в который будет производиться отрисовка.
Не циклить же навечно проц выводом буфера на экран...

В любом случае, я выберу DMA, даже в ущерб скорости. 40 мс, в принципе, нормальное время. Глазу обновление экрана будет практически не заметно.

Re: На какой частоте работает DMA? STM32

Сб мар 02, 2019 07:04:35

А в случае DMA, CPU стоит или чем-то занимается?
Естественно.

Тогда все честно. CPU с DMA конкурируют за шину доступа к памяти. В худшем случае, когда CPU постоянно что-то из оперативки тащит, скорость должна была быть вообще ровно в два раза ниже, чем при монопольном доступе CPU к памяти.

Кстати, я из-за этого отказался от полного обновления экрана, обновляя только зоны спрайтов, включая восстановление фона на месте их расположения в предыдущем кадре. То бишь, в памяти даже нет всего экрана. Есть спрайты и для каждого активного спрайта - прямоугольная область, которая была на месте его расположения до его отрисовки, даже если альфа-каналом она не прекрывалась.
Последний раз редактировалось ПростоНуб Сб мар 02, 2019 07:10:47, всего редактировалось 1 раз.
Ответить