196 lines
9.2 KiB
HTML
196 lines
9.2 KiB
HTML
|
<!DOCTYPE html>
|
||
|
<html>
|
||
|
<head>
|
||
|
<title>Ether Dream - Developer Manual</title>
|
||
|
<link rel="stylesheet" type="text/css" href="main.css" />
|
||
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
||
|
</head>
|
||
|
<body>
|
||
|
<img src="etherdream.png" width="298" height="75" alt="ether dream">
|
||
|
<div id="header"><a href="protocol.html">Ether Dream</a></div>
|
||
|
<div id="content">
|
||
|
<h1>Ether Dream - Developer Manual</h1>
|
||
|
<h2 style="color:red"><em>NOTE</em> - This page is for the previous Ether Dream 1. Check the <a href="/">current website</a>.</h2>
|
||
|
<h2>Contents</h2>
|
||
|
|
||
|
<ul>
|
||
|
<li><a href="#intro">Introduction</a></li>
|
||
|
<li><a href="#hw">Hardware</a></li>
|
||
|
<li><a href="#config">Configuration</a></li>
|
||
|
<li><a href="#protocol">Protocol</a></li>
|
||
|
<li><a href="#dev">Development</a></li>
|
||
|
<li><a href="#fw">Firmware Updates</a></li>
|
||
|
</ul>
|
||
|
|
||
|
|
||
|
<h2 id="intro">Introduction</h2>
|
||
|
<p>
|
||
|
This is a work-in-progress developer-oriented guide to the hardware features and software architecture
|
||
|
of the Ether Dream DAC. For setup and usage tips, see the <a href="/userguide.html">User
|
||
|
Guide</a>.
|
||
|
</p>
|
||
|
|
||
|
<h2 id="hw">Hardware</h2>
|
||
|
<img src="etherdreamboard.png" alt="Ether Dream board diagram" width="700" height="357">
|
||
|
<p>
|
||
|
Starting at the Ethernet connector on the board and moving counterclockwise, the
|
||
|
hardware features and connectors on the board are:
|
||
|
</p>
|
||
|
<ul>
|
||
|
<li>Ethernet connector - includes link and activity LEDs</li>
|
||
|
<li>USB connector. This is currently used only for firmware upgrades.</li>
|
||
|
<li>Status LED. This LED blinks when the board is in bootloader mode, and
|
||
|
is on normally.</li>
|
||
|
<li>MicroSD slot. This will be used, in future software updates, for settings
|
||
|
and playback of stored shows.</li>
|
||
|
<li>External power jack. This is a 2.1mm/5.5mm barrel connector, center-positive,
|
||
|
accepting 8V-25V DC.</li>
|
||
|
<li>Power supply screw terminals. Ground is on the left (towards the outside of
|
||
|
the board), positive is on the right (towards the inside of the board).
|
||
|
The two power inputs are isolated from one another with diodes; if both
|
||
|
are connected, power will be drawn only from the one with the higher voltage.</li>
|
||
|
<li>GPIO header. This connects extra pins from the microcontroller. Pin 1 is closest
|
||
|
to the power jack. The pinout is:
|
||
|
<table class="grid">
|
||
|
<tr><td>1 - P1[8] / PWM1[1] / CAP1[0]</td><td>2 - +5.5v supply</td></tr>
|
||
|
<tr><td>3 - P1[19] / MCOA0 / CAP1[1]</td><td>4 - P1[22] / MCOB0 / MAT1[0]</td></tr>
|
||
|
<tr><td>5 - P1[26] / MCOB1 / PWM1[6] / CAP0[0]</td><td>6 - P1[29] / MCOB[2] / PCAP1[1] / MAT0[1]</td></tr>
|
||
|
<tr><td>7 - +3.3v supply</td><td>8 - P0[15] / TXD1 / SCK0 / SCK</td></tr>
|
||
|
<tr><td>9 - ground</td><td>10 - P0[17] / CTS1 / MISO0 / MISO</td></tr>
|
||
|
<tr><td>11 - P0[18] / DCD1 / MOSI0 / MOSI</td><td>12 - P0[16] / RXD1 / SSEL0 / SSEL</td></tr>
|
||
|
</table>
|
||
|
</li>
|
||
|
<li>Serial header #2. Pinout:
|
||
|
<table class="grid">
|
||
|
<tr><td>1 - P0[10] / TXD2 / SDA2 / MAT3[0]</td><td>2 - +5.5v supply</td></tr>
|
||
|
<tr><td>3 - P0[11] / RXD2 / SCL2 / MAT3[1]</td><td>4 - +3.3v supply</td></tr>
|
||
|
<tr><td>5 - P1[28] / MCOA2 / PCAP1[0] / MAT0[0]</td><td>6 - ground</td></tr>
|
||
|
</table>
|
||
|
</li>
|
||
|
<li>Interlock LED (yellow). This LED is on whenever the interlock relay is closed.</li>
|
||
|
<li>ILDA DB-25 connector.</li>
|
||
|
<li>Behind the DB-25 connector: 2x13 pin header wired identically to the DB-25.</li>
|
||
|
<li>Emission LED (green). Whenever the DAC is producing output, this LED is on.</li>
|
||
|
<li>20-pin ARM JTAG header. Pin 1 is towards the power connectors.</li>
|
||
|
<li>1x6 pin serial debug header. This is intended to be used for debug purposes with a
|
||
|
TTL serial adapter, such as <a href="http://www.sparkfun.com/products/9717">this unit</a>
|
||
|
available from sparkfun. Pin 1 is closest to the Ethernet connector. The pinout is:
|
||
|
<table class="grid">
|
||
|
<tr><td>1 - P2[10]/EINT0/NMI</td></tr>
|
||
|
<tr><td>2 - P0[2] / TXD0 / AD0[7]</td></tr>
|
||
|
<tr><td>3 - P0[3] / RXD0 / AD0[6]</td></tr>
|
||
|
<tr><td>4 - unconnected</td></tr>
|
||
|
<tr><td>5 - unconnected</td></tr>
|
||
|
<tr><td>6 - ground</td></tr>
|
||
|
</table>
|
||
|
</li>
|
||
|
<li>Serial header #1. Pinout:
|
||
|
<table class="grid">
|
||
|
<tr><td>1 - P2[0] / PWM1[1] / TXD1</td><td>2 - +5.5v supply</td></tr>
|
||
|
<tr><td>3 - P2[1] / PWM1[2] / RXD1</td><td>4 - +3.3v supply</td></tr>
|
||
|
<tr><td>5 - P2[2] / PWM1[3] / CTS1</td><td>6 - ground</td></tr>
|
||
|
</table>
|
||
|
</li>
|
||
|
<li>Serial header #3. Pinout:
|
||
|
<table class="grid">
|
||
|
<tr><td>1 - P0[25] / AD0[2] / I2SRX_SDA / TXD3</td><td>2 - +5.5v supply</td></tr>
|
||
|
<tr><td>3 - P0[26] / AD0[3] / AOUT / RXD3</td><td>4 - +3.3v supply</td></tr>
|
||
|
<tr><td>5 - P2[3] / PWM1[4] / DCD1</td><td>6 - ground</td></tr>
|
||
|
</table>
|
||
|
</li>
|
||
|
</ul>
|
||
|
<h2 id="config">Configuration</h2>
|
||
|
<p>
|
||
|
The Ether Dream requires no network configuration. By default, it will attempt to acquire
|
||
|
an IP address with DHCP; if no DHCP server is found, it will instead choose a link-local
|
||
|
169.254.x.x address. Once it has an address, it will begin advertising its presence with
|
||
|
UDP broadcast packets on port 7654. The playback DLL looks for these broadcasts to find
|
||
|
DACs on the network.
|
||
|
</p>
|
||
|
<h2 id="protocol">Protocol</h2>
|
||
|
<p>
|
||
|
Protocol documentation is <a href="protocol.html">here</a>.
|
||
|
</p>
|
||
|
<p>
|
||
|
Drivers are available for <a href="https://github.com/j4cbo/j4cDAC/tree/master/driver/">Windows</a>
|
||
|
and <a href="https://github.com/j4cbo/j4cDAC/tree/master/driver/libetherdream/">Mac/Linux</a>.
|
||
|
</p>
|
||
|
<h2 id="dev">Development</h2>
|
||
|
The Ether Dream firmware, available <a href="https://github.com/j4cbo/j4cDAC">on github</a>,
|
||
|
builds on a standard Linux system with the free CodeSourcery ARM toolchain. The README in the
|
||
|
repository describes the needed tools.
|
||
|
<h2 id="fw">Firmware Updates</h2>
|
||
|
There are three ways of updating the Ether Dream's firmware:
|
||
|
<ol>
|
||
|
<li><b>USB</b>
|
||
|
<p>
|
||
|
The Ether Dream board comes with a USB bootloader in the first 16kB of Flash. (Source
|
||
|
for the bootloader is in the boot/ directory of the source tree.) This bootloader
|
||
|
implements the standard DFU protocol; the <a href="http://wiki.openmoko.org/wiki/Dfu-util"
|
||
|
>dfu-util</a> project provides a PC-side tool.
|
||
|
</p>
|
||
|
<p>
|
||
|
The bootloader runs on every power-up, but normally immediately jumps to the main firmware.
|
||
|
If the firmware is corrupt or the DAC has been forced into bootloader mode, it will
|
||
|
instead run and appear as a USB DFU device. This mode is indicated by the LED
|
||
|
next to the USB connector flashing rapidly. There are
|
||
|
two ways to force the DAC to run in bootloader mode:
|
||
|
</p>
|
||
|
<ul><li>Hold P0[18] low during power-on.</li>
|
||
|
<li>Send a special USB control request while the normal firmware is running.
|
||
|
There is <a href="https://github.com/j4cbo/j4cDAC/tree/master/tools/f0ad">a tool to
|
||
|
do this</a> in the source repository.</li></ul>
|
||
|
<p>The pin to force bootloader mode, P0[18], is located next to a ground pin on the 2x6
|
||
|
expansion header. Connect a jumper across these pins and then apply power to run
|
||
|
the bootloader.
|
||
|
</p><p>
|
||
|
<img src="bootloader-jumper.jpg" width="366" height="186" alt="bootloader jumper">
|
||
|
</p><p>
|
||
|
On the host PC, if dfu-util is installed, running "make bl" in the firmware directory
|
||
|
will automatically update the firmware of an attached DAC. Either force the DAC into
|
||
|
bootloader mode and run "make bl", or "make bl" while the DAC is running its usual
|
||
|
firmware; in the latter case, the DAC will be rebooted into bootloader mode and then
|
||
|
updated.
|
||
|
</p>
|
||
|
</li>
|
||
|
<li><b>Serial</b>
|
||
|
<p>There is a built-in ROM bootloader on the LPC1758 which runs over UART0,
|
||
|
connected to the 1x6 header on the board. It enters if P2[10] is held low when
|
||
|
power is applied. When the ROM bootloader is running, both LEDs on the board will
|
||
|
be very dimly lit. The <a href="http://sourceforge.net/projects/lpc21isp/">lpc21isp</a>
|
||
|
tool talks to the DAC in this mode.
|
||
|
</p>
|
||
|
<p>
|
||
|
P2[10] on the LPC1758 is connected to RTS on the 6-pin serial header. Running "make
|
||
|
flash" in the firmware directory and then applying power to the DAC will
|
||
|
update the firmware and USB bootloader over serial.
|
||
|
</p>
|
||
|
<p>This method is somewhat slower than the USB bootloader and so is not generally
|
||
|
recommended - it is useful primarily for installing the firmware into a
|
||
|
previously-unprogrammed DAC. Also, note that the 6-pin serial header is <i>logic-level</i>;
|
||
|
it is 5-volt-tolerant but must not be connected directly to an RS-232 port.
|
||
|
</p>
|
||
|
</li>
|
||
|
<li><b>JTAG</b>
|
||
|
<p>The LPC1758 Flash can be reprogrammed over JTAG with openocd. See the
|
||
|
user's manual for the microcontroller and the openocd documentation for details.</p>
|
||
|
</li>
|
||
|
</ol>
|
||
|
|
||
|
|
||
|
</div>
|
||
|
<div id="footer">
|
||
|
© 2010-2021 Jacob Potter.
|
||
|
</div>
|
||
|
<div id="menu">
|
||
|
<ul>
|
||
|
<li><a href="../index.html">LJ doc</a></li>
|
||
|
<li><a href="protocol.html">Protocol</a></li>
|
||
|
<li><a href="userguide.html">V1 User Guide</a></li>
|
||
|
<li><a href="manual.html">V1 Developer Manual</a></li>
|
||
|
<li><a href="dmx.html">V1 DMX Board</a></li>
|
||
|
</ul>
|
||
|
</div>
|
||
|
</body>
|
||
|
</html>
|