v3.9.4

A v3.9.4 adiciona um módulo buzzer, ioctls de deteção de movimento HM01B0 da Himax (com exemplos de ativação por movimento em baixo consumo), controlo da janela de leitura do MT9V034, funções de baixo consumo para Ethernet, um controlador de câmara OV7670 e a câmara do Arduino Nano 33 BLE Sense. Inclui também um conjunto alargado de melhorias de desempenho em JPEG, LCD e 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 — consulte as alterações de quebra de compatibilidade abaixo.

Destaques

  • Módulo buzzer — novo módulo buzzer (freq(), duty(), RESONANT_FREQ) para o OpenMV Pure Thermal.

  • Deteção de movimento HM01B0 — novos ioctls de deteção de movimento Himax e um exemplo de ativação por movimento em baixo consumo.

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

  • Novas câmaras / placas — controlador básico OV7670, câmara do Arduino Nano 33 BLE Sense e a placa Bormio.

  • Pipeline mais rápido — codificador JPEG SIMD reescrito, debayering mais rápido e grandes melhorias de velocidade nas transferências LCD/TV.

  • Quebra de compatibilidade: sensor.set_vsync_output() foi substituído por sensor.set_vsync_callback() e a matemática de ganho/exposição do MT9V034 foi corrigida — consulte as alterações de quebra de compatibilidade.

Novas funcionalidades

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

  • Deteção de movimento HM01B0 — adicionados os ioctls IOCTL_HIMAX_MD_ENABLE / MD_WINDOW / MD_THRESHOLD / MD_CLEAR e IOCTL_HIMAX_OSC_ENABLE, com um exemplo de deteção de movimento Himax e um exemplo de ativação em baixo consumo himax_wakeup_on_motion_detection.py.

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

  • Ethernet em baixo consumo — adicionadas funções de desligamento e baixo consumo para Ethernet.

  • Portenta — adicionadas funções de callback para ativar/desativar o oscilador externo.

Outras alterações e melhorias

  • Reescrito o codificador JPEG com SIMD e acelerada a codificação Bayer→YCbCr, mantido o núcleo JPEG de hardware ligado durante a execução de scripts, acelerado o debayering (~19,5 ms para VGA), descarregada a compressão JPEG para MDMA, acelerados os percursos de transferência TV/LCD com SIMD/DMA eficiente, e reduzido drasticamente o uso do bus SPI LCD. Adicionado um controlador USB3320 ULPI PHY para USB de alta velocidade.

Correções de erros

Câmara e sensores:

  • Corrigida a inicialização/streaming do controlador HM01B0 e afinado o alvo de exposição automática / ganho máximo, corrigido o clamping de ganho AGC/AEC do MT9V034 e corrigido o carregamento do firmware de autofoco do OV5640 (ordem dos bytes).

Visualização:

  • Corrigidas transferências DMA do LCD SPI superiores a 64 KB, polaridade da saída LCD e estabilidade do bus LCD (AXI QOS).

Sistema e conectividade:

  • Corrigida a instância SDMMC utilizada pelo controlador WiFi CYW43 (com instância SDMMC definida por placa), melhorada a eficiência DMA do FLIR Lepton (VOSPI elevado a 20 MHz no H7), corrigido o comportamento de baixo consumo/standby da Portenta (limite de corrente PMIC SW1, baixo consumo de Ethernet e ULPI), feito o servidor RTSP tolerar cabeçalhos CSeq e PLAY Range fora de ordem (FFPLAY), corrigido o alinhamento de 8 bytes EABI do linker e corrigida uma importação incorreta no exemplo mqtt_sub.py da Portenta.

Hardware e suporte de placas

  • Sensor de câmara OV7670 — controlador básico.

  • Arduino Nano 33 BLE Sense — controlador do sensor de câmara (port nrf) com correções no pino de reset e no bus I2C.

  • HM01B0 — adicionada resolução 320x320.

  • Bormio — configuração do relógio PLL, esquema de flash e GPIO PORTA K (também ativado na Portenta).

  • USB3320 ULPI PHY — USB de alta velocidade.

Alterações de quebra de compatibilidade

Alterações de API visíveis pelo utilizador entre a v3.9.3 e a v3.9.4. Âmbito: módulos C Python em modules/ e bibliotecas Python em scripts/libraries/.

Cada alteração está classificada com o seu impacto:

  • maior — afeta a maioria dos scripts que usavam a funcionalidade; será necessário portar o código.

  • comportamento — mesma API, resultados diferentes; verifique novamente os scripts afinados.

As alterações estão agrupadas por impacto nessa ordem. Se apenas pretende portar o seu código, avance para a lista de verificação de migração no final. Cada hash de commit tem ligação para o respetivo diff no GitHub.

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

sensor.set_vsync_output(pin) foi removida e substituída por sensor.set_vsync_callback(callback). A linha VSYNC deixa de acionar um Pin diretamente; em vez disso, um callable Python é invocado com o estado VSYNC e o seu callback comuta o Pin. O código que usava sensor.set_vsync_output() tem de ser portado (consulte o exemplo atualizado vsync_gpio_output.py).

Commits: 5bbe25c20

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

A velocidade de relógio e a matemática de ganho/exposição do MT9V034 foram corrigidas, pelo que sensor.set_auto_gain() / sensor.set_auto_exposure() produzem agora valores precisos (e portanto diferentes) em relação ao anterior. Os scripts que usavam valores de ganho/exposição compensatórios para contornar a matemática incorreta anterior nas câmaras de obturador global MT9V034 devem eliminar esses contornos e reajustar os parâmetros.

Commits: 4420536c4

Lista de verificação de migração

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

  1. Substituir sensor.set_vsync_output(pin) por sensor.set_vsync_callback(callback) e comutar o Pin a partir do interior do callback (a alteração VSYNC).

  2. Reajustar quaisquer contornos de ganho/exposição do MT9V034 face à matemática corrigida (a alteração do MT9V034).

Todos os outros scripts funcionam sem modificações.