How does 10-bit addressing work in I2C, and when is it needed?
Standard I2C uses 7-bit addresses, allowing up to 128 possible addresses (112 usable after subtracting reserved addresses). For systems with many identical devices or when the 7-bit space is exhausted, I2C supports 10-bit addressing, which extends the address space to 1024 devices.
A 10-bit address is sent in two bytes. The first byte uses the reserved prefix 11110 in the upper 5 bits, followed by the two MSBs of the 10-bit address and the R/W bit. The second byte contains the remaining 8 bits of the address. The slave ACKs each byte separately. This format is backward-compatible — 7-bit devices ignore the 11110xx prefix because it falls in the reserved address range.
In practice, 10-bit addressing is rarely used. The 7-bit address space is sufficient for the vast majority of designs, and most I2C devices only support 7-bit addressing. The main scenario where 10-bit addressing becomes relevant is large sensor networks (industrial monitoring systems with dozens of identical sensors) or custom I2C slave implementations (FPGA-based or MCU-based slaves) where you control the address scheme. Before reaching for 10-bit addressing, consider simpler alternatives: I2C multiplexers (TCA9548A), which create isolated bus segments each with their own address space, or configurable address pins (A0, A1, A2) that most I2C ICs provide for exactly this purpose.
Source: I2C Q&A
