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

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:

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:

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

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