У ESP32 есть 3 уровня сброса: CPU reset, Core reset и System reset. Ни один из этих уровней сброса не очищают содержимое RAM. На рис. 5 показаны подсистемы, которые включены в каждый уровень сброса.
Примечание: здесь приведен перевод главы "Reset and Clock" документации [1]. Незнакомые термины и сокращения см. в Словарике, в конце статьи.
Рис. 5. System Reset.
CPU reset: сбрасываются только регистры одного или обоих ядер CPU. Core reset: сбрасываются все цифровые регистры, включая ядра CPU, external GPIO и digital GPIO. RTC не сбрасывается. System reset: сбрасываются все регистры чипа, включая регистры RTC.
[Источник сброса]
Хотя чаще всего оба ядра APP_CPU и PRO_CPU будут сброшены одновременно, некоторые источники сброса могут сбросить только одно из этих двух ядер. Причина сброса для каждого ядра можно выяснить по отдельности: причина сброса PRO_CPU будет сохранена в RTC_CNTL_RESET_CAUSE_PROCPU, и причина сброса APP_CPU будет в RTC_CNTL_RESET_CAUSE_APPCPU. Таблица 9 показывает возможные значения причины сброса, которые можно прочитать из этих регистров.
Таблица 9. Значения, кодирующие причины сброса ядер PRO_CPU и APP_CPU.
PRO
APP
Источник
Тип сброса
Примечание
0x01
Chip Power On Reset
System Reset
-
0x10
RWDT System Reset
См. в документации [1] главу, посвященную WDT.
0x0F
Brown Out Reset
См. в документации [1] главу, посвященную управлению питанием (Power Management).
0x03
Software System Reset
Core Reset
Конфигурация регистра RTC_CNTL_SW_SYS_RST.
0x05
Deep Sleep Reset
См. в документации [1] главу, посвященную управлению питанием (Power Management).
0x07
MWDT0 Global Reset
См. в документации [1] главу, посвященную WDT.
0x08
MWDT1 Global Reset
0x09
RWDT Core Reset
0x0B
-
MWDT0 CPU Reset
CPU Reset
0x0C
-
Software CPU Reset
Конфигурация регистра RTC_CNTL_SW_APPCPU_RST.
-
0x0B
MWDT1 CPU Reset
См. в документации [1] главу, посвященную WDT.
-
0x0C
Software CPU Reset
Конфигурация регистра RTC_CNTL_SW_APPCPU_RST.
0x0D
RWDT CPU Reset
См. в документации [1] главу, посвященную WDT.
-
0x0E
PRO CPU Reset
Показывает, что PRO_CPU независимо сбросил APP_CPU путем конфигурирования регистра DPORT_APPCPU_RESETTING.
[Тактирование системы (System Clock)]
ESP32 интегрирует на кристалле несколько источников тактирования для ядер CPU, периферийных устройств и RTC. Эти такты могут быть сконфигурированы таким образом, чтобы удовлетворить различным требованиям. Рис. 6 показывает структуру тактирования системы.
Рис. 6. System Clock.
Источник тактов. ESP32 может использовать внешний кварцевый генератор, внутреннюю систему PLL, или схему генерации в качестве источника тактов. Существуют следующие виды источников тактирования:
• Высокоскоростные такты (High Speed Clock)
– PLL_CLK это внутренние такты с частотой 320 МГц или 480 МГц. – XTL_CLK тактовый сигнал, генерируемый с использованием внешнего кварца, диапазон частот 2 .. 40 МГц.
• Такты с низким энергопотреблением (Low Power Clock)
– XTL32K_CLK это такты, генерируемые от внешнего кварца с частотой 32.768 кГц. – RTC8M_CLK внутренняя частота тактов с частотой по умолчанию 8 МГц. Эта частота настраивается. – RTC8M_D256_CLK такты, которая получены делением частоты актов RTC8M_CLK. Частота этих тактов равна (RTC8M_CLK / 256). По умолчанию получается частота 8000 / 256 = 31.250 кГц. – RTC_CLK внутренние такты, работающие с низким потреблением тока, частота по умолчанию 150 кГц. Эта частота настраивается.
• Audio Clock
– APLL_CLK это внутренние такты Audio PLL clock с диапазоном частот 16 .. 128 МГц.
Такты CPU. Как показывает рис. 6, CPU_CLK это главный источник тактов для обоих ядер CPU. Частота CPU_CLK может достигать 240 МГц, когда CPU находится в режиме повышенной производительности (high performance mode). Альтернативно CPU может работать на пониженных частотах, чтобы снизить энергопотребление.
Источник тактов CPU_CLK определяется регистром RTC_CNTL_SOC_CLK_SEL. PLL_CLK, APLL_CLK, RTC8M_CLK, и XTL_CLK могут быть установлены как источник для CPU_CLK, см. таблицы 10 и 11.
Примечание (*): SEL_0 это значение в регистре RTC_CNTL_SOC_CLK_SEL, SEL_1 значение в регистре CPU_CPUPERIOD_SEL.
[Тактирование периферийных устройств]
Такты периферии включают APB_CLK, REF_TICK, LEDC_SCLK, APLL_CLK и PLL_D2_CLK. Таблица 12 показывает, какие такты могут использоваться определенными периферийными устройствами.
Таблица 12. Использование тактов периферийными устройствами.
Периф. устройство
APB_CLK
REF_TICK
LEDC_SCLK
APLL_CLK
PLL_D2_CLK
EMAC
√
TIMG
√
I2S
√
√
√
UART
√
√
RMT
√
√
LED PWM
√
√
√
PWM
√
I2C
√
SPI
√
PCNT
√
Контроллер eFuse
√
SDIO Slave
√
SDMMC
√
APB_CLK. Такты APB_CLK формируются из CPU_CLK, как показано в таблице 13. Коэффициент деления зависит от источника тактов для CPU_CLK.
Таблица 13. Получение тактов APB_CLK.
Источник тактов CPU_CLK
APB_CLK
XTL_CLK
CPU_CLK
PLL_CLK
80 МГц
RTC8M_CLK
CPU_CLK
APLL_CLK
CPU_CLK / 2
REF_TICK. Такты REF_TICK получаются из APB_CLK с помощью делителя частоты. Значение делителя зависит от источника APB_CLK, которые в свою очередь зависят от источника CPU_CLK.
Путем конфигурирования правильных значений делителя для каждого источника APB_CLK пользователь может гарантировать, что частота REF_TICK не поменяется из-за изменения частоты APB_CLK. Регистры делителя показаны в таблице 14.
Таблица 14. Получение тактов REF_TICK.
Источник тактов CPU_CLK и APB_CLK
Регистр делителя частоты
XTL_CLK
APB_CTRL_XTAL_TICK_NUM
PLL_CLK
APB_CTRL_PLL_TICK_NUM
RTC8M_CLK
APB_CTRL_CK8M_TICK_NUM
APLL_CLK
APB_CTRL_APLL_TICK_NUM
LEDC_SCLK. Источник тактов LEDC_SCLK выбирается регистром LEDC_APB_CLK_SEL, как показано в таблице 15.
Таблица 15. Получение тактов LEDC_SCLK.
Значение LEDC_APB_CLK_SEL
Источник тактов LEDC_SCLK
0
RTC8M_CLK
1
APB_CLK
APLL_SCLK. APLL_CLK в качестве источника тактов использует PLL_CLK. Частота APLL_CLK настраивается с помощью регистров конфигурации APLL.
Большинство периферийных устройств используют для своей работы частоту APB_CLK. Когда эта частота изменяется, периферийным устройствам понадобится обновить свою конфигурацию тактирования, чтобы работать на нужной частоте. Периферийные устройства, которые используют REF_TICK, могут продолжать нормальную работу, когда переключается источник тактирования, без изменения своих параметров. Подробности см. в таблице 12.
Модуль LED PWM может использовать RTC8M_CLK в качестве источников тактов, когда такты APB_CLK запрещены. Другими словами, когда система переходит в режим пониженного энергопотребления (см. главу "Power Management" в даташите [1]), обычные периферийные устройства останавливаются (поскольку такты APB_CLK выключены), однако LED PWM может нормально работать от тактов RTC8M_CLK.
[Такты Wi-Fi и Bluetooth]
Wi-Fi и Bluetooth могут работать только если APB_CLK в качестве источника тактов использует PLL_CLK. Приостановка PLL_CLK требует предварительного перевода обоих блоков Wi-Fi и Bluetooth в режим пониженного энергопотребления (low-power consumption mode).
Для LOW_POWER_CLK один из источников тактов RTC_CLK, SLOW_CLK, RTC8M_CLK или XTL_CLK может быть выбран в качестве тактов режима пониженного энергопотребления для блоков Wi-Fi и Bluetooth.
[Такты RTC]
Такты SLOW_CLK и FAST_CLK формируются от низкочастотных тактов, потребляющих небольшое количество энергии. Модуль RTC может работать, когда остановлено большинство других тактов.
SLOW_CLK используется для тактирования модуля управления электропитанием (Power Management module). Эти такты могут формироваться от RTC_CLK, XTL32K_CLK или RTC8M_D256_CLK. FAST_CLK используется для тактирования модуля On-chip Sensor. Эти такты могут формироваться из XTL_CLK или RTC8M_CLK.
[Audio PLL]
Работа аудиоустройств и других критичных по времени приложений для передачи данных требуют тщательно сконфигурированных, точных источников тактирования с малым джиттером. Источники тактов, формируемые из системных тактов, которые обслуживают цифровые периферийные устройства, могут содержать дрожание перепадов периодов (джиттер), и по этой причине не могут поддерживать точное формирование тактовой частоты.
Наличие встроенного источника прецизионных синхросигналов позволяет минимизировать затраты на всю систему. С этой целью в ESP32 интегрирован блок Audio PLL. Формула вычисления частоты Audio PLL:
Обратите внимание, что sdm1 и sdm0 недоступны в revision0 кристалла ESP32. Обратитесь к документации [2] для получения информации по исправлениям в ревизиях ESP32.
Audio PLL может быть разрешена или запрещена вручную через регистры RTC_CNTL_PLLA_FORCE_PU и RTC_CNTL_PLLA_FORCE_PD соответственно. Запрет имеет приоритет над разрешением. Когда RTC_CNTL_PLLA_FORCE_PU и RTC_CNTL_PLLA_FORCE_PD равны 0, PLL будет следовать состоянию системы, например когда система входит в sleep mode, PLL будет запрещена автоматически; когда система пробуждается, работа PLL будет автоматически разрешена.
[Словарик]
APB Advanced Peripheral Bus, продвинутая шина для периферийных устройств.
APP_CPU ядро, предназначенное для обработки кода приложения.
DIV DIVider, делитель частоты.
ECO Engineering Change Orders, указания по исправлению ошибок кристалла в зависимости от его версии [2].
GPIO General-Purpose Input/Output, порты ввода/вывода общего назначения.
LED Light Emitting Diode, светодиод.
LEDC контроллер ШИМ для светодиодов (LED Controller).