70 lines
2.3 KiB
Plaintext
70 lines
2.3 KiB
Plaintext
|
<<<
|
||
|
:sectnums:
|
||
|
== Programming an External SPI Flash via the Bootloader
|
||
|
|
||
|
The default processor-internal NEORV32 bootloader supports automatic booting from an external SPI flash.
|
||
|
This guide shows how to write an executable to the SPI flash via the bootloader so it can be automatically
|
||
|
fetched and executed after processor reset. For example, you can use a section of the FPGA bitstream configuration
|
||
|
memory to store an application executable.
|
||
|
|
||
|
.Customization
|
||
|
[NOTE]
|
||
|
This section assumes the _default_ configuration of the NEORV32 bootloader.
|
||
|
See section <<_customizing_the_internal_bootloader>> on how to customize the bootloader and its setting
|
||
|
(for example the SPI chip-select port, the SPI clock speed or the **flash base address** for storing the executable).
|
||
|
|
||
|
|
||
|
:sectnums:
|
||
|
=== Programming an Executable
|
||
|
|
||
|
[start=1]
|
||
|
. At first, reset the NEORV32 processor and wait until the bootloader start screen appears in your terminal program.
|
||
|
. Abort the auto boot sequence and start the user console by pressing any key.
|
||
|
. Press u to upload the executable that you want to store to the external flash:
|
||
|
|
||
|
[source]
|
||
|
----
|
||
|
CMD:> u
|
||
|
Awaiting neorv32_exe.bin...
|
||
|
----
|
||
|
|
||
|
[start=4]
|
||
|
. Send the binary in raw binary via your terminal program. When the upload is completed and "OK"
|
||
|
appears, press `p` to trigger the programming of the flash (do not execute the image via the `e`
|
||
|
command as this might corrupt the image):
|
||
|
|
||
|
[source]
|
||
|
----
|
||
|
CMD:> u
|
||
|
Awaiting neorv32_exe.bin... OK
|
||
|
CMD:> p
|
||
|
Write 0x000013FC bytes to SPI flash @ 0x02000000? (y/n)
|
||
|
----
|
||
|
|
||
|
[start=5]
|
||
|
. The bootloader shows the size of the executable and the base address inside the SPI flash where the
|
||
|
executable is going to be stored. A prompt appears: Type `y` to start the programming or type `n` to
|
||
|
abort.
|
||
|
|
||
|
[TIP]
|
||
|
Section <<_customizing_the_internal_bootloader>> show the according C-language `define` that can be modified
|
||
|
to specify the base address of the executable inside the SPI flash.
|
||
|
|
||
|
[source]
|
||
|
----
|
||
|
CMD:> u
|
||
|
Awaiting neorv32_exe.bin... OK
|
||
|
CMD:> p
|
||
|
Write 0x000013FC bytes to SPI flash @ 0x02000000? (y/n) y
|
||
|
Flashing... OK
|
||
|
CMD:>
|
||
|
----
|
||
|
|
||
|
[NOTE]
|
||
|
The bootloader stores the executable in **little-endian** byte-order to the flash.
|
||
|
|
||
|
[start=6]
|
||
|
. If "OK" appears in the terminal line, the programming process was successful. Now you can use the
|
||
|
auto boot sequence to automatically boot your application from the flash at system start-up without
|
||
|
any user interaction.
|