emb::6
is a scalable C-based 6LoWPAN stack for embedded devices developed by the
Laboratory of Embedded Systems and Communication Electronics (ESK) at
Offenburg University of Applied Sciences (HSO) under supervision of Prof. Dr. Axel Sikora ([email protected]).
Originally derived from Contiki several adaptations have been made such as the removal of proto-threads. It follows a strict layer based architecture with a modular software design allowing it to be used even on very restricted devices.
In the last decade, IPv6 over Low power Wireless Personal Area Networks, also
known as 6LoWPAN, has well evolved as a primary contender for short range
wireless communication and holds the promise of an Internet of Things, which is
completely based on the Internet Protocol. The IEEE 802.15.4 standard specifies
a maximum frame size of 127 bytes where the IPv6 specification requires a
minimum MTU of 1280 byte. With the 6LoWPAN adaptation layer it is possible to
make use of IPv6 in small and constrained wireless networks which follows the
IEEE 802.15.4 standard. In the meantime, various 6LoWPAN implementations are
available, be it open source or commercial. One of the open source
implementations is the C-based emb::6
stack.
The emb::6
stack is optimized to be used in constrained devices without an
operation system. The stack operates event driven with a scalable buffer
handling for optimization on different platforms. The typical field of
application is in wireless sensor networks, e.g. for home automation or
industrial environments.
For the best introduction to get started with emb::6
, please read the
documentation included, our Wiki page. For the code comments you will also find a doxygen
project file within the doc folder.
If you want to launch an LCM based lightweight virtualisation with various routing topologies you are invited to visit a dedicated Wiki page
The emb::6
build system is based on scons. Therefore several options are available to
configure the build accordingly. For detailed instructions please visit the according
Wiki-Page.
For an initial build with a simple demo you can run the following comands to build to executables
for the native Linux target (keep in mind that the LCM libraries have to be installed in advance.)
scons --demos=UDPSrv --bsp=native --net=rpl-dagroot --os=none --mac=0x00AA --logger=3 --ccflags=MODULATION=MODULATION_2FSK50,LOGGER_DEMO_UDP_SOCKET=TRUE
scons --demos=UDPCli --bsp=native --net=rpl-router --os=none --mac=0x00BB --logger=3 --ccflags=MODULATION=MODULATION_2FSK50,LOGGER_DEMO_UDP_SOCKET=TRUE
Afterwards you can run the both executables using the following commands in two separate terminals. Then you should be able to see the according debug output.
./bin/./bin/UDPSrv-rpl-dagroot-native-none_0x00AA.elf
./bin/UDPCli-rpl-router-native-none_0x00BB.elf
There are several IOT capable stacks available may it be on open source or on
commercial basis. The emb::6
networking stack provides several salient features
making it a unique offering. The main features and concepts of the stack are the
following:
- Event Driven Operation - Very small RAM overhead, one memory stack for the whole system.
- Scalable Buffer Handling - A common buffer module is used across layer and module boundaries. This decreases memory usage and furthermore provides scalability for usage on different hardware configurations and limitations.
- Static memory management - For additional stability during runtime.
- Compile Time Options - Usage of different compile-time settings help to make an optimum selection regarding to the anticipated use cases as well as to the hardware limitations such as memory size or computing performance.
- Run Time Options - Many stack parameters are accessible and changeable during runtime via remote management.
- Full IPv6 support - The integrated IPv6 protocol is based on the uIP-Stack. This provides full IPv6 support and guarantees further support and maintenance.
- BSP and HAL Abstraction - Hardware dependencies are abstracted with a BSP which offers an API between the target and the applications and with a hardware abstraction layer HAL, which allows independence from the used microcontroller IC.
- Optimized for use in constrained devices- The scalability of the stack enables a manifold use in highly diverse embedded systems.
- Routing functionality - The routing functionality is provided by the RPL protocol.
- Layered Architecture - The design of the software stack follows a strict layered architecture.
- Simple Setup and Configuration - The setup and configuration can be easily executed with the help of centralized configuration files.
- Socket Interface- A BSD like socket API allows easy integration of customized applications.
- Set of included Application Layer Protocols - e.g. COAP (further will follow)
The buildsystem of emb::6
is completely based on SCons as a replacement for make
with improved features. SCons is based on Python, makeing the tool very powerful
for the build process. It allows to easily create new configurations e.g. regarding
MCU/Transceiver or application selection. Furhermore the build-time is decreased
significantly.
emb::6
is very platform independent since it has no requirements to an OS and
hardware access is abstracted in a simple "single-file-based" hardware
abstraction layer. That makes it quite easy to port emb::6
to other platforms.
However emb::6
comes with support of several platforms e.g. based on ATMega,
Cortex-M0/M3, or MSP430. Furthermore a native build i supported to run emb::6 on
Linux based machines.
For questions or recommendations don't hesitate to contact [email protected]