# Ethernut

Ethernut is an open source hardware and software project for use as an embedded-Ethernet-system.

## Hardware

Currently four different reference designs exist (Ethernut 1, Ethernut 2, Ethernut 3 and Ethernut 5) which are available as ready to use boards.
All reference designs share the same set of interfaces:
* Ethernet Connector
* RS-232 ports
* Power connector
* Nearly all I/O pins of the microcontroller are available on an expansion port
The designs mainly differ in the used microcontroller (Ethernut 1 & 2: 8-bit AVR, Ethernut 3 & 5: 32-bit ARM) and the available memory size. Since the Ethernut 3 board an MMC slot is available. Ethernut 5 also includes USB host and device interfaces.

## History

With the rise of the idea of the Internet of Things, different groups of people with different aims started around 2000 developing embedded systems which would be able to integrate in existing TCP/IP networks.
The limited resources of this mostly 8-bit embedded systems, which rarely reached or exceeded 64 kB of main memory, imposed a great challenge.
In the year 2000 the British developer Dave Hudson released the source code of a real-time operating system with integrated TCP/IP stack named Liquorice.
Another challenge was that suitable hardware for this kind of development was nearly non-existent. Nearly all network controllers of that time used the PCI-Bus interface which is too complex for small microcontrollers. But one of the few still-in-production controllers with ISA-Bus interface, which also was not recommended for new designs, was used together with ATmega103 microcontroller to create a single board computer. The layout of this board was released under BSD license and was one of the early open hardware projects.
After one year Hudson ceased work on the project. But the source code of Liquorice was used as software foundation for the new Ethernut project which aimed to integrate software and hardware development. After the first few versions had been released to the AVR Freaks Board, the project switched to SourceForge in 2002.

## Software
### Nut/OS

The open source operating system for these boards is called Nut/OS. It is a modular real-time operating system, licensed under BSD license.
Characteristics:
* Cooperative multithreading
* Assured interrupt-latency
* Prioritized event handling
* Different configurable timers
* Dynamic memory management
* Process synchronization technologies
* Good portability to other architectures
Nut/OS is supported by popular SSL/TLS libraries such as wolfSSL for embedded security.

### Nut/Net

The Ethernut project implements its own network stack, called Nut/Net. It implements a substantial protocol and socket API for use in Nut/OS programs.
The supported protocols are:
* Ethernet
* ARP
* IP
* ICMP
* UDP
* TCP
* PPP
* DHCP
* DNS
* SNTP
* SNMP
* FTP
* TFTP
* SYSLOG
* HTTP
* WINS (Subset)

### Configuration and usage

Configuring Nut/OS and Nut/Net is quite simple. After download of the source packages the Nut/OS configurator has to be executed which will build the needed libraries for the selected hardware configuration.
Application programmers will now use these Nut/OS and Nut/Net libraries to write its own software. Beside of the Nut/OS libraries the application programmer can use the standard C libraries. As programming languages C is used, but C++ is mostly supported as well. Additionally a Lua interpreter exists so that Lua scripts can be executed interactively at runtime on the board.
A multitude of simple sample applications exists as easy introduction into Nut/OS.

### Supported architectures

* Atmel AVR (e.g.: ATmega103, ATmega128, ATmega2561, AT90CAN128, etc.)
* Atmel AVR32 (e.g.: AT32UC3A, AT32UC3B, etc.)
* ARM7 (e.g.: AT91R40008, AT91SAM7X, LPC-E2294, Game Boy Advance, etc.)
* ARM9 (e.g.: AT91SAM9260, AT91SAM9XE, etc.)
* ARM Cortex M3
The following architectures are supported but not actively maintained:
* H8/300
* Motorola 68000

### Bluetooth stack

The research group for distributed systems of the ETH Zurich has developed a distributed Sensor network with nodes based on AVR. These sensor nodes communicate via Bluetooth. As system software the open source BTNut Bluetooth stack is used. The BTNut stack is based on the Nut/OS system and extends the Nut/OS functionality with Bluetooth access functions. Although the BTNut stack was developed mainly for the BTNode sensor nodes it can be easily ported to other applications.

## Usage and availability

According to the German manufacturer (egnite GmbH) about 33.000 Ethernut boards were sold (state: December 2013). There are several manufacturers of compatible hardware:Achatz electronics (Netherlands), proconX (Australia), Propox (Poland), SOC Robotics (Canada), HW group s.r.o. (Czech Republic), thermotemp Embedded-IT (Germany). Beside these, the Nut/OS operating system is used as base for the BTNode Sensor network ETH Zurich.