This is an old revision of the document!
În acest laborator veți învăța cum să interacționați cu periferice prin I2C și cum datele hardware sunt transmise aplicațiilor, de la nivel low-level (driver) până la cel high-level (aplicație).
Vom folosi două dispozitive:
Un driver este o componentă software a kernel-ului care permite sistemului de operare să comunice cu un dispozitiv hardware. Fără drivere, kernel-ul nu poate interacționa cu lumea externă CPU-ului.
Tipuri de drivere:
I2C (Inter-Integrated Circuit) este un protocol serial master–slave, folosit pentru a conecta microcontrolere la senzori și alte periferice, prin doar două linii:
Masterul (ex: ESP32S3) controlează comunicația și ceasul, iar fiecare dispozitiv slave are o adresă pe 7 biți. Transferul de date poate fi:
DRV2605L controlează motoare de vibrație și include o bibliotecă internă de efecte haptice, fără a genera manual semnalul de vibrare.
Arhitectura software în NuttX:
Codul este împărțit în două componente:
Senzor 3D cu funcționalități:
În NuttX, senzorul este expus direct printr-un char device în /dev/lsm6dsl
, fără nivel intermediar.
Această arhitectură este preluată din Linux și considerată „legacy”.
Pentru a putea rula exercițiile, compilați NuttX folosind hacktorwatch:iot
și activați manual următoarele config-uri:
1. Înțelegeți API-ul oferit de NuttX pentru aceste două device-uri:
nuttx-apps/examples/drv2605l/
– inițializează efecte haptice (upload_rom_effect
, play_effect
etc.).nuttx-apps/examples/lsm6dsl_reader
– afișează valorile de la accelerometru și giroscop la fiecare 2 secunde.
grep -r <string> nuttx/include/nuttx/
pentru a găsi structurile de date relevante.
2. Implementați feedback prin vibrație în funcție de direcția de mișcare:
lsm6dsl_reader
pentru a determina direcția (stânga/dreapta).play.value = 0
).usleep()
pentru citiri mai dese ale senzorului.3. (Bonus) Faceți vibrația proporțională cu intensitatea accelerației – cu cât accelerația e mai mare, cu atât vibrația e mai puternică.