Does the Raspberry Pi 4 (and previous models) support the I²C clock stretching feature?
Some I²C devices, e.g., Bosche BNO055, Sensirion SCD-30, require this feature and the communication is likely to be unreliable or will fail without it.
From the I²C specification this is described in section 3.1.9 as:
Clock stretching pauses a transaction by holding the SCL line LOW. The transaction cannot continue until the line is released HIGH again. Clock stretching is optional and in fact, most slave devices do not include an SCL driver so they are unable to stretch the clock.
On the byte level, a device may be able to receive bytes of data at a fast rate, but needs more time to store a received byte or prepare another byte to be transmitted. Slaves can then hold the SCL line LOW after reception and acknowledgment of a byte to force the master into a wait state until the slave is ready for the next byte transfer in a type of handshake procedure (see Figure 7).
On the bit level, a device such as a microcontroller with or without limited hardware for the I2C-bus, can slow down the bus clock by extending each clock LOW period. The speed of any master is adapted to the internal operating rate of this device.
In Hs-mode, this handshake feature can only be used on byte level (see Section 5.3.2).
This question is not about the RP2040-based Pi Pico.
Reducing the I²C master's clock speed below standard mode's 100 kHz is not clock stretching in the context of this question and the I²C specification.
I see some discussion about this over on Raspberry Pi Forums: I2C clock stretching support in Raspberry Pi 4 (BCM2711)?.