Erlang is a programming language designed for creating scalable, networked software systems. It has built-in support for concurrency, distribution, and fault tolerance. Why not integrate it with hardware devices?
RTEMS is a hard real-time embedded “operating system”. Actually it's not like a conventional operating system, but rather a library which is linked to an application. An image boots directly on the target, often right from hardware reset. Unlike in conventional operating systems, there is usually no memory protection or kernel mode. From the application side, it looks like a single Unix process which is able to run some threads.
There is a choice of drivers and network stacks: a minimal one for very small systems, a traditional BSD Unix-derived system, or a port of the current FreeBSD TCP stack supporting SMP and all kinds of modern architecture.
Speaking of symmetric multiprocessing: even though GRiSP-Base is so minimal, it features support for SMP hardware.
When Erlang is running on RTEMS there is very little latency between something happening on the hardware and a reaction on the Erlang level. There is strict control over what can pre-empt the Erlang VM: only hardware interrupts allowed. In practice, this means Erlang’s soft real-time is not as soft as on normal operating systems.
For the future, we plan to provide hard real-time processes on the Erlang level; GRiSP-Base will be the main test platform for this.
The connectors on Grisp-Base are compatible with Digilent PMod accessories, providing access to dozens of affordable, ready-to-run expansion modules with sensors (accelerometer, gyro, compass, several temperature, general A/D, and even a GPS module) and actuators (motor drivers, RC-servos, audio out).
This gives us the opportunity to provide high-level Erlang drivers for most of those PMods. Since there will be port-drivers or native-implemented functions (NIFs) for the basic protocols, most of these drivers can be written in Erlang. Dropping down to C is very rarely necessary.
Compatible modules provide an easy entry point to small hardware development projects. The modular hardware you create would be reusable with future GRiSP versions, and other PMod-compatible boards.
At the one wire connector you can connect many 1-Wire compatible sensors and actuators, literally with 1-Wire. (That’s actually a lie, you need a ground wire too!) 1-Wire is a bus and is built to support longer wires, so you could, for example, wire several digital temperature sensors all over an experiment, or a room, to this one connector. Also very conveniently all 1-Wire chips have a built-in worldwide unique ID so you can always distinguish your sensors.
In addition to all the I/O options with 1-Wire, there are many modules containing memory, from simple memory to security memory with cryptographic primitives built in. This opens up access control and other security applications. There are tokens for these applications which really only need to touch the connector so in this case, it really does work with one wire only!
Of course we will provide the necessary low-level C drivers. 1-Wire applications can also be written in Erlang.
How much can you fit on a board that fits in your hand? Quite a lot, actually…
The following specifications describe the GRiSP-Base board, available now. The GRiSP 2 specifications are described in the Kickstarter page.
- Atmel SAM V71 (SAMV71Q21ES3)
- Core: ARM Cortex M7
- Running at up to 300MHz
- Single- and double-precision hardware Floating Point Unit (FPU)
- Flash: 2048 Kbytes (used for Bootloader)
- SRAM: 384 Kbytes
- SDRAM: 64 MBytes
- MicroSD Socket for standard MicroSD cards
- EEPROM: 2 KBit
- 802.11b/g/n WLAN
- Two RGB LEDs
- 5 DIP switches
- Reset Key
- Dallas 1-Wire via 3-pin connector
- Digilent Pmod compatible I2C interface
- Two Digilent Pmod Type 1 interfaces (GPIO)
- One Digilent Pmod Type 2 interface (SPI)
- One Digilent Pmod Type 2A interface (expanded SPI with interrupts)
- One Digilent Pmod Type 4 interface (UART)
Debug & Supply
- Serial port via Micro USB for console (Erlang Shell connects to this)
- On-board JTAG debugger via Micro USB
- JTAG / Trace connection for connecting external debuggers
- Supply via Micro USB connector
- Only one USB cable needed for power, console and on-board JTAG
GRiSP-Base boards, with or without software pre-loaded on a memory card, may be ordered from the store.