LibMPSSE 1.0.3 has now been released to the website:
https://ftdichip.com/software-examples/mpsse-projects/Note v1.0.3 has a known bug which will be fixed in a future version.
The code is not sending I2C ACK after 1st byte read.
Please check this bit of code in particular:
static FT_STATUS I2C_Read8bitsAndGiveAck(FT_HANDLE handle, uint8 *data, bool ack)
{
FT_STATUS status = FT_OTHER_ERROR;
uint8 buffer[20], inBuffer[5];
uint32 noOfBytes = 0;
DWORD noOfBytesTransferred;
FN_ENTER;
/*set direction*/
buffer[noOfBytes++] = MPSSE_CMD_SET_DATA_BITS_LOWBYTE;/* MPSSE command */
buffer[noOfBytes++] = VALUE_SCLLOW_SDALOW; /*Value*/
buffer[noOfBytes++] = DIRECTION_SCLOUT_SDAIN; /*Direction*/
/*Command to read 8 bits*/
buffer[noOfBytes++] = MPSSE_CMD_DATA_IN_BITS_POS_EDGE;
buffer[noOfBytes++] = DATA_SIZE_8BITS;/*0x00 = 1bit; 0x07 = 8bits*/
/*Command MPSSE to send data to PC immediately */
buffer[noOfBytes++] = MPSSE_CMD_SEND_IMMEDIATE;
/* Fix introduced to solve a glitch issue */
buffer[noOfBytes++] = MPSSE_CMD_SET_DATA_BITS_LOWBYTE;
buffer[noOfBytes++] = VALUE_SCLLOW_SDALOW ;
buffer[noOfBytes++] = DIRECTION_SCLOUT_SDAIN;
/* Burn off one I2C bit time */
buffer[noOfBytes++] = MPSSE_CMD_DATA_OUT_BITS_NEG_EDGE;
buffer[noOfBytes++] = 0; /*0x00 = 1bit; 0x07 = 8bits*/
buffer[noOfBytes++] = ack ? SEND_ACK : SEND_NACK;/*Only MSB is sent*/
SDA has been left as input:
buffer[noOfBytes++] = DIRECTION_SCLOUT_SDAIN;
But this should actually be output:
buffer[noOfBytes++] = DIRECTION_SCLOUT_SDAOUT;
Best Regards,
FTDI Community