v3.9.4

v3.9.4 добавляет модуль buzzer, ioctl-вызовы для обнаружения движения HM01B0 от Himax (с примерами маломощного пробуждения по движению), управление окном считывания MT9V034, функции пониженного энергопотребления Ethernet, драйвер камеры OV7670 и камеру Arduino Nano 33 BLE Sense. Также реализован большой набор ускорений JPEG / LCD / TV. API вывода VSYNC заменён на функцию обратного вызова, а расчёт усиления/экспозиции MT9V034 был исправлен — ознакомьтесь с несовместимыми изменениями ниже.

Основные моменты

  • Модуль buzzer — новый модуль buzzer (freq(), duty(), RESONANT_FREQ) на OpenMV Pure Thermal.

  • Обнаружение движения HM01B0 — новые ioctl-вызовы обнаружения движения Himax плюс пример маломощного пробуждения по движению.

  • Окно считывания MT9V034 — управление окном считывания глобального затвора через sensor.ioctl().

  • Новые камеры / платы — базовый драйвер OV7670, камера Arduino Nano 33 BLE Sense и плата Bormio.

  • Более быстрый конвейер — переписанный SIMD-кодировщик JPEG, ускоренная дебайеризация и значительное ускорение передач LCD/TV.

  • Несовместимое: sensor.set_vsync_output() заменён на sensor.set_vsync_callback(), а расчёт усиления/экспозиции MT9V034 был исправлен — см. несовместимые изменения.

Новые возможности

  • Buzzer — добавлен модуль buzzer с buzzer.freq(), buzzer.duty() и константой buzzer.RESONANT_FREQ (OpenMV Pure Thermal).

  • Обнаружение движения HM01B0 — добавлены ioctl-вызовы IOCTL_HIMAX_MD_ENABLE / MD_WINDOW / MD_THRESHOLD / MD_CLEAR и IOCTL_HIMAX_OSC_ENABLE вместе с примером обнаружения движения Himax и примером маломощного пробуждения himax_wakeup_on_motion_detection.py.

  • Окно считывания MT9V034 — добавлены IOCTL_SET_READOUT_WINDOW / IOCTL_GET_READOUT_WINDOW для управления окном считывания MT9V034 через sensor.ioctl().

  • Пониженное энергопотребление Ethernet — добавлены функции отключения питания / пониженного энергопотребления Ethernet.

  • Portenta — добавлены функции обратного вызова для включения/отключения внешнего осциллятора.

Прочие изменения и улучшения

  • Кодировщик JPEG переписан с использованием SIMD и ускорено кодирование Bayer→YCbCr, аппаратное ядро JPEG остаётся включённым во время выполнения скрипта, ускорена дебайеризация (~19,5 мс для VGA), сжатие JPEG перенесено на MDMA, пути передачи TV/LCD ускорены с помощью SIMD/эффективного DMA, а нагрузка на шину SPI LCD существенно снижена. Добавлен драйвер USB3320 ULPI PHY для высокоскоростного USB.

Исправления ошибок

Камеры и датчики:

  • Исправлены инициализация/потоковая передача драйвера HM01B0 и настроены его целевое значение AE / максимальное усиление, исправлено ограничение усиления AGC/AEC для MT9V034 и исправлена загрузка прошивки автофокуса OV5640 (порядок байтов).

Дисплей:

  • Исправлены передачи SPI LCD DMA размером более 64 КБ, полярность вывода LCD и стабильность шины LCD (AXI QOS).

Система и связь:

  • Исправлен экземпляр SDMMC, используемый драйвером CYW43 WiFi (с экземпляром SDMMC, определяемым платой), повышена эффективность DMA FLIR Lepton (VOSPI поднят до 20 МГц на H7), исправлено поведение Portenta при пониженном энергопотреблении / режиме ожидания (ограничение тока PMIC SW1, пониженное энергопотребление Ethernet и ULPI), сервер RTSP теперь допускает заголовки CSeq и PLAY Range в неупорядоченном виде (FFPLAY), исправлено 8-байтовое выравнивание стека EABI в компоновщике и исправлен сломанный импорт в примере Portenta mqtt_sub.py.

Оборудование и поддержка плат

  • Датчик камеры OV7670 — базовый драйвер.

  • Arduino Nano 33 BLE Sense — драйвер датчика камеры (порт nrf) с исправлениями вывода сброса и шины I2C.

  • HM01B0 — добавлено разрешение 320x320.

  • Bormio — конфигурация тактирования PLL, схема флеш-памяти и GPIO PORT K (также включён на Portenta).

  • USB3320 ULPI PHY — высокоскоростной USB.

Несовместимые изменения API

Видимые пользователю несовместимые изменения API между v3.9.3 и v3.9.4. Область: C-модули Python в modules/ и библиотеки Python в scripts/libraries/.

Каждое изменение помечено степенью его влияния:

  • major — затрагивает большинство скриптов, использующих эту возможность; вам потребуется адаптировать код.

  • behavior — тот же API, другие результаты; перепроверьте настроенные скрипты.

Изменения сгруппированы по влиянию в этом порядке. Если вы хотите просто адаптировать свой код, перейдите к контрольному списку миграции в конце. Каждый хэш коммита ведёт к его diff на GitHub.

Вывод VSYNC заменён функцией обратного вызова (major)

sensor.set_vsync_output(pin) был удалён и заменён на sensor.set_vsync_callback(callback). Линия VSYNC больше не управляет Pin напрямую; вместо этого вызывается объект Python с состоянием VSYNC, и ваша функция обратного вызова сама переключает Pin. Код, использовавший sensor.set_vsync_output(), должен быть адаптирован (см. обновлённый пример vsync_gpio_output.py).

Коммиты: 5bbe25c20

Исправлен расчёт усиления/экспозиции MT9V034 (behavior)

Тактовая частота MT9V034 и расчёт усиления/экспозиции были исправлены, поэтому sensor.set_auto_gain() / sensor.set_auto_exposure() теперь дают точные (и, следовательно, другие) значения, чем раньше. Скрипты, в которых были жёстко прописаны компенсирующие значения усиления/экспозиции для обхода старого неверного расчёта на камерах MT9V034 с глобальным затвором, должны убрать эти обходные решения и перенастроить.

Коммиты: 4420536c4

Контрольный список миграции

Для чистого переноса на v3.9.4 типичная работа такова:

  1. Замените sensor.set_vsync_output(pin) на sensor.set_vsync_callback(callback) и переключайте Pin внутри функции обратного вызова (изменение VSYNC).

  2. Перенастройте любые обходные решения по усилению/экспозиции MT9V034 в соответствии с исправленным расчётом (изменение MT9V034).

Все остальные скрипты работают без изменений.