⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tep133.txt

📁 tinyos-2.x.rar
💻 TXT
字号:
=================================
Packet-level time synchronization
=================================

:TEP: TBA
:Group: Core Working Group 
:Type: Documentary
:Status: Draft
:TinyOS-Version: > 2.1
:Author: Miklos Maroti, Janos Sallai

:Draft-Created: 15-May-2008
:Draft-Version: $Revision: 1.1 $
:Draft-Modified: $Date: 2008/06/17 15:06:33 $
:Draft-Discuss: TinyOS Developer List <tinyos-devel at mail.millennium.berkeley.edu>

.. Note::

   This memo documents a part of TinyOS for the TinyOS Community, and requests
   discussion and suggestions for improvements.  Distribution of this memo is
   unlimited. This memo is in full compliance with TEP 1.

Abstract
============================================================================

This TEP describes a packet-level time synchronization mechanism that allows for
sending a time value along with the packet which is automatically converted from
the sender's local time to the receiver's local time by the communications
stack.

1. Introduction
============================================================================

Time of occurrence of events is often of interest in a sensor network.
Maintaining a synchronized UTC or a virtual global time in a sensor network may,
however, lead to significant communication overhead and may not always be
required by the application.

This TEP describes a packet-level time synchronization mechanism that allows for
sending a time value along with the packet which is automatically converted from
the sender's local time to the receiver's local time by the communications
stack. Packet-level time synchronization is limited to single-hop communication
and does not provide synchronized network time. It provides a simple yet
powerful abstraction, on top of which it is possible to implement higher-level
time synchronization services (e.g. FTSP [6]_)in a platform-independent way.
Packet-level time synchronization is semantically equivalent to the ETA
primitives [1]_.

The rest of this TEP specifies:

-	Platform-independent packet-level time synchronization interfaces
-	How these interfaces are provided in the HIL
-	A guideline how each transceiver's HAL may implement the above interfaces

2. Interface
============================================================================

Packet-level time synchronization is implemented by the communication stack and
is exposed through two interfaces, ``TimeSyncAMSend`` and ``TimeSyncPacket``.

The ``TimeSyncAMSend`` interface allows for sending a time value (e.g. an event
timestamp) along with a message. It is parameterized by the precision and width
of the time value::

  interface TimeSyncAMSend<precision_tag, size_type>
  {
    command error_t send(am_addr_t addr, message_t* msg, uint8_t len, size_type event_time);
    command error_t cancel(message_t* msg);
    event void sendDone(message_t* msg, error_t error);
    command uint8_t maxPayloadLength();
    command void* getPayload(message_t* msg, uint8_t len);
  }

The ``send`` command sends a regular message just like ``AMSend.send`` [2]_, but
it also performs sender-receiver time synchronization. The ``event_time``
parameter holds the time of some event as expressed in the local clock of the
sender. The receiver can obtain the time of this event (expressed in its own
local time) via the ``TimeSyncPacket`` interface.

The rest of the functionality is identical to that of the ``AMSend`` interface,
therefore its description is omitted here.  Please refer to [2]_ for details.

The ``TimeSyncPacket`` interface, parameterized by a precision tag and width,
allows for retrieving a time value that was sent along the received packet::

  interface TimeSyncPacket<precision_tag, size_type>
  {
	  command bool isValid(message_t* msg);
	  command size_type eventTime(message_t* msg);
  }

The ``isValid`` command returns ``TRUE`` if the value returned by
``eventTime`` can be trusted. Under certain circumstances the received packet
cannot be properly time stamped, so the sender-receiver synchronization cannot
be finished on the receiver side. In such case, this command returns ``FALSE``.
This command MUST be called only on the receiver side and only for messages
transmitted via the TimeSyncAMSend interface.

The communications stack MUST guarantee that if the ``isValid`` command called
from within the ``receive`` event handler returns ``TRUE``, then the value
returned by the ``eventTime`` command can be trusted. However, it might be
possible that the local clock overflowed more than once or that is was stopped
or reset since the packet was received, which causes the ``event_time`` to be
invalid. The ``isValid`` command MAY return ``TRUE`` in such situations, and it
is the responsibility of the user of the interface to ensure that the clock runs
freely from the time of message reception to the time when ``eventTime`` is
called. To avoid this issue, it is recommended that ``isValid`` and
``eventTime`` are called from the ``receive`` event handler.

The ``eventTime`` command should be called by the receiver of a packet. The
time of the synchronization event is returned as expressed in the local clock of
the caller. This command MUST BE called only on the receiver side and only for
messages transmitted via the ``TimeSyncAMSend`` interface.

3. HIL requirements
============================================================================

The signature of the platform's ActiveMessageC [5]_ MUST include::

  provides interface TimeSyncAMSend<TMilli, uint32_t>;
  provides interface TimeSyncPacket<TMilli, uint32_t>;

where event times are given in the node's local time, which is available through
``HILTimerMilliC.LocalTime``.

The communications stack MAY support timestamp precisions and widths other than
``TMilli`` and uint32_t, respectively. Also, alternative ``TimeSyncAMSend`` and
``TimeSyncPacket`` implementations MAY use clock sources other than
``HILTimerMilliC.LocalTime``.

4. Implementation guidelines
============================================================================

Packet-level time synchronization employs the ETA primitives. In this TEP, only
the basics of the time synchronization mechanism are described, for details
please see [1]_. This section presents two possible implementation approaches.
The first approach assumes that the payload of the packet is still mutable when
the transmission time of the packet (e.g. the timestamp of the SFD interrupt)
becomes available. The second approach avoids this assumption and uses the
packet timestamping functionality described in TEP [4]_ to implement packet-
level time synchronization.

