Сколько тактов ожидания FLASH нужно STM32H743?
Обновлено Редакция GAW
У STM32H743 флеш-память подключена к шине AXI, и такты ожидания задаются по частоте этой шины и по уровню напряжения ядра VOS. Кроме LATENCY в FLASH_ACR есть второе поле — WRHIGHFREQ, задержка при записи; его тоже берут из таблицы.
Табл. 17 RM0433 (без VOS2)
| LATENCY | WRHIGHFREQ | VOS3 (0,95–1,05 В) | VOS1 (1,15–1,26 В) | VOS0 (1,26–1,40 В) |
|---|---|---|---|---|
| 0 | 00 | до 45 МГц | до 70 МГц | до 70 МГц |
| 1 | 01 | 45–90 МГц | 70–140 МГц | 70–140 МГц |
| 2 | 01 | 90–135 МГц | 140–185 МГц | 140–185 МГц |
| 2 | 10 | — | 185–210 МГц | 185–210 МГц |
| 3 | 10 | 135–180 МГц | 210–225 МГц | 210–225 МГц |
| 4 | 10 | 180–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 аппаратура это поле не проверяет.
Источники
- 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 МГц
- 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
Нашли ошибку?
Смотрите также
- STM32H7Cortex-M7 от 280 до 600 МГц, двухъядерные H745/H747 — линейки, память, загрузка и распиновки
- Такт ожиданияЛишние такты при обращении к медленной памяти: частоты, настройка, кэш
- Масштабирование напряжения ядра (VOS)Выбор напряжения ядра стабилизатором STM32 под нужную частоту
- Такты ожидания флеш-памяти STM32LATENCY в FLASH_ACR по частоте и питанию, таблица и код
- Как настроить PLL1 STM32H743 на 480 МГц?HSE 25 МГц / 5 = 5 МГц, × 192 = 960 МГц VCO, / 2 = 480 МГц