I2C on Rock5B timeout error

I’ve tried to use Rock5B communicating with an STM32 slave device I programmed. I’m using Armbian, with i2c overlays enabled. Without connecting the STM32, when I use i2cdetect, it scans on the I2C port promptly. When I connected the STM32, for the first time after rebooting Rock5B, i2cdetect works, and picked up my STM32 at the correct address. But then it won’t work anymore, and reports timeout error from dmesg. The error message is

rk3x-i2c fd880000.i2c: timeout, ipd: 0x11, state: 3

From the oscilloscope, there is no clocks on SCL, but long periods of pulling low. After i2cdetect finishes, both SDA and SCL returned back to high.

I reckon something went wrong with my STM32 device and I’ll keep trying to fix it. However, the one time use of I2C on Rock5B is really troublesome. Does anyone happen to know how to “reset” the I2C controller without rebooting the system? Many thanks.

Do you have I2C pullup resistors on SDA and SCL? Unlike the raspberry Pi, the Rock 5B does not have them so you need to add them.

Yes, they’re all pulled up with 4k7 resistors.