3
\$\begingroup\$

For I2C devices that do not support address changes, do there exist "I2C address proxies" that can sit in front of the statically-addressed device and proxy a different address to the chip behind it?

I know there exist I2C MUX's (and other tricks), but I don't want to trigger the MUX to switch every time I want to talk to a different device with the same address.

I could imagine a tiny PIC that does I2C slave on one side, I2C on the master, and the code simply transforms address-to-address (like IP NAT, but for I2C). The concept is simple enough that maybe it already exists, but I'm not sure what its called or what to search for.

Is there anything like this already? For example:

SDA,SCL->\ 
         |-> [ Address Proxy Chip 0x55 ] -> [ static address 0x48 chip ]
         |-> [ Address Proxy Chip 0x56 ] -> [ static address 0x48 chip ]
         |-> [ Address Proxy Chip 0x57 ] -> [ static address 0x48 chip ]
         |-> [ Address Proxy Chip 0x58 ] -> [ static address 0x48 chip ]
         | ...
\$\endgroup\$
7
  • \$\begingroup\$ I think the answer you now have gives the only chip family I see on Digikey that performs this 'specialized' function. So the market for this must be relatively small. (Or LT's pricing is just barely low enough that others feel jumping into this game would eat both their lunches and everyone would lose out.) If this were to be done on a PIC or other MCU, then I think clock-stretching would be required. (If it is just software then the transaction needs to be consumed before passing it along.) \$\endgroup\$ Commented Sep 29, 2023 at 2:57
  • \$\begingroup\$ Such chips do exist. Why are other solutions an issue? How many chips you have with the same address? For all we know, it may be a cheaper option to order a batch of these I2C devices from the vendor with custom addresses, than to add an address-swapping chip before it. Or use a MCU with enough I2C controllers. \$\endgroup\$
    – Justme
    Commented Sep 29, 2023 at 8:26
  • \$\begingroup\$ "but I don't want to trigger the MUX to switch every time I want to talk to a different device with the same address" Why? \$\endgroup\$ Commented Sep 29, 2023 at 10:54
  • \$\begingroup\$ @Justme You don't need a I2C controller on a µC to be able to use I2C, you can bitbang I2C very easily (as a master) since you don't have any maximum time. \$\endgroup\$ Commented Sep 29, 2023 at 10:55
  • \$\begingroup\$ @12431234123412341234123 I know you can have arbitrary amount of I2C buses driven in software. Sometimes you can't do that as it's not feasible, for example transmitting data quickly at high speed using DMA while doing other things. But it is indeed an option, but in that case the GPIO pins would be better spent on controlling analog muxes like 4051 or 4052 to split a single hardware I2C bus to multiple chips that have unchangeable address, with no overhead on controlling the mux itself over I2C. \$\endgroup\$
    – Justme
    Commented Sep 29, 2023 at 11:08

1 Answer 1

4
\$\begingroup\$

They do. For example, LTC4316 is made exactly for this purpose, but it's quite expensive:

https://www.analog.com/media/en/technical-documentation/product-selector-card/4316.pdf

MUX would be a much cheaper solution, and, if you use FM or FM+ I2C, it shouldn't take much time to switch it. Perhaps just make a function in your code that does all the job automatically?

Though IMHO in case of a lot of devices you should consider using another protocol, like SPI.

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.