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.

MSPM0G3507: Bit Banging I2S - IOMUX invert output bit

Part Number: MSPM0G3507

All, 

I have a customer who is bit banging an I2S bus.  He is very close to making it work.  I would love to see him succeed as a prototype for others.  He writes:

I have configured the SPI in TI sync mode at 16bits and reload 1 word by polling on TX fifo empty.  Can do TX Fifo update by interrupt, but not needed right now.

At TX fifo 1 word load I toggle a PORT pin to emulate I2S LRCLOCK function, and on the scope the Ms bit timing is offset but stable, and clock is continuous.

The issue is that many I2S devices need a positive clock edge, i.e. data out on PICO changes on falling edge for setup before rising clock, but TI sync mode shifts data on positive/rising edge which is a race condition on many setup/hold times.

The MSPM0L part shows the IOMUXnn.26 is the INV bit for I/O but this is not shown on the MSPM0G3507 FRM on IOMUX.  The G3507 FRM IOMUX  text and diagram mention the INV bit, but is not present in the FRM  IOMUXnn.26 in register definitions and .h file.

If I can invert this SPICLK drive out then I can bodge a I2S function by simply offsetting consecutive words with 2 ms/ls bits to put everything in correct phase with LRCLOCK, so it will work fine.  With 32 bit shifter its trivial to skew to realign the consecutive 16bit I2S data words.

Can you confirm if IOMUXnn register bit 26 acts as the INVERT i/o control on MSPM0G3507, or if this was stripped from e.g. eval parts?

 Its hard to imagine the MSPM0G part silicon net-list would drop what was designed into the slower MSPM0L cousin part...

Best Regards, 

Blake

  • Hi Blake,

    This invert bit is available and present in the IOMUX for MSPM0G. However, for certain timing critical paths like SPI, when in SPI Mode, it is disabled in Production silicon. See IOMUX_ENH_01 in the Early Samples Functional Differences Document (located in the MySecureSoftware folder). The SPICLK on MSPM0G can run much faster, and therefore the timing constraints are tighter, which is why it is disabled in this mode. This should be clarified in the production Reference Manual

    What SPI SCLK speed do they need to operate at? I am checking internally if this bit is disabled for all  SCLK pins or just the designated High speed pins. 

    Best Regards,
    Brandon Fisher

  • Hi Blake,

    Apologies for the delay on that update. I've tested this on my end, and the Inversion bit does still seem to work on Standard IOs when configured for SPI mode. 

    If they don't need SPICLK running fast enough to require a high speed IO then they should be able to do this. 

    Best Regards,
    Brandon Fisher