diff --git a/src/omv/boards/ARDUINO_PORTENTA_H7/omv_boardconfig.h b/src/omv/boards/ARDUINO_PORTENTA_H7/omv_boardconfig.h index 9e245267f..0c70f0ad2 100644 --- a/src/omv/boards/ARDUINO_PORTENTA_H7/omv_boardconfig.h +++ b/src/omv/boards/ARDUINO_PORTENTA_H7/omv_boardconfig.h @@ -236,6 +236,7 @@ // The sensor probing process will detect the right reset or powerdown // polarity, so it should be fine to enable it for both boards. #define OMV_CSI_RESET_PIN (&omv_pin_C13_GPIO) +#define OMV_CSI_RESET_DELAY (100) // GPIO.1 is connected to the sensor module frame sync pin (OUTPUT) on // the Portenta breakout board and to the INT pin (OUTPUT) on the Himax @@ -246,6 +247,7 @@ // and to the STROBE pin on the Himax shield, however it's not actually // used on the Himax shield and can be safely enable for the two boards. #define OMV_CSI_POWER_PIN (&omv_pin_D5_GPIO) +#define OMV_CSI_POWER_DELAY (100) // Physical I2C buses. diff --git a/src/omv/common/sensor_utils.c b/src/omv/common/sensor_utils.c index 3701c2c80..0b270067c 100644 --- a/src/omv/common/sensor_utils.c +++ b/src/omv/common/sensor_utils.c @@ -36,8 +36,16 @@ #include "omv_gpio.h" #include "omv_i2c.h" -#ifndef OMV_ISC_MAX_DEVICES -#define OMV_ISC_MAX_DEVICES (5) +#ifndef OMV_CSI_MAX_DEVICES +#define OMV_CSI_MAX_DEVICES (5) +#endif + +#ifndef OMV_CSI_RESET_DELAY +#define OMV_CSI_RESET_DELAY (10) +#endif + +#ifndef OMV_CSI_POWER_DELAY +#define OMV_CSI_POWER_DELAY (10) #endif #ifndef __weak @@ -156,7 +164,7 @@ __weak int sensor_reset() { } #endif - mp_hal_delay_ms(20); + mp_hal_delay_ms(OMV_CSI_RESET_DELAY); // Re-enable the bus. omv_i2c_enable(&sensor.i2c_bus, true); @@ -174,10 +182,10 @@ __weak int sensor_reset() { } static int sensor_detect() { - uint8_t devs_list[OMV_ISC_MAX_DEVICES]; + uint8_t devs_list[OMV_CSI_MAX_DEVICES]; int n_devs = omv_i2c_scan(&sensor.i2c_bus, devs_list, OMV_ARRAY_SIZE(devs_list)); - for (int i = 0; i < OMV_MIN(n_devs, OMV_ISC_MAX_DEVICES); i++) { + for (int i = 0; i < OMV_MIN(n_devs, OMV_CSI_MAX_DEVICES); i++) { uint8_t slv_addr = devs_list[i]; switch (slv_addr) { #if (OMV_OV2640_ENABLE == 1) @@ -256,7 +264,7 @@ int sensor_probe_init(uint32_t bus_id, uint32_t bus_speed) { mp_hal_delay_ms(10); omv_gpio_write(OMV_CSI_POWER_PIN, 0); - mp_hal_delay_ms(10); + mp_hal_delay_ms(OMV_CSI_POWER_DELAY); #endif #if defined(OMV_CSI_RESET_PIN) @@ -266,7 +274,7 @@ int sensor_probe_init(uint32_t bus_id, uint32_t bus_speed) { mp_hal_delay_ms(10); omv_gpio_write(OMV_CSI_RESET_PIN, 0); - mp_hal_delay_ms(10); + mp_hal_delay_ms(OMV_CSI_RESET_DELAY); #endif // Initialize the camera bus. @@ -281,21 +289,21 @@ int sensor_probe_init(uint32_t bus_id, uint32_t bus_speed) { #if defined(OMV_CSI_RESET_PIN) sensor.reset_pol = ACTIVE_LOW; omv_gpio_write(OMV_CSI_RESET_PIN, 1); - mp_hal_delay_ms(10); + mp_hal_delay_ms(OMV_CSI_RESET_DELAY); #endif if ((sensor.slv_addr = sensor_detect()) == 0) { #if defined(OMV_CSI_POWER_PIN) sensor.pwdn_pol = ACTIVE_LOW; omv_gpio_write(OMV_CSI_POWER_PIN, 1); - mp_hal_delay_ms(10); + mp_hal_delay_ms(OMV_CSI_POWER_DELAY); #endif if ((sensor.slv_addr = sensor_detect()) == 0) { #if defined(OMV_CSI_RESET_PIN) sensor.reset_pol = ACTIVE_HIGH; omv_gpio_write(OMV_CSI_RESET_PIN, 0); - mp_hal_delay_ms(10); + mp_hal_delay_ms(OMV_CSI_RESET_DELAY); #endif sensor.slv_addr = sensor_detect(); }