Serial Synchronous Interface (SSI) Initialization and Configuration#

The SiWx917 WiSeConnect SDK provides a unified Serial Synchronous Interface (SSI) driver API.

It supports multiple configurable instances—primary (leader), secondary (follower), and ULP primary—as well as common frame formats (SPI/SSP/µWire), single/dual/quad data-line operation (where supported), and DMA-assisted transfers.

This guide describes the complete initialization and configuration flow for SSI communication on SiWx917 devices.

Initialization and Configuration#

Startup Sequence#

This section outlines the initialization procedure for both standard (single-line) and dual/quad Serial Peripheral Interface (SPI) modes.

It also explains project setup in Simplicity Studio.

Hardware and Software Requirements#

Hardware

  • Windows PC

  • Si917 Evaluation Kit: WPK (BRD4002) with one of the following radio boards: BRD4338A, BRD4342A, or BRD4343A

  • SiWx917 AC1 Module Explorer Kit: BRD2708A

Software

  • Simplicity Studio (latest version)

  • Serial console for runtime logging

Getting Started with Simplicity Studio#

Follow these steps to begin development with the SSI peripheral:

  1. Install Simplicity Studio.

  2. Connect Your Hardware.

    • Attach your SiWx917 development board via USB.

  3. Launch Simplicity Studio.

    • Open the IDE and ensure your board is detected.
      Board auto detectionBoard auto detection

  4. Create a New Project.

    • Select your target device or board.

    • Click Create New Project.

    • In the Examples view, search for SSI.
      SSI example viewSSI example view

    • Choose a demonstration project (for example, SSI Primary, SSI Secondary, or ULP SSI Primary) from the WiSeConnect SDK.

    • Click Create to add the project to your workspace.

    • Review the included readme.md for project purpose and usage.
      SSI Master example readmeSSI Master example readme

  5. Build and Flash

    • Compile the project and flash it to your board.

Reference: For complete setup details, see the SSI Primary Example Project on GitHub.

SSI Master Example – Folder Structure#

SSI Master example folder structureSSI Master example folder structure

Folder/File

Description

autogen/

Auto-generated configuration files (headers, linker scripts).

config/

Platform-specific configuration headers.

resources/

Documentation images and supporting resources.

simplicity_sdk/

Gecko SDK platform layer and third-party libraries.

wiseconnect3_sdk_4.0.0/

WiSeConnect SDK components and drivers.

app.c / app.h

Main application source and header files.

main.c

Application entry point.

sl_si91x_ssi.slcp

Main project configuration file for Simplicity Studio.

sl_si91x_ssi.slps

Project set file for managing multiple .slcp projects.

sl_si91x_ssi.pintool

Pin Tool configuration file for SSI signal mapping.

readme.md

Documentation and example usage guide.

Configuring SSI in Simplicity Studio#

The SSI component is accessible in the Simplicity Studio Project Configurator (Component Editor).
Follow the steps below to add and configure it.

Add the SSI Component#

  1. Open your project’s .slcp file in Simplicity Studio.
    Open .slcp fileOpen .slcp file

  2. Go to the Software Components tab.

  3. Search for SSI or navigate to WiSeConnect 3 SDK → Device → Si91x → MCU → Peripheral.
    SSI component locationSSI component location

  4. Select the SSI component. If it’s not installed, click Install.
    SSI instancesSSI instances

  5. Follow the prompts to install and confirm the configuration.

Configure SSI Parameters#

  1. Click Configure next to the SSI component to open the configuration UI.
    SSI configuration UISSI configuration UI

  2. Adjust parameters such as device mode, bit rate, data width, and pin assignments.
    SSI parameter adjustment panelSSI parameter adjustment panel

Alternatively, edit the generated configuration headers manually:

  • sl_si91x_ssi_primary_config.h

  • sl_si91x_ssi_primary_common_config.h

SSI Configuration Parameters#

Parameter

Description

Options / Range

Device Mode

Operating role selection

Primary, Secondary, ULP Primary

Enable SSI

Enables/disables SSI instance

0 (Disabled), 1 (Enabled)

DMA Enable

Enables DMA for SSI transfers

On / Off

Frame Format

Protocol and CPOL/CPHA selection

SPI Mode 0–3, TI SSP, Microwire

Transfer Mode

Number of data lines used

Single (Standard), Dual, Quad

Bit Rate

Serial clock frequency (Hz)

500,000–40,000,000

Data Width

Number of bits per frame

4–16

Receive Sample Delay

Delay (in cycles) for sampling received data

0–63

Chip Select Outputs

Number of chip-select outputs (Primary only)

1–4

Notes:

  • Match frame format and transfer mode to the connected device’s requirements.

  • Dual and quad modes support SPI Modes 0–3 only.

  • Maximum bit rates: HP SSI Primary up to 40 MHz, SSI Secondary up to 20 MHz, ULP SSI Primary up to 10 MHz.

  • Tune the Receive Sample Delay to optimize timing for high-speed operation.

  • For Quad SPI mode, define SPI_QUAD_MODE=1 in preprocessor macros.

SSI Pin Annotation#

The SSI peripheral supports multiple GPIO pin mappings, providing flexibility for hardware design.

SSI Primary – Pin Options#

Signal

GPIO Options

SSI_CLK

GPIO_8, GPIO_25, GPIO_52

SSI_CS0

GPIO_9, GPIO_28, GPIO_53

SSI_CS1

GPIO_10

SSI_CS2

GPIO_15, GPIO_50

SSI_CS3

GPIO_51

SSI_MOSI/DATA0

GPIO_11, GPIO_26, GPIO_56

SSI_MISO/DATA1

GPIO_12, GPIO_27, GPIO_57

SSI_DATA2

GPIO_6, GPIO_29, GPIO_54

SSI_DATA3

GPIO_7, GPIO_30, GPIO_55

SSI Secondary – Pin Options#

Signal

GPIO Options

SSI_CLK

GPIO_8, GPIO_26, GPIO_47, GPIO_52

SSI_CS

GPIO_9, GPIO_25, GPIO_46, GPIO_53

SSI_MISO

GPIO_11, GPIO_28, GPIO_49, GPIO_57

SSI_MOSI

GPIO_10, GPIO_27, GPIO_48, GPIO_56

ULP SSI (Low-Power) – Pin Options#

Signal

ULP GPIO Options

SoC GPIO Options

ULP_SSI_CLK

ULP_GPIO_0, ULP_GPIO_4, ULP_GPIO_8

GPIO_6, GPIO_46

ULP_SSI_CS0

ULP_GPIO_7, ULP_GPIO_10

GPIO_48

ULP_SSI_CS1

ULP_GPIO_4

GPIO_10

ULP_SSI_CS2

ULP_GPIO_6

GPIO_12

ULP_SSI_MISO

ULP_GPIO_2, ULP_GPIO_6, ULP_GPIO_9

GPIO_8, GPIO_47

ULP_SSI_MOSI

ULP_GPIO_1, ULP_GPIO_5, ULP_GPIO_11

GPIO_7, GPIO_49

Notes:

  • Map ULP SSI to either ULP GPIOs or standard SoC GPIOs depending on power design.

  • The ULP SSI instance supports only single-bit SPI mode.

  • Avoid pin conflicts between SSI instances or other peripherals.

  • If Quad SPI mode is enabled, ensure DATA2 and DATA3 are configured.

  • SSI_DATA0 = MOSI (output with respect to Primary), DATA1 = MISO (input with respect to Primary).

  • Misconfigured DATA2/DATA3 pins may trigger build warnings.

For complete pin multiplexing details, refer to the SiWx917 Device Data Sheet (PDF).

Configuration Parameters#

The following structure defines user-configurable parameters for the SSI peripheral.
Populate this structure before calling (or indirectly through) the initialization and configuration APIs.

typedef struct {
    uint8_t  bit_width;             // Data frame width in bits (4–16).
    uint32_t device_mode;           // Primary / Secondary / ULP.
    uint32_t clock_mode;            // SPI mode 0–3 
    uint32_t baud_rate;             // Bit rate (Hz).
    uint32_t receive_sample_delay;  // RX sample delay (0–63 cycles).
    uint32_t transfer_mode;         // Single / Dual / Quad.
} sl_ssi_control_config_t;

For detailed descriptions of sl_ssi_control_config_t and the latest parameter documentation, refer to the API reference:

API to Initialize#

The SSI peripheral initialization follows a standard sequence:

#include "sl_si91x_ssi.h"
// Configure SSI parameters
sl_ssi_control_config_t ssi_primary_config = {
    .bit_width            = 8,
    .device_mode          = SL_SSI_MASTER_ACTIVE,
    .clock_mode           = SL_SSI_PERIPHERAL_CPOL0_CPHA0,
    .baud_rate            = 1000000,      // 10 MHz
    .receive_sample_delay = 0,
    .transfer_mode        = SL_SSI_PRIMARY_TRANSFER_MODE
};

// Step 1: Initialize SSI instance
sl_ssi_handle_t ssi_handle;
sl_si91x_ssi_init(ssi_primary_config.device_mode, &ssi_handle);

// Step 2: Set slave number
sl_si91x_ssi_set_slave_number(SSI_SLAVE_0);

// Step 3: Configure SSI settings
sl_si91x_ssi_set_configuration(ssi_handle, &ssi_primary_config, SSI_SLAVE_0);

// Step 3: Register callback (optional)
sl_si91x_ssi_register_event_callback(ssi_handle, ssi_callback_function);

// Step 4: Begin data transfers
uint8_t tx_data[10] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A};
uint8_t rx_data[10] = {0};

sl_si91x_ssi_send_data(ssi_handle, tx_data, sizeof(tx_data));
sl_si91x_ssi_receive_data(ssi_handle, rx_data, sizeof(rx_data));

Tip: Always verify the return values of SSI API calls (sl_status_t) to ensure successful initialization and configuration.

For non-blocking communication, register event callbacks to handle transfer completion and error events efficiently.