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

SRAM (статическое ОЗУ)

Вся оперативная память микроконтроллера — переменные, стек, куча, буферы DMA — это SRAM, статическое ОЗУ. Его мало, оно быстрое и теряет содержимое без питания. Разберём, чем статическая ячейка отличается от динамической и как SRAM устроена в AVR и STM32.

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

SRAM (static random-access memory, статическое ОЗУ) — оперативная память, в которой каждый бит хранит триггер. Пока есть питание, ячейка держит значение сама, без регенерации, поэтому SRAM проста в использовании и работает на частоте процессора. Платой за это служит низкая плотность: на одну ячейку нужно несколько транзисторов, тогда как динамическому ОЗУ (DRAM) хватает одного транзистора и конденсатора, заряд которого приходится периодически восстанавливать (Kuphaldt, т. IV, гл. 15). Поэтому SRAM в микроконтроллерах измеряется килобайтами, а не мегабайтами, и при отключении питания её содержимое пропадает.

SRAM в AVR

У ATmega328P 2048 байт внутренней SRAM. Она идёт в общем адресном пространстве памяти данных сразу за регистрами: сначала 32 рабочих регистра, затем 64 регистра ввода-вывода и 160 регистров расширенного ввода-вывода, а с адреса 0x0100 — сама SRAM (DS40002061B, разд. 8.3). Всё это пространство доступно через пять режимов адресации с указателями X, Y и Z. В SRAM живут глобальные переменные из секций .data и .bss, куча и стек, растущий от вершины памяти вниз.

SRAM в STM32F4

БлокSTM32F405/407STM32F42x/43xАдресКто обращается
SRAM1112 Кбайт112 Кбайт0x2000 0000все мастера AHB
SRAM216 Кбайт16 Кбайтсразу за SRAM1все мастера AHB
SRAM3—64 Кбайт0x2002 0000все мастера AHB
CCM64 Кбайт64 Кбайт0x1000 0000только процессор
Резервная SRAM4 Кбайт4 Кбайтв резервном доменепитается и от VBAT

По RM0090, разд. 2.1 и 2.3.1: системной SRAM у STM32F405/407 — 192 Кбайт, у STM32F42x/43x — 256 Кбайт, плюс 4 Кбайт резервной; размер SRAM2 — наш расчёт из этих сумм. Память доступна байтами, полусловами и словами без тактов ожидания. Блоки подключены к матрице шин отдельно, поэтому, например, Ethernet MAC может писать в SRAM2, пока процессор работает с SRAM1. CCM к матрице не подключена: DMA её не видит, и буферы DMA там размещать нельзя. Как блоки ложатся в адресное пространство ядра, показано в термине «Карта памяти Cortex-M».

Когда данные теряются

SRAM энергозависима. У STM32F4 в режиме Stop содержимое SRAM сохраняется, а в Standby стабилизатор ядра выключен, и SRAM теряется целиком — кроме 4 Кбайт резервной SRAM в резервном домене, которая может питаться от батарейки VBAT (RM0090, разд. 5.1.3). Если встроенной SRAM не хватает, добавляют внешнюю: статическую или псевдостатическую PSRAM через контроллер внешней памяти или QSPI.

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

Чем SRAM отличается от DRAM?

Ячейка SRAM — триггер, который держит бит, пока есть питание, и не требует обслуживания. Ячейка DRAM — крошечный конденсатор с одним транзистором: заряд утекает, и микросхема должна периодически перечитывать и перезаряжать ячейки (Kuphaldt, т. IV, гл. 15). DRAM плотнее и дешевле на бит, SRAM проще в использовании и быстрее, поэтому внутренняя память микроконтроллеров — статическая.

Почему у ATmega328P SRAM начинается с адреса 0x0100?

Первые 256 адресов памяти данных занимают регистры: 32 рабочих регистра, 64 регистра ввода-вывода и 160 регистров расширенного ввода-вывода. Внутренняя SRAM объёмом 2048 байт идёт следом, с 0x0100 до 0x08FF (DS40002061B, разд. 8.3; конечный адрес — наш расчёт). Поэтому стек при старте ставят на 0x08FF, вершину SRAM.

Сохраняется ли SRAM в режимах сна STM32?

В Stop — да: стабилизатор продолжает питать ядро и память, содержимое регистров и SRAM сохраняется. В Standby стабилизатор выключен, и SRAM теряется; остаются только схемы Standby и резервный домен с 4 Кбайт резервной SRAM у STM32F4 (RM0090, разд. 5.1.3 и 2.3.1). Данные, нужные после Standby, кладут туда или во флеш.

Источники

  1. Kuphaldt T. R. Lessons In Electric Circuits, Volume IV — Digital, ch. 15 «Digital Storage (Memory)» (CC BY) — простая схема памяти на триггерах — энергозависимое ОЗУ с произвольным доступом, технически это статическое ОЗУ; на ячейку нужно много вентилей и транзисторов, отсюда низкая плотность и заметное потребление, КМОП снизила потребление, но плотность осталась низкой; динамическое ОЗУ хранит бит в крошечном конденсаторе с одним MOSFET-ключом, заряд утекает, и микросхема периодически читает и перезаряжает ячейки — регенерация; флеш-память хранит заряд на изолированном затворе MOSFET
  2. Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P megaAVR Data Sheet (DS40002061B, 2020) — Features: 512 / 1K / 1K / 2K байт внутренней SRAM; разд. 8.3 SRAM Data Memory и рис. 8-3: младшие 768 / 1280 / 1280 / 2303 адреса памяти данных — 32 регистра, 64 регистра ввода-вывода, 160 регистров расширенного ввода-вывода (0x60–0xFF), затем 512 / 1024 / 1024 / 2048 байт внутренней SRAM; расширенный ввод-вывод доступен только командам ST/STS/STD и LD/LDS/LDD; пять режимов адресации, указатели X, Y, Z в R26–R31
  3. STMicroelectronics. RM0090 Reference manual STM32F405/415, STM32F407/417, STM32F427/437, STM32F429/439 (Rev 21, June 2024) — разд. 2.1, рис. 1: SRAM1 112 Кбайт, CCM 64 Кбайт вне матрицы шин, доступна только процессору; разд. 2.3.1: STM32F405/407 — 4 Кбайт резервной SRAM и 192 Кбайт системной SRAM, STM32F42x/43x — 4 и 256 Кбайт; доступ байтами, полусловами и словами на частоте процессора без тактов ожидания; SRAM1 и SRAM2 с адреса 0x2000 0000 доступны всем мастерам AHB, SRAM3 (F42x/43x) с 0x2002 0000, CCM с 0x1000 0000 только через D-bus; одновременный доступ мастеров, например Ethernet MAC к SRAM2 и процессора к SRAM1; разд. 5.1.3: в Stop содержимое регистров и SRAM сохраняется, в Standby теряется, кроме схем Standby и резервного домена

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