- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi all,
I working on Fx-3 I2C interface. Fx-3 acts as master and stv0913 (Demod) and RDA5815S (Tuner) acts as slave.
In cypress I2C code as below.
CyU3PReturnStatus_t I2C_Write ( uint8_t slaveAddr, uint32_t count, uint8_t *buf)
{
CyU3PReturnStatus_t status = CY_U3P_SUCCESS;
CyU3PI2cPreamble_t preamble;
CyU3PDebugPrint (1, "I2C Write operation - dev:0x%x, size: %d,\r\n",(slaveAddr<<1), count);
/* Update the preamble information. */
preamble.length = 1;
preamble.buffer[0] = ((slaveAddr<< 1) | I2C_Operation_Write );
preamble.ctrlMask = 0x0000;
status = CyU3PI2cTransmitBytes (&preamble, buf, count, 100);
if (status != CY_U3P_SUCCESS)
{
return status;
}
/* Wait for the write to complete. */
status = CyU3PI2cWaitForAck(&preamble, 100);
if (status != CY_U3P_SUCCESS)
{
return status;
}
/* An additional delay seems to be required after receiving an ACK. */
CyU3PThreadSleep (1);
return CY_U3P_SUCCESS;
}
Note 1: this function i am using 2 API
1. status = CyU3PI2cTransmitBytes (&preamble, buf, count, 100);
2. status = CyU3PI2cWaitForAck(&preamble, 100);
1. This code is working fine for Demod I2C write operation ( I am able to wirte the data to specific memory and i can read the data from same memory). the above 2 API gives status as CY_U3P_SUCCESS.
2. If i am try to writing data to tuner i am getting CY_U3P_SUCCESS after calling status = CyU3PI2cTransmitBytes (&preamble, buf, count, 100); API. But I am getting status value 74 after calling status = CyU3PI2cWaitForAck(&preamble, 100); this API.
Note 2: 1. if i am sending only I2C_slave address with count value=0 its working fine.
1. if i am sending I2C_slave address with count >0 its not working.
I probed the I2C bus with CRO. i am getting ACK at 9th clock cycle of every byte i attached the Image also ( slave address is 0x18).
Note 3: If i am writing the data to tuner to some register, i am getting status value 74 (CyU3PI2cWaitForAck) means NACK. But i am able to read the same register its giving the correct value what i sent in previously.
Q1. why i am getting error code 74? if slave responding a ACK signal.
Thank you
With Best Regards,
Thrimurthi M
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thrimurthi,
You can read the memory location directly as follows:
CyU3PDebugPrint(4," I2C_STATUS = %x\r\n", *(uvint32_t *) 0xE0000404);