# GIGA R1 Wire: unreliable I2C register reads with endTransmission()+requestFrom() (no repeated start) vs endTransmission(false)?

**URL:** <https://forum.arduino.cc/t/giga-r1-wire-unreliable-i2c-register-reads-with-endtransmission-requestfrom-no-repeated-start-vs-endtransmission-false/1457445>\
**Category:** GIGA R1 WiFi\
**Created:** [August 27, 2026, 10:26pm UTC](https://forum.arduino.cc/t/giga-r1-wire-unreliable-i2c-register-reads-with-endtransmission-requestfrom-no-repeated-start-vs-endtransmission-false/1457445 "2026-08-27T22:26:03Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![marius\_j](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/marius_j/32/719449_2.png) [@marius\_j](https://forum.arduino.cc/u/marius_j)\
**Post date:** [August 27, 2026, 10:26pm UTC](https://forum.arduino.cc/t/giga-r1-wire-unreliable-i2c-register-reads-with-endtransmission-requestfrom-no-repeated-start-vs-endtransmission-false/1457445/1 "2026-08-27T22:26:03Z")

</div>

Hi all,

I'm reading a NAU7802 24-bit ADC (I2C, addr 0x2A) over the GIGA R1 M7's hardware `Wire` (SDA=20/SCL=21, 400kHz). A plain address-only I2C scan (`Wire.beginTransmission(addr); Wire.endTransmission();`) reliably detects the chip. But actual register reads using the common two-step pattern:

```arduino
Wire.beginTransmission(0x2A);
Wire.write(regAddress);
Wire.endTransmission(); // full STOP
Wire.requestFrom(0x2A, 1);

```

...were unreliable — intermittently returning stale/zero data, even though the device itself was confirmed alive and healthy (verified with an independent multimeter/analog check, and by re-testing the exact same physical device with a different read pattern below).

Switching to a repeated start fixed it completely and has been 100% reliable since:

```arduino
Wire.beginTransmission(0x2A);
Wire.write(regAddress);
Wire.endTransmission(false); // repeated start, no STOP
Wire.requestFrom(0x2A, 1);

```

This perhaps also explains why a popular Arduino library ( Sparkfun) for this chip (which uses the `endTransmission()` + separate `requestFrom()` pattern, i.e. STOP then new START) gave us unreliable readings on GIGA R1 specifically, while our own minimal register-level code with `endTransmission(false)` works reliably.

Questions:

1. Is there a known timing issue with GIGA R1's mbed-based `Wire`/`TwoWire` implementation not honoring the I2C bus-free-time (t\_BUF) between a STOP and the next START closely enough, causing this kind of intermittent failure?
2. Is this specific to GIGA R1 (STM32H747, mbed core), or would this also affect classic AVR-based boards (Uno/Mega) using the same `endTransmission()`-then-`requestFrom()` pattern?
3. Is `endTransmission(false)` (repeated start) simply the recommended practice on GIGA R1 for any register-read I2C device, regardless of library?

Any insight into the root cause (or confirmation this is a known GIGA R1/mbed core quirk) would be much appreciated — happy to share more logs/test code if useful.

Board: Arduino GIGA R1 WiFi (M7 core)  
Framework: Arduino-mbed core via PlatformIO

---

<div class="post-metadata">

**Author:** ![gilshultz](https://avatars.discourse-cdn.com/v4/letter/g/67e7ee/32.png) [@gilshultz](https://forum.arduino.cc/u/gilshultz)\
**Post date:** [August 28, 2026, 12:47am UTC](https://forum.arduino.cc/t/giga-r1-wire-unreliable-i2c-register-reads-with-endtransmission-requestfrom-no-repeated-start-vs-endtransmission-false/1457445/2 "2026-08-28T00:47:06Z")

</div>

What value are the pullup resistors? Try something in the 3K range. How long are the wires connected to the I2C?
