SSDA015 September   2026 MSPM0G5117 , MSPM0G5187

 

  1.   1
  2. 1 Description
  3. 2 Required Peripherals
  4. 3 Compatible Devices
  5. 4 Design Steps
  6. 5 Design Considerations
  7. 6 Software Flowchart
  8. 7 Application Code
  9. 8 Data Flow Examples
  10. 9 Additional Resources
  11. 10Trademarks

Data Flow Examples

Scenario A: Host writes 5 bytes to target

  1. Host sends HELLO via COM port
  2. tud_cdc_rx_cb() queues data
    1. usb2spi_pushTask()
    2. Queue [H, E, L, L, O] with length = 5
  3. Main loop: usb2spi_popTask()
    1. Get task from queue
    2. SPI write: data=[H,E,L,L,O]
    3. DMA transfers to SPI TX FIFO
  4. SPI hardware executes
  5. SPI_0_INST_IRQHandler()
    1. DL_SPI_IIDX_DMA_DONE_TX: DMA finished
    2. DL_SPI_IIDX_TX_EMPTY: Transmission complete
    3. fifoCompleteRead() marks task consumed

Scenario B: host reads 64 bytes from target

  1. SPI target has data, pulls GPIO high
  2. GPIO interrupt fires
    1. SPISlaveDataReady = true
  3. Main loop detects: spi2usb_pushTask()
    1. Flush SPI RX/TX FIFOs
    2. Setup DMA TX: send dummy data (clock generation)
    3. Setup DMA RX: SPI RX → buffer
    4. Start SPI transfer (64 bytes)
  4. SPI Hardware executes
  5. SPI_0_INST_IRQHandler()
    1. DL_SPI_IIDX_DMA_DONE_RX: All data received
    2. fifoCompleteWrite(&gSPI2USBTask), and mark ready for USB transmission
  6. Main loop: spi2usb_popTask()
    1. Send 64 bytes to USB
    2. fifoCompleteRead() marks task done
  7. Host receives 64 bytes on COM port