I'm transmitting consecutive messages from a master to slave device on an i2c bus running at 400kHz.
The master is at 3.3V and the slave at 5V. I'm using a MOSFET level shifter as documented here: https://playground.arduino.cc/Main/I2CBi-directionalLevelShifter and numerous other places.
I'm usually sending 4 consecutive 3 byte messages and finding that quite a few are dropped. This problem goes away if I send 1 12 byte message. I can't do this in practice though, as I won't always know how many messages will be sent in a transmission (sometimes 4, sometimes 1 etc).
From doing a little searching I've found threads suggesting that this often due to the pullup resistors being too high. In 3v3 system, 2k2 seems a common value and in a 5v system 4k7 is standard.
So my question is: why are 10k used here? Should I use lower and should I use 2k2 on the 3v3 side and 4k7 on the 5v side? This NXP document suggests that they should all be the same (all labelled Rp) https://www.nxp.com/docs/en/application-note/AN10441.pdf
The master is at 3.3V and the slave at 5V. I'm using a MOSFET level shifter as documented here: https://playground.arduino.cc/Main/I2CBi-directionalLevelShifter and numerous other places.
I'm usually sending 4 consecutive 3 byte messages and finding that quite a few are dropped. This problem goes away if I send 1 12 byte message. I can't do this in practice though, as I won't always know how many messages will be sent in a transmission (sometimes 4, sometimes 1 etc).
From doing a little searching I've found threads suggesting that this often due to the pullup resistors being too high. In 3v3 system, 2k2 seems a common value and in a 5v system 4k7 is standard.
So my question is: why are 10k used here? Should I use lower and should I use 2k2 on the 3v3 side and 4k7 on the 5v side? This NXP document suggests that they should all be the same (all labelled Rp) https://www.nxp.com/docs/en/application-note/AN10441.pdf