Программирование ARM ESP32: сброс и тактирование Sat, April 20 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

ESP32: сброс и тактирование Печать
Добавил(а) microsin   

У ESP32 есть 3 уровня сброса: CPU reset, Core reset и System reset. Ни один из этих уровней сброса не очищают содержимое RAM. На рис. 5 показаны подсистемы, которые включены в каждый уровень сброса.

Примечание: здесь приведен перевод главы "Reset and Clock" документации [1]. Незнакомые термины и сокращения см. в Словарике, в конце статьи.

Reset and Clock System fig05

Рис. 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 показывает структуру тактирования системы.

Reset and Clock System fig06

Рис. 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.

Таблица 10. Источник тактов для CPU_CLK.

Значение
RTC_CNTL_SOC_CLK_SEL
Источник тактов
0 XTL_CLK
1 PLL_CLK
2 RTC8M_CLK
3 APLL_CLK

Таблица 11. Формирование частоты тактов CPU_CLK.

Источник тактов SEL_0(*) SEL_1(*) Частота тактов CPU
XTL_CLK 0 - CPU_CLK = XTL_CLK / (APB_CTRL_PRE_DIV_CNT+1)
Диапазон значений APB_CTRL_PRE_DIV_CNT 0 .. 1023 (по умолчанию 0).
PLL_CLK (320 МГц) 1 0 CPU_CLK = PLL_CLK / 4
Частота CPU_CLK = 80 МГц.
1 CPU_CLK = PLL_CLK / 2
Частота CPU_CLK = 160 МГц.
PLL_CLK (480 МГц) 2 CPU_CLK = PLL_CLK / 2
Частота CPU_CLK = 240 МГц.
RTC8M_CLK 2 - CPU_CLK = RTC8M_CLK / (APB_CTRL_PRE_DIV_CNT+1)
Диапазон значений APB_CTRL_PRE_DIV_CNT 0 .. 1023 (по умолчанию 0).
APLL_CLK 3 0 CPU_CLK = APLL_CLK / 4
1 CPU_CLK = APLL_CLK / 2

Примечание (*): 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.

PLL_D2_CLK. Эта частота равна половине PLL_CLK.

Большинство периферийных устройств используют для своей работы частоту 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:

       fxtal(sdm2 + sdm1/28 + sdm0/216 + 4)
fout = -------------------------------------                            (Формула 1)
                  2(odiv + 2)

В этой формуле используются следующие параметры.

fxtal: частота кварцевого резонатора, обычно 40 МГц.
sdm0: значение 0 .. 255.
sdm1: значение 0 .. 255.
sdm2: значение 0 .. 63.
odiv: значение 0 .. 31.

Рабочая частота в числителе формулы 1 находится в диапазоне от 350 МГц до 500 МГц:

350 < fxtal(sdm2 + sdm1/28 + sdm0/216 + 4) < 500                   (Формула 2)

Обратите внимание, что 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).

PLL Phase Locked Loop, фазовая автоподстройка частоты, ФАПЧ.

PMU Power Management Unit, блок управления питанием.

PWM Pulse Width Modulation, широтно-импульсная модуляция, ШИМ.

REF источник опорной частоты тактов. Используется для отсчета реального временив приложении (частота тиков).

RWDT сброс от сторожевого таймера.

PRO_CPU ядро, предназначенное для обработки кода протоколов.

RTC Real Time Clock, часы реального времени.

ULP Ultra-Low Power, блок управления режимами пониженного энергопотребления.

WDT WatchDog Timer, сторожевой таймер.

[Ссылки]

1. ESP32 Technical Reference Manual site:docs.espressif.com.
2. ESP32 ECO and Workarounds for Bugs site:espressif.com.
3ESP32: управление энергопотреблением.
4ESP32: режимы пониженного энергопотребления.

 

Добавить комментарий


Защитный код
Обновить

Top of Page