v3.9.4

v3.9.4 adiciona um módulo buzzer, ioctls de detecção de movimento do HM01B0 da Himax (com exemplos de baixo consumo de despertar por movimento), controle da janela de leitura do MT9V034, funções de baixo consumo de Ethernet, um driver de câmera OV7670 e a câmera do Arduino Nano 33 BLE Sense. Ela também traz uma grande série de otimizações de JPEG / LCD / TV. A API de saída VSYNC foi substituída por um callback e a matemática de ganho/exposição do MT9V034 foi corrigida — leia as mudanças incompatíveis abaixo.

Destaques

  • Módulo Buzzer — um novo módulo buzzer (freq(), duty(), RESONANT_FREQ) no OpenMV Pure Thermal.

  • Detecção de movimento do HM01B0 — novos ioctls de detecção de movimento da Himax mais um exemplo de baixo consumo de despertar por movimento.

  • Janela de leitura do MT9V034 — controle a janela de leitura de obturador global via sensor.ioctl().

  • Novas câmeras / placas — driver básico do OV7670, câmera do Arduino Nano 33 BLE Sense e a placa Bormio.

  • Pipeline mais rápido — codificador JPEG SIMD reescrito, debayering mais rápido e grandes otimizações de transferência LCD/TV.

  • Incompatível: sensor.set_vsync_output() foi substituído por sensor.set_vsync_callback() e a matemática de ganho/exposição do MT9V034 foi corrigida — veja as mudanças incompatíveis.

Novos recursos

  • Buzzer — adicionou um módulo buzzer com buzzer.freq(), buzzer.duty() e uma constante buzzer.RESONANT_FREQ (OpenMV Pure Thermal).

  • Detecção de movimento do HM01B0 — adicionou os ioctls IOCTL_HIMAX_MD_ENABLE / MD_WINDOW / MD_THRESHOLD / MD_CLEAR e IOCTL_HIMAX_OSC_ENABLE, com um exemplo de detecção de movimento da Himax e um exemplo de baixo consumo de despertar himax_wakeup_on_motion_detection.py.

  • Janela de leitura do MT9V034 — adicionou IOCTL_SET_READOUT_WINDOW / IOCTL_GET_READOUT_WINDOW para controle da janela de leitura do MT9V034 via sensor.ioctl().

  • Baixo consumo de Ethernet — adicionou funções de desligamento / baixo consumo de Ethernet.

  • Portenta — adicionou funções de callback para habilitar/desabilitar o oscilador externo.

Outras mudanças e melhorias

  • Reescreveu o codificador JPEG com SIMD e acelerou a codificação Bayer→YCbCr, manteve o núcleo JPEG de hardware ligado durante a execução do script, acelerou o debayering (~19,5 ms para VGA), descarregou a compressão JPEG para o MDMA, acelerou os caminhos de transferência de TV/LCD com SIMD/DMA eficiente e reduziu drasticamente o uso do barramento SPI do LCD. Adicionou um driver USB3320 ULPI PHY para USB de alta velocidade.

Correções de bugs

Câmera e sensores:

  • Corrigiu a inicialização/streaming do driver do HM01B0 e ajustou seu alvo de AE / ganho máximo, corrigiu o clamping de ganho AGC/AEC do MT9V034 e corrigiu o carregamento do firmware de autofoco do OV5640 (ordem de bytes).

Display:

  • Corrigiu transferências DMA do LCD SPI maiores que 64 KB, a polaridade da saída do LCD e a estabilidade do barramento do LCD (AXI QOS).

Sistema e conectividade:

  • Corrigiu a instância SDMMC usada pelo driver WiFi do CYW43 (com uma instância SDMMC definida pela placa), melhorou a eficiência do DMA do FLIR Lepton (VOSPI elevado para 20 MHz no H7), corrigiu o comportamento de baixo consumo / standby do Portenta (limite de corrente do PMIC SW1, baixo consumo de Ethernet e ULPI), fez o servidor RTSP tolerar cabeçalhos CSeq e PLAY Range fora de ordem (FFPLAY), corrigiu o alinhamento EABI de 8 bytes da pilha do linker e corrigiu um import quebrado no exemplo mqtt_sub.py do Portenta.

Hardware e suporte a placas

  • Sensor de câmera OV7670 — driver básico.

  • Arduino Nano 33 BLE Sense — driver do sensor de câmera (porta nrf) com correções no pino de reset e no barramento I2C.

  • HM01B0 — adicionou uma resolução 320x320.

  • Bormio — configuração de clock do PLL, layout da flash e GPIO PORT K (também habilitado no Portenta).

  • USB3320 ULPI PHY — USB de alta velocidade.

Mudanças incompatíveis na API

Quebras de API visíveis ao usuário entre a v3.9.3 e a v3.9.4. Escopo: C-modules Python em modules/ e bibliotecas Python em scripts/libraries/.

Cada mudança é marcada com seu impacto:

  • major — afeta a maioria dos scripts que usavam o recurso; você precisará portar o código.

  • behavior — mesma API, resultados diferentes; verifique novamente os scripts ajustados.

As mudanças são agrupadas por impacto nessa ordem. Se você só quer portar seu código, vá direto para a lista de verificação de migração no final. Cada hash de commit aponta para seu diff no GitHub.

Saída VSYNC substituída por um callback (major)

sensor.set_vsync_output(pin) foi removido e substituído por sensor.set_vsync_callback(callback). A linha VSYNC não aciona mais um Pin diretamente; em vez disso, um callable Python é invocado com o estado do VSYNC, e seu callback alterna o Pin por conta própria. Código que usava sensor.set_vsync_output() deve ser portado (veja o exemplo atualizado vsync_gpio_output.py).

Commits: 5bbe25c20

Matemática de ganho/exposição do MT9V034 corrigida (behavior)

A velocidade de clock e a matemática de ganho/exposição do MT9V034 foram corrigidas, de modo que sensor.set_auto_gain() / sensor.set_auto_exposure() agora produzem valores precisos (e, portanto, diferentes) dos anteriores. Scripts que fixavam valores compensatórios de ganho/exposição para contornar a antiga matemática incorreta em câmeras de obturador global MT9V034 devem descartar essas soluções alternativas e reajustar.

Commits: 4420536c4

Lista de verificação de migração

Para uma portabilidade limpa para a v3.9.4, o trabalho típico é:

  1. Substituir sensor.set_vsync_output(pin) por sensor.set_vsync_callback(callback) e alternar o Pin de dentro do callback (a mudança do VSYNC).

  2. Reajustar quaisquer soluções alternativas de ganho/exposição do MT9V034 em relação à matemática corrigida (a mudança do MT9V034).

Todos os outros scripts rodam sem alterações.