URL
https://opencores.org/ocsvn/neorv32/neorv32/trunk
Subversion Repositories neorv32
[/] [neorv32/] [trunk/] [docs/] [userguide/] [programming_an_external_spi_flash_via_bootloader.adoc] - Rev 69
Compare with Previous | Blame | View Log
<<<:sectnums:== Programming an External SPI Flash via the BootloaderThe 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 automaticallyfetched and executed after processor reset. For example, you can use a section of the FPGA bitstream configurationmemory to store an application executable.[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:=== SPI FlashThe bootloader can access an SPI compatible flash via the processor top entity's SPI port. By default, the flashchip-select line is to `spi_csn_o(0)` and uses 1/8 of the processor's main clock as clock frequency.The SPI flash has to support single-byte read and write, 24-bit addresses and at least the following standard commands:* READ `0x03`* READ STATUS `0x05`* WRITE ENABLE `0x06`* PAGE PROGRAM `0x02`* SECTOR ERASE `0xD8`* READ ID `0x9E`Compatible (FGPA configuration) SPI flash memories are for example the "Winbond W25Q64FV2 or the "Micron N25Q032A".: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:> uAwaiting 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:> uAwaiting neorv32_exe.bin... OKCMD:> pWrite 0x000013FC bytes to SPI flash @ 0x00800000? (y/n)----[start=5]. The bootloader shows the size of the executable and the base address inside the SPI flash where theexecutable is going to be stored. A prompt appears: Type `y` to start the programming or type `n` toabort.[TIP]Section <<_customizing_the_internal_bootloader>> show the according C-language `define` that can be modifiedto specify the base address of the executable inside the SPI flash.[source]----CMD:> uAwaiting neorv32_exe.bin... OKCMD:> pWrite 0x000013FC bytes to SPI flash @ 0x08000000? (y/n) yFlashing... OKCMD:>----[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 theauto boot sequence to automatically boot your application from the flash at system start-up withoutany user interaction.
