Other Parts Discussed in Thread: LM49450,
Tool/software: Code Composer Studio
Hi,
I am using an MSP432E401Y microcontroller with an LM49450 I²S amplifier. The MSP432 is I²C master and writes config data via I²C to the LM49450. Each I²C transmission follows (or should follow) the scheme: Master sends Start condition and Slave address, reads an ACK from the slave, sends a register address, reads an ACK again and then writes a data byte onto the I²C bus. Those transmissions are repeated for registers 00 through 08. I tested our circuit using an MSP432 Launchpad and a breadboard accessible to a logic analyzer.
But the MSP432 randomly drops register addresses, i.e. in some half of the instances sends only the slave address directly followed by the data byte.
I adopted the code from "i2c_mastermode_simple_transfer.c" from TI's examples to our C++ project, I had problems getting the Interrupt working and worked around it by polling the Interrupt Flags. Writing one register did work, but writing all registers produced the above-mentioned issue. I simplified the code to an implementation of the flow chart from datasheet chapter 19.3.6.1 but the issue remained. I tried another Launchpad and external I²C pullups in parallel to the internal ones but nothing worked.
Please see attached a logic analyzer screenshot and my code.
Can you please help me solve the issue?i2c-issue-dropped-register-bytes.zip
Best regards,
Christian Mallas