This page serves as documentation for the ioNode.


  • Microcontroller: ATMEGA1284P
  • CPU Clock: 10MHz
  • 21 Digital-only I/O
  • 8 Digital/Analog I/O
  • 2 UARTs (UART0 is wired to USB)
  • I2C
  • SPI


USB (kiwi)

The ioNode features a USB port which exposes a generic serial device to any host it is connected to.
While this is useful for communication between your application and a host (PC / smartphone / whatever), it can also be used to flash the device.

Every ioNode is shipped pre-loaded with the kiwi bootloader.
Upon start, the kiwi bootloader will expose a simplified STK500 programmer interface through the onboard USB and wait for commands from the host.

If nothing is received after 4 seconds, the bootloader runs whatever application was last stored in flash.

This means we can flash an ioNode very easily, even after it's been soldered in place into a final hardware application.
avrdude is a very widely used software tool to flash microcontrollers. We use it all the time.

To flash an ioNode through USB with avrdude, reset the ioNode (if you're powering from USB, just disconnect and reconnect it) and immediately run the following:

avrdude -c arduino -P /dev/ttyUSB0 -p atmega1284p -U flash:w:YOUR_APPLICATION.hex


Flashing through ISP is the "classic" way to put any code onto an AVR microcontroller, especially when no bootloader is present.
Your options here are the following:
  • use a dedicated ISP programmer (such as the AVRISP)
  • use another microcontroller as ISP (such as the Arduino as ISP)
Using ISP for flashing is useful when:
  • your target does not have a bootloader (and therefore does not provide any other flashing interface)
  • you want to change microcontroller fuse bits
  • you want to install/replace a bootloader

The commands to flash your device using ISP will change depending on the type of programmer you're using.

Power supply

The ioNode features a 'VIN' pin, which requires at least 4V (6V max). This means the ioNode can be powered without regard for USB.

However, the ioNode also features a 'VUSB' pin, which is directly connected to the V+ line of the USB bus.
Whenever the ioNode is connected to a USB host, this pin registers around 5V.

This means that just by connecting VUSB and VIN, the ioNode can be powered directly from USB.

Still, adding a wire might be annoying in some cases.
For this reason the ioNode also includes a small jumper which allows connecting VUSB and VIN without any extra wires.