v3.9.4

v3.9.4 dodaje moduł buzzer, ioctle wykrywania ruchu HM01B0 firmy Himax (z przykładami niskiego poboru mocy z wybudzaniem na ruch), sterowanie oknem odczytu MT9V034, funkcje niskiego poboru mocy Ethernet, sterownik kamery OV7670 oraz kamerę Arduino Nano 33 BLE Sense. Wprowadza także dużą porcję przyspieszeń JPEG / LCD / TV. API wyjścia VSYNC zostało zastąpione wywołaniem zwrotnym, a obliczenia wzmocnienia/ekspozycji MT9V034 zostały poprawione — przeczytaj poniższe przełomowe zmiany.

Najważniejsze zmiany

  • Moduł buzzer — nowy moduł buzzer (freq(), duty(), RESONANT_FREQ) na OpenMV Pure Thermal.

  • Wykrywanie ruchu HM01B0 — nowe ioctle wykrywania ruchu firmy Himax oraz przykład niskiego poboru mocy z wybudzaniem na ruch.

  • Okno odczytu MT9V034 — sterowanie oknem odczytu migawki globalnej za pomocą sensor.ioctl().

  • Nowe kamery / płytki — podstawowy sterownik OV7670, kamera Arduino Nano 33 BLE Sense oraz płytka Bormio.

  • Szybszy potok — przepisany koder JPEG SIMD, szybsze debayerowanie oraz duże przyspieszenia transferu LCD/TV.

  • Przełomowe: sensor.set_vsync_output() zostało zastąpione przez sensor.set_vsync_callback(), a obliczenia wzmocnienia/ekspozycji MT9V034 zostały poprawione — zobacz przełomowe zmiany.

Nowe funkcje

  • Buzzer — dodano moduł buzzer z buzzer.freq(), buzzer.duty() oraz stałą buzzer.RESONANT_FREQ (OpenMV Pure Thermal).

  • Wykrywanie ruchu HM01B0 — dodano ioctle IOCTL_HIMAX_MD_ENABLE / MD_WINDOW / MD_THRESHOLD / MD_CLEAR oraz IOCTL_HIMAX_OSC_ENABLE, wraz z przykładem wykrywania ruchu Himax i przykładem niskiego poboru mocy z wybudzaniem himax_wakeup_on_motion_detection.py.

  • Okno odczytu MT9V034 — dodano IOCTL_SET_READOUT_WINDOW / IOCTL_GET_READOUT_WINDOW do sterowania oknem odczytu MT9V034 za pomocą sensor.ioctl().

  • Niski pobór mocy Ethernet — dodano funkcje wyłączania zasilania / niskiego poboru mocy Ethernet.

  • Portenta — dodano funkcje wywołań zwrotnych włączania/wyłączania oscylatora zewnętrznego.

Pozostałe zmiany i ulepszenia

  • Przepisano koder JPEG z użyciem SIMD i przyspieszono kodowanie Bayer→YCbCr, utrzymano sprzętowy rdzeń JPEG zasilany podczas wykonywania skryptu, przyspieszono debayerowanie (~19,5 ms dla VGA), przeniesiono kompresję JPEG na MDMA, przyspieszono ścieżki transferu TV/LCD za pomocą SIMD/wydajnego DMA oraz znacząco zmniejszono użycie magistrali SPI LCD. Dodano sterownik USB3320 ULPI PHY dla USB wysokiej prędkości.

Poprawki błędów

Kamera i sensory:

  • Naprawiono inicjalizację/strumieniowanie sterownika HM01B0 i dostrojono jego docelową wartość AE / maksymalne wzmocnienie, poprawiono ograniczanie wzmocnienia AGC/AEC MT9V034 oraz naprawiono ładowanie oprogramowania układowego autofokusa OV5640 (kolejność bajtów).

Wyświetlacz:

  • Naprawiono transfery DMA SPI LCD większe niż 64 KB, polaryzację wyjścia LCD oraz stabilność magistrali LCD (AXI QOS).

System i łączność:

  • Naprawiono instancję SDMMC używaną przez sterownik WiFi CYW43 (z instancją SDMMC zdefiniowaną przez płytkę), poprawiono wydajność DMA FLIR Lepton (VOSPI podniesione do 20 MHz na H7), naprawiono zachowanie niskiego poboru mocy / czuwania Portenta (limit prądu PMIC SW1, niski pobór mocy Ethernet i ULPI), sprawiono, że serwer RTSP toleruje nagłówki CSeq i PLAY Range w niewłaściwej kolejności (FFPLAY), naprawiono 8-bajtowe wyrównanie EABI stosu linkera oraz naprawiono uszkodzony import w przykładzie mqtt_sub.py dla Portenta.

Sprzęt i obsługa płytek

  • Sensor kamery OV7670 — podstawowy sterownik.

  • Arduino Nano 33 BLE Sense — sterownik sensora kamery (port nrf) z poprawkami pinu resetu i magistrali I2C.

  • HM01B0 — dodano rozdzielczość 320x320.

  • Bormio — konfiguracja zegara PLL, układ pamięci flash oraz GPIO PORT K (włączony także na Portenta).

  • USB3320 ULPI PHY — USB wysokiej prędkości.

Przełomowe zmiany API

Widoczne dla użytkownika zmiany API między v3.9.3 a v3.9.4. Zakres: moduły C Pythona w modules/ oraz biblioteki Pythona w scripts/libraries/.

Każda zmiana jest oznaczona swoim wpływem:

  • major — dotyczy większości skryptów, które korzystały z danej funkcji; konieczne będzie przeniesienie kodu.

  • behavior — to samo API, inne wyniki; sprawdź ponownie dostrojone skrypty.

Zmiany są pogrupowane według wpływu w tej kolejności. Jeśli chcesz po prostu przenieść swój kod, przejdź do listy kontrolnej migracji na końcu. Każdy hash commita prowadzi do jego diffu na GitHubie.

Wyjście VSYNC zastąpione wywołaniem zwrotnym (major)

sensor.set_vsync_output(pin) zostało usunięte i zastąpione przez sensor.set_vsync_callback(callback). Linia VSYNC nie steruje już bezpośrednio Pin; zamiast tego wywoływany jest obiekt wywoływalny Pythona ze stanem VSYNC, a Twoje wywołanie zwrotne samo przełącza Pin. Kod, który używał sensor.set_vsync_output(), musi zostać przeniesiony (zobacz zaktualizowany przykład vsync_gpio_output.py).

Commity: 5bbe25c20

Poprawiono obliczenia wzmocnienia/ekspozycji MT9V034 (behavior)

Prędkość zegara MT9V034 oraz obliczenia wzmocnienia/ekspozycji zostały poprawione, więc sensor.set_auto_gain() / sensor.set_auto_exposure() dają teraz dokładne (a zatem inne) wartości niż wcześniej. Skrypty, które na sztywno zakodowały kompensujące wartości wzmocnienia/ekspozycji, aby obejść stare błędne obliczenia na kamerach z migawką globalną MT9V034, powinny porzucić te obejścia i ponownie się dostroić.

Commity: 4420536c4

Lista kontrolna migracji

Aby czysto przenieść się na v3.9.4, typowa praca to:

  1. Zastąp sensor.set_vsync_output(pin) przez sensor.set_vsync_callback(callback) i przełączaj Pin z wnętrza wywołania zwrotnego (zmiana VSYNC).

  2. Dostrój ponownie wszelkie obejścia wzmocnienia/ekspozycji MT9V034 względem poprawionych obliczeń (zmiana MT9V034).

Wszystkie pozostałe skrypty działają bez zmian.