I’m Tomu, a tiny ARM microprocessor which fits in your USB port. I have two buttons and two LEDs!
I’m fully open source and am buildable by hobbyists! Designed for 2-factor authentication, USB experiments, or anything else you can think of.
I’m also available on Crowd Supply, fully assembled and tested.
Getting Started!
Got a Tomu? Great! For a hyper-fast quickstart, check out the Tomu Quickstart repo. All you need is make
, a compiler, and dfu-util
.
More information on the Quickstart repo, including links to precompiled samples, is available at the quickstart samples page.
If you’re building one from scratch, you’ll need to get a case and a bootloader. For more information, read on!
Case
Because Tomu fits entirely inside your USB port, you need something to keep it from falling out. Early Tomu prototypes were held in place using a business card folded over and wedged in the USB port, but newer releases have support for 3D printed cases.
If you have a 3D printer, download the .stl file for the version of Tomu that you have. The version number is printed on the bottom side with the big USB connections. Depending on how thick your PCB is, you may need to adjust the FreeCAD file.
Bootloader – Toboot (DFU Bootloader)
The name of the DFU bootloader is Toboot. DFU is a USB standard for updating firmware on a device. The canonical program to use is dfu-util
, which is in most major Linux distributions. When Tomu is in Bootloader mode, it will flash red/green, and show up when you run dfu-util -l
.
Version 1.0 of Toboot will auto-run a program if one exists. That means that once you load the Sample program, Toboot will always run the sample program. To get back into Toboot, you will need to connect both capacitive buttons when you apply power. Tweezers are useful here. A future version of Toboot will have a “developer mode” that will cause it to always boot into DFU mode.
To load a program, run dfu-util -D [program].bin
. Toboot will flash the new program onto your Tomu and reboot. Don’t worry if you flash the wrong file, or flash an invalid program – Toboot will detect this and reboot into DFU mode if the file you flash fails to run.
Back Us!
Tomu is crowdfunding on Crowd Supply!
Fomu, the FPGA version of Tomu, is also crowdfunding on Crowd Supply!
U2F / FIDO Firmware
GNU Chopstx has been ported to Tomu, complete with U2F support. That means you can use Tomu like any U2F token to add a second authentication factor when you log in. Chrome and Firefox support U2F natively.
Source
The U2F firmware source is located on Github at gl-sergei/u2f-token.
Building
To build the U2F firmware, ensure you have an ARM compiler installed (e.g. sudo apt install gcc-arm-none-eabi openssl
) as well as Python pip (e.g. pip install --user --upgrade asn1crypto
), then run:
git clone https://github.com/gl-sergei/u2f-token.git
cd u2f-token
git submodule update --init
cd src
make TARGET=TOMU
Loading onto Tomu
The build system produces an output file build/u2f.bin. Upload this file to Tomu.
- If using the DFU bootloader, reboot into DFU mode and run
dfu-util -D build/u2f.bin
- If using the legacy serial bootloader, type u and send the file using XMODEM
Updating udev rules
On Linux-based systems you will need to update your entry in /etc/udev/rules.d/10-tomu.rules
(or create it if you haven’t already) to reflect the new product and vendor IDs so that you’ll have permissions to the device.
ACTION=="add|change", KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="1209", ATTRS{idProduct}=="70b1", TAG+="uaccess"
Generating private keys on a host machine
During a firmware update, your U2F private key will be erased from the Tomu. This means you won’t be able to use it to login into websites anymore.
This can be alleviated by generating your private key on a host machine and pushing them on your Tomu.
Presentations
Help us!
These are currently the top items which need to be done related to the Tomu. If you help out, @mithro will probably send you a Tomu device!
Creating (or porting) a FOSS USB stack to EFM32HG
To make it easy for people to develop new applications for the Tomu, we need a good USB stack which is compatible with the EFM32HG.
There are a couple of possible options:
- Porting LUFA - Someone seems to have already started the EFM32 series, just not the EFM32HG.
- Port ChibiOS
- Other options?
QEmu Emulation of the EFM32HG
We would like to have good emulation of the features in the EFM32HG309 processor so that people can write software for the board without having to have the hardware.
The biggest part of this is the emulation of the USB stack.
Contact
- Announcement mailing list - Low traffic list for announcements.
- Discussion mailing list - List for discussing development / new features / etc.
- IRC Channel - irc://irc.freenode.net/#tomu - IRC channel for discussing anything related to the project.
Tomu Hardware
Built out of a 3d printed part + 2 layer “thin” PCB (0.4mm, 0.6mm or 0.8mm thick).
Boards have:
- 6mil traces
- 6mil clearance
- 0.3mm drill / 0.6mm vias
All Tomu boards have:
- At least 2 different color LEDs
- At least 2 touch buttons
Tomu
- Status: Hardware complete, simple flashing firmware working. Needs proper firmware.
- GitHub Repository
Specs
Name | Tomu (Self Made) |
---|---|
Manufacturer | You! |
Status | NA |
Microprocessor |
|
Architecture | ARM |
Manufacturer | Silabs |
Part | EFM32HG309 |
Datasheet | |
Class | ARM Cortex-M0+ |
Frequency | 24 MHz (Max) |
Benchmarks | 0 CoreMark/MHz, 0 DMips/MHz |
Storage |
|
Memory | 8 kilobytes |
Flash | 64 kilobytes |
Toolchain Support |
|
Bare Metal C | Yes (GCC: ?, LLVM: ?) |
Embedded Rust | ? |
Software Support |
|
In Progress? | |
No | |
No | |
No | |
Emulation Support |
|
Maybe? | |
Maybe? | |
No | |
Security Key Support |
|
U2F | Yes |
FIDO2 | Maybe? |
Secure Key Storage | ? |
Crypto |
|
Crypto Acceleration | AES? |
Hardware Random Number Generator | No |
Links |
|
Schematics | ? |
Bootloader Code | https://github.com/im-tomu/toboot |
Quick Start Code | ? |
Gerbers
The important thing to note is that you need a PCB that is 0.8mm thickness or less. The default thickness is normally 1.0mm and 1.0mm is too thick.
These gerbers should be possible with the following manufacturers:
- (Tested) DirtyPCB
- (Tested) Seeed Studio
- (Tested) OSH Park - 2 Layer 2oz 0.8mm Service
License
The Tomu hardware is under your choice of:
- the “Creative Commons Attribution-ShareAlike 4.0 International License” (CC BY-SA 4.0) full text of this license is included in the LICENSE file and a copy can also be found at http://creativecommons.org/licenses/by-sa/4.0/
- the “TAPR Open Hardware License” full text of this license is included in the LICENSE file and a copy can also be found at http://www.tapr.org/OHL
Software for Tomu is under various licenses, please consult the license included with the code.