Перейти к содержанию

FSMC и FMC — контроллер внешней памяти STM32

Когда внутреннего ОЗУ не хватает или нужно подключить параллельную память и устройства, у старших STM32 есть контроллер внешней шины. Он превращает обычные обращения процессора по адресу в циклы чтения и записи внешней микросхемы.

Обновлено Редакция GAW

FSMC (flexible static memory controller) и его развитие FMC (flexible memory controller) — контроллеры внешней параллельной шины в старших STM32. Они отображают внешние микросхемы памяти в адресное пространство процессора: программа читает и пишет по адресу, а контроллер переводит обращения шины AHB в циклы внешнего устройства с нужными таймингами (RM0090, гл. 36–37). Все внешние устройства делят линии адреса, данных и управления, а различаются своими сигналами выбора кристалла (chip select).

Что подключают

ТипFSMC (STM32F40x/41x)FMC (STM32F42x/43x)
SRAM, NOR/OneNAND, PSRAMда, 4 банкада
NAND с аппаратным ECC2 банка2 банка
16-битные PC Cardдада
SDRAMнетда
Ширина шины данных8 или 16 бит8, 16 или 32 бит

Данные — по RM0090 (гл. 36 и 37). Банк 1 для NOR и PSRAM начинается с адреса 0x6000 0000 и делится на четыре подбанка с линиями NE1…NE4.

Тайминги

Для каждого банка задаются свои тайминги: число тактов ожидания, время оборота шины и задержки сигналов OE и WE — до 15 тактов каждое, причём для чтения и записи независимо. Это позволяет подключать медленные микросхемы к быстрому ядру. 32-битное обращение процессора к 16- или 8-битному устройству контроллер сам разбивает на несколько циклов. FIFO записи (2 слова у FSMC, 16 у F42x/43x) копит пакеты записи и быстрее освобождает шину AHB.

Настройки банков обычно задают при старте и больше не меняют, хотя RM0090 разрешает менять их в любой момент. Регистры самого контроллера у STM32F407 лежат по адресу 0xA000 0000 (FSMC_R_BASE в CMSIS-заголовке), а не в области данных банков. Обзор серии — на странице STM32F4.

Частые вопросы

Чем FMC отличается от FSMC?

FMC — развитие FSMC у STM32F42x/43x (RM0090, гл. 37). Он умеет то же — SRAM, PSRAM, NOR, NAND, PC Card, — но добавляет контроллер SDRAM, шину данных до 32 бит и непрерывный тактовый выход. FSMC у STM32F40x/41x работает только со статической памятью и шиной 8 или 16 бит (гл. 36).

Как программа обращается к внешней памяти через FSMC?

Как к обычной памяти: банк NOR/PSRAM у STM32F4 начинается с адреса 0x6000 0000 и делится на четыре подбанка со своими линиями выбора NE1…NE4 (RM0090, разд. 36.4). Чтение и запись по адресу внутри банка контроллер сам превращает во внешний цикл с заданными таймингами.

Почему запись в медленную внешнюю память не тормозит программу?

До определённого предела — благодаря FIFO записи: у FSMC STM32F40x/41x оно на 2 слова, у F42x/43x — на 16. Оно копит пакеты записи AHB и освобождает шину, пока контроллер выполняет медленные внешние циклы (RM0090, гл. 36). Если новая транзакция придёт до опустошения FIFO, контроллер вставит такты ожидания.

Источники

  1. STMicroelectronics. RM0090 Reference manual: STM32F405/415, STM32F407/417, STM32F427/437 and STM32F429/439, Rev 21 — гл. 36 — FSMC у STM32F40x/41x: синхронная и асинхронная память и 16-битные PC Card; переводит транзакции AHB в протокол внешнего устройства и выдерживает его тайминги; общие адрес, данные и управление, у каждого устройства свой chip select, одно обращение за раз; SRAM, NOR/OneNAND, PSRAM (4 банка), два банка NAND с аппаратным ECC до 8 КБ; шина 8 или 16 бит; такты ожидания, оборот шины и задержки OE/WE до 15; 32-битные обращения AHB делятся на 16- или 8-битные; FIFO записи 2 слова (16 у F42x/43x); 36.4 — банк 1 NOR/PSRAM с 0x6000 0000, четыре подбанка NE1…NE4; гл. 37 — FMC у STM32F42x/43x: то же плюс SDRAM, шина 8/16/32 бит
  2. STMicroelectronics. CMSIS device header stm32f407xx.h (cmsis-device-f4, commit 9192c7b) — FSMC_R_BASE 0xA0000000 — регистры FSMC; FSMC_Bank1_R_BASE — регистры банка 1

Нашли ошибку?