|
|
  |
быстрый(простой) интерфейс STM32 F0 (F1) с внешней RAM, как добавить 32 или 64 килобайта RAM к простому(дешевому) STM32 |
|
|
|
Jul 9 2015, 19:20
|
Гуру
     
Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025

|
Здравствуйте,
Есть задача, которая требует активной работы с большим объемом данных (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К ОЗУ, почему так?
Заранее спасибо за идеи и подсказки.
|
|
|
|
|
Jul 9 2015, 22:06
|
Частый гость
 
Группа: Свой
Сообщений: 105
Регистрация: 26-12-11
Из: Казань
Пользователь №: 69 101

|
Цитата(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. Будет удобнее, дешевле и быстрее чем МК + память отдельно.
|
|
|
|
|
Jul 10 2015, 04:50
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(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 - цена на них постоянно падает.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jul 13 2015, 14:37
|
Гуру
     
Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025

|
Большое спасибо всем откликнувшимся за советы!
Начитался документации, некоторые моменты очень нравятся, некоторые не очень, ну как всегда и везде и бывает- нет идеального камня.
Одновременно есть несколько проектов, требующих просто меньше памяти и вычислизма- и тут замечательно подъодит их совместимость, когда вместо F3 могу F0 впаять.
Еще в PIC24 очень помогало маппирование функций (любую функцию можно маппировать на любую из множества ног), у малоногих корпусов это важно. Тут тоже хорошо (хотя 48-ногий корпус у STM32 можно считать минимальным стандартом и тут уже вопрос так остро не стоит как в 20-ногих ПИКах). Ну и шаг можно было бы не 0.5мм а еще и 0.65 мм иметь, ну да ладно.
Ну и еще кое-где иногда напрягает отсутствие 5-вольтовых версий, но с этим нужно просто смириться, спасибо что толерантные входы есть.
|
|
|
|
|
Jul 14 2015, 07:42
|
Гуру
     
Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025

|
Цитата(adnega @ Jul 14 2015, 07:32)  У старых STM-ок не самый приятный ремап альтернативных функции. А как определить кто старый кто новый? сейчас сориентировался на два интересных мне по потреблению и ресурсам (STM32F070CBT6 и STM32F411RCT6) - оба оказались очень новыми. Млин, тяжко с непревычки по ST искать, все у них по-своему. А в таблице поиска по параметрам нет такого интересного параметра как "цена", что немного странно. Может, где-то есть более удобное средство для выбора? Пока что пользуюсь троицей: таблица на ST- Дижикей- STM32Cube, не очень-то удобно.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|