diff --git a/src/omv/boards/OPENMV2/omv_boardconfig.h b/src/omv/boards/OPENMV2/omv_boardconfig.h index 3174aa57c..44a7c80bc 100644 --- a/src/omv/boards/OPENMV2/omv_boardconfig.h +++ b/src/omv/boards/OPENMV2/omv_boardconfig.h @@ -108,6 +108,20 @@ #define SCCB_SCL_PIN (GPIO_PIN_8) #define SCCB_SDA_PIN (GPIO_PIN_9) #define SCCB_TIMING (I2C_TIMING_STANDARD) // ignored +#define SCCB_FORCE_RESET() __HAL_RCC_I2C1_FORCE_RESET() +#define SCCB_RELEASE_RESET() __HAL_RCC_I2C1_RELEASE_RESET() + +/* FIR I2C */ +#define FIR_I2C (I2C2) +#define FIR_I2C_AF (GPIO_AF4_I2C2) +#define FIR_I2C_CLK_ENABLE() __I2C2_CLK_ENABLE() +#define FIR_I2C_CLK_DISABLE() __I2C2_CLK_DISABLE() +#define FIR_I2C_PORT (GPIOB) +#define FIR_I2C_SCL_PIN (GPIO_PIN_10) +#define FIR_I2C_SDA_PIN (GPIO_PIN_11) +#define FIR_I2C_TIMING (I2C_TIMING_FULL) +#define FIR_I2C_FORCE_RESET() __HAL_RCC_I2C2_FORCE_RESET() +#define FIR_I2C_RELEASE_RESET() __HAL_RCC_I2C2_RELEASE_RESET() /* DCMI */ #define DCMI_TIM (TIM1) diff --git a/src/omv/boards/OPENMV3/omv_boardconfig.h b/src/omv/boards/OPENMV3/omv_boardconfig.h index ed55db566..09ae5f260 100644 --- a/src/omv/boards/OPENMV3/omv_boardconfig.h +++ b/src/omv/boards/OPENMV3/omv_boardconfig.h @@ -106,6 +106,20 @@ #define SCCB_SCL_PIN (GPIO_PIN_8) #define SCCB_SDA_PIN (GPIO_PIN_9) #define SCCB_TIMING (I2C_TIMING_STANDARD) +#define SCCB_FORCE_RESET() __HAL_RCC_I2C1_FORCE_RESET() +#define SCCB_RELEASE_RESET() __HAL_RCC_I2C1_RELEASE_RESET() + +/* FIR I2C */ +#define FIR_I2C (I2C2) +#define FIR_I2C_AF (GPIO_AF4_I2C2) +#define FIR_I2C_CLK_ENABLE() __I2C2_CLK_ENABLE() +#define FIR_I2C_CLK_DISABLE() __I2C2_CLK_DISABLE() +#define FIR_I2C_PORT (GPIOB) +#define FIR_I2C_SCL_PIN (GPIO_PIN_10) +#define FIR_I2C_SDA_PIN (GPIO_PIN_11) +#define FIR_I2C_TIMING (I2C_TIMING_FULL) +#define FIR_I2C_FORCE_RESET() __HAL_RCC_I2C2_FORCE_RESET() +#define FIR_I2C_RELEASE_RESET() __HAL_RCC_I2C2_RELEASE_RESET() /* DCMI */ #define DCMI_TIM (TIM1) diff --git a/src/omv/boards/OPENMV4/omv_boardconfig.h b/src/omv/boards/OPENMV4/omv_boardconfig.h index f231a6f61..84bf5f97c 100644 --- a/src/omv/boards/OPENMV4/omv_boardconfig.h +++ b/src/omv/boards/OPENMV4/omv_boardconfig.h @@ -155,6 +155,20 @@ #define SCCB_SCL_PIN (GPIO_PIN_8) #define SCCB_SDA_PIN (GPIO_PIN_9) #define SCCB_TIMING (I2C_TIMING_STANDARD) +#define SCCB_FORCE_RESET() __HAL_RCC_I2C1_FORCE_RESET() +#define SCCB_RELEASE_RESET() __HAL_RCC_I2C1_RELEASE_RESET() + +/* FIR I2C */ +#define FIR_I2C (I2C2) +#define FIR_I2C_AF (GPIO_AF4_I2C2) +#define FIR_I2C_CLK_ENABLE() __I2C2_CLK_ENABLE() +#define FIR_I2C_CLK_DISABLE() __I2C2_CLK_DISABLE() +#define FIR_I2C_PORT (GPIOB) +#define FIR_I2C_SCL_PIN (GPIO_PIN_10) +#define FIR_I2C_SDA_PIN (GPIO_PIN_11) +#define FIR_I2C_TIMING (I2C_TIMING_FULL) +#define FIR_I2C_FORCE_RESET() __HAL_RCC_I2C2_FORCE_RESET() +#define FIR_I2C_RELEASE_RESET() __HAL_RCC_I2C2_RELEASE_RESET() /* DCMI */ #define DCMI_TIM (TIM1) diff --git a/src/omv/boards/OPENMV4P/omv_boardconfig.h b/src/omv/boards/OPENMV4P/omv_boardconfig.h index 117c817e5..69e9129a8 100644 --- a/src/omv/boards/OPENMV4P/omv_boardconfig.h +++ b/src/omv/boards/OPENMV4P/omv_boardconfig.h @@ -164,6 +164,20 @@ #define SCCB_SCL_PIN (GPIO_PIN_8) #define SCCB_SDA_PIN (GPIO_PIN_9) #define SCCB_TIMING (I2C_TIMING_STANDARD) +#define SCCB_FORCE_RESET() __HAL_RCC_I2C1_FORCE_RESET() +#define SCCB_RELEASE_RESET() __HAL_RCC_I2C1_RELEASE_RESET() + +/* FIR I2C */ +#define FIR_I2C (I2C2) +#define FIR_I2C_AF (GPIO_AF4_I2C2) +#define FIR_I2C_CLK_ENABLE() __I2C2_CLK_ENABLE() +#define FIR_I2C_CLK_DISABLE() __I2C2_CLK_DISABLE() +#define FIR_I2C_PORT (GPIOB) +#define FIR_I2C_SCL_PIN (GPIO_PIN_10) +#define FIR_I2C_SDA_PIN (GPIO_PIN_11) +#define FIR_I2C_TIMING (I2C_TIMING_FULL) +#define FIR_I2C_FORCE_RESET() __HAL_RCC_I2C2_FORCE_RESET() +#define FIR_I2C_RELEASE_RESET() __HAL_RCC_I2C2_RELEASE_RESET() /* DCMI */ #define DCMI_TIM (TIM1) diff --git a/src/omv/boards/PORTENTA/omv_boardconfig.h b/src/omv/boards/PORTENTA/omv_boardconfig.h index 5ad19479b..c988beca7 100644 --- a/src/omv/boards/PORTENTA/omv_boardconfig.h +++ b/src/omv/boards/PORTENTA/omv_boardconfig.h @@ -152,6 +152,21 @@ #define SCCB_SCL_PIN (GPIO_PIN_6) #define SCCB_SDA_PIN (GPIO_PIN_7) #define SCCB_TIMING (I2C_TIMING_STANDARD) +#define SCCB_FORCE_RESET() __HAL_RCC_I2C1_FORCE_RESET() +#define SCCB_RELEASE_RESET() __HAL_RCC_I2C1_RELEASE_RESET() + +/* FIR I2C */ +// TODO which I2C can be used for external sensors ? +#define FIR_I2C (I2C2) +#define FIR_I2C_AF (GPIO_AF4_I2C2) +#define FIR_I2C_CLK_ENABLE() __I2C2_CLK_ENABLE() +#define FIR_I2C_CLK_DISABLE() __I2C2_CLK_DISABLE() +#define FIR_I2C_PORT (GPIOB) +#define FIR_I2C_SCL_PIN (GPIO_PIN_10) +#define FIR_I2C_SDA_PIN (GPIO_PIN_11) +#define FIR_I2C_TIMING (I2C_TIMING_FULL) +#define FIR_I2C_FORCE_RESET() __HAL_RCC_I2C2_FORCE_RESET() +#define FIR_I2C_RELEASE_RESET() __HAL_RCC_I2C2_RELEASE_RESET() #define DCMI_PWDN_PIN (GPIO_PIN_4) #define DCMI_PWDN_PORT (GPIOD) diff --git a/src/omv/stm32fxxx_hal_msp.c b/src/omv/stm32fxxx_hal_msp.c index 95bc80de3..15594c718 100644 --- a/src/omv/stm32fxxx_hal_msp.c +++ b/src/omv/stm32fxxx_hal_msp.c @@ -172,13 +172,36 @@ void HAL_I2C_MspInit(I2C_HandleTypeDef *hi2c) GPIO_InitStructure.Pin = SCCB_SDA_PIN; HAL_GPIO_Init(SCCB_PORT, &GPIO_InitStructure); + } else if (hi2c->Instance == FIR_I2C) { + /* Enable I2C clock */ + FIR_I2C_CLK_ENABLE(); + + /* Configure FIR I2C GPIOs */ + GPIO_InitTypeDef GPIO_InitStructure; + GPIO_InitStructure.Pull = GPIO_NOPULL; + GPIO_InitStructure.Speed = GPIO_SPEED_LOW; + GPIO_InitStructure.Mode = GPIO_MODE_AF_OD; + GPIO_InitStructure.Alternate = FIR_I2C_AF; + + GPIO_InitStructure.Pin = FIR_I2C_SCL_PIN; + HAL_GPIO_Init(FIR_I2C_PORT, &GPIO_InitStructure); + + GPIO_InitStructure.Pin = FIR_I2C_SDA_PIN; + HAL_GPIO_Init(FIR_I2C_PORT, &GPIO_InitStructure); } + } void HAL_I2C_MspDeInit(I2C_HandleTypeDef *hi2c) { if (hi2c->Instance == SCCB_I2C) { + SCCB_FORCE_RESET(); + SCCB_RELEASE_RESET(); SCCB_CLK_DISABLE(); + } else if (hi2c->Instance == FIR_I2C) { + FIR_I2C_FORCE_RESET(); + FIR_I2C_RELEASE_RESET(); + FIR_I2C_CLK_DISABLE(); } }