DSPI: SPI controller subsystem

This subsystem implements an SPI controller with a single chip-select pin.

The port properties on DSPI are as follows:

  • bit 0: supports SET_SPEED command

  • bit 1: supports MSB-first shift

  • bit 2: supports LSB-first shift

  • bit 3: supports SET_DELAY and GET_DELAY commands

  • bit 4: supports SPI mode 0

  • bit 5: supports SPI mode 1

  • bit 6: supports SPI mode 2

  • bit 7: supports SPI mode 3

SET_SPEED

Sets the clock frequency.

  • subsystem: 0x06 (DSPI)

  • command type: 0x03 (short)

  • command payload: 32-bit word (requested frequency in Hz)

  • response payload: 32-bit word (actual frequency in Hz)

This command returns the actual frequency used, as adjusted by the device to match hardware capabilities.

GET_SPEED

Gets the clock frequency.

  • subsystem: 0x06 (DSPI)

  • command type: 0x04 (short)

  • command payload: none

  • response payload: 32-bit word (frequency in Hz)

SET_SPI_MODE

Sets the SPI mode and shift direction.

  • subsystem: 0x06 (DSPI)

  • command type: 0x05 (short)

  • command payload: 1 byte:

    • bits 0-1: SPI mode

    • bit 2: shift direction

      • 0: MSB first

      • 1: LSB first

  • response payload: none

SET_SELECT

Sets the current state of the SPI CS# pin.

  • subsystem: 0x06 (DSPI)

  • command type: 0x06 (short)

  • command payload: 1 byte:

    • 0: drive CS# low (active)

    • 1: drive CS# high (inactive)

  • response payload: none

PUT

Sends and optionally receives bytes.

  • subsystem: 0x06 (DSPI)

  • command type: 0x07 (long)

  • command payload: 7 bytes:

    • byte 0: CS# state to set before starting the operation

    • byte 1: CS# state to set after finishing the operation

    • byte 2:

      • 0: just send bytes

      • 1: send and receive bytes

    • bytes 3-6: byte count to send (and, optionally, receive)

  • response payload: none

  • long data OUT: data to send, count as specified in command payload

  • long data IN: if receive enabled, data received from device, count as specified in command payload; otherwise, none

GET

Receives bytes.

  • subsystem: 0x06 (DSPI)

  • command type: 0x08 (long)

  • command payload: 7 bytes:

    • byte 0: CS# state to set before starting the operation

    • byte 1: CS# state to set after finishing the operation

    • byte 2: the value to drive on the COPI pin while receiving bytes

    • bytes 3-6: byte count to receive

  • response payload: none

  • long data OUT: none

  • long data IN: data received from device, count as specified in command payload

SET_DELAY

Sets the inter-byte delay. This is the amount of time to sleep between each byte sent/received on the SPI interface.

  • subsystem: 0x06 (DSPI)

  • command type: 0x09 (short)

  • command payload: 32-bit word (inter-byte delay in µs)

  • response payload: none

Note that overly large values of delay will be rejected with the “parameter out of range” error (overly large means ≥256 bytes on iCEblink40).

GET_DELAY

Gets the inter-byte delay.

  • subsystem: 0x06 (DSPI)

  • command type: 0x0a (short)

  • command payload: none

  • response payload: 32-bit word (delay in µs)