Documente Academic
Documente Profesional
Documente Cultură
Laborator 2
Moduri de consum redus. Perifericul ULP.
(anul universitar 2021-2022)
Listă tabele
Table 1 ESP32 - Moduri de consum 1
Listă figuri
Fig. 1 Power Control Architecture 2
1
1. Scopul laboratorului
alimentare MHz
decuplată
Light sleep ceas inhi- alimentare de- surse HS activ activ activ 800 µA < 1 msec
bat cuplată inactive
Deep sleep conext alimentare de- surse HS alimentare activ activ 6,5 µA 2
1 Alternanţa ı̂ntre Modem sleep şi Active se realizează automat pe baza parametrilor de comunicaţie – sistemul
1
Fig. 1. Power Control Architecture
Tranziţii pot fi realizate doar ı̂ntre modul Active şi celelalte moduri de consum (redus),
revenirea ı̂n modul Active realizându-se prin activarea unor surse de evenimente (wake-up
sources).
Info
Mai multe detalii sunt disponible ı̂n manualul tehnic ESP32 ı̂ncepând cu pagina 638
şi ı̂n documentaţia on-line.
2
• activarea/dezactivarea surselor de ceas (inclusiv blocurile PLL)
• 3 timere - timer-ul RTC, timer-ul ULP şi timer-ul pentru taste capacitive
• coprocesorul ULP
• Bloc de memorie SRAM de 8kB (RTC slow memory) folosit de ULP pentru date
şi cod. Memoria este mapată şi ı̂n spaţiul de adrese al nucleelor principale şi prin
intermediul ei pot fi schimbate date ı̂ntre unităţile de procesare.
• Bloc de memorie SRAM de 8kB (RTC slow memory) folosit pentru stocarea datelor
ı̂n modurile de consum redus (mai puţin ı̂n modul Hibernate).
• 18 intrări (analogice) active ı̂n toate modurile de funcţionare ce pot fi folosite ca surse
de wake-up
3. ULP
Coprocesorul ULP este implementat sub formă de automat cu stări finite şi a fost proiec-
tat pentru a efectua măsurători analogice (canale ADC externe, senzorul de temperatură
integrat), pentru a configura/interoga senzori cu interfaţă I2C şi pentru a efectua procesări
simple ı̂n perioadele de inactivitate ale nucleelor principale. Coprocesorul poate accesa
memoria RTC slow memory (cod & date) şi registrele perifericelor RTC CNTL, RTC IO şi
SARADC/SENS.
Coprocesorul dispune de 4 registre de uz general pe 16 biţi (R0-R3) şi de un registru pe
8 biţi (stage cnt) folosit pentru implementarea buclelor. stage cnt nu poate fi scris sau
citit direct, el este accesibil doar indirect prin intermediul unui set dedicat de instrucţiuni.
Intrucţiunile sunt de lungime fixă, pe 32 de biţi şi adresarea se realizează tot pe 32 de
biţi. Instrucţiunile de salt, operaţiile ALU, instrucţiunile de acces a memoriei şi a registrelor
sunt executate ı̂ntr-un ciclu, iar instrucţiunile de lucru cu periferice sunt executate ı̂ntr-un
număr variabil de cicli.
Coprocesorul are o frecvenţă de lucru de 8 MHz (sursa RTC FAST CLK).
3
3.1 Integrarea ı̂n aplicaţii
esp-idf include uneltele necesare pentru scrierea codului ı̂n limbaj asamblare. Pe scurt,
binarul ce conţine secţiunile de cod şi date (.text şi .bss) pentru ULP este ı̂ncorporat ı̂n
binarul aplicaţiei principale şi la rulare poate fi accesat prin intermediul unor etichete. Prin
intermediul unui set de funcţii din esp-idf codul este copiat ı̂n memoria RTC şi este pornită
execuţia lui.
Programele rulate de coprocesor pot fi construite pentru a rula ı̂n buclă infinită sau pot
fi rulate pe o perioadă de timp finită, execuţia fiind oprită prin intermediul instrucţiunii
halt. În cel din urmă caz, reluarea execuţiei poate fi controlată prin programul principal
sau poate fi programată recurent prin folosirea unui timer dedicat disponibil ı̂n modului
RTC (la execui̧a instrucţiunii halt, timerul (f=150 kHz) este activat şi va număra până
la valoarea conţinută de un registru SENS ULP CP SLEEP CYCx REG, după care va reporni
coprocesorul).
Info
Informaţii complete despre modul de interacţiune sunt disponibile aici.
Documentaţia setului de instrucţiuni este disponibilă aici.
ld Sections
text section
data section These sections hold your program. as and ld treat them as separate
but equal sections. Anything you can say of one section is true another. When the
program is running, however, it is customary for the text section to be unalterable.
bss section This section contains zeroed bytes when your program begins running.
It is used to hold uninitialized variables or common storage.
Assembler Directives
.long expressions Expect zero or more expressions, of any section, separated by
commas. For each expression, emit a number that, at run time, is the value of that
expression. The byte order and bit size of the number depends on what kind of
target the assembly is for.
4
.global symbol, .globl symbol
texttt.global makes the symbol visible to ld. If you define symbol in your partial
program, its value is made available to other partial programs that are linked with it.
.global a
a:
.long
.global b
b:
.long
/* Sectiunea de cod */
.text
.global inceput_program:
inceput_program:
halt
/* sfarsit program */
5
cu .global şi se generează un fisier .h care conţine referinţe externe de forma extern
uint32 t ulp nume eticheta globala , iar ı̂n urma link-editării ele vor indica locaţiile
etichetate din RTC slow memory. Astfel, aplicaţia care rulează pe cele două nuclee Xtensa
are posibilitatea să schimbe date cu aplicaţia ULP, respectiv sa indice locaţia de memorie
de la care va ı̂ncepe execuţia codului.
4. Sarcini de lucru
2. Creaţi un proiect nou şi adăugaţi sursele puse la dispoziţie pe platforma moodle:
Info
Utilitarul menuconfig este construit sub forma unui meniu, interacţiunea fiind
realizată prin intermediul tastelor ↑, ↓, Enter şi Esc. În unele situaţii, datorită
integrării defectuoase, tastele ↑, ↓ nu răspund, funcţiile lor fiind substituite prin
intermediul tastelor J şi K.
Aplicaţia principală ı̂ncarcă codul ULP ı̂n memorie şi porneşte execuţia lui. Aplicaţia
ULP controlează pinul GPIO2 (RTC GPIO12), pin la care este conectat un LED.
• Perioadele tON şi tOFF ale LED-ului vor fi configurate din programul principal
prin intermediul variabilelor ulp on period ms, ulp off period ms. Uni-
tatea folosită este milisecunda.
6
• Durata de rulare a programului ULP va fi configurată prin indicarea numărului
de iteraţii ale buclei principale a programului. Se va folosi variabila ulp blink count
la nivelul programului principal. Coprocesorul ULP trebuie să execute instrucţiunea
halt la finalul programului.
• Studiaţi documentaţia şi programaţi reluarea automată a execuţiei codului ULP
dupa̧ o perioadă configurată tot la nivelul programului principal.
7
Materiale de studiu