v3.9.4

v3.9.4 aggiunge un modulo buzzer, gli ioctl per il rilevamento del movimento HM01B0 di Himax (con esempi di risveglio sul movimento a basso consumo), il controllo della finestra di lettura MT9V034, funzioni Ethernet a basso consumo, un driver per la camera OV7670 e la camera Arduino Nano 33 BLE Sense. Introduce inoltre un’ampia serie di accelerazioni per JPEG / LCD / TV. L’API di output VSYNC è stata sostituita da una callback e i calcoli di guadagno/esposizione del MT9V034 sono stati corretti — leggi le modifiche incompatibili qui sotto.

Punti salienti

  • Modulo buzzer — un nuovo modulo buzzer (freq(), duty(), RESONANT_FREQ) su OpenMV Pure Thermal.

  • Rilevamento del movimento HM01B0 — nuovi ioctl Himax per il rilevamento del movimento più un esempio di risveglio sul movimento a basso consumo.

  • Finestra di lettura MT9V034 — controllo della finestra di lettura del global-shutter tramite sensor.ioctl().

  • Nuove camere / schede — driver di base OV7670, camera Arduino Nano 33 BLE Sense e scheda Bormio.

  • Pipeline più veloce — encoder JPEG SIMD riscritto, debayering più rapido e grandi accelerazioni dei trasferimenti LCD/TV.

  • Incompatibile: sensor.set_vsync_output() è stato sostituito da sensor.set_vsync_callback() e i calcoli di guadagno/esposizione del MT9V034 sono stati corretti — vedi le modifiche incompatibili.

Nuove funzionalità

  • Buzzer — aggiunto un modulo buzzer con buzzer.freq(), buzzer.duty() e una costante buzzer.RESONANT_FREQ (OpenMV Pure Thermal).

  • Rilevamento del movimento HM01B0 — aggiunti gli ioctl IOCTL_HIMAX_MD_ENABLE / MD_WINDOW / MD_THRESHOLD / MD_CLEAR e IOCTL_HIMAX_OSC_ENABLE, con un esempio di rilevamento del movimento Himax e un esempio di risveglio a basso consumo himax_wakeup_on_motion_detection.py.

  • Finestra di lettura MT9V034 — aggiunti IOCTL_SET_READOUT_WINDOW / IOCTL_GET_READOUT_WINDOW per il controllo della finestra di lettura del MT9V034 tramite sensor.ioctl().

  • Ethernet a basso consumo — aggiunte funzioni Ethernet di spegnimento / basso consumo.

  • Portenta — aggiunte funzioni di callback per abilitare/disabilitare l’oscillatore esterno.

Altre modifiche e miglioramenti

  • Riscritto l’encoder JPEG con SIMD e accelerata la codifica Bayer→YCbCr, mantenuto il core JPEG hardware alimentato durante l’esecuzione dello script, accelerato il debayering (~19,5 ms per VGA), scaricata la compressione JPEG su MDMA, accelerati i percorsi di trasferimento TV/LCD con SIMD/DMA efficiente e ridotto enormemente l’utilizzo del bus LCD SPI. Aggiunto un driver PHY ULPI USB3320 per USB ad alta velocità.

Correzioni di bug

Camera e sensori:

  • Corretti l’inizializzazione/streaming del driver HM01B0 e regolati il suo target AE / guadagno massimo, corretto il clamping del guadagno AGC/AEC del MT9V034 e corretto il caricamento del firmware di autofocus dell’OV5640 (ordine dei byte).

Display:

  • Corretti i trasferimenti DMA LCD SPI superiori a 64 KB, la polarità dell’output LCD e la stabilità del bus LCD (AXI QOS).

Sistema e connettività:

  • Corretta l’istanza SDMMC usata dal driver WiFi CYW43 (con un’istanza SDMMC definita dalla scheda), migliorata l’efficienza DMA del FLIR Lepton (VOSPI portato a 20 MHz su H7), corretto il comportamento a basso consumo / standby del Portenta (limite di corrente PMIC SW1, basso consumo di Ethernet e ULPI), reso il server RTSP tollerante alle intestazioni CSeq e PLAY Range fuori ordine (FFPLAY), corretto l’allineamento EABI a 8 byte dello stack del linker e corretto un import danneggiato nell’esempio mqtt_sub.py del Portenta.

Hardware e supporto schede

  • Sensore camera OV7670 — driver di base.

  • Arduino Nano 33 BLE Sense — driver del sensore camera (port nrf) con correzioni del pin di reset e del bus I2C.

  • HM01B0 — aggiunta una risoluzione 320x320.

  • Bormio — configurazione del clock PLL, layout della flash e GPIO PORT K (abilitato anche su Portenta).

  • PHY ULPI USB3320 — USB ad alta velocità.

Modifiche incompatibili alle API

Modifiche incompatibili alle API visibili all’utente tra v3.9.3 e v3.9.4. Ambito: moduli C Python in modules/ e librerie Python in scripts/libraries/.

Ogni modifica è contrassegnata dal suo impatto:

  • major — interessa la maggior parte degli script che usavano la funzionalità; sarà necessario portare il codice.

  • behavior — stessa API, risultati diversi; ricontrolla gli script ottimizzati.

Le modifiche sono raggruppate per impatto in quest’ordine. Se vuoi solo portare il tuo codice, vai direttamente alla checklist di migrazione in fondo. Ogni hash di commit rimanda al suo diff su GitHub.

Output VSYNC sostituito da una callback (major)

sensor.set_vsync_output(pin) è stato rimosso e sostituito da sensor.set_vsync_callback(callback). La linea VSYNC non pilota più direttamente un Pin; invece viene invocato un callable Python con lo stato di VSYNC e la tua callback commuta il Pin stesso. Il codice che usava sensor.set_vsync_output() deve essere portato (vedi l’esempio aggiornato vsync_gpio_output.py).

Commit: 5bbe25c20

Calcoli di guadagno/esposizione del MT9V034 corretti (behavior)

La velocità di clock e i calcoli di guadagno/esposizione del MT9V034 sono stati corretti, quindi sensor.set_auto_gain() / sensor.set_auto_exposure() producono ora valori accurati (e quindi diversi) rispetto a prima. Gli script che codificavano valori di guadagno/esposizione compensativi per aggirare i vecchi calcoli errati sulle camere global-shutter MT9V034 dovrebbero eliminare quelle soluzioni alternative e ritarare.

Commit: 4420536c4

Checklist di migrazione

Per un porting pulito a v3.9.4 il lavoro tipico è:

  1. Sostituisci sensor.set_vsync_output(pin) con sensor.set_vsync_callback(callback) e commuta il Pin dall’interno della callback (la modifica VSYNC).

  2. Ritara eventuali soluzioni alternative di guadagno/esposizione del MT9V034 in base ai calcoli corretti (la modifica MT9V034).

Tutti gli altri script funzionano senza modifiche.