From dba679b002786a9fd997e8b677c134814eadc00d Mon Sep 17 00:00:00 2001 From: Charles Dias Date: Sun, 21 Jul 2024 17:55:22 -0300 Subject: [PATCH] boards: shields: add suport for st_b_cams_omv_mb1683 Add support for ST B-CAMS-OMV MB1683 shield. Signed-off-by: Charles Dias --- .../st_b_cams_omv_mb1683/Kconfig.defconfig | 10 ++ .../st_b_cams_omv_mb1683/Kconfig.shield | 5 + .../boards/stm32h7b3i_dk.overlay | 49 ++++++++ .../st_b_cams_omv_mb1683/doc/index.rst | 115 ++++++++++++++++++ .../doc/st_b_cams_omv.webp | Bin 0 -> 48940 bytes .../st_b_cams_omv_mb1683.overlay | 29 +++++ .../capture_to_lvgl/boards/stm32h7b3i_dk.conf | 11 ++ .../boards/stm32h7b3i_dk.overlay | 13 ++ 8 files changed, 232 insertions(+) create mode 100644 boards/shields/st_b_cams_omv_mb1683/Kconfig.defconfig create mode 100644 boards/shields/st_b_cams_omv_mb1683/Kconfig.shield create mode 100644 boards/shields/st_b_cams_omv_mb1683/boards/stm32h7b3i_dk.overlay create mode 100644 boards/shields/st_b_cams_omv_mb1683/doc/index.rst create mode 100644 boards/shields/st_b_cams_omv_mb1683/doc/st_b_cams_omv.webp create mode 100644 boards/shields/st_b_cams_omv_mb1683/st_b_cams_omv_mb1683.overlay create mode 100644 samples/drivers/video/capture_to_lvgl/boards/stm32h7b3i_dk.conf create mode 100644 samples/drivers/video/capture_to_lvgl/boards/stm32h7b3i_dk.overlay diff --git a/boards/shields/st_b_cams_omv_mb1683/Kconfig.defconfig b/boards/shields/st_b_cams_omv_mb1683/Kconfig.defconfig new file mode 100644 index 00000000000000..b1c72f20312398 --- /dev/null +++ b/boards/shields/st_b_cams_omv_mb1683/Kconfig.defconfig @@ -0,0 +1,10 @@ +# Copyright (c) 2024 Charles Dias +# SPDX-License-Identifier: Apache-2.0 + +if SHIELD_ST_B_CAMS_OMV_MB1683 + +# Enable the STM32 DCMI driver as the camera interface requires it. +config VIDEO_STM32_DCMI + default y + +endif # SHIELD_ST_B_CAMS_OMV_MB1683 diff --git a/boards/shields/st_b_cams_omv_mb1683/Kconfig.shield b/boards/shields/st_b_cams_omv_mb1683/Kconfig.shield new file mode 100644 index 00000000000000..6d4bfc0057847c --- /dev/null +++ b/boards/shields/st_b_cams_omv_mb1683/Kconfig.shield @@ -0,0 +1,5 @@ +# Copyright (c) 2024 Charles Dias +# SPDX-License-Identifier: Apache-2.0 + +config SHIELD_ST_B_CAMS_OMV_MB1683 + def_bool $(shields_list_contains,st_b_cams_omv_mb1683) diff --git a/boards/shields/st_b_cams_omv_mb1683/boards/stm32h7b3i_dk.overlay b/boards/shields/st_b_cams_omv_mb1683/boards/stm32h7b3i_dk.overlay new file mode 100644 index 00000000000000..aa0f459774e622 --- /dev/null +++ b/boards/shields/st_b_cams_omv_mb1683/boards/stm32h7b3i_dk.overlay @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2024 Charles Dias + * + * SPDX-License-Identifier: Apache-2.0 + * + */ + +#include + +&i2c4 { + pinctrl-0 = <&i2c4_scl_pd12 &i2c4_sda_pd13>; + pinctrl-names = "default"; + status = "okay"; + clock-frequency = ; + + ov5640: ov5640@3c { + compatible = "ovti,ov5640"; + reg = <0x3c>; + status = "okay"; + reset-gpios = <&gpioa 0 GPIO_ACTIVE_LOW>; + powerdown-gpios = <&gpioa 7 GPIO_ACTIVE_HIGH>; + + port { + ov5640_ep_out: endpoint { + remote-endpoint-label = "dcmi_ep_in"; + bus-type = ; + }; + }; + }; +}; + +&dcmi { + pinctrl-0 = <&dcmi_hsync_pa4 &dcmi_pixclk_pa6 &dcmi_vsync_pb7 + &dcmi_d0_pc6 &dcmi_d1_pc7 &dcmi_d2_pg10 &dcmi_d3_pc9 + &dcmi_d4_pc11 &dcmi_d5_pd3 &dcmi_d6_pb8 &dcmi_d7_pb9>; + pinctrl-names = "default"; + + dmas = <&dma1 0 75 (STM32_DMA_PERIPH_TO_MEMORY | STM32_DMA_PERIPH_NO_INC | + STM32_DMA_MEM_INC | STM32_DMA_PERIPH_8BITS | STM32_DMA_MEM_32BITS | + STM32_DMA_PRIORITY_HIGH) STM32_DMA_FIFO_1_4>; +}; + +&dma1 { + status = "okay"; +}; + +&dmamux1 { + status = "okay"; +}; diff --git a/boards/shields/st_b_cams_omv_mb1683/doc/index.rst b/boards/shields/st_b_cams_omv_mb1683/doc/index.rst new file mode 100644 index 00000000000000..35b038a76d5791 --- /dev/null +++ b/boards/shields/st_b_cams_omv_mb1683/doc/index.rst @@ -0,0 +1,115 @@ +.. _st_b_cams_omv_mb1683: + +ST B-CAMS-OMV-MB1683 +#################### + +Overview +******** + +The camera module bundle (B-CAMS-OMV) provides extension connectors +for the MB1379 STMicroelectronics camera module daughterboard or +third-party modules like OpenMV and Waveshare modules. It can be used +with the STM32 boards featuring a 1 x 30 pin ZIF connector for the +connection of multiple cameras to implement computer vision on STM32 +microcontrollers easily. + +The camera module bundle is compatible with all STM32 Discovery kits and +Evaluation boards featuring a ZIF connector, such as the STM32H747I-DISCO, +STM32H7B3I-DK, and 32L4R9IDISCOVERY Discovery kits. + +.. figure:: st_b_cams_omv.webp + :width: 600px + :align: center + :alt: B-CAMS-OMV-MB1683 + + B-CAMS-OMV MB1683 Image (Credit: STMicroelectronics.) + +Waveshare camera board connector CN4 +************************************* + ++------------+-----------------+------------+--------------+ +| Pin number | Description | Pin number | Description | ++============+=================+============+==============+ +| 1 | GND | 2 | VCAM | ++------------+-----------------+------------+--------------+ +| 3 | I2C_SDA | 4 | I2C_SCL | ++------------+-----------------+------------+--------------+ +| 5 | DCMI_HSYNC | 6 | DCMI_VSYNC | ++------------+-----------------+------------+--------------+ +| 7 | Camera_CLK | 8 | DCMI_PIXCLK | ++------------+-----------------+------------+--------------+ +| 9 | DCMI_D6 | 10 | DCMI_D7 | ++------------+-----------------+------------+--------------+ +| 11 | DCMI_D4 | 12 | DCMI_D5 | ++------------+-----------------+------------+--------------+ +| 13 | DCMI_D2 | 14 | DCMI_D3 | ++------------+-----------------+------------+--------------+ +| 15 | DCMI_D0 | 16 | DCMI_D1 | ++------------+-----------------+------------+--------------+ +| 17 | PWR_EN / LED1 | 18 | RESET# | ++------------+-----------------+------------+--------------+ + +ZIF connector CN5 +***************** + ++------------+--------------+------------+--------------+ +| Pin number | Description | Pin number | Description | ++============+==============+============+==============+ +| 1 | 3V3 | 16 | DCMI_PIXCK | ++------------+--------------+------------+--------------+ +| 2 | GND | 17 | GND | ++------------+--------------+------------+--------------+ +| 3 | I2C_SCL | 18 | SPI_MISO | ++------------+--------------+------------+--------------+ +| 4 | I2C_SDA | 19 | SPI_CS | ++------------+--------------+------------+--------------+ +| 5 | RESET# | 20 | DCMI_D7 | ++------------+--------------+------------+--------------+ +| 6 | PWR_EN / LED1| 21 | DCMI_D6 | ++------------+--------------+------------+--------------+ +| 7 | SHUTTER | 22 | DCMI_D5 | ++------------+--------------+------------+--------------+ +| 8 | GND | 23 | DCMI_D4 | ++------------+--------------+------------+--------------+ +| 9 | PULLDOWN / LED2 | 24 | DCMI_D3 | ++------------+--------------+------------+--------------+ +| 10 | Camera_CLK | 25 | DCMI_D2 | ++------------+--------------+------------+--------------+ +| 11 | 3V3 | 26 | DCMI_D1 | ++------------+--------------+------------+--------------+ +| 12 | DCMI_VSYNC | 27 | DCMI_D0 | ++------------+--------------+------------+--------------+ +| 13 | 5V (RSU) | 28 | SPI_MOSI | ++------------+--------------+------------+--------------+ +| 14 | DCMI_HSYNC | 29 | SPI_CLK | ++------------+--------------+------------+--------------+ +| 15 | GND | 30 | GND | ++------------+--------------+------------+--------------+ + +Requirements +************ + +Your board needs to have a ``dcmi`` device tree label to work with this shield. + +Usage +***** + +The shield can be used in any application by setting ``SHIELD`` to +``_st_b_cams_omv_mb1683`` and adding the necessary device tree properties. + +Set ``--shield "_st_b_cams_omv_mb1683"`` when you invoke ``west build``. For example: + +.. zephyr-app-commands:: + :zephyr-app: samples/drivers/video/capture_to_lvgl + :board: stm32h7b3i_dk + :shield: st_b_cams_omv_mb1683 + :goals: build + +References +********** + +- `Product page `_ + +- `Databrief `_ + +- `User manual `_ diff --git a/boards/shields/st_b_cams_omv_mb1683/doc/st_b_cams_omv.webp b/boards/shields/st_b_cams_omv_mb1683/doc/st_b_cams_omv.webp new file mode 100644 index 0000000000000000000000000000000000000000..2060d43b2e421d71e34a66027dc6cbe16b32c91d GIT binary patch literal 48940 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 zS?D;98vSB=fLMWw2BZKX=R3{^@}qzN00000000000000000000000000000000000 H00000N+4V_ literal 0 HcmV?d00001 diff --git a/boards/shields/st_b_cams_omv_mb1683/st_b_cams_omv_mb1683.overlay b/boards/shields/st_b_cams_omv_mb1683/st_b_cams_omv_mb1683.overlay new file mode 100644 index 00000000000000..590ecfd73bdd90 --- /dev/null +++ b/boards/shields/st_b_cams_omv_mb1683/st_b_cams_omv_mb1683.overlay @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2024 Charles Dias + * + * SPDX-License-Identifier: Apache-2.0 + * + */ + +/ { + chosen { + zephyr,camera = &dcmi; + }; +}; + +&dcmi { + status = "okay"; + sensor = <&ov5640>; + + bus-width = <8>; + hsync-active = <0>; + vsync-active = <0>; + pixelclk-active = <1>; + capture-rate = <1>; + + port { + dcmi_ep_in: endpoint { + remote-endpoint-label = "ov5640_ep_out"; + }; + }; +}; diff --git a/samples/drivers/video/capture_to_lvgl/boards/stm32h7b3i_dk.conf b/samples/drivers/video/capture_to_lvgl/boards/stm32h7b3i_dk.conf new file mode 100644 index 00000000000000..8166e8e3c019c6 --- /dev/null +++ b/samples/drivers/video/capture_to_lvgl/boards/stm32h7b3i_dk.conf @@ -0,0 +1,11 @@ +# +# Copyright (c) 2024 Charles Dias +# +# SPDX-License-Identifier: Apache-2.0 +# + +CONFIG_LOG_BUFFER_SIZE=2048 + +CONFIG_VIDEO_WIDTH=480 +CONFIG_VIDEO_HEIGHT=272 +CONFIG_VIDEO_BUFFER_POOL_SZ_MAX=262144 diff --git a/samples/drivers/video/capture_to_lvgl/boards/stm32h7b3i_dk.overlay b/samples/drivers/video/capture_to_lvgl/boards/stm32h7b3i_dk.overlay new file mode 100644 index 00000000000000..58d5786aae8f22 --- /dev/null +++ b/samples/drivers/video/capture_to_lvgl/boards/stm32h7b3i_dk.overlay @@ -0,0 +1,13 @@ +/* + * Copyright (c) 2024 Charles Dias + * + * SPDX-License-Identifier: Apache-2.0 + * + */ + +/delete-node/ &sram1; +/delete-node/ &sram2; + +&sram0 { + reg = <0x24000000 DT_SIZE_K(1024)>; +};