Здравствуйте,
Есть задача, которая требует активной работы с большим объемом данных (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К ОЗУ, почему так?
Заранее спасибо за идеи и подсказки.