I2C, i2c7 address 0x40

An external I2C device is at 0x40. I am considering using an address translator to avoid address conflicts with existing devices. Is translation is required?

i2cdetect displays a blank row starting at 0x40 of i2c-7. Addresses from 0x38 through 0x4f are blank. I would use a single address of 0x40.

$ sudo i2cdetect -y 7 0x40 0x40
Warning: Can't use SMBus Quick Write command, will skip some addresses
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                                                 
10:                                                 
20:                                                 
30:                                                 
40:                                                 
50:                                                 
60:                                                 
70:                                                 

Using the flag, “read byte,” confirms no response is registered at the address.

$ sudo i2cdetect -y -r 7 0x40 0x40 
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                                                 
10:                                                 
20:                                                 
30:                                                 
40: --                                              
50:                                                 
60:                                                 
70:                                                 

Does the bus I2C5 reachable as i2c-7 over J30 GPIO use address 0x40 for a device? The documentation suggests the bus is used for DisplayPort extensions without specifying available addresses.

The similar option I2C2 on J30 GPIO instantiates a device at 0x40 on the device tree DTB.

hello winged-boot,

please also refer to Jetson AGX Orin Series Product Design Guide for [Figure 13-1. I2C Connections].
BTW, there’s i2c multiplexer to avoid address conflicts, you may check discussion thread. Topic 192486 as see-also.

SoC Technical Reference Manual

A Pin Multiplexer is used to direct signals between components and move entire bus lines. The documented configurations would not split a bus.

The device tree does not instantiate an I2C device at the address. May surrounding devices occupy a range of addresses?

hello winged-boot,

this should be incorrect.
you must have device tree definition to declare your device within the node. this node contain the address value.
please disassembler the dtb file into text file to review the content.
for example, $ dtc -I dtb -O dts -o temp.txt tegra234-p3701-0000-p3737-0000.dtb

I got the same issue as well when I was developing some camera’s driver. Even we add a i2c multiplexer, there was still address conflicts because multiplexer pass through the i2c signal on the same bus.

However, we found the device (e.g. device A) behind multiplexer always overlay on the original 0x40 device, so we remapped device A 's address to another address when boot up. (Luckily this IC can change it’s address at runtime).

Address conflicts disappears at the end.

A likely possibility is the device at 0x40 needs to be configured to respond to I2C commands. A preemptive requirement is activating the device.

The configuration of the I2C devices will be considered since the i2cdetect tool responds differently at 0x40.

hi all,

you may see-also this post. it’s GPIO-based i2c bus multiplexer, which uses GPIOs to route the i2c signals.