first of all , you said they have different I2C addresses , so you don't need I2C
multiplexer , I2C multiplexer is only used when having more than one device having same I2C address , and refer to Adafruit I2C multiplexer as they say :
Finally, a way to get up to 8 same-address I2C devices hooked up to one microcontroller
which means it can handle 8 devices having the same address , but in your case , the addresses already are different , so why you need I2C multiplexer.
your problem needs to dig deep into debugging , you can get your self a cheap logic analyzer like this cheap 10$ saleae clone analyzer to see what data is actually put into the bus , the analyzer will make your debugging way more easy than you think , like the below picture obtained from saleae official website and also this cheap saleae clone works perfect with logic software offered from saleae:
but for your problem , I am guessing that it's due to pull resistors and the parasitic capacitance between the 2 buses , reading from I2C specification file, at section 7.1 , there is equation from minimum and maximum allowed pull up resistors according to nodes connected to the bus :
Rp(min) = (Vdd - Vol(max)) / Iol
Rp(max) = tr / (0.8473 * Cb)
where Vdd
is 5V when using arduino , tr
is the rise time maximum and it depends on MCU, Cb
is estimated bus capacitance and you can get that from datasheet of every component in your bus line as for arduino its capacitance is specified in datasheet at page 264 saying
Capacitance for each I/O pin Ci – 10 pF
other symbols , you can get from the I2C specifications mentioned above , but your problem is due to pull up resistors I guess and you can't really know without debugging. I recommend you using logic analyzers.