Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
sewe_4743066
Level 1
Level 1

Hello community,

I'm facing some issues with reading registers of the CY8CMBR3102 with I2C, because the device only returns 0xFF for any register.

To be more precisely, I want to read the DEVICE_ID of CY8CMBR3102 over I2C using JTAG Boundary Scan.

The slave address of the CY8CMBR3102 is 0x37.

The address of  the DEVICE_ID register is 0x90 and the expected value should be 2561 or 0x0A01.

As far as I understand the protocol is, that the host sends a START condition followed by a slave address until it gets ACKed by the device.

After the ACK of the device, the host sends the register address to be read.

As a result of this, the device sends the content from its register to the host. Each received byte is ACKed by the host.

Right?

In my case, it looks different. I have attached a capture of my I2C communication.

So it seems like my host sends after the register address a START condition again. And this interferes with my previous made request to register 0x90.

This is why I get only 0xFF or am I wrong?

2020-07-23_09h18_28.png

0 Likes
1 Solution
BragadeeshV
Moderator
Moderator
Moderator
First question asked 1000 replies posted 750 replies posted

Hi sewe_4743066​,

After a successful ACK of the address byte, host has to send the register byte that is to be read (which is correct in your case), after this the host has to send a repeated start condition to change the direction of data. (ie) after sending register byte, it has to issue a repeated start, followed by address with read bit (this is where the host is still issuing a write instead of read) and read the required bytes.

pastedImage_0.png

Regards,

Bragadeesh

Regards,
Bragadeesh

View solution in original post

0 Likes
1 Reply
BragadeeshV
Moderator
Moderator
Moderator
First question asked 1000 replies posted 750 replies posted

Hi sewe_4743066​,

After a successful ACK of the address byte, host has to send the register byte that is to be read (which is correct in your case), after this the host has to send a repeated start condition to change the direction of data. (ie) after sending register byte, it has to issue a repeated start, followed by address with read bit (this is where the host is still issuing a write instead of read) and read the required bytes.

pastedImage_0.png

Regards,

Bragadeesh

Regards,
Bragadeesh
0 Likes