LTC4316 i2c address translator

Has anyone managed to use this chip in any project at all? I can't get it to run even in the pass-through mode. I connected it as it is in the datasheet:
2.2k pullups on inputs and outputs, I have 3.3V logic on both sides. I tried different voltage divider combinations for different offsets, grounding both resistor inputs for 0x00, and connecting XORH high for the pass-through mode. The scope shows constantly high SDA and SCL, no events at all. The ready output is high (10k pull up used).

Also confusing is the following from the datasheet:

During normal operation, an I2C master should not issue
a START or STOP bit within a data byte

What do they mean by that? how can these two bits be part of the data byte in the first place!? If they are, then it wouldn't be a "data byte", but rather "data 6 bits".

Though it is a very new product, I'm hoping for any tip at all.

Manufacturer's page : LTC4316 Datasheet and Product Info | Analog Devices
I did not even know such chips exists. It is a on-the-fly I2C address translator.

First things first, do you really need this chip ? Is there an other way to use chips with the same address ?

This I2C bus multiplexier does work : TCA9548A I2C Multiplexer : ID 2717 : $6.95 : Adafruit Industries, Unique & fun DIY electronics and kits

2k2 pullup resistors are low. Use 10k pullup resistors on both sides.

During normal operation, an I2C master should not issue a START or STOP bit within a data byte.
Since the chip detects a start and stop and the I2C address, the start and stop must be used properly. The Arduino Wire library uses the standard I2C, so that is no problem. As you already noticed, that sentence is confusing.

Could you make a schematic ? A photo of a drawing on a piece of paper is okay. What did you do with the ENABLE ?

The schematic is exactly the same as that recommended in the data sheet. Also, 2k2 pull ups are recommended in the datasheet, and the slave device works just fine with these pullups when the translator is taken out of the circuit.

I'm aware of multiplexers but there is no alternative to this solution if I want to keep a chain of these slave devices with 4 wires

The 2k is mentioned in one picture. The 10k is mentioned for the test conditions and in one picture.

What about the READY pin ?
At page 5 they say about the READY pin : Connect a pull-up resistor, typically 10k, from this pin to
the bus pull-up supply.
And what do I see at page 12 in Figure 10 ? A pullup of the READY pin of 2k !
In Figure 11 everything is 10k, for the READY pin and for the SDA and SCL lines.

The datasheet of the LTC4317 and LTC4318 don't even have that first figure with the 2k, they have only the second figure with the 10k.

The official I2C specification is that the SDA or SCL can be made active by pulling it low with maximum 3mA. That means at 5V all the pullup resistors combined can be 1k6, but not lower. Therefor a value of 10k is a safer when a number of things are connected to the I2C bus.

If you take away the translater, you have two 2k2 resistors parallel ? That makes 1k1 together and that is no longer according to the I2C specifications.

The ATmega328P does a little more than 3mA, as you can see here : Gammon Forum : Electronics : Microprocessors : I2C - Two-Wire Peripheral Interface - for Arduino

A lower value is better when using longer wires.
It is not a big deal, but the 2k (or 2k2) is a strange value.

What about the READY pin ?
At page 5 they say about the READY pin : Connect a pull-up resistor, typically 10k, from this pin to
the bus pull-up supply.

10k pullup. But even if it's left hanging shouldn't make a difference.

If you take away the translater, you have two 2k2 resistors parallel ? That makes 1k1 together and that is no longer according to the I2C specifications.

Nope, when I took it out I still kept 2k2 pullups. At first I had 10k instead of 2k2, didn't work either. Also, it's all 3V3, not 5V...
I don't think it's electrical, I think it has sth to do with i2c itself. I don't get what they are on about in the datasheet regarding start and stop bits. Does it make any sense to you?

About the start and the stop, I think I already answered that in Reply #1.
Just ignore that confusing sentence, the Arduino will do normal I2C, so it will never happen.

Perhaps they want to make clear that the translater chip uses the start and stop to work properly, and if someone does odd things, then the translator chip doesn't know what to do.

Do you have long wires for I2C ? or I2C in a flat ribbon cable ? If 2k2 pullup works and 10k not, then the I2C bus might have a problem.

I figured it out. The resistors I used in the potential divider that set the offset were too large tolerance, thus the ratios weren't set accurately. When the chip can't map the ratio to an address it goes into the pass through mode. I didn't realise that happened as I had two of the same i2c devices on the bus (one onboard with the uC and the other on separate PCB with translator). I was expecting to discover two, but only one popped up, tho probably both worked. I assumed it was the one the uC pcb.

Earlier I mentioned I put the chip in the pass through mode manually and it didn't work. For those tests I used a different setup (breakout boards), so it must have been an electrical problem.

Anyway, get .1% resistors and it'll work! Also with either 2k2 and 10k pullups :slight_smile:

Another comment. While researching alternatives after almost giving up I found multiplexers (TCA9548A, 4 channel). They have a 3-pin address selector, which might be a better solution than LTC4316 if you only need to use 8 devices. It does the same job but without annoying voltage dividers, instead you just short the address selector inputs low or high. That is if you don't mind the size and wasting the multiplexing feature :slight_smile: