I am running a 133x65 COG LCD (PCF8535 based) with Q24PL, software 6.57c, using ADL. The subscription to the I2C bus is done as shown:
i2cHandle = adl_busSubscribe ( ADL_BUS_TYPE_I2C_HARD | LCD_I2C_ADDR, ADL_BUS_I2C_HARD_CLK_FAST );
Then adl_busWrite is used to init LCD, and to send graphics data to it:
res = adl_busWrite (i2cHandle, NULL, sizeof (lcdInit), lcdInit);
Most of the time adl_busWrite returns OK, and the data being transferred to the LCD shows correctly. However, from time to time adl_busWrite returns -1 (WM_BUS_MODE_UNKNOWN_TYPE), and the data being sent to the LCD seems to be corrupt.
Inspecting I2C bus with the oscilloscope shows that in case when there this error is returned, the sequence of bytes transferred is indeed incomplete.
I’ve tried to nail that down to the sent data block being too big; but even with init sequence of 8 bytes or less I get this error, although not that often compared to big blocks transfers (like 128 bytes). Are there any restrictions on block sizes transferred via I2C, or any other helpful guidelines?