4.1 Approach #1
----------------------------------------------------------------------------

Several transceivers allow for modifying the contents of a packet after packet
transmission is started. Packet-level time synchronization can be implemented
very efficiently on such platforms.

Transmitter's story

 - When the communications stack services a ``TimeSyncAMSend.send`` command called
   with event timestamp ``t_e``, it stores ``t_e`` (e.g. in a map with the pointer
   of the message_t as key) and sets the designated timestamp field in the packet
   payload to ``0x80000000``.

 - When the packet starts being transmitted over the communication medium, a
   corresponding hardware event is timestamped (e.g. an SFD interrupt). Let us
   denote this transmission timestamp with ``t_tx``. The difference of event
   timestamp ``t_e`` and transmit timestamp ``t_tx`` is written into the
   designated timestamp field in the payload of the packet (typically into the
   footer, since the first few bytes might have been transmitted by this time).
   That is, the information the packet contains at the instance when being sent
   over the communications medium is the age of the event (i.e. how much time ago
   the event had occurred).

 - If an error occurs with timestamping the transmission or with writing the
   package payload after transmission has started, then the designated timestamp
   field in the packet payload will contain ``0x80000000``, indicating the error
   to the receiver.

Receiver's story

 - The packet is timestamped with the receiver node's local clock at reception
   (e.g. with the timestamp of the SFD interrupt). Let us denote the time of
   reception with ``t_rx``. The reception timestamp is stored in the metadata
   structure of the ``message_t`` [5]_.

 - When the event time is queried via the ``TimeSyncPacket`` interface, the
   ``eventTime`` command returns the sum of the value stored in the designated
   timestamp field in packet payload and the reception timestamp, i.e. ``e_t-
   e_tx+e_rx``. This value corresponds to the time of the event in the receiver's
   local clock.

 - The ``TimeSyncPacket.isValid`` command returns ``FALSE`` if the time
   value stored in the payload equals ``0x80000000`` or if the communications
   stack failed to timestamp the reception of the packet. Otherwise ``TRUE`` is
   returned, which indicates that the value returned by
   ``TimeSyncPacket.eventTime`` can be trusted.


4.1 Approach #2
----------------------------------------------------------------------------

If a particular platform does not support changing the packet contents after the
synchronization event (start of transmission, SFD interrupt, etc.) had occured,
it is still possible to provide packet-level time synchronization functionality
at the cost of some communication overhead. Such an approach can rely on packet
timestamping TEP [4]_ to implement packet-level time synchronization.

Transmitter's story

 - When the communications stack services a ``TimeSyncAMSend.send`` command
   called with event timestamp ``t_e``, it stores ``t_e`` (e.g. in a map with the
   pointer of the message_t as key) and sends the packet.

 - Transmission of the packet is timestamped using the packet timestamping TEP
   [4]_ mechanism. Let us denote this transmission timestamp with ``t_tx``. The
   difference of event timestamp ``t_e`` and transmit timestamp ``t_tx`` is sent
   in an auxilliary packet. That is, the information the auxulary packet contains
   is the age of the event at the time when the initial packet was transmitted.

Receiver's story

 - The packet is timestamped with the receiver node's local clock at reception
   (e.g. with the timestamp of the SFD interrupt). Let us denote the time of
   reception with ``t_rx``. The reception timestamp is stored in the metadata
   structure of the ``message_t`` [5]_.

 - When the auxilliary packet arrives, the time value it carries (``t_e-t_tx``,
   the age of the event) is stored in a metadata field of the main packet. The
   auxilliary packet is discarded, and the receive event is signalled with the
   pointer to the main packet.

 - When the event time is queried via the ``TimeSyncPacket`` interface, the
   ``eventTime`` command returns the sum of the value stored in the metadata (age
   of the event) and the reception timestamp, i.e. ``e_t- e_tx+e_rx``. This value
   corresponds to the time of the event in the receiver's local clock.

 - The ``TimeSyncPacket.isValid`` command returns ``FALSE`` if the communications
   stack failed to timestamp the reception of the packet. Otherwise ``TRUE`` is
   returned, which indicates that the value returned by
   ``TimeSyncPacket.eventTime`` can be trusted.

5. Reference implementation
----------------------------------------------------------------------------

A reference implementation of the packet-level time synchronization mechanism
described in this TEP can be found in ``tinyos-2.x/tos/chips/rf230``.


6. Author's Address
============================================================================

| Miklos Maroti                            
| Janos Sallai                             
| Institute for Software Integrated Systems
| Vanderbilt University                    
| 2015 Terrace Place                       
| Nashville, TN 37203                      
| phone: +1 (615) 343-7555                 

7. Citations
============================================================================

.. [1] Kusy, B., Dutta, P., Levis, P., Maroti, M., Ledeczi, A., Culler, D., Elapsed Time on Arrival: A simple and versatile primitive for canonical time synchronization services. International Journal of Ad hoc and Ubiquitous Computing, Vol, 2, No. 1, 2006.

.. [2] TEP 116: Packet protocols

.. [3] TEP 102: Timers

.. [4] TEP TBA: Packet timestamping

.. [5] TEP 111: message_t

.. [6] Maroti, M., Kusy, B., Simon, G., and Ledeczi, A. 2004. The flooding time synchronization protocol. In Proceedings of the 2nd international Conference on Embedded Networked Sensor Systems (Baltimore, MD, USA, November 03 - 05, 2004). ACM SenSys '04.


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -