nRFGo SDK: RF protocol
Main Page
Modules
Index
RF protocol
[Firmware]
页码,1/64
The Gazell protocol has a common code base and porting modules for the supported modules. This
common part of Gazell is written for an 8051 MCU. Apart from this, it is hardware independent.
Hardware dependency is ensured by HAL modules ( Hardware Abstraction Layer (HAL) ) and the
porting modules. HAL is used for the RF tranceiver, while the porting modules ensure that the special
needs of the protocol not reusable for other projects, are met.
The table below provides an overview of the RF protocol firmware modules available for the nRF24LE1 /
nRF24LU1+ radio MCUs.
RF Protocol modules
Description
Gazell Link Layer (gzll)
Link layer for the nRF24L01+ radio.
Gazell Pairing Library (gzp)
This is a library for adding dynamic pairing
functionality to an application using the
Gazell Link Layer.
Supported
devices
nRF24LE1 QFN24
nRF24LE1 QFN32
nRF24LE1 QFN48
nRF24LU1+
nRF24LE1 QFN24
nRF24LE1 QFN32
nRF24LE1 QFN48
nRF24LU1+
Generated on Tue Mar 29 2011 13:46:12 for nRFGo SDK by
1.7.2
Main Page
Modules
Index
Gazell Link Layer (gzll)
[RF protocol]
Link layer for the nRF24L01+ radio.
Contents
l Introduction
l Roles in a Gazell star network
l Properties of Gazell
l Protocol states
l Protocol timing in Gazell
l Pipes and addresses in Gazell
l Configuration
l Application Programming Interface (API) for the Gazell Link Layer
file://C:\Documents and Settings\Administrator\Local Settings\Temp\...
2011-12-23
nRFGo SDK: RF protocol
Introduction
页码,2/64
Gazell Link Layer is a library with functions for setting up and configuring the link layer of a wireless
desktop or other wireless applications. The Gazell Link Layer replaces the earlier Frequency Agility
Protocol from Nordic Semiconductor. In the rest of this text we will shorten "Gazell Link Layer" to
"Gazell".
Each Gazell node can be configured for communication with up to six other Gazell devices in a network.
Each node can transmit and receive data. Networks with more than seven (1+6) nodes can be set up
to work with Gazell, but no Gazell node in the network can know more than six other nodes.
For the sake of simplicity we will in the rest of the help file assume that we have a star network with
one Host node and one to six Device nodes. With this network it is very easy to write a wireless
application using Gazell, since no network layer will be needed on top of Gazell. Setting up addresses
and channel tables is also very simple for a star network.
Roles in a Gazell star network
In a simple Gazell star network we have two static roles: Host and Device. There will be one Host and
one to six Devices in the network. This is a typical wireless desktop configuration where no role
switching is ever required - there will be a "dongle" that is always a Host, plus a mouse, keyboard and
other input units that are always Devices.
A Host mainly receives data, but can still send data back to a transmitting Device by piggy-backing
data onto the acknowledgement packets returned to that Device.
A Device mainly transmits data, but can still receive data in the acknowledgements returned from the
Host.
It is always a Device that initiates a data transfer. This means that a Host has to wait for a packet from
a Device before it can send anything to the Device. Note that it is still possible to fulfill latency
requirements for Host to Device traffic (like a command from the PC to turn on the caps lock LED on a
keyboard). The application on the Device side will just have to send dummy poll packets at regular
intervals to the Host. The Host will then return any pending data in the following acknowledgement. In
a typical desktop application the Host to Device latency requirement is usually so relaxed that such a
poll will not consume significant power.
Properties of Gazell
Low Power
Gazell is a protocol designed to minimize power consumption. For applications like wireless desktops or
remote controls where the power capability on Host and Device are very different, Gazell will operate in
an asymmetric mode where the Devices draw much less power than the Host.
In this mode the Device is free to send data at its own discretion. A remote control will for instance
only send each time a button is pressed. All "protocol smalltalk" just to maintain a link is thus avoided.
This minimizes power on the Device side at the cost of more power on the Host, since the Host will
have to always listen.
In battery-to-battery operations, where power saving is equally important on both Host and Device
side, Gazell can be set up in a more symmetric mode where both Host and Device have a low duty
cycle. In this case there is a trade-off between latency and power consumption. The longer latency one
can accept, the lower the power consumption will be. This tradeoff can be configured by Gazell.
To minimize power and latency in applications with high report rates, Gazell also has a semi-
synchronized mode. This mode needs an accurate system clock on both sides. This mode does not use
power-wasting synchronization messages to keep Host and Device in sync. Instead the Device uses the
ordinary acknowledgment packets to synchronize its transmission channel time slots with the Host
whenever an ACK is received.
file://C:\Documents and Settings\Administrator\Local Settings\Temp\...
2011-12-23
nRFGo SDK: RF protocol
页码,3/64
Note that synchronization occurs at the discretion of the Device - the Host does not even know whether
the Device is synchronized or not. This means that some Devices can operate in asynchronous mode at
the same time as other Devices are in synchronous mode.
Gazell does not lose any data when the Host and Device eventually drift out of sync - it merely leads to
more retransmissions until the Device is able to sync up again. As soon as a retransmitted packet is
acknowledged, the Device will use the arrival time of the acknowledgement to adjust its
synchronization. So this is an imprecise sync mechanism where power and latency are saved whenever
the protocol is in sync, but the protocol is still working fine when we happen to be out of sync. We call
it "semi-synchronized mode".
Robust against interference
Gazell can be configured with frequency agility or frequency hopping to avoid interferers. "Frequency
agility" means that the protocol stays on the same frequency channel as long as there is little
interference on that channel. When a channel is quiet it makes little sense to switch to another
channel. The new channel is more likely to have interference than the current channel, so
unconditionally switching channels for each packet would increase the average number of
transmissions and thus the average power consumption and latency.
"Frequency hopping" means that that the protocol changes channel for each packet transmitted. This is
required by some radio regulations to spread the radio power across the spectrum when power
amplifiers are used to increase the range of the radio.
Gazell itself will cause little interference for other 2.4 GHz radios since the protocol does not need to
send packets to maintain a link. Gazell is only active when there is data to send. This also gives little
interference between Devices talking to the same Host. (These Devices have no knowledge of each
other and operate independently of each other.)
The size of the channel table is a trade-off between latency and robustness. Having a large channel
table gives us the option of trying many channels from the 2.4 GHz band to find a quiet channel. But
this means that the Host and Device need more time to find each other and consequently more
transmissions per packet, increasing power consumption and latency.
Gazell has configurable channel tables. Experience has shown us that having three to five channels
spread out in the 2.4 GHz band is a good compromise, giving very low latency and maintaining good
immunity to interference.
Low latency and high report rate
The perceived responsiveness and accuracy of a Device like a wireless mouse depends on the sample
rate and resolution of the optical sensor, but equally on the report rate and latency of the radio
protocol.
Gazell is a simple protocol with little protocol overhead and, combined with 2 Mbits/s data rate of
Nordic Semiconductor radios, we get high report rates.
Gazell achieves low latency by two means: asymmetric duty cycles and semi-synchronization.
Asymmetric duty cycles means that the Host can be configured to always listen while the Device only
has to send whenever there is data. Therefore the Device does not have to wait for the next listening-
slot on the Host before starting a transmission attempt.
The semi-synchronized mode described earlier also helps to achieve low latency, since when we are in
sync the Device will hit the correct channel and channel time-slot at the Host every time.
Simplicity
Using the Gazell protocol is easy. Since the Devices in a Gazell star network do not know about each
other and there is no co-ordination between them, setting up the Devices becomes very simple.
There are no special connection setup packets - all packets are data packets - and Gazell has no need
for packet headers of its own. We do not need send link packets at regular intervals to maintain a link.
file://C:\Documents and Settings\Administrator\Local Settings\Temp\...
2011-12-23
nRFGo SDK: RF protocol
页码,4/64
A Device can be turned off or removed from the network at any time, and the Device can re-enter the
network at any time later.
Encryption
Gazell supports AES encryption. The encryption is transparent to the application. Secure key exchange
will have to be set up by the application - pairing is not supported in the Gazell Link Layer itself.
Encryption can be set up individually for each link. For instance, a Host can run encrypted
communication with a keyboard Device and at the same time communicate in clear text with a mouse
Device.
Gazell uses an AES counter mode scheme for encryption. This scheme requires five bytes overhead in
each data packet to keep the counter synchronized on Device and Host. Encryption will increase
latency by 1-2 ms when using nRF24LE1 and 40-50 us when using nRF24LU1.
Protocol states
Gazell is either in an idle state where there is no radio activity, or in an active state in the role of either
Host or Device. The Gazell Link Layer protocol state machine has three main states:
l GZLL_IDLE
l GZLL_HOST_ACTIVE
l GZLL_DEVICE_ACTIVE
In the following we for simplicity shorten these state names to:
l IDLE
l HOST
l DEVICE
IDLE state
In IDLE state the protocol neither transmits nor receives. The radio is either in STANDBY or POWER
DOWN mode, as selected by the application.
Gazell starts in IDLE state after the function call gzll_init(). The application can force Gazell into IDLE
state with gzll_goto_idle() at any time.
HOST state
In HOST state the protocol listens for incoming data. Gazell enters HOST state with the function call
gzll_rx_start(). Received packets are stored in the radio receive (RX) FIFO. Gazell will remain in
HOST state indefinitely unless a receive-timeout has been set. The application can also interrupt HOST
state and return to IDLE state with the function call gzll_goto_idle().
file://C:\Documents and Settings\Administrator\Local Settings\Temp\...
2011-12-23
nRFGo SDK: RF protocol
页码,5/64
Gazell protocol states for a Host
Note that for a star network the Host should only be in the states IDLE and HOST. If a Host application
calls gzll_tx_data() the Host will enter the DEVICE state and switch roles and become a Device. Then
we do not have a star network any more - just a set of unconnected Devices.
Gazell supports two HOST-state modes:
l Mode 0: low latency mode
l Mode 1: low power mode
In low latency mode the Host listens continuously. Each channel in the channel table is monitored in a
rotating fashion. This mode is used when the Host has ample power and when low latency for Device to
Host data is important.
In low power mode the Host radio is in POWER DOWN or STANDBY between listening periods. In each
listening period, the Host listens for a short time on one channel. Then the Host goes to sleep for a
while before listening on the next channel. This gives less power consumption on the Host side than for
low latency mode.
In asynchronous mode (see below) a Host in low power mode means more transmission attempts and
thereby longer latencies and more power consumption on the Device side. However, in semi-
synchronous mode the Device will be synchronized to the short listening periods of the Host, so we do
not waste transmit attempts and power at the Device side. (But we will still get increased latency.)
Low power mode is used for battery-powered Hosts and when a Host is in standby mode. It is normal
for a Host to switch between the low power mode and low latency mode. A Host like a USB-dongle for
a wireless mouse will for instance be in low latency mode when the mouse and PC are active, but will
switch to low power mode when the PC is inactive and the USB-dongle enters SUSPEND mode.
DEVICE state
In DEVICE state, the protocol sends data. Gazell enters DEVICE state with the function call
gzll_tx_data(). Gazell handles re-transmission of lost packets and channel changes to avoid
interference. This is transparent to the application.
file://C:\Documents and Settings\Administrator\Local Settings\Temp\...
2011-12-23
nRFGo SDK: RF protocol
页码,6/64
Gazell protocol states for a Device
Gazell will continue to transmit as long as there is data in the transmit FIFO. A transmit timeout can be
set that interrupts transmission which is not successful within a given time. The application can also
interrupt DEVICE state and return to IDLE state with the function call gzll_goto_idle().
Note that for a star network, a Device should only be in the states IDLE and DEVICE. If a Device
application calls gzll_rx_start() the Device will enter the HOST state and switch role and become a
Host. We then have a network with two Hosts, which is not a star network any more.
In DEVICE state a Device will continue to transmit as long as there are pending packets in the TX FIFO
of the radio. New packets can be uploaded to the TX FIFO during transmission.
A timeout period can be set. This will limit the time for retransmission of a packet. If a packet has not
been acknowledged within the timeout period, the protocol will give up and return to IDLE state. The
application will then have to consider what to do with the packet that failed to be transmitted and with
the other packets in the TX FIFO of the radio.
Gazell supports five modes of transmit operation in the DEVICE state. These five modes are grouped
into two categories:
l Semi-synchronous operation mode
l Asynchronous operation mode
Semi-synchronous mode
In semi-synchronous mode the Device will try to synchronize its transmission time slot with the Host's
listening time slot for the channel to be used. The Host rotates quickly through the channel table,
listening for a while on each channel. The Device will also go through all channels in the channel table,
re-transmitting the packet on a given channels for a full rotation at the Host, until "hitting" both
channel and time slot on the Host. The Device will then use the arrival time of the acknowledgment
packet returned from the Host to "calibrate" its synchronization timer. Note that the Host is ignorant of
the Device's attempts to synchronize with the Host.
When synchronization is successful, the Device can then always send a packet on the right channel
within the listening slot for that channel on the Host. This will minimize the number of transmissions of
each packet - when there is no interference each packet will be sent only once.
The Device can know that sync has been achieved when the number of retransmissions gets close to
zero. The function gzll_get_tx_attempts() returns the number of transmit attempts for the current
packet. (When there is heavy radio interference, the Device will have difficulty achieving sync, since it
cannot know whether a missing ACK is caused by external interference or by itself being out of sync.)
Note that a semi-synchronized Device is free to select any channel for its next transmission. It knows
file://C:\Documents and Settings\Administrator\Local Settings\Temp\...
2011-12-23
nRFGo SDK: RF protocol
页码,7/64
in which time slots the Host is monitoring a particular channel and merely waits until that time slot
comes up before transmitting.
If synchronization is unsuccessful for a while due to clock drift or radio interference, the protocol will
still work. Gazell will just operate as in asynchronous mode until the next acknowledgment is received
and the sync timer can be adjusted again.
Asynchronous mode
Semi-synchronization saves transmissions and thus radio power but causes a small penalty on
microcontroller power: we need to run an accurate synchronization timer between each transmission.
When a Device only sends a little data now and then, it is unlikely that the Device can achieve
synchronization with its Host. Then it is not worthwhile to spend power on running an accurate clock,
and we are better off running Gazell in asynchronous mode.
In asynchronous mode, Gazell must perform a kind of Device discovery for each packet sent. This costs
some extra transmissions, but the advantage is that the Device can be in power down between
transmissions for as long time as it wants. A simple remote control Device will typically always run in
asynchronous mode.
Frequency hopping in Gazell
In Gazell, the frequency hopping as seen on the air is completely determined by the Devices. The Host
will for any frequency hopping policy on a Device still listen on all channels in turn, rotating through the
complete channel table. The Host is configured in the same way for all Device modes, and does not
even know a Device's synchronization mode or hopping policy.
A Device can select which channels to use and how often to use them. Different Devices can choose
different channel hopping policies if wanted. The available channel selection policies are different for
the asynchronous and semi-synchronous modes:
Channel selection policies in asynchronous mode
A Gazell Device in asynchronous mode can be set up with two channel selection policies:
l Frequency agility (FA)
l Frequency hopping spread spectrum (FHSS)
For the "frequency agility" policy, we first try the previous successful channel, assuming that this
channel is still good. This is the channel that was used by the last acknowledged packet. We will stay
on this channel as long as it is good. In a quiet environment we will then very seldoml change channel.
If we do not succeed transmitting on the previous good channel, a pseudo-random channel is selected
from the channel table.
For the "frequency hopping" policy we select a new pseudo-random channel from the channel table
each time. This gives us frequency hopping spread spectrum behavior. The transmitted radio power is
then spread evenly among all channels in the channel table. This behavior is required by some radio
regulations when transmitting at high power, as when using a power amplifier. If we do not succeed on
the first random channel, a new pseudo-random channel is selected from the channel table.
Channel selection policies in semi-synchronous mode
A Gazell Device in semi-synchronous mode can be set up with three channel selection policies:
l Frequency agility (FA)
l Frequency hopping spread spectrum (FHSS)
l Low latency frequency hopping spread spectrum (smart FHSS)
For the first two policies the selection of the first channel to try is the same as in asynchronous mode.
The difference lies in how the secondary channel choice is made.
file://C:\Documents and Settings\Administrator\Local Settings\Temp\...
2011-12-23
nRFGo SDK: RF protocol
页码,8/64
In asynchronous mode, if the first channel choice in FA or FHSS mode fails, a pseudo-random channel
will be tried. In synchronous mode, if the first channel choice in FA or FHSS mode fails, the estimated
Host channel will be used instead. We have sync, so the Device knows the channel rotation at the Host,
and just waits until the time slot for this channel comes up a the Host, before attempting to transmit.
Details of Device channel selection and transmit operation are shown in the figure below.
The third policy - low latency frequency hopping, or smart FHSS - is only meaningful for a synchronized
Device. With this policy the Device immediately starts transmitting at the channel that the Host is
listening on. If the Device is still in sync with the Host, we will hit the correct timer the first time,
reducing latency and saving power.
Which channel that the Host is listening on at the time the application in the Device signals a start of a
new transmission with gzll_tx_data(), is quite random with respect to the channel rotation at the
Host. Across time we will therefore also get random spread spectrum behavior with smart FHSS. But
we avoid the extra latency of the simple FHSS - the latency due to having to wait for the right time slot
to come up at the Host.
To summarize, there are altogether five operation modes in the DEVICE state:
l Mode 0: asynchronous mode, frequency agility
l Mode 1: asynchronous mode, frequency hopping spread spectrum
l Mode 2: semi-synchronous mode, frequency agility
l Mode 3: semi-synchronous mode, frequency hopping spread spectrum
l Mode 4: semi-synchronous mode, low latency frequency hopping spread spectrum
file://C:\Documents and Settings\Administrator\Local Settings\Temp\...
2011-12-23