Code Monkey home page Code Monkey logo

serial_net's Introduction

SerialNet

SerialNet is a project to allow TCP/IP communication over a common serial bus. Main purpose is to allow using computers/microcontrollers with a simple UART interface to be connected to a common signal wire and then allow them to use modern TCP/IP software stacks to communicate. Current code runs on Linux and is written in fairly portable C++14. (Non portable parts mostly in serial port drivers and TCP/IP interfaces.)

ABOUT

The SerialNet started as a private side project by me (Mikael Rosbacke) to see if something useful would emerge when combining old school serial ports, the bus topology of e.g. 10Base-T ethernet and modern embedded controller such as RaspberryPI and Cortex-M series microcontrollers.

Turns out it is possible to get something useful. You can connect 2 or more Linux computers to a serial bus and perform e.g. an ssh login between them, while running 115200 baud on the link.

Intended usage is as a link between cost constrained devices where you still need a wire for power supply. With some clever HW hacking both power and signaling can go over a common pair. For more range and speed, RS485 with a pair of power cables could be suitable. This is highly EXPERIMENTAL software still in alpha state. Use it at your own risk. No responsibility can be assumed.

Licensing

The software is copyrighted by Mikael Rosbacke. The public releases are made available under the GPL v3 license. This might change in the future depending upon usefulness and who uses this software. If you need other licensing, get in touch to discuss options. One third party dependency is included. It is copyrighted by its original authors and distributed under a separate license:

  • GSL : Guidelines support library, licensed from Microsoft under an MIT license In addition the software depends on a non-Debian packaged library:
  • ReactCPP : Released by CopernicaMarketingSoftware, Licensed under the Apache license v.2

Installation

The tool is developed on Ubuntu 16.04 so this is the easiest installation. Try the 'tools/setup_dependencies.sh' to install dependencies and build the tool. A test has been done on RaspberryPi 2 using a Debian jessie install. Needed modification is to install g++-6 packet and change the CMakeLists.txt to use g++-6 compiler. (default 4.9 won't cut it.) Also disable cmake from entering the 'external/googletest/googletest' and 'utest' library.

See separate serial_hardware.txt file for a discussion on various cheap hardware solutions for constructing the bus.

High level overview

The SerialNet utility tries to solve 2 primary issues:

  • Segmentation of a byte stream into packets.
  • Arbitration of access to the common bus.

Other than that, there is support software to connect to serial ports on the Linux system and pass packet to/from a Linux TAP interface. By passing the Ethernet frames over the serial bus in an orderly manner a full TCP/IP connectivity can be achieved, including ARP request handling.

The requirement on the medium from a SW standpoint is that it is a byte stream and occasionally the timing between packets matters (due to timeouts.). These should normally be rare and most packet flow follow a logical order. No serial 'break' signals are used. This should allow for a good amount of design freedom on the hardware side.

One unit on the bus is designated the 'bus master'. It owns the right to send packets to the bus by default. It polls the other clients by passing a token. Upon receiving the token, the client can choose to send a packet or return the token to the master.

Each member of the bus has a local 1 byte address. The Master has address 0 and address 255 is a broadcast address. This and clever token query patterns allow the overhead of the token passing to be manageable.

Currently the only available addressing mode is static local address assignment. Future plans include dynamic local address assignment when a unit is connected to the bus. During the design a limit of 32 units on the bus has been part of the design, though the only hard limit is currently the local address byte.

Currently it uses the utility 'socat' to get access to the TUN/TAP devices. Plan is to incorporate this support into SerialNet once it is useful enough Also an MCU stripped down version that is client only is probably somewhere down the line.

serial_net's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.