Ethernet TCP/IP Source Code Driver Project

a) General

Ethernet is the perfect solution to providing connectivity for all sorts of embedded devices. Not only does the incredibly versatile range of TCP/IP stack functions lend themselves to all sorts of communication applications, the internet and web browsers allow easy communications across the world and with anyone’s computer or smart phone, effectively for free. The barriers to use once caused by expensive embedded device program memory are now all but gone with today’s low end microcontrollers typically providing plenty of memory for a TCP/IP stack.

The simplicity of the design of each individual part of a typical TCP/IP stack has allowed it to become the universal standard it is today. However whilst simple in concept the implementation of a complete set of TCP/IP stack components is a large and complex task by any programmers standards. This driver removes you from all of that complexity and allows you to add an Ethernet interface to your project with ease. Each of the stack components is configurable to allow you to easily tailor the overall stack depending on each of your projects requirements.

b) Driver Introduction

This TCP/IP stack is designed from the ground up to be lean, yet extremely fast and powerful. The aim of the driver is for it to be the perfect choice for applications ranging from small 8 bit low speed embedded devices needing TCP/IP functionality, to fast 16 and 32 bit devices that need to provide high throughput and performance without requiring huge resources. Whilst these aims may seem to contradict each other, accomplishing this is actually relatively straightforward with the right decisions made about the architecture of the stack. With a typical TCP/IP stack being comprised of a large number of lines of code it can be very daunting for anyone other than the original programmers to navigate and understanding it, let alone tailor it to their own needs with any sense of confidence. However the other main aim of this stack is for it to be easy for programmers to understand and customise if need be and it has been implemented with huge importance placed on the source code remaining simple, straightforward and easy to understand.

The driver code has been designed using ANSI compliant C compliers. Using the driver with other ANSI compliant C compliers and with other processors / microcontrollers should not present significant problems, but you should ensure that you have sufficient programming expertise to carry out any modifications that may be required to the source code. Embedded-code.com source code is written to be very easy to understand by programmers of all levels. The code is very highly commented with no lazy programming techniques. All function, variable and constant names are fully descriptive to help you modify and expand the code with ease.

The driver and associated files are provided under a licence agreement. Please see www.embedded-code.com/licence.php for full details.

The remainder of this manual provides simple guides to using the driver as well as a wealth of technical information about how the driver works. We welcome any feedback on this manual and the driver.

c) Features

Optimised for small memory embedded designs. Processor ram usage is kept to a minimum and the Ethernet Controller IC memory is released as soon as packets are transmitted, allowing for high throughput applications.

Intelligent TCP handling to provide automatic re-transmission in the event of lost packets, but without using any large data buffers. If a packet gets lost it is automatically re-sent with the lost packet data simply re-generated.

Powerful web server with built in dynamic data handling, allowing your application to automatically add additional information to each web page as it is transmitted. Design your web pages using your favourite web design package and then use the included PC application to automatically convert the entire web site, including its images, scripts, etc, into either:

A single C compliant .h header file which you simply add to your project files and the entire web site is then automatically stored in the program memory of your device when you next compile. No additional work is required by you – the driver automatically deals with serving the web pages and content on demand.

A single binary data file ready to store in a flash memory IC, with a header file to add to your project allowing the HTTP server to automatically deal with serving the entire web site as you designed it. You just provide the method to store the single binary data block to your flash memory and to read the binary data from it on request by the HTTP server driver.

Receive input from a web browser using GET and POST methods. GET provides simple form or hyperlink inputs to be received. POST provides more advanced form entry and file upload. The driver incorporates full handling of uploaded files allowing users to upload configuration files, new firmware, new web site content, etc. The driver simply passes the received and decoded file data to your function ready for you to store or process as you wish.

As the majority of internet connected networks will allow outbound communications but will block inbound connections this driver also provides the functionality to allow your embedded device to connect to the internet itself, avoiding the need for a remote device or PC to have to make a connection to it. Having this functionality avoids special changes needing to be made by network administrators to permit inbound communications to your embedded device, which is often an issue in today’s security conscious world. POP3 email functionality allows your embedded device to connect to a POP3 mail server to check for incoming emails. SMTP and MIME email functionality allows your embedded device to send emails periodically or in response to events or emails received, with files attached if you wish. DNS functionality allows you to use URL’s rather than IP addresses, ensuring your device will continue to work should your mail server or remote server IP address be changed.

NetBIOS functionality allowing you to connect to your device by name rather than IP address on local networks.

This driver uses Internet Protocol Version 4 (IPv4) which is the dominant protocol of the Internet. Although its successor Internet Protocol Version 6 (IPv6) is now being actively deployed, the abundance of IPv4 devices means that it isn’t going away anytime soon, if ever.

This detailed project technical manual with simple guidance on how to include the driver in your project and detailed explanations for people who want to know more about the inner workings the stack.

Full source code supplied for you to use and modify as required.

The following protocols are included

UDP – Fast non-managed data transfer

Client and server functionality.

Multiple connections may be open and active at the same time.

TCP – Fast connection based managed data transfers

Client and server functionality.

Multiple connections may be open and active at the same time.

HTTP – Web server

Multiple connections may be open and active at the same time.

DHCP – Automatic network configuration client

Automatic request of IP address, subnet and gateway address so your device can simply plug and play on a network.

NetBIOS – Use names instead of IP address on local networks

Find your device by a text based name rather than IP address on a local network.

Can be very useful when using DHCP.

DNS – Lookup of IP address from a URL

Allows your embedded device to use text URL’s to connect to remote devices, such as mail servers or your own remote servers.

An important feature to protect against changes in a remote servers IP address effectively stopping your device from connecting to it.

POP3 – Receive email

Automatically check and download email from a standard POP3 mailbox.

Get round strict network administrators in this security critical world. If your embedded device will be behind routers or firewalls use POP3 to allow your device to retrieve messages via the internet itself, avoiding the need to configure the routers or firewalls to allow an incoming connection.

SMTP – Send email

Automatically send anyone emails in response to events or at fixed intervals. Request an email to be returned to you using POP3

MIME Base64 encoding – Attach files to emails being sent

Easy attachment of files to outgoing emails. For instance you could attach .txt files containing configuration settings or.csv spreadsheet files with logging data for opening with Excel and other spreadsheet applications. Any file type may be attached.

ICMP – Ping response

Responds to ping requests.

ARP – Address resolution protocol

A basic requirement for a TCP/IP device.

SNTP Time Server Client

Use internet public time servers to obtain the current time.

Drivers for the following Network Interface Controller IC’s are included

10Base-T

Microchip ENC28J60 (SPI bus hardware interface)

Realtek RTL8019AS (8 bit hardware interface)

10Base-T / 100Base-TX

SMSC LAN91C111 (8 or 16 bit hardware interface)

NXP LPC2000 series ARM microcontroller with built in Ethernet interface and external KSZ8001 PHY IC.

Adding support for other network interface controller IC’s is straightforward due to the driver’s simple approach to the handling of the Ethernet receive and transmit buffers. There are no requirements to dynamically reserve memory areas for active connections. Instead a single transmit buffer is assigned for outgoing packets and the remainder of the memory is available for the rolling receive buffer. As well as making it straightforward to add new devices this approach also means that there is always the maximum possible receive buffer space available to queue incoming packets and avoid lost packets in heavy network traffic conditions.