This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
Background:
On my MSP432E401Y launchpad, I use the driverlib i2c repeated start functions for accessing my connected NHD-C0220BiZ-FS(RGB)-FBW-3VM 2 line 20 character LCD display.
I frequently need to power the board on a few times before i get displayed characters on the LCD unit.
I use polling for the i2c routines (not interrupt mode). This LCD display uses the ST7036i controller with i2c interface.
This display works well with the MSP432P401R launchpad and driverlib routines for repeated start.
I have been trying to get this resolved for months but with no success. Yesterday while revisiting it, i came across a post which indicated the MSP43E401Y has the same core as the Tiva C TM4C129x series.
The Tiva C has a silicon errata for the i2c (which the MSP432E401Y errata does not list) in SPMZ850G (Revised March 2017).
Specifically, the advisory number I2C#08 ( I2C Master BUSY status bit does not get set immediately).
One suggested workaround (when using polling) is to 'add a delay loop of at least 60% of the I2C clock period before polling the I2CMS register BUSY status'.
The driverlib function: 'bool I2CMasterBusy(uint32_t ui32Base)' does not implement this.
I modified my code with my millisecond delay function being called for a 1ms delay between each call to I2MasterControl(........ ) and I2MasterBusy(...) and so far i have got the LCD module powering on consistently.
Now to my Questions:
- Does the MSP432E401Y have the same I2C silicon errata as the TM4C129x?
- Is there an updated MSP432E401Y silicon errata document, indicating any updated errata? The latest one i have come across is: SLAZ709 - Octber 2017
An example of part of my new LCD initialization code (with the 1ms delay)
I2CMasterSlaveAddrSet(I2C2_BASE, LCD_SLAVE_ADDRESS, false);
I2CMasterDataPut(I2C2_BASE, 0x00); // Send start, address and Command mode byte (0x00)
I2CMasterControl(I2C2_BASE, I2C_MASTER_CMD_BURST_SEND_START); // Initiate send of data
my48Mdelayms(1); / 1ms delay
while(I2CMasterBusy(I2C2_BASE)); // Wait until transfer done
I2CMasterDataPut(I2C2_BASE, 0x38); //Function set - 8 bit, 2 line display 5x8, inst table 0
I2CMasterControl(I2C2_BASE, I2C_MASTER_CMD_BURST_SEND_CONT); // Send data just placed into FIFO
my48Mdelayms(1); / 1ms delay
while(I2CMasterBusy(I2C2_BASE)); // Wait until transfer done
**Attention** This is a public forum