Right. It's an interaction between the buffer IC and the bus capacitance. A lower pull-up value may well sort it.
An I2C buffer has to determine which device has driven each wire on the bus low at any given moment.
Say device 'A' drives low. The buffer must drive device 'B' low, but also remember the direction of communication. When 'A' releases the bus and allows it to go high again, the buffer releases 'B' and vice versa. During normal data communication, this is fine.
The problem comes with ACK, because the bus goes straight from being driven low by the master, to being driven low by the slave.
In this case, what happens is:
- master drives low
- buffer drives slave low
- master stops driving low
- positive glitch inevitably appears on master side, because the buffer is driving master>slave and not slave>master
- buffer stops driving slave low
- buffer determines that slave side is still low, so starts driving master low
- when slave relinquishes SDA, the buffer sees the slave side go high, and it relinquishes the master side.
This is all OK, provided you don't mind the glitch (it's harmless!).
But, add in some bus capacitance and it all goes horribly wrong.
Suppose the buffer is passing a logic low from A to B.
A starts to go high, so the buffer stops driving B low. But because bus segment B has capacitance, the buffer sees B still low, and starts driving A low again, on the basis that B must now be 'driving' the bus.
B gradually floats high, and the buffer stops driving A low. But A has capacitance too, so the buffer swaps direction again, and the cycle repeats. You have an oscillator.
Stronger pull-ups. You owe me one beer