v3.9.4

v3.9.4 añade un módulo buzzer, ioctls de detección de movimiento HM01B0 de Himax (con ejemplos de bajo consumo de activación por movimiento), control de la ventana de lectura del MT9V034, funciones de bajo consumo para Ethernet, un controlador de cámara OV7670 y la cámara del Arduino Nano 33 BLE Sense. También incorpora un gran conjunto de aceleraciones de JPEG / LCD / TV. La API de salida VSYNC se reemplazó por una función de retorno (callback) y se corrigieron los cálculos de ganancia/exposición del MT9V034: consulta los cambios incompatibles más abajo.

Aspectos destacados

  • Módulo buzzer: un nuevo módulo buzzer (freq(), duty(), RESONANT_FREQ) en el OpenMV Pure Thermal.

  • Detección de movimiento HM01B0: nuevos ioctls de detección de movimiento de Himax más un ejemplo de bajo consumo de activación por movimiento.

  • Ventana de lectura del MT9V034: controla la ventana de lectura del obturador global mediante sensor.ioctl().

  • Nuevas cámaras / placas: controlador básico OV7670, cámara del Arduino Nano 33 BLE Sense y la placa Bormio.

  • Pipeline más rápido: codificador JPEG SIMD reescrito, desbayerizado más rápido y grandes aceleraciones de transferencia para LCD/TV.

  • Incompatible: sensor.set_vsync_output() se reemplazó por sensor.set_vsync_callback() y se corrigieron los cálculos de ganancia/exposición del MT9V034: consulta los cambios incompatibles.

Nuevas características

  • Buzzer: se añadió un módulo buzzer con buzzer.freq(), buzzer.duty() y una constante buzzer.RESONANT_FREQ (OpenMV Pure Thermal).

  • Detección de movimiento HM01B0: se añadieron los ioctls IOCTL_HIMAX_MD_ENABLE / MD_WINDOW / MD_THRESHOLD / MD_CLEAR e IOCTL_HIMAX_OSC_ENABLE, con un ejemplo de detección de movimiento de Himax y un ejemplo de activación de bajo consumo himax_wakeup_on_motion_detection.py.

  • Ventana de lectura del MT9V034: se añadieron IOCTL_SET_READOUT_WINDOW / IOCTL_GET_READOUT_WINDOW para controlar la ventana de lectura del MT9V034 mediante sensor.ioctl().

  • Bajo consumo en Ethernet: se añadieron funciones de apagado / bajo consumo para Ethernet.

  • Portenta: se añadieron funciones de retorno (callback) para activar/desactivar el oscilador externo.

Otros cambios y mejoras

  • Se reescribió el codificador JPEG con SIMD y se aceleró la codificación Bayer→YCbCr, se mantuvo encendido el núcleo JPEG por hardware durante la ejecución del script, se aceleró el desbayerizado (~19,5 ms para VGA), se descargó la compresión JPEG en MDMA, se aceleraron las rutas de transferencia de TV/LCD con SIMD/DMA eficiente y se redujo enormemente el uso del bus del LCD SPI. Se añadió un controlador PHY ULPI USB3320 para USB de alta velocidad.

Corrección de errores

Cámara y sensores:

  • Se corrigió la inicialización/transmisión del controlador HM01B0 y se ajustaron su objetivo de AE / ganancia máxima, se corrigió el recorte de ganancia AGC/AEC del MT9V034 y se corrigió la carga del firmware de enfoque automático del OV5640 (orden de bytes).

Pantalla:

  • Se corrigieron las transferencias DMA del LCD SPI mayores de 64 KB, la polaridad de salida del LCD y la estabilidad del bus del LCD (AXI QOS).

Sistema y conectividad:

  • Se corrigió la instancia SDMMC utilizada por el controlador WiFi CYW43 (con una instancia SDMMC definida por la placa), se mejoró la eficiencia de DMA del FLIR Lepton (VOSPI elevado a 20 MHz en H7), se corrigió el comportamiento de bajo consumo / reposo del Portenta (límite de corriente del PMIC SW1, bajo consumo de Ethernet y ULPI), se hizo que el servidor RTSP tolere encabezados CSeq y PLAY Range desordenados (FFPLAY), se corrigió la alineación EABI de 8 bytes de la pila del enlazador y se corrigió una importación rota en el ejemplo mqtt_sub.py del Portenta.

Hardware y compatibilidad de placas

  • Sensor de cámara OV7670: controlador básico.

  • Arduino Nano 33 BLE Sense: controlador de sensor de cámara (puerto nrf) con correcciones del pin de reinicio y del bus I2C.

  • HM01B0: se añadió una resolución de 320x320.

  • Bormio: configuración del reloj PLL, distribución de la memoria flash y GPIO PORT K (también habilitado en el Portenta).

  • PHY ULPI USB3320: USB de alta velocidad.

Cambios incompatibles en la API

Cambios incompatibles en la API visibles para el usuario entre v3.9.3 y v3.9.4. Alcance: módulos C de Python en modules/ y bibliotecas de Python en scripts/libraries/.

Cada cambio está etiquetado según su impacto:

  • mayor: afecta a la mayoría de los scripts que usaban la característica; tendrás que portar el código.

  • comportamiento: misma API, resultados distintos; vuelve a revisar los scripts ajustados.

Los cambios se agrupan por impacto en ese orden. Si solo quieres portar tu código, salta a la lista de verificación de migración al final. Cada hash de commit enlaza con su diff en GitHub.

La salida VSYNC se reemplazó por una función de retorno (callback) (mayor)

sensor.set_vsync_output(pin) se eliminó y se reemplazó por sensor.set_vsync_callback(callback). La línea VSYNC ya no controla directamente un Pin; en su lugar se invoca un objeto invocable de Python con el estado de VSYNC, y tu función de retorno (callback) conmuta el Pin por sí misma. El código que usaba sensor.set_vsync_output() debe portarse (consulta el ejemplo actualizado vsync_gpio_output.py).

Commits: 5bbe25c20

Se corrigieron los cálculos de ganancia/exposición del MT9V034 (comportamiento)

Se corrigieron la velocidad del reloj y los cálculos de ganancia/exposición del MT9V034, de modo que sensor.set_auto_gain() / sensor.set_auto_exposure() ahora producen valores precisos (y por tanto diferentes) a los de antes. Los scripts que codificaban valores compensatorios de ganancia/exposición para sortear los antiguos cálculos incorrectos en las cámaras de obturador global MT9V034 deberían eliminar esas soluciones provisionales y reajustarse.

Commits: 4420536c4

Lista de verificación de migración

Para un porte limpio a v3.9.4 el trabajo habitual es:

  1. Reemplazar sensor.set_vsync_output(pin) por sensor.set_vsync_callback(callback) y conmutar el Pin desde dentro de la función de retorno (callback) (el cambio de VSYNC).

  2. Reajustar cualquier solución provisional de ganancia/exposición del MT9V034 frente a los cálculos corregidos (el cambio del MT9V034).

Todos los demás scripts funcionan sin modificaciones.