ebus: Switch to a 10ms ticker
[wk-misc.git] / ebus / README
1 Running an CSMA/CD protocol on the Elektor Bus.              -*- org -*-
2
3 * Installation instructions
4
5   Just run "make" to build the code.  To write the flash you use this:
6
7      avrdude -c usbasp -pm88 -U flash:w:PROGRAM.hex
8
9   Please make sure to set the FUSE bits correctly:
10
11      lfuse = 0xFF (16MHz crystal)
12      hfuse = 0xD7 (ie. set EESAVE))
13
14   you may do this by using these commands:
15
16     avrdude -c usbasp -pm88 -v -B 4 -U lfuse:w:0xFF:m
17     avrdude -c usbasp -pm88 -v -B 4 -U hfuse:w:0xD7:m
18
19   (You may use 0xD4 for hfuse to enable the BOD at 4.3V)
20
21   You also need to assign an different node-id to each node in the
22   same collision domain by storing them in the EEPROM.  Due to
23   restriction of RS485 protocol more than 32 nodes are not possible
24   with most modern drivers.  To allow for easier switching we suggest
25   to use only nodes ids in the range 1..30.  If more buses will
26   eventually be attached the high bits may be used to identify the
27   bus.  Such a simple scheme allows easy routing between buses by
28   direct mapping of the node ids.
29
30   For example, setting the node-id 17 (0x11) may be done with:
31
32     avrdude -c usbasp -pm88 -U eeprom:w:0,0,0,17:m
33
34 * Helper tools
35
36   The tool ebusdump.c may be used on a Unix hosts to display the
37   stats.  Assuming the RS-485 converter is attached to /dev/ttyUSB1
38   you would do this:
39
40     stty </dev/ttyUSB1 speed 9600 raw
41     ./ebusdump </dev/ttyUSB1 --top
42
43   Instead of of showing the stats page, ebusdump may also be used to
44   dump the activity by usingit without the --top option.
45
46   This code sends status information to allow analyzing the bus
47   behaviour under load.  The keys S2 and S3 are used to change the
48   send interval of those messages in discrete steps.  With 9600 baud
49   you will notice many collisions in particular if the interval has
50   been set down to 25 by pressing the S3 button 4 times; the interval
51   is shown in the ebusdump output.
52
53 * The protocol
54
55   In contrast to the original Elektor Bus protocol, this version uses
56   implements a CSMA/CD protocol with an explicit framing similar to
57   PPP (RFC-1662).  The original 0xAA byte has been replaced by a
58   protocol ID to allow the use of several protocols on the same bus:
59
60     +-----------+--------+---------------------+---------+----------+
61     |SYNC(0x7e) | PROTID | PAYLOAD (15 octets) | CRC(msb)| CRC(lsb) |
62     +-----------+--------+---------------------+---------+----------+
63
64   Except for the SYNC byte all other octets are byte stuffed and
65   masked so that the sync byte value always indicates the start of a
66   frame.  The CRC is computed over PROTID and PAYLOAD after
67   de-stuffing.  In contrast to PPP we don't need a trailing flag to
68   indicate the end of the frame because we use a fixed length payload.
69   The CRC uses the polynom x^16+x^12+x^5+1 and an initial value of
70   0xffff (CRC-CCID).  The CRC is sent in network byte order.
71
72   For a description of the PROTID, see the file protocol.h.
73
74 * Future work
75
76   - Add a framework to register actual applications.
77   - Use a simple send queue to allow receiving urgent data.