For an I2C device I'm trying to use, it's required to gang up a bunch of reads and writes in sequence with a STOP signal only at the very end. Here is the reasoning:
9.4 End of Communication Session / Window
Similar to other Azoteq I2C devices, to end the I2C communication session, a STOP command
is given. When sending numerous read and write commands in one communication cycle, a
repeated start command must be used to stack them together (since a STOP will jump out of
the communication window, which is not desired).
The STOP will then end the communication, and the IQS263 will return to process a new set of
data. Once this is obtained, the communication window will again become available (RDY set
LOW).
After running into issue after issue with the PEx I2C_LDD driver, I'm considering a switch to the fsl_i2c driver but it doesn't look like it supports this use case. I can't see any way to NOT send a STOP condition on send or receive. Am I correct in this conclusion?
Hello Vishal Talwar:
The I2C driver in KSDK allows one switch from Write to Read in-between a transfer (using a Repeated Start) when calling the function I2C_DRV_MasterReceiveData() or I2C_DRV_MasterReceiveDataBlocking. In case you would need more than 1 Write/Read switch before the STOP condition then you are right, this is not supported but that is not a typical use case.
Actually I checked the datasheet for your device (IQS263) and the KSDK I2C driver can be used for the 3 types of transfers: Current Address Read, Random Read and Write.
I hope this helps to clarify. Let me know if you still face doubts.
Regards!,
Jorge Gonzalez
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------
I'm having the same problem. Using SDK 2.2 for KL27.
How do I send Current Address Read? The drivers always send out the register address. Can I put in a NULL for the register address?