From d708791b442eaba7ba2afc17007bbebe4a0f65fb Mon Sep 17 00:00:00 2001 From: TECHDEV EIRL Date: Thu, 25 Mar 2021 22:07:13 -0300 Subject: [PATCH 1/6] Update library.properties added support with 3v3 devices and add timeout deserve a library update --- libraries/Wire/library.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/Wire/library.properties b/libraries/Wire/library.properties index e19526e87..ae3d32df5 100644 --- a/libraries/Wire/library.properties +++ b/libraries/Wire/library.properties @@ -1,5 +1,5 @@ name=Wire -version=1.0 +version=1.1 author=Arduino maintainer=Arduino sentence=This library allows you to communicate with I2C and Two Wire Interface devices. From c45863d61648e4e12760777c897d2e517064c043 Mon Sep 17 00:00:00 2001 From: TECHDEV EIRL Date: Thu, 25 Mar 2021 22:08:10 -0300 Subject: [PATCH 2/6] Update keywords.txt added support with 3v3 devices --- libraries/Wire/keywords.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries/Wire/keywords.txt b/libraries/Wire/keywords.txt index 5e3d2b1ca..03cc5c006 100644 --- a/libraries/Wire/keywords.txt +++ b/libraries/Wire/keywords.txt @@ -17,6 +17,7 @@ endTransmission KEYWORD2 requestFrom KEYWORD2 onReceive KEYWORD2 onRequest KEYWORD2 +disablePullups KEYWORD2 ####################################### # Instances (KEYWORD2) From 36c31bcf519c00af4dbca4ef6307a161bcdf04f5 Mon Sep 17 00:00:00 2001 From: TECHDEV EIRL Date: Thu, 25 Mar 2021 22:09:50 -0300 Subject: [PATCH 3/6] Update Wire.h added 3v3 device compatibility --- libraries/Wire/src/Wire.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libraries/Wire/src/Wire.h b/libraries/Wire/src/Wire.h index e70d72edb..b441ab7dc 100644 --- a/libraries/Wire/src/Wire.h +++ b/libraries/Wire/src/Wire.h @@ -18,6 +18,7 @@ Modified 2012 by Todd Krein (todd@krein.org) to implement repeated starts Modified 2020 by Greyson Christoforo (grey@christoforo.net) to implement timeouts + Modified 2021 by Fernando Rubio (frubio@techdev.cl) to support I2C 3v3 devices */ #ifndef TwoWire_h @@ -54,6 +55,7 @@ class TwoWire : public Stream void begin(uint8_t); void begin(int); void end(); + void disablePullups(); void setClock(uint32_t); void setWireTimeout(uint32_t timeout = 25000, bool reset_with_timeout = false); bool getWireTimeoutFlag(void); From 89884cdde2e54085cb1c7346d8bf2753ec69ad71 Mon Sep 17 00:00:00 2001 From: TECHDEV EIRL Date: Thu, 25 Mar 2021 22:11:00 -0300 Subject: [PATCH 4/6] Update Wire.cpp added 3v3 device compatibility --- libraries/Wire/src/Wire.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/libraries/Wire/src/Wire.cpp b/libraries/Wire/src/Wire.cpp index c407776e7..064cbb7f6 100644 --- a/libraries/Wire/src/Wire.cpp +++ b/libraries/Wire/src/Wire.cpp @@ -19,6 +19,7 @@ Modified 2012 by Todd Krein (todd@krein.org) to implement repeated starts Modified 2017 by Chuck Todd (ctodd@cableone.net) to correct Unconfigured Slave Mode reboot Modified 2020 by Greyson Christoforo (grey@christoforo.net) to implement timeouts + Modified 2021 by Fernando Rubio (frubio@techdev.cl) to support I2C 3v3 devices */ extern "C" { @@ -82,6 +83,11 @@ void TwoWire::end(void) twi_disable(); } +void TwoWire::disablePullups(void) +{ + twi_disablePullups(); +} + void TwoWire::setClock(uint32_t clock) { twi_setFrequency(clock); From f394f5c5543e0f0025317d8aaef7c2bc689cc5be Mon Sep 17 00:00:00 2001 From: TECHDEV EIRL Date: Thu, 25 Mar 2021 22:11:59 -0300 Subject: [PATCH 5/6] Update twi.h added 3v3 device compatibility --- libraries/Wire/src/utility/twi.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libraries/Wire/src/utility/twi.h b/libraries/Wire/src/utility/twi.h index 85b983794..5206b3834 100644 --- a/libraries/Wire/src/utility/twi.h +++ b/libraries/Wire/src/utility/twi.h @@ -17,6 +17,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Modified 2020 by Greyson Christoforo (grey@christoforo.net) to implement timeouts + Modified 2021 by Fernando Rubio (frubio@techdev.cl) to support I2C 3v3 devices */ #ifndef twi_h @@ -42,6 +43,7 @@ void twi_init(void); void twi_disable(void); + void twi_disablePullups(void); void twi_setAddress(uint8_t); void twi_setFrequency(uint32_t); uint8_t twi_readFrom(uint8_t, uint8_t*, uint8_t, uint8_t); From 1b3425af45a08d2efd8351ba0937036db645b7ff Mon Sep 17 00:00:00 2001 From: TECHDEV EIRL Date: Thu, 25 Mar 2021 22:14:16 -0300 Subject: [PATCH 6/6] Update twi.c added 3v3 device compatibility --- libraries/Wire/src/utility/twi.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/libraries/Wire/src/utility/twi.c b/libraries/Wire/src/utility/twi.c index d223760d8..d4ecb5daf 100644 --- a/libraries/Wire/src/utility/twi.c +++ b/libraries/Wire/src/utility/twi.c @@ -18,6 +18,7 @@ Modified 2012 by Todd Krein (todd@krein.org) to implement repeated starts Modified 2020 by Greyson Christoforo (grey@christoforo.net) to implement timeouts + Modified 2021 by Fernando Rubio (frubio@techdev.cl) to support I2C 3v3 devices */ #include @@ -55,6 +56,9 @@ static volatile uint32_t twi_timeout_us = 0ul; static volatile bool twi_timed_out_flag = false; // a timeout has been seen static volatile bool twi_do_reset_on_timeout = false; // reset the TWI registers on timeout +//3v3 Compatibility need the feature of disable pullups and allow external pullups +static volatile uint8_t twi_pullups_state = 1; //Pull-ups Enabled by default as previous Lib versions, state is needed to support future resets from timeouts + static void (*twi_onSlaveTransmit)(void); static void (*twi_onSlaveReceive)(uint8_t*, int); @@ -84,9 +88,9 @@ void twi_init(void) twi_sendStop = true; // default value twi_inRepStart = false; - // activate internal pullups for twi. - digitalWrite(SDA, 1); - digitalWrite(SCL, 1); + // activate/deactivate internal pullups for twi according to default value. + digitalWrite(SDA, twi_pullups_state); + digitalWrite(SCL, twi_pullups_state); // initialize twi prescaler and bit rate cbi(TWSR, TWPS0); @@ -118,6 +122,18 @@ void twi_disable(void) digitalWrite(SCL, 0); } +/* + * Function twi_disablePullups + * Desc disables internal pullups on init + * Input none + * Output none + */ +void twi_disablePullups(void) +{ + // deactivate internal pullups for twi. + twi_pullups_state = 0; +} + /* * Function twi_slaveInit * Desc sets slave address and enables interrupt