blob: 656800e308c5299f0d42bfd20dd0226dac926313 [file] [log] [blame] [view]
# SPI Flash
`spiflash` is a tool used to update the firmware stored in OpenTitan's flash.
The tool resets OpenTitan and signals the boot ROM to enter bootstrap mode
before sending the update payload.
Currently, the tool only supports Verilator targets.
## Build instructions
`spiflash` is written in C++17.
Required packages:
```shell
$ sudo apt-get install libssl-dev libftdi1-dev
```
Build command:
```shell
$ cd ${REPO_TOP}/util/spiflash
$ make clean && make
```
## Run the tool in Verilator
Build boot_rom:
```shell
$ cd ${REPO_TOP}/sw/boot_rom
$ make clean && make SIM=1
```
Build and run Verilator with boot_rom enabled:
```shell
$ cd ${REPO_TOP}
$ fusesoc --cores-root . sim --build-only lowrisc:systems:top_earlgrey_verilator
$ build/lowrisc_systems_top_earlgrey_verilator_0.1/sim-verilator/Vtop_earlgrey_verilator \
--rominit=sw/boot_rom/boot_rom.vmem
```
Build hello_world program:
```shell
$ cd ${REPO_TOP}/sw/hello_world
$ make clean && make SIM=1
```
Run spiflash. In this example we use SPI device `/dev/pts/3` as an example.
After the transmission is complete, you should be able to see the hello_world
output in the UART console.
```shell
$ cd ${REPO_TOP}/util/spiflash
$ make clean && make
$ ./spiflash --input=../../sw/hello_world/hello_world.bin --verilator=/dev/pts/3
```
## TODOs
- Implement ACK handshake between boot_rom and spiflash.
- Add support for FPGA targets via FTDI interface.