Сколько тактов ожидания 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 В |
|---|---|---|---|---|
| 5 | 150–180 МГц | 120–144 МГц | 110–132 МГц | 100–120 МГц |
| 6 | 180–210 МГц | 144–168 МГц | 132–154 МГц | 120–140 МГц |
| 7 | 210–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.
Источники
- 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
- 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)
Нашли ошибку?
Смотрите также
- STM32F7Cortex-M7 до 216 МГц: F72x/F73x, F74x/F75x, F76x/F77x — линейки, память, загрузка и распиновки
- Такт ожиданияЛишние такты при обращении к медленной памяти: частоты, настройка, кэш
- ART Accelerator (кэш флеш STM32)Предвыборка и кэш, скрывающие такты ожидания флеш-памяти
- Такты ожидания флеш-памяти STM32LATENCY в FLASH_ACR по частоте и питанию, таблица и код
- По какому адресу исполнять код на STM32F7: 0x0800 0000 или 0x0020 0000?ITCM с ART — быстрый путь для кода, AXIM — через L1-кэш ядра; DMA всегда через AHB