CRS (clock recovery system)
USB требует точной частоты 48 МГц, а внутренний RC-генератор сам по себе так не может. В STM32 с генератором HSI48 эту задачу решает блок CRS: он сравнивает частоту с пакетами начала кадра от хоста и подстраивает генератор на лету.
Обновлено Редакция GAW
CRS (clock recovery system) — цифровой блок STM32, который подстраивает внутренний RC-генератор HSI48 по внешнему эталону. По RM0433 (разд. 9.1) CRS измеряет частоту генератора, сравнивая её с сигналом синхронизации, и автоматически корректирует подстройку по измеренной ошибке без участия процессора. Главное применение — такт 48 МГц для USB без кварца.
Как работает
Эталоном обычно служат пакеты начала кадра (SOF), которые хост USB шлёт раз в 1 мс. Между двумя SOF генератор должен сделать ровно 48 000 периодов (наш расчёт: 48 МГц × 1 мс). 16-битный счётчик ошибки считает отклонение, и CRS сдвигает подстройку HSI48 (поле TRIM, 6 бит у STM32H743, табл. 85) в нужную сторону. Источник синхронизации можно сменить на внешний вывод или программный импульс, задать предделитель и полярность.
Флаги и прерывания
| Флаг | Смысл |
|---|---|
| SYNCOK | ошибка частоты в пределах нормы |
| SYNCWARN | ошибка больше, подстройка продолжается |
| ERR | ошибка синхронизации или подстройки |
| ESYNC | ожидаемый момент синхронизации |
Пределы ошибки программируются; для быстрого старта RM0433 предусматривает ручную подстройку до включения автоматики.
Где встречается
Блок CRS и генератор HSI48 есть у STM32H743 и STM32L073 (CMSIS), а на страницах семейств упомянуты STM32L0x2/x3, STM32F0 с USB и STM32G0B1. В общей схеме тактирования HSI48 — ещё один внутренний генератор рядом с HSE и HSI, а выбор такта USB делается в блоке RCC. О требованиях к частоте разных скоростей USB — в термине скорость USB.
Частые вопросы
Можно ли сделать USB на STM32 без кварца?
Да, если в микроконтроллере есть генератор HSI48 и блок CRS. CRS подстраивает HSI48 по пакетам начала кадра SOF, которые хост шлёт раз в миллисекунду, и частота 48 МГц для USB держится точно, пока устройство подключено. Так, по документам ST, работают STM32L0x2/x3, STM32F0 с USB, STM32G0B1 и STM32H7.
Что делает CRS, пока USB не подключено?
Пока нет пакетов SOF, нет и эталона для автоматической подстройки по USB. RM0433 предусматривает и другие источники синхронизации — внешний вывод или программные импульсы, — а также ручную подстройку для быстрого начального схождения.
Что означают флаги SYNCOK и SYNCWARN?
Это результат сравнения частоты на очередном импульсе синхронизации. SYNCOK — ошибка в допустимых пределах, SYNCWARN — ошибка больше и подстройка продолжается, ERR — синхронизация или подстройка не удалась, ESYNC — ожидаемый момент синхронизации. Пределы задают программно, и по каждому флагу можно разрешить прерывание.
Источники
- STMicroelectronics. RM0433: STM32H742, STM32H743/753 and STM32H750 Value line advanced Arm-based 32-bit MCUs. Reference manual, Rev 9 — разд. 9.1: CRS — цифровой контроллер, управляющий внутренним RC-генератором HSI48 с мелким шагом подстройки; оценивает частоту генератора сравнением с выбираемым сигналом синхронизации и автоматически подстраивает по измеренной ошибке, ручная подстройка тоже возможна; идеально подходит для точного такта USB: сигнал синхронизации — пакеты начала кадра (SOF), которые хост шлёт раз в 1 мс; возможны и другие источники синхронизации или программные импульсы; разд. 9.2: выбираемый источник с предделителем и полярностью, автоматическая подстройка без процессора, ручной режим для быстрого начального схождения, 16-битный счётчик ошибки частоты с автоматическим захватом и перезагрузкой, программируемый предел оценки, прерывания ESYNC, SYNCOK, SYNCWARN, ERR; табл. 85 — ширина TRIM 6 бит
- STMicroelectronics. CMSIS device headers stm32h743xx.h (cmsis-device-h7 v1.10.7) и stm32l073xx.h (cmsis-device-l0 v1.9.4), GitHub, Apache-2.0 — у STM32H743 и STM32L073 есть блок CRS и бит CRS_CR_AUTOTRIMEN; генератор HSI48 включается битом RCC_CR_HSI48ON (H7) и RCC_CRRCR_HSI48ON (L0)
Нашли ошибку?
Смотрите также
- HSE, HSI, LSE и LSIЧетыре тактовых генератора STM32: какой для чего
- Скорости USB 2.01,5, 12 и 480 Мбит/с: точность частоты и как хост определяет скорость
- USBСкорости, распиновка Type-A, Micro-B и Type-C, питание, CC, USB PD
- RCC (reset and clock control)Блок STM32, управляющий источниками тактов, делителями, включением периферии и сбросами
- STM32H7Cortex-M7 от 280 до 600 МГц, двухъядерные H745/H747 — линейки, память, загрузка и распиновки
- STM32L0Cortex-M0+, до 32 МГц, малое потребление: L010, L0x1, L0x2 с USB, L0x3 с ЖКИ — линейки и распиновки
- Дерево тактированияПуть тактового сигнала от генератора до периферии