From 6e8f25ba3b4914366f9deeb9ba2a251fca8faadc Mon Sep 17 00:00:00 2001 From: Brian Doherty Date: Sat, 12 Aug 2023 13:15:54 -0500 Subject: [PATCH] Added config setting for NRF52 I2C timing bug workaround. --- arch/arm/src/nrf52/Kconfig | 8 ++++++++ arch/arm/src/nrf52/hardware/nrf52_twi.h | 4 ++++ 2 files changed, 12 insertions(+) diff --git a/arch/arm/src/nrf52/Kconfig b/arch/arm/src/nrf52/Kconfig index 593e1cfa17..f2ac065712 100644 --- a/arch/arm/src/nrf52/Kconfig +++ b/arch/arm/src/nrf52/Kconfig @@ -717,6 +717,14 @@ config NRF52_I2C_MASTER_COPY_BUF_SIZE transaction will fit otherwise it will fall back on malloc. +config NRF52_I2C_MASTER_WORKAROUND_400KBPS_TIMING + bool "Master 400Kbps timing anomaly workaround" + depends on ARCH_CHIP_NRF52840 + default y + ---help--- + Enable the workaround to fix I2C Master 400Kbps timing bug + which occurs in all NRF52840 revisions to date. + endif # NRF52_I2C_MASTER endmenu diff --git a/arch/arm/src/nrf52/hardware/nrf52_twi.h b/arch/arm/src/nrf52/hardware/nrf52_twi.h index 23a122dbce..4bdff2fc7e 100644 --- a/arch/arm/src/nrf52/hardware/nrf52_twi.h +++ b/arch/arm/src/nrf52/hardware/nrf52_twi.h @@ -154,7 +154,11 @@ #define TWIM_FREQUENCY_100KBPS (0x01980000) /* 100 kbps */ #define TWIM_FREQUENCY_250KBPS (0x04000000) /* 250 kbps */ +#ifdef NRF52_I2C_MASTER_WORKAROUND_400KBPS_TIMING +#define TWIM_FREQUENCY_400KBPS (0x06200000) /* 400 kbps */ +#else #define TWIM_FREQUENCY_400KBPS (0x06400000) /* 400 kbps */ +#endif /* RXDMAXCNT Register */