spislave

Example Summary

Demonstrates how to use SPI driver in slave mode to communicate with another SimpleLink device. To run this example successfully, another SimpleLink device running the spimaster example is required.

Peripherals & Pin Assignments

When this project is built, the SysConfig tool will generate the TI-Driver configurations into the ti_drivers_config.c and ti_drivers_config.h files. Information on pins and resources used is present in both generated files. Additionally, the System Configuration file (*.syscfg) present in the project may be opened with SysConfig’s graphical user interface to determine pins and resources used.

BoosterPacks, Board Resources & Jumper Settings

For board specific jumper settings, resources and BoosterPack modifications, refer to the Board.html file.

If you’re using an IDE such as Code Composer Studio (CCS) or IAR, please refer to Board.html in your project directory for resources used and board-specific jumper settings.

The Board.html can also be found in your SDK installation:

    <SDK_INSTALL_DIR>/source/ti/boards/<BOARD>

Before running the example the following pins must be connected between master & slave devices.

SPI Master LaunchPad SPI Slave LaunchPad
CONFIG_SPI_MASTER CLK CONFIG_SPI_SLAVE CLK
CONFIG_SPI_MASTER MOSI CONFIG_SPI_SLAVE MOSI
CONFIG_SPI_MASTER MISO CONFIG_SPI_SLAVE MISO
CONFIG_SPI_MASTER CS CONFIG_SPI_SLAVE CS
CONFIG_SPI_MASTER_READY CONFIG_SPI_MASTER_READY
CONFIG_SPI_SLAVE_READY CONFIG_SPI_SLAVE_READY

The SPI can be used in 4-pin or 3-pin modes (chip select is optional). When running this example SPI peripherals on both SimpleLink devices must align on chip select use. Users must verify before running the example.

Although not in the table above, a ground jumper must also be connected between both boards.

Example Usage

The connection will have the following settings:

    Baud-rate:     115200
    Data bits:          8
    Stop bits:          1
    Parity:          None
    Flow Control:    None

Messages should appear as follows:

    Starting the SPI slave example
    This example requires external wires to be connected to the header pins. Please see the Board.html for details.

    Slave SPI initialized

    Slave received: Hello from master, msg#: 0
    Slave received: Hello from master, msg#: 1
    Slave received: Hello from master, msg#: 2
    Slave received: Hello from master, msg#: 3
    Slave received: Hello from master, msg#: 4
    Slave received: Hello from master, msg#: 5
    Slave received: Hello from master, msg#: 6
    Slave received: Hello from master, msg#: 7
    Slave received: Hello from master, msg#: 8
    Slave received: Hello from master, msg#: 9

    Done

Application Design Details

This application uses a single thread:

slaveThread - waits for master to open CONFIG_SPI_MASTER, opens CONFIG_SPI_SLAVE, creates the slave message & prepares a transfer. The CONFIG_SPI_SLAVE_READY pin is pulled low to notify the master it is ready. Once the transfer complete, slave pulls CONFIG_SPI_SLAVE_READY high, prepares the next transaction & pulls CONFIG_SPI_SLAVE_READY low again. A total of MAX_LOOP SPI transactions are performed in this manner.

The slaveThread performs the following actions:

  1. Before performing transfers, we must make sure both, spimaster & spislave applications are synchronized with each other. The slave will set CONFIG_SPI_SLAVE_READY to 1 to notify the master it is ready to synchronize. The slave will then wait for the master to pull CONFIG_SPI_MASTER_READY high in acknowledgment.

  2. Waits until master has opened CONFIG_SPI_MASTER. Master will pull CONFIG_SPI_MASTER_READY low once it has opened its SPI peripheral.

  3. Opens CONFIG_SPI_SLAVE in callback mode.

  4. Creates a SPI transaction structure and sets txBuffer to Hello from slave, msg# n, where n is the iteration number.

  5. Toggles CONFIG_GPIO_LED_1.

  6. Performs the SPI transfer in callback mode. If the transfer is successful, CONFIG_SPI_SLAVE_READY is pulled low to notify the master the slave is ready for a transfer & the slave waits until the transfer has completed. Otherwise, an error message is printed to the UART.

  7. Once the transfer is completed, CONFIG_SPI_SLAVE_READY is pulled high to notify master slave is not ready for another transfer.

  8. Repeats from step 4 for MAX_LOOP iterations.

  9. Closes the SPI driver object and terminates execution.

TI-RTOS:

FreeRTOS: