-1
\$\begingroup\$

What is the best way to discover if the I2C slave address is given in the 8bit or 7bit format in datasheet?

As I can see from programming guide for ADV7511 page 16:

The SDA/SCL programming address for the Main Register Map is 0x72 or 0x7A,
based on whether PD/AD is pulled high (10KΩ resistor to power supply = 0x7A) or pulled low (10KΩ resistor to GND =
0x72) when power is applied to the supplies.

I have 10k pull-down resistor on PD/AD, so the address should be 0x72. But if that is 7 bit format address, that means that I have to add one more bit for R/W at LSB and shift this 7 bit address to the left for one position, and that is 0xE4 for write or 0xE5 for read.

When I send that value over the I2C SDA, only I can read for the address from the osciloscope is value 0x64 (higher 7 bits in byte), so I am assuming that this is not correct, because what is sent and what I see on scope is not the same. Does something limiting that 7 bit slave address, or is it too high? Am I missing something?

\$\endgroup\$
  • \$\begingroup\$ Surely this is either stated directly or inferred from other parts of the datasheet. In any case, just try it. If you see the 7 bit value you write to the register come out shifted left one with the R/W bit in the LSB, then the register contains just the address. \$\endgroup\$ – Olin Lathrop Jun 20 '17 at 11:10
  • \$\begingroup\$ @OlinLathrop that means that what I wrote is address (higher 7 bits) + LSB R/W bit (8 bit slave address format) \$\endgroup\$ – Patrick Jun 20 '17 at 11:31
2
\$\begingroup\$

Consider this:

If you are trying to use the 0x72 address as a 7-bit entity then you need to be able to see 0xE4 on the scope as the first I2C byte coming out on SDA. Since you are only seeing 0x64 it means that you are not operating the I2C interface controller (or software if bit banging). The loss of the intended upper bit has nothing to do with whether the ADV7511 document is specifying a 7-bit slave address or not.

So yes it may very well be necessary that you need to experiment on what addresses it takes to get the ADV7155 to respond. But it is first necessary to get the expected bit pattern on the SDA line to the part before even trying to determine the results of the experiments. That effort will require your to dig into your microcontroller and its I2C registers description. And in the case you are using some type of prepackaged software API to interface to the I2C registers then you need to comprehend if the interface to the API takes a 7-bit address or expects that you have to supply it an 8-bit type address specification.

\$\endgroup\$
2
\$\begingroup\$

It is not stated in ADV7511W Programming Guide PDF that the address which is given is in 8-bit format, so if you're using Zynq7002 you need to write address of slave in 7-bit format to I2C peripheral address register, which is 0x72 >> 1 = 0x39 (PD/AD is pulled down to the ground with the 10k resistor).

Before transfer initiating byte is sent, value (0x39) you wrote in address register will be shifted left for one position to the upper 7 bits and R\W bit will be inserted to LSB of that transfer initiating byte.

Now slave acknowledges every byte, and I have the possibility to read its revision number correctly.

Solution found at https://ez.analog.com/thread/82668

\$\endgroup\$
1
\$\begingroup\$

From my experience, most of the I2C addresses are given in 7-bit format, unless it is explicitly stated otherwise (in such a case they would say explicitly, "... for reading use the address 0xYY and for writing use the address 0xZZ...").

But as Michael Karas said in his answer, what you see with the oscilloscope has absolutely nothing to do with how the slave IC datasheet defines the I2C address. In fact it has nothing to do with the slave at all! It all depends on the I2C master. There is obviously something wrong with the I2C controller or the bit banging software of the microcontroller or any other device that is the master of the bus.

How have you implemented the master? What IC do you use?

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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