Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: быстрый(простой) интерфейс STM32 F0 (F1) с внешней RAM
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
Ruslan1
Здравствуйте,

Есть задача, которая требует активной работы с большим объемом данных (FFT по массиву 32 килобайта).
Сейчас работаю с PIC24, к которому подцепил последовательную SRAM по SPI интерфейсу.
Компилятор позволяет описать эту память, и далее работать с расположенными в ней данными как с внутренней памятью (только медленнее, но оптимизирован доступ к 1,2,4-байтным данным). Это всего лишь вызов моих функций общения с внешней RAM, то есть могу вставить не SPI a любой другой интерфейс.

Хочу перейти на STM32 F0 или F1: при прочих равных у них, по сравнению с PIC24, больше внутреннего RAM и меньше цена, да и 12-бит АЦП везде, а не иногда как это в PIC (мне нужно не меньше чем 12 бит).

Пока что вопросы вот какие:
1. Есть ли возможность прицепить внешнее RAM объемом до 64 кБайт к младшим моделям и сделать эту память прозрачной на уровне компилятора для процедур записи-чтения? То есть я пишу A = Im[i]*Re[i], а компилятор сам поймет что нужно достать 4-байтовые величины из внешней SPI памяти и вставить обращение к нужным подпрограммам.
2. Как еще можно подцепить память? взять 4-битную или 8-битную? какие механизмы быстрого доступа есть в STM32? например, может есть внешняя шина адреса-данных для параллельной SRAM?
3. Что-нибудь еще для подключения внешней памяти, специфическое для STM32 ? Например, вижу недорогие модели с RAM 16 к, вероятно смогу что-то соптимизировать для минимизации обращений во внешнее RAM. Ну и какое-то DMA присутствеут, может поможет.

Сильным стимулом к переходу от 16-битного PIC24 на 32-битный STM32 будет, если скорость обработки возможно увеличить ну хоть в несколько раз. Сейчас у меня обработка FFT 4096 точек в формате плавающей запятой ординарной точности занимает около 20 секунд (благодаря внешней SPI RAM памяти, внутренняя RAM всего 2к). Чего можно ожидать от STMF0 ? Я вижу выигрыш засчет 32-битного ALU. Ну, тактовую от 32 МГц до 48 МГц поднять могу (30% выигрыш). надеюсь на оптимизацию засчет того что внутренняя RAM может быть больше. Что еще?

Ну и как вариант- взять F3 с RAM 40 килобайт и перестрелять всех зайцев с одним внутренним ОЗУ. А к нему можно цивильно внешнюю RAM подключить "на вырост"?
Еще обнаружил на дижикее STM32F411RCT6 - он почему-то дешевле чем F3, хотя имеет аж 128К ОЗУ, почему так?

Заранее спасибо за идеи и подсказки.
Defin
Цитата(Ruslan1 @ Jul 9 2015, 22:20) *
1. Есть ли возможность прицепить внешнее RAM объемом до 64 кБайт к младшим моделям и сделать эту память прозрачной на уровне компилятора для процедур записи-чтения? То есть я пишу A = Im[i]*Re[i], а компилятор сам поймет что нужно достать 4-байтовые величины из внешней SPI памяти и вставить обращение к нужным подпрограммам.
2. Как еще можно подцепить память? взять 4-битную или 8-битную? какие механизмы быстрого доступа есть в STM32? например, может есть внешняя шина адреса-данных для параллельной SRAM?
3. Что-нибудь еще для подключения внешней памяти, специфическое для STM32 ? Например, вижу недорогие модели с RAM 16 к, вероятно смогу что-то соптимизировать для минимизации обращений во внешнее RAM. Ну и какое-то DMA присутствеут, может поможет.


У F103 серии есть FSMC контроллер и можно подключать внешнюю SRAM. Вопрос в том, что считать "младшей моделью". Да и зачем ради 64КБ городить огород?
http://www.st.com/st-web-ui/static/active/.../CD00191185.pdf

Цитата
Сильным стимулом к переходу от 16-битного PIC24 на 32-битный STM32 будет, если скорость обработки возможно увеличить ну хоть в несколько раз. Сейчас у меня обработка FFT 4096 точек в формате плавающей запятой ординарной точности занимает около 20 секунд (благодаря внешней SPI RAM памяти, внутренняя RAM всего 2к). Чего можно ожидать от STMF0 ? Я вижу выигрыш засчет 32-битного ALU. Ну, тактовую от 32 МГц до 48 МГц поднять могу (30% выигрыш). надеюсь на оптимизацию засчет того что внутренняя RAM может быть больше. Что еще?


Если нужна скорость, то лучше уж использовать серию F4. Памяти навалом, частота выше, поддержка процессором операций с плавающей точкой(FPU).
И конечно есть DSP со своими командами. На сайте ST есть библиотека с реализаций FFT.

Цитата
Ну и как вариант- взять F3 с RAM 40 килобайт и перестрелять всех зайцев с одним внутренним ОЗУ. А к нему можно цивильно внешнюю RAM подключить "на вырост"?
Еще обнаружил на дижикее STM32F411RCT6 - он почему-то дешевле чем F3, хотя имеет аж 128К ОЗУ, почему так?


В серии F3 много аналоговой периферии и точных АЦП. Ну и F411 довольно новая модель, возможно пиарят ценой.

На мой взгляд, стоит взять что-нибудь из ряда F4. Будет удобнее, дешевле и быстрее чем МК + память отдельно.

adnega
Цитата(Defin @ Jul 10 2015, 01:06) *
На мой взгляд, стоит взять что-нибудь из ряда F4. Будет удобнее, дешевле и быстрее чем МК + память отдельно.

Полностью согласен.

Если есть матан, то F0 не советую. Не советую и старую серию F1 - альтернативные функции пинов очень не гибко настраиваются.
Если все может уместиться во внутренней RAM, то лучше ориентироваться на нее.
Сергей Борщ
Цитата(Ruslan1 @ Jul 9 2015, 22:20) *
и сделать эту память прозрачной на уровне компилятора для процедур записи-чтения? То есть я пишу A = Im[i]*Re[i], а компилятор сам поймет что нужно достать 4-байтовые величины из внешней SPI памяти и вставить обращение к нужным подпрограммам.
На C++ - возможно, причем для любого процессора. На "голом" Си - маловероятно. Известные мне компиляторы не умеют, в Стандарте языка такого нет.
Цитата(Ruslan1 @ Jul 9 2015, 22:20) *
например, может есть внешняя шина адреса-данных для параллельной SRAM?
смотрите STM32 с модулем FSMC. Он умеет.
Цитата(Ruslan1 @ Jul 9 2015, 22:20) *
надеюсь на оптимизацию засчет того что внутренняя RAM может быть больше.
Да, переход на внутреннее ОЗУ должен дать огромный скачек.
Цитата(Ruslan1 @ Jul 9 2015, 22:20) *
Ну и как вариант- взять F3 с RAM 40 килобайт и перестрелять всех зайцев с одним внутренним ОЗУ.
Это наилучший вариант. Или сразу F4 - цена на них постоянно падает.
Ruslan1
Большое спасибо всем откликнувшимся за советы!

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

Одновременно есть несколько проектов, требующих просто меньше памяти и вычислизма- и тут замечательно подъодит их совместимость, когда вместо F3 могу F0 впаять.

Еще в PIC24 очень помогало маппирование функций (любую функцию можно маппировать на любую из множества ног), у малоногих корпусов это важно. Тут тоже хорошо (хотя 48-ногий корпус у STM32 можно считать минимальным стандартом и тут уже вопрос так остро не стоит как в 20-ногих ПИКах). Ну и шаг можно было бы не 0.5мм а еще и 0.65 мм иметь, ну да ладно.

Ну и еще кое-где иногда напрягает отсутствие 5-вольтовых версий, но с этим нужно просто смириться, спасибо что толерантные входы есть.
adnega
Цитата(Ruslan1 @ Jul 13 2015, 17:37) *
Еще в PIC24 очень помогало маппирование функций

У старых STM-ок не самый приятный ремап альтернативных функции.
Ruslan1
Цитата(adnega @ Jul 14 2015, 07:32) *
У старых STM-ок не самый приятный ремап альтернативных функции.

А как определить кто старый кто новый?
сейчас сориентировался на два интересных мне по потреблению и ресурсам (STM32F070CBT6 и STM32F411RCT6) - оба оказались очень новыми.
Млин, тяжко с непревычки по ST искать, все у них по-своему. А в таблице поиска по параметрам нет такого интересного параметра как "цена", что немного странно.
Может, где-то есть более удобное средство для выбора? Пока что пользуюсь троицей: таблица на ST- Дижикей- STM32Cube, не очень-то удобно.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.