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

Сколько тактов ожидания FLASH нужно STM32F746 на 216 МГц?

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

У STM32F746 и F756 число тактов ожидания флеш-памяти зависит не только от частоты HCLK, но и от напряжения питания VDD: чем ниже питание, тем медленнее флеш-память и тем больше тактов нужно на той же частоте.

Табл. 5 RM0385 для старших частот

Такты (LATENCY)VDD 2,7–3,6 ВVDD 2,4–2,7 ВVDD 2,1–2,4 ВVDD 1,8–2,1 В
5150–180 МГц120–144 МГц110–132 МГц100–120 МГц
6180–210 МГц144–168 МГц132–154 МГц120–140 МГц
7210–216 МГц168–192 МГц154–176 МГц140–160 МГц
8—192–216 МГц176–198 МГц160–180 МГц
9——198–216 МГц—

Ноль тактов при 2,7–3,6 В допустим до 30 МГц, и дальше каждый следующий такт добавляет по 30 МГц. После сброса микроконтроллер работает на 16 МГц без тактов ожидания.

// 216 MHz at VDD = 3.3 V (RM0385, 3.3.2, table 5)
FLASH->ACR = (FLASH->ACR & ~FLASH_ACR_LATENCY) | FLASH_ACR_LATENCY_7WS
           | FLASH_ACR_ARTEN | FLASH_ACR_PRFTEN;
while ((FLASH->ACR & FLASH_ACR_LATENCY) != FLASH_ACR_LATENCY_7WS) { }
// now switch SYSCLK to PLL (over-drive must already be on)

Почему не всё так медленно

Ускоритель ART — кэш на 64 строки по 256 бит перед флеш-памятью — по оценке ST на CoreMark даёт ту же скорость, что исполнение без ожидания. Но он работает только для обращений через интерфейс ITCM, по адресам с 0x0020 0000; как выбрать адрес, разобрано в ответе «Откуда исполнять код на STM32F7». Устройство ускорителя описано в термине «ART Accelerator», смысл тактов ожидания — в термине «Такт ожидания».

Для STM32F1 и F4 такты считает калькулятор тактов ожидания STM32, а линейки STM32F7 с объёмами памяти — на странице STM32F7.

Похожие вопросы

Хватит ли 6 тактов ожидания на 200 МГц при 3,3 В?

Да: по табл. 5 RM0385 при питании 2,7–3,6 В шесть тактов покрывают интервал от 180 до 210 МГц. Семь тактов нужны только выше 210 МГц, то есть для 216 МГц.

Сильно ли 7 тактов ожидания тормозят программу?

Для кода, исполняемого через интерфейс ITCM, — заметно меньше, чем кажется: ускоритель ART хранит 64 строки по 256 бит, и по оценке ST на CoreMark даёт производительность, равную исполнению без ожидания до 216 МГц. Ветвления и большие таблицы констант всё равно вызывают промахи.

Нужно ли что-то ещё для 216 МГц, кроме тактов ожидания?

Да, режим over-drive регулятора: без него STM32F7 не работает выше 180 МГц. Порядок включения over-drive описан в термине «Режим over-drive» и в FAQ страницы STM32F7.

Источники

  1. STMicroelectronics. RM0385: STM32F75xxx and STM32F74xxx advanced Arm-based 32-bit MCUs. Reference manual, Rev 9 — разд. 3.3.2, табл. 5: такты ожидания по HCLK и VDD — при 2,7–3,6 В 0 WS до 30 МГц и далее шаг 30 МГц, 7 WS — 210–216 МГц; при 2,4–2,7 В шаг 24 МГц, 8 WS — 192–216 МГц; при 2,1–2,4 В шаг 22 МГц, 9 WS — 198–216 МГц; при 1,8–2,1 В шаг 20 МГц, 8 WS — 160–180 МГц, выше нет; после сброса 16 МГц и 0 WS; при повышении частоты — сначала LATENCY с проверкой чтением, затем SW и HPRE; разд. 3.3.2: ART (64 строки по 256 бит) только на интерфейсе ITCM, по CoreMark эквивалентен исполнению без ожидания до 216 МГц, включается битом ARTEN; разд. 3.7.1: FLASH_ACR — LATENCY[3:0], PRFTEN — бит 8, ARTEN — бит 9
  2. STMicroelectronics. cmsis-device-f7, Include/stm32f746xx.h (commit 2352e88) — FLASH_ACR_LATENCY — маска 0x0F, FLASH_ACR_LATENCY_7WS = 0x7; FLASH_ACR_PRFTEN — бит 8 (0x100), FLASH_ACR_ARTEN — бит 9 (0x200)

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