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

Сколько тактов ожидания FLASH нужно STM32H743?

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

У STM32H743 флеш-память подключена к шине AXI, и такты ожидания задаются по частоте этой шины и по уровню напряжения ядра VOS. Кроме LATENCY в FLASH_ACR есть второе поле — WRHIGHFREQ, задержка при записи; его тоже берут из таблицы.

Табл. 17 RM0433 (без VOS2)

LATENCYWRHIGHFREQVOS3 (0,95–1,05 В)VOS1 (1,15–1,26 В)VOS0 (1,26–1,40 В)
000до 45 МГцдо 70 МГцдо 70 МГц
10145–90 МГц70–140 МГц70–140 МГц
20190–135 МГц140–185 МГц140–185 МГц
210—185–210 МГц185–210 МГц
310135–180 МГц210–225 МГц210–225 МГц
410180–225 МГц—225–240 МГц

Частота здесь — шины AXI (rcc_aclk), которая по рис. 49 RM0433 не превышает 240 МГц, тогда как ядро может работать на 480 МГц. После сброса в FLASH_ACR записано 0x37 — 7 тактов и WRHIGHFREQ = 11, поэтому ошибка обычно проявляется, когда программа уменьшает LATENCY. Как уровни VOS связаны с частотой, описано в термине «Масштабирование напряжения».

Порядок записи

// Before raising AXI to 240 MHz in VOS0 (RM0433, 4.3.8, table 17)
FLASH->ACR = (FLASH->ACR & ~(FLASH_ACR_LATENCY | FLASH_ACR_WRHIGHFREQ))
           | (4U << FLASH_ACR_LATENCY_Pos) | FLASH_ACR_WRHIGHFREQ_1;
while ((FLASH->ACR & FLASH_ACR_LATENCY) != (4U << FLASH_ACR_LATENCY_Pos)) { }
// only now switch SYSCLK to PLL1

При повышении частоты поля пишут до переключения тактового сигнала и проверяют чтением, при понижении — после. Сама настройка PLL1 на 480 МГц разобрана в ответе «Как настроить PLL1 STM32H743 на 480 МГц», а общий смысл тактов ожидания — в термине «Такт ожидания». Для младших серий STM32 значения считает калькулятор тактов ожидания. Карта памяти и линейки — на странице STM32H7.

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

Почему считать нужно по частоте AXI, а не ядра?

Флеш-память STM32H743 подключена к шине AXI, и RM0433 нормирует такты ожидания по частоте её интерфейса. Делитель HPRE между ядром и шиной обычно стоит на 2, поэтому при 480 МГц на ядре флеш-память работает на 240 МГц.

Что будет, если оставить 7 тактов ожидания?

Программа будет работать, но медленнее: каждое чтение флеш-памяти, не попавшее в кэш инструкций, будет ждать лишние такты. Значение 7 ST ставит после включения как безопасное с запасом для любой частоты.

Зачем WRHIGHFREQ, если программа только читает флеш-память?

WRHIGHFREQ задаёт задержку сигналов при программировании и стирании. Пока программа флеш-память не пишет, ошибка в этом поле не видна, но запись настроек или обновление прошивки при неправильном значении может испортить данные. По RM0433 аппаратура это поле не проверяет.

Источники

  1. STMicroelectronics. RM0433 Reference manual STM32H742, STM32H743/753 and STM32H750 Value line, Rev 9 — разд. 4.3.8, табл. 17: LATENCY и WRHIGHFREQ по частоте интерфейса AXI и уровню VCORE — VOS3 0,95–1,05 В, VOS2 1,05–1,15 В, VOS1 1,15–1,26 В, VOS0 1,26–1,40 В; 0 WS — до 45/55/70/70 МГц; 1 WS (01) — до 90/110/140/140 МГц; 2 WS — до 135/165/185/185 МГц с WRHIGHFREQ = 01 и 185–210 МГц в VOS1 и VOS0 с WRHIGHFREQ = 10; 3 WS (10) — до 180/225/225/225 МГц; 4 WS (10) — 180–225 МГц в VOS3 и 225–240 МГц в VOS0; после включения — 7 тактов; порядок: при повышении частоты сначала LATENCY и WRHIGHFREQ с проверкой чтением, при понижении — после смены частоты; разд. 4.9.1: FLASH_ACR после сброса 0x0000 0037, WRHIGHFREQ — биты 5:4, LATENCY — биты 3:0, аппаратной проверки нет; рис. 49: ядро до 480 МГц, шина AXI (rcc_aclk) до 240 МГц
  2. STMicroelectronics. cmsis-device-h7, Include/stm32h743xx.h (commit 81db1ec) — FLASH_ACR_WRHIGHFREQ_Pos = 4, маска 0x30; FLASH_ACR_WRHIGHFREQ_1 = 0x20; FLASH_ACR_LATENCY — биты 3:0

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