User Tools

Site Tools




SimpliciTI is a TI proprietary low power Radio Frequency network protocol (SimpliciTI page of the TI website). It is intended to support development of wireless end user devices in environment in which the network support is simple and the developer desires a simple means to do messaging over air. Thus SimpliciTI supplies APIs in order to manage easily messaging between devices.

SimpliciTI is considered as a library and not as an operating system, since it does not implement task handler.

SimpliciTI main features are :

  • low memory needs (<8kB flash and 1kB ram depending on the configuration);
  • advance network control (security, radio frequency agility, …);
  • sleeping modes support.

Architecture overview

Network topologies

It supports 2 basic topologies: a strictly peer-to-peer and a star topology in which the star hub is a peer to every other device .

Device types

SimpliciTI allows user to implement three device types : End Device, Range Extender, and Access Point. Note that a hardware device may host several SimpliciTI devices either of same type or of different type.

End Device

It is the base element of the network. It generally supports most of the sensors or actuators of the network. A strictly peer-to-peer network is exclusively composed of end devices (and eventually range extenders).

Access Point

It supports such features and functions as store-and-forward support for sleeping End Devices, management of network devices in terms of membership permissions, linking permissions, security keys, etc. The Access Point can also support End Device functionality. In the star topology the Access Point acts as the hub of the network.

Range Extender

These devices are intended to repeat frames in order to extend the network range. Due to their function, they are always on. Networks are currently limited to 4 range extenders.

SimpliciTI layers

SimpliciTI is organized in 3 layers : Data Link/Physic, Network, and Application.

SimpliciTI logical layers


This is the only layer that the developer needs to implement. It is where he develops his application (to manage sensors for example), and implements network communication, by using SimpliciTI network APIs or network applications. Note that it is in this layer that the developer needs to implement reliable transport if required, as there is no Transport layer.


This layer manages the Rx and Tx queues and dispatches frames to their destination. The destination is always an application designated by a Port number. Network applications are internal peer-to-peer objects intended to manage network. They work on a predefined port and are not intended to be used by the developer (except Ping for debugging purposes) Their usage depends on the SimpliciTI device type. These applications are:

  • Ping (Port 0x01): to detect the presence of a specific device.
  • Link (Port 0x02): to support the link management of two peers.
  • Join (Port 0x03): to guard entry to the network in topologies with APs.
  • Security (Port 0x04): to change security information such as encryption keys and encryption context.
  • Freq (Port 0x05): to perform change channel, change channel request or echo request.
  • Mgmt (Port 0x06): general management port to be used to manage the device.

Source code files for network layer are located in /Components/simpliciti.

This layer may be divided in 2 entities:

  • BSP (Board Support Package): to abstract the SPI interface from the NWK layer calls that interact

with the radio (/Components/mrfi);

  • MRFI (Minimal RF Interface): to encapsulate the differences between supported hardware radios,

toward the network layer (/Components/bsp).

Hardware support


SimpliciTI supports 5 families of TI radios :

  • Family 1 : CC1100, CC1101, CC2500
  • Family 2 : CC2510, CC2511, CC1110, CC1111
  • Family 3 : CC2520
  • Family 4 : CC2430
  • Family 5 : CC2530

Source code files for these 5 families of radio are located in the /mrfi/radios folder.


SimpliciTI implements 2 families of microcontrollers : Intel 8051 and TI MSP430 (source code directory : /bsp/mcus).


The following boards are supported : CC2430DB, CC2530EM, EXP461x, EZ430RF, RFUSB, SRF04EB, SRF05EB (source code directory : /bsp/boards).


As a convenience SimpliciTI also supports LEDs and button/switch peripherals attached to GPIO pins of the microcontroller. But no other services are provided such as UART drivers, LCD drivers, or timer services (source code directory : /bsp/drivers directory).


APIs enable user to implement a reliable network with little effort. But we have to keep in mind that the resulting network sacrifices flexibility for simplicity. Here are the different APIs supplied by SimpliciTI:

  • Initialization
    • smplStatus_t SMPL_Init(uint8 (*pCB)(linkID))
  • Linking (bi-directional by default)
    • smplStatus_t SMPL _Link(linkID_t *linkID)
    • smplStatus_t SMPL _LinkListen(linkID_t *linkID)
  • Peer to peer messaging
    • smplStatus_t SMPL _Send(linkID_t lid, uint8 *msg, uint8 len)
    • smplStatus_t SMPL _Receive(linkID_t lid, uint8 *msg, uint8 *len)
  • Configuration
    • void SMPL_Ioctl(ioctlObject_t object, ioctlAction_t action, void *val)

Porting SimpliciTI on the WSN430 hardware platform

Do it yourself

If you want to be sure to use the latest available version of SimpliciTI, you can put the wsn430 board code of the old version SimpliciTI into the new one.

Adding WSN430 board files

  1. Get the latest release of SimpliciTI from SimpliciTI page of the TI website. Choose SimpliciTI for IAR link, download and install it.
  2. Into the /Components/bsp/board/ directory of SimpliciTI installed files, add the WSN430 folder from /Components/bsp/board/ directory of the simpliciti-wsn430-v1.1.1.tar.gz archive.
  3. Into the /Projects/Examples/ directory of SimpliciTI installed files, add the WSN430 folder from /Projects/Examples/ directory of the simpliciti-wsn430-v1.1.1.tar.gz archive.

Compiling SimpliciTI with MSPGCC

SimpliciTI is written to be compiled with the IAR Embedded Workbench environment of the IAR Systems society. So in order to make it compilable with MSPGCC, some minor changes have to be performed on the SimpliciTI code.


  • In part ”Unrecognized compiler” (l 102), replace:
#error "ERROR: Unknown compiler."

by :

#ifdef __GNUC__
#include <io.h>
#include <signal.h>
#include <iomacros.h>
#define __bsp_ISTATE_T__ uint16_t
#define __bsp_ISR_FUNCTION__(f,v) interrupt (v) f(void)
#define __bsp_ENABLE_INTERRUPTS__() eint()
#define __bsp_DISABLE_INTERRUPTS__() dint()
#define __bsp_INTERRUPTS_ARE_ENABLED__() (READ_SR & 0x8)
#define __bsp_GET_ISTATE__() (READ_SR & 0x8)
#define __bsp_RESTORE_ISTATE__(x) st(if((x&GIE))_BIS_SR(GIE);)
#error "ERROR: Unknown compiler."
  • In part ”Common” (l 137), replace :
typedef signed char int8_t;
typedef signed short int16_t;
typedef signed long int32_t;
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned long uint32_t;

by :

#ifndef __GNUC__
typedef signed char int8_t;
typedef signed short int16_t;
typedef signed long int32_t;
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned long uint32_t;


Replace (l 197):

#error "ERROR: Debounce delay macro is missing."

by :

#ifndef __GNUC__
#error "ERROR: Debounce delay macro is missing."


Replace (l 40) :

#include <intrinsics.h>

by :

#ifndef __GNUC_
#include <intrinsics.h>

Using it ported

Just download and extract the simpliciti-wsn430-v1.1.1.tar.gz archive. SimpliciTI 1.1.1 ported for WSN430 and compilable with MSPGCC is ready to use.

SimpliciTI source code is in the /Components directory, including WSN430 board source code (located in /Components/bsp/boards). Examples are stored in the /Projects/Examples folder. SimpliciTI official documentations are available in the /Documents directory.

Program example

A program example using SimpliciTI for WSN430 is presented on that page.


lib/simpliciti.txt · Last modified: 2018/04/13 14:47 (external edit)