Simple Sensor Interface protocol: Difference between revisions

Content deleted Content added
Bluebot (talk | contribs)
fixing header errors per the MOS
m More citations needed
 
(19 intermediate revisions by 15 users not shown)
Line 1:
{{More citations needed|date=December 2015}}
SSIThe ('''Simple Sensor Interface''' ('''SSI''') '''protocol''' is a simple communications protocol designed for data transfer between computers or user terminals and smart sensors.<ref>{{Cite SSIweb protocol|title=About: isSimple anSensor [[Application layer]]Interface protocol as in|url=https://dbpedia.org/page/Simple_Sensor_Interface_protocol [[OSI|access-date=2025-08-13 model]]|website=dbpedia.org}}</ref>
 
The SSI protocol has been developed jointly by [[Nokia]], [[Vaisala]], [[Suunto]], Ionific, Mermit and [[University of Oulu]] and released its first version in March 2003. Currently SSI is being developed within [http://www.mimosa-fp6.com/the Mimosa project] which is aProject, part of the [[European Union]] [[Framework Programmes onfor Research and Technological Development]].
 
The SSI protocol is used in point-to-point communications over [[UART]] and networking [[nanoIP]] applications. SSI also provides polling sensors and streaming sensor data. For [[RFID]] sensor tags SSI specifies memory map for sensor data.
 
The criterioncriteria for SSI protocol development are:
* general purpose
* simple – minimal overhead
* small footprint on the server (sensor) side
 
Sample implementation of the SSI protocol for [[MSP430]] [[microcontrollers]] will be published as [[open source]] during August 2006 by Nokia.
 
== SSI message structure ==
 
An SSI message is formedconsists of a 2-byte header and an ''n''-byte payload. The header consists of a one byte address (wildcard is '?', 0x3F in [[ASCII]]) and a one byte message/command type. The different possible values for the message/command type are presented in SSI v1.2 command base.
 
=== SSI v1.2 command base ===
 
{| class="wikitable"
{| border="1" cellspacing="0" cellpadding="5" align="center"
|-
! Command byte
! Direction
! Description
|-
| Q,q (0x51, 0x71)
| C->
| Query
|-
| A,a (0x41, 0x61)
| <-S
| Query reply
|-
| C,c (0x43, 0x63)
| C->
| Discover sensors
|-
| N,n (0x4E, 0x6E)
| <-S
| Discovery reply
|-
| Z,z (0x5A, 0x7A)
| C->
| Reset sensor device
|-
| G,g (0x47, 0x67)
| C->
| Get configuration data for a sensor.
|-
| X,x (0x58, 0x78)
| <-S
| Configuration data response
|-
| S,s (0x53, 0x73)
| C->
| Set configuration data for a sensor
|-
| R,r (0x52, 0x72)
| C->
| Request sensor data
|-
| V,v (0x56, 0x76)
| <-S
| Sensor data response
|-
| D,d (0x44, 0x64)
| <-S
| Sensor response with one byte status field
Line 71 ⟶ 73:
| Sensor response with many data points
|-
| O,o (0x4F, 0x6F)
| C->
| Create sensor observer
|-
| Y,y (0x59, 0x79)
| <-S
| Observer created
|-
| K,k (0x4B, 0x6B)
| <->
| Delete sensor observer / listener
|-
| U,u (0x55, 0x75)
| <->
| Observer / listener finished
|-
| L,l (0x4C, 0x6C)
| <-S
| Request sensor listener
|-
| J,j (0x4A, 0x6A)
| C->
| Sensor listener created
Line 102 ⟶ 104:
| <->
| Free data for custom purposes
|-
|}
 
The group of commands :
*Z Qresetquery
 
*Q A – query reply
*A Cquerysensor replydiscovery
*C N sensor discovery reply
* Z – reset
*N – discovery reply
*S Gsetget sensor configuration
*Z – reset
*G Sgetset sensor configuration
are used to find and configure sensor units utilizing the SSI-protocol.
*S – set sensor configuration
 
are used to find and configure sensor units utilizing SSI-protocol.
 
The group of commands
 
*R – request sensor data
*V – data response
*D – data response with status field
 
The group of commands:
* R – request sensor data
* V – data response
* D – data response with status field
are used to read sensor data infrequently.
 
For data streaming purposes are defined commands are:
* O – create sensor observer
 
*O Y create sensor observer created
*Y Kobserverdelete createdobserver
*K U delete observer finished
*U Lobserverrequest sensor finishedlistener
*L J request sensor listener created.
*M V – data response with many data points
*J – sensor listener created.
*V M – data response with many data points
*M – data response with many data points
 
=== Point-to-point SSI ===
 
Point-to-point messaging with SSI can be done with SSI/UART. An SSI UART message consists of a 3-byte UART header, an SSI message as the payload and an optional [[CRC|Cyclic redundancy check]] [[checksum]]. The use of a checksum is defined by the SSI message/command type, with lower case commands indicating the use of CRC. The header consists of a start byte (0xFE), a 2-byte (total) length of the message and a 2-byte [[bitwise operation|bitwise]] [[NOT|Negation]] of length bytes to help identifyingidentify the frame start.
 
=== Networking SSI ===
 
SSI networking in a variable environment is done e.g. using [[nanoIP]]. In a typical case for using SSI, an individual message is not important, and so nanoUDP (simplified [[User Datagram Protocol|UDP]] defined by nanoIP) is used as the message format. If individual messages are important, nanoTCP can be used, as it provides flow control and retransmission, withat thea cost of message size and increase in network traffic.
 
A nanoUDP message consists of a 5-byte nanoUDP header, an ''n''-byte message payload and an optional 2-byte CRC checksum. The header consists of one protocol byte, a 2-byte message length (total length, including header and CRC), a 1-byte source port and a 1-byte destination port number. The destination port number should be 0x28 for SSI messages.
 
== Version history ==
Line 159 ⟶ 155:
*1.1 October 27, 2005
*1.2 May 27, 2006, not compatible with previous
 
== References ==
{{Reflist}}
 
== External links ==
 
* [http://ssi-protocol.net SSI protocol]
* [http://www.cwc.oulu.fi/nanoip/ nanoIP]
 
[[Category:Network protocols]]
[[Category:Application layer protocols]]