BNO086 and RP2040 don't work faster than 100 kHz

Howdy all. I’m working with a BNO086 (SEN-22857) run by a Sparkfun Thing Plus 2040 (DEV-17745). They are connected via a qwiic cable and the RSET and INT lines on the BNO086 are connected based on this note from the BNO086 hookup guide. The Thing Plus is running C++ and using a modified version of the Sparkfun BNO086 Arduino Library with the code for Wire replaced with calls to Rpi’s i2c instead.

Right now I am able to get consistent connection and good data at 100 kHz, but I am unable to get anything above that speed to work. I suspected pull-up issues, but rise times on the SDA/SCL lines appear to be within 300 ns when run at 100 kHz. I’m getting intermittent or no response from the BNO086 when the bus is run at 400, or 350 kHz, so it’s difficult to capture those rise times, but electrically it shouldn’t be any different. The logic analyzer is showing the BNO086 responding with an ACK to address read requests from the rp2040, but then the response on the SDA line is flat for the rest of the transaction. As a result, the rp2040 reads it as a bunch of 0’s. I currently have the pull-ups on the Thing Plus connected (2.2K ohm), and I have tried both with and without the pull-ups on the BNO086 breakout board (also 2.2K ohm).

Is anyone able to get BNO086 working at Fast Mode, or even 350 kHz with the rp2040? Looking for something I’m overlooking, because it seems this is working for other folks. For troubleshooting, I can send some scope shots or logic analyzer screen captures if that’s desired.

I suspect this issue is due to clock stretching.

The BN0086 (like the whole BNO08x family) is using clock stretching. The “master” or “controller” MUST be using clock stretching. (source https://docs.sparkfun.com/SparkFun_VR_IMU_Breakout_BNO086_QWIIC/assets/component_documentation/BNO080_085-Datasheet_v1.16.pdf page 15)

This looks to be a weak point on the RP2040. There are different articles about this on internet and Github ( e.g. GitHub - tmcqueen-materials/pio-i2c-hs: RP2040 PIO I2C High Speed (3.4 Mbps) Implementation )

@paulvha , that’s an interesting idea. Your answer seems to be corroborated by this post from Adafruit: Working with i2c Devices. If that’s true, it’s a real disappointment - I was unaware of this when I purchased the rp2040 board and BNO086 to work together. Thanks for your insight.