Bootloader for Fomu
Go to file
Sean Cross 8802d488c5 hw: foboot-bitstream: fix no-cpu build
When building without a CPU, the `self.cpu` property is not None, but
rather CPUNone.  This change was made upstream and broke no-cpu builds.

Fix these builds by checking for an instance of CPUNone.

Signed-off-by: Sean Cross <sean@xobs.io>
2019-11-27 13:44:15 +08:00
booster Merge remote-tracking branch 'xobs/master' 2019-11-25 15:15:06 +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: foboot-bitstream: fix no-cpu build 2019-11-27 13:44:15 +08:00
releases Merge remote-tracking branch 'xobs/master' 2019-11-25 15:15:06 +08:00
sw sw: include hardware version in product description 2019-11-25 09:34:00 +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.