Bootloader for Fomu
Go to file
Sean Cross acdccf5f98 booster: change magic number for booster
Since the USB and flash communication layers are different, change the
magic number for booster.  This will prevent previous versions of foboot
from trying to launch our updater with the wrong version.

Signed-off-by: Sean Cross <sean@xobs.io>
2019-11-28 16:36:45 +08:00
booster booster: change magic number for booster 2019-11-28 16:36:45 +08:00
doc Create FLASHLAYOUT.md 2019-07-03 02:54:19 -07:00
examples fix u16 name size from previous patch 2019-07-03 17:58:50 +08:00
foboot-main foboot-main: wip commit 2019-05-20 21:31:01 +08:00
hw hw: version: use 8 characters for git revision 2019-11-28 16:33:49 +08:00
releases releases: remove updaters 2019-11-28 14:23:33 +08:00
sw booster: change magic number for booster 2019-11-28 16:36:45 +08:00
.gitattributes gitattributes: add c and header files 2019-06-18 19:45:27 -07:00
.gitignore gitignore: ignore swapfiles and make-booster 2019-11-24 20:11:27 +08:00
.gitmodules deps: update valentyusb and add spibone 2019-11-12 21:34:43 -08:00
LICENSE doc: fix line endings 2019-04-11 15:53:37 +08:00
README.md README: correct documentation on "dfu-util -e" 2019-06-25 09:14:25 -07:00

Foboot: The Bootloader for Fomu

Foboot is a failsafe bootloader for Fomu. It exposes a DFU interface to the host. Foboot comes in two halves: A Software half and a Hardware half. These two halves are integrated into a single "bitstream" that is directly loaded onto an ICE40UP5k board, such as Fomu.

Requirements

To build the hardware, you need:

  • Python 3.5+
  • Nextpnr
  • Icestorm
  • Yosys
  • Git

Subproject hardware dependencies will be taken care of with lxbuildenv.

To build the software, you need:

  • RISC-V toolchain

Building the project

The hardware half will take care of building the software half, if it is run with --boot-source bios (which is the default). Therefore, to build Foboot, enter the hw/ directory and run:

$ python3 foboot-bitstream.py --revision hacker

This will verify you have the correct dependencies installed, compile the Foboot software, then synthesize the Foboot bitstream. The resulting output will be in build/gateware/. You should write build/gateware/top-multiboot.bin to your Fomu device in order to get basic bootloader support.

Usage

You can write the bitstream to your SPI flash. If you're using fomu-flash, you would run the following:

$ fomu-flash -w build/gateware/top-multiboot.bin
Erasing @ 018000 / 01973a  Done
Programming @ 01973a / 01973a  Done
$ fomu-flash -r
resetting fpga
$

Fomu should now show up when you connect it to your machine:

[172294.296354] usb 1-1.3: new full-speed USB device number 33 using dwc_otg
[172294.445661] usb 1-1.3: New USB device found, idVendor=1209, idProduct=70b1
[172294.445675] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[172294.445684] usb 1-1.3: Product: Fomu Bootloader (0)
[172294.445692] usb 1-1.3: Manufacturer: Kosagi

To load a new bitstream, use the dfu-util -D command. For example:

$ dfu-util -D blink.bin

This will reflash the SPI beginning at offset 262144.

To exit DFU and run the bitstream at offset 262144, run:

$ dfu-util -e

Note that, like Toboot, the program will auto-boot once it has finished loading.

Building the Software

Software is contained in the sw/ directory.