From 1cec35ebaeaef5e474239bf744ab4e8f980027b3 Mon Sep 17 00:00:00 2001 From: Frederic Pillon Date: Wed, 21 Aug 2024 11:44:37 +0200 Subject: [PATCH 1/2] chore(wire): remove useless i2c init Signed-off-by: Frederic Pillon --- libraries/Wire/src/Wire.cpp | 2 +- libraries/Wire/src/utility/twi.c | 12 +----------- libraries/Wire/src/utility/twi.h | 3 +-- 3 files changed, 3 insertions(+), 14 deletions(-) diff --git a/libraries/Wire/src/Wire.cpp b/libraries/Wire/src/Wire.cpp index c25a915a8b..9728c8849d 100644 --- a/libraries/Wire/src/Wire.cpp +++ b/libraries/Wire/src/Wire.cpp @@ -104,7 +104,7 @@ void TwoWire::begin(uint8_t address, bool generalCall, bool NoStretchMode) recoverBus(); // in case I2C bus (device) is stuck after a reset for example - i2c_custom_init(&_i2c, 100000, I2C_ADDRESSINGMODE_7BIT, ownAddress); + i2c_init(&_i2c, 100000, I2C_ADDRESSINGMODE_7BIT, ownAddress); if (_i2c.isMaster == 0) { // i2c_attachSlaveTxEvent(&_i2c, reinterpret_cast(&TwoWire::onRequestService)); diff --git a/libraries/Wire/src/utility/twi.c b/libraries/Wire/src/utility/twi.c index 8cdca94c53..2029ae669c 100644 --- a/libraries/Wire/src/utility/twi.c +++ b/libraries/Wire/src/utility/twi.c @@ -637,16 +637,6 @@ static uint32_t i2c_getTiming(i2c_t *obj, uint32_t frequency) return ret; } -/** - * @brief Default init and setup GPIO and I2C peripheral - * @param obj : pointer to i2c_t structure - * @retval none - */ -void i2c_init(i2c_t *obj) -{ - i2c_custom_init(obj, 100000, I2C_ADDRESSINGMODE_7BIT, 0x33); -} - /** * @brief Initialize and setup GPIO and I2C peripheral * @param obj : pointer to i2c_t structure @@ -655,7 +645,7 @@ void i2c_init(i2c_t *obj) * @param ownAddress : device address * @retval none */ -void i2c_custom_init(i2c_t *obj, uint32_t timing, uint32_t addressingMode, uint32_t ownAddress) +void i2c_init(i2c_t *obj, uint32_t timing, uint32_t addressingMode, uint32_t ownAddress) { if (obj != NULL) { diff --git a/libraries/Wire/src/utility/twi.h b/libraries/Wire/src/utility/twi.h index 8fb3dc6b81..b133947048 100644 --- a/libraries/Wire/src/utility/twi.h +++ b/libraries/Wire/src/utility/twi.h @@ -137,8 +137,7 @@ typedef enum { } i2c_status_e; /* Exported functions ------------------------------------------------------- */ -void i2c_init(i2c_t *obj); -void i2c_custom_init(i2c_t *obj, uint32_t timing, uint32_t addressingMode, +void i2c_init(i2c_t *obj, uint32_t timing, uint32_t addressingMode, uint32_t ownAddress); void i2c_deinit(i2c_t *obj); void i2c_setTiming(i2c_t *obj, uint32_t frequency); From 1b227dbc812163d17bd3f818ff889d049466e228 Mon Sep 17 00:00:00 2001 From: Frederic Pillon Date: Wed, 21 Aug 2024 11:53:04 +0200 Subject: [PATCH 2/2] fix(wire): support only 7 bits addressing mode Fixes #2468. Signed-off-by: Frederic Pillon --- libraries/Wire/src/Wire.cpp | 2 +- libraries/Wire/src/utility/twi.c | 5 ++--- libraries/Wire/src/utility/twi.h | 3 +-- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/libraries/Wire/src/Wire.cpp b/libraries/Wire/src/Wire.cpp index 9728c8849d..1840060aa1 100644 --- a/libraries/Wire/src/Wire.cpp +++ b/libraries/Wire/src/Wire.cpp @@ -104,7 +104,7 @@ void TwoWire::begin(uint8_t address, bool generalCall, bool NoStretchMode) recoverBus(); // in case I2C bus (device) is stuck after a reset for example - i2c_init(&_i2c, 100000, I2C_ADDRESSINGMODE_7BIT, ownAddress); + i2c_init(&_i2c, 100000, ownAddress); if (_i2c.isMaster == 0) { // i2c_attachSlaveTxEvent(&_i2c, reinterpret_cast(&TwoWire::onRequestService)); diff --git a/libraries/Wire/src/utility/twi.c b/libraries/Wire/src/utility/twi.c index 2029ae669c..6bdcfec75e 100644 --- a/libraries/Wire/src/utility/twi.c +++ b/libraries/Wire/src/utility/twi.c @@ -641,11 +641,10 @@ static uint32_t i2c_getTiming(i2c_t *obj, uint32_t frequency) * @brief Initialize and setup GPIO and I2C peripheral * @param obj : pointer to i2c_t structure * @param timing : one of the i2c_timing_e - * @param addressingMode : I2C_ADDRESSINGMODE_7BIT or I2C_ADDRESSINGMODE_10BIT * @param ownAddress : device address * @retval none */ -void i2c_init(i2c_t *obj, uint32_t timing, uint32_t addressingMode, uint32_t ownAddress) +void i2c_init(i2c_t *obj, uint32_t timing, uint32_t ownAddress) { if (obj != NULL) { @@ -761,7 +760,7 @@ void i2c_init(i2c_t *obj, uint32_t timing, uint32_t addressingMode, uint32_t own #endif handle->Init.OwnAddress1 = ownAddress; handle->Init.OwnAddress2 = 0; - handle->Init.AddressingMode = addressingMode; + handle->Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; handle->Init.DualAddressMode = I2C_DUALADDRESS_DISABLE; handle->Init.GeneralCallMode = (obj->generalCall == 0) ? I2C_GENERALCALL_DISABLE : I2C_GENERALCALL_ENABLE; handle->Init.NoStretchMode = (obj->NoStretchMode == 0) ? I2C_NOSTRETCH_DISABLE : I2C_NOSTRETCH_ENABLE; diff --git a/libraries/Wire/src/utility/twi.h b/libraries/Wire/src/utility/twi.h index b133947048..dfde7645c2 100644 --- a/libraries/Wire/src/utility/twi.h +++ b/libraries/Wire/src/utility/twi.h @@ -137,8 +137,7 @@ typedef enum { } i2c_status_e; /* Exported functions ------------------------------------------------------- */ -void i2c_init(i2c_t *obj, uint32_t timing, uint32_t addressingMode, - uint32_t ownAddress); +void i2c_init(i2c_t *obj, uint32_t timing, uint32_t ownAddress); void i2c_deinit(i2c_t *obj); void i2c_setTiming(i2c_t *obj, uint32_t frequency); i2c_status_e i2c_master_write(i2c_t *obj, uint8_t dev_address, uint8_t *data, uint16_t size);