I’m working on a project that uses I2C sensors and there is an addressing problem with them that is kind of complicated. I sent out a whole-team status report and glossed over the problem figuring the engineers knew what I was talking about and the non-engineers wouldn’t care.

One of the team caught me later and, somewhat abashedly, clearly feeling feeble, asked for clarification.

Oh, no, the problem was entirely in my explanation. So I started explaining how the sensors each had two addresses and since I wanted to use five of the same sensor, I had to get ones with different base addresses, the only way to accomplish that currently is with different vendors though I had some progress this week…

Eyes started glazing over. This was going nowhere fast. But I really want people to ask questions (because I’m not always right) and I want them to understand the answer (or they won’t asked next time). So I switched gears, trying to build on something already known…

Say each sensor is a child. Each child has two hands (as children often do). I need five hands for my project. Therefore, I need three children. Nods, right?

If they all came from the same family, it would be easier, see? I’d know how to communicate with them and it would be the same for each child.

However, every family I know only has one child. Each child behaves slightly differently, speaks a different language at home. It is harder for me know how to keep them all happy. Also, each child is valued differently. It is a pain to deal with, making everything more complicated than it needs to be. It would be better if each child came from the same family and was nearly identical to the others in its family except for, say, hair color.

However, when I contact a family about having a few more children (with different hair), they want me to order in the 100k range. And that is a lot of children.

So… breaking that down… each sensor has two I2C addresses (each child, two addresses). I want to use five sensors, so I need three sensors from different families. The families here are usually vendors (Analog Devices, Freescale, Bosch, STMicroelectronics, etc.). Each one is slightly different than the others in the way they work though they each sense essentially the same thing.

If I talk to a vendor, they are willing to modify their manufacturing process to give me a different base I2C address (different hair color). However, they want me to order a bunch of them (100k of each hair color, err, I2C base address). I’m still building prototypes so that sort of financial commitment is beyond me.