Could you please provide a complete scope shot of the bus. From start till the stop condition.
Also what is the pull up/ pull down resistor value you have used for A0?
Because when A0 uses a strong pull up/ strong pull down (wired through 330 or less resistor to Vdd or Vss), only A0 is used for device slave addressing.
But when A0 has a weak pull up or pull down (connected to Vdd or Vss through 75K- 200K ohm resistor), A1 will also be used for slave addressing. This might have changed the slave address value and maybe that's why the slave NACKed. Please confirm.
Also in general, it is not recommended to share pull up/down resistors between multiple devices.
Also let us know if you are trying to access the access the multi port device or the EEPROM. Addressing format varies in that case also.
- I've provided the entire trace. What exactly do you think is missing from it?
- As I said in the original post, A0 is grounded for one device and tied to ground on the other device. This means that the "resistor value" is 0.
- As I said in the original post, the addressing scheme I'm using gives addresses of 0x20 and 0x21. This means that I'm trying to access the multi-port device (as seen in the logic trace) and not the EEPROM.
I've figured out the problem. If I insert a long enough delay on startup, it starts working. What is the minimum time between power being applied to the CY8C9560A and starting I2C communication with it? I can't find this documented anywhere in the datasheet.
You will need 400 ms after power up to start an I2C transaction with the CY8C9560A device.