Before we start I want to share the issue that I found following the default NuttX compilation approach (it means I forgot to update bootloader, gnss, etc).
I did the default NuttX configure/make/flash/serial console, but got this error message when NuttX was starting:
cxd56_farapiinitialize: Mismatched version: loader(17646) != Self(20585)
cxd56_farapiinitialize: Please update loader and gnssfw firmwares!!
It was happening because I missed an important step: update the board bootloader, dnnrt, gnns, etc.
So, you can void this issues that I was facing, just doing it:
Download the binaries zip file from here:
https://developer.sony.com/file/download/download-spresense-firmware-v2-4-000
… and save it inside your nuttxspace/nuttx folder/directory.
Open the Linux terminal and enter inside nuttxspace/nuttx:
$ cd ~/nuttxspace/nuttx
Extract the file:
$ unzip spresense-binaries-v2.4.0.zip
Flash all the files:
$ ./tools/flash_writer.py -c /dev/ttyUSB0 -b 115200 dnnrt-mp.espk
Please press RESET button on target board
>>> Install files ...
install -b 115200
Install binaries/dnnrt-mp.espk
|0%-----------------------------50%------------------------------100%|
######################################################################
109808 bytes loaded.
Package validation is OK.
Saving package to "dnnrt-mp"
updater# >>> Save Configuration to FlashROM ...
set bootable M0P
M0P is not valid bootable. config not changed.
updater# sync
updater# Restarting the board ...
reboot
$ ./tools/flash_writer.py -c /dev/ttyUSB0 -b 115200 gnssfw.espk
Please press RESET button on target board
>>> Install files ...
install -b 115200
Install binaries/gnssfw.espk
|0%-----------------------------50%------------------------------100%|
######################################################################
454512 bytes loaded.
Package validation is OK.
Saving package to "gnssfw"
updater# >>> Save Configuration to FlashROM ...
set bootable M0P
M0P is not valid bootable. config not changed.
updater# sync
updater# Restarting the board ...
reboot
$ ./tools/flash_writer.py -c /dev/ttyUSB0 -b 115200 loader.espk
Please press RESET button on target board
>>> Install files ...
install -b 115200
Install binaries/loader.espk
|0%-----------------------------50%------------------------------100%|
######################################################################
129968 bytes loaded.
Package validation is OK.
Saving package to "loader"
updater# >>> Save Configuration to FlashROM ...
set bootable M0P
M0P is not valid bootable. config not changed.
updater# sync
updater# Restarting the board ...
reboot
$ ./tools/flash_writer.py -c /dev/ttyUSB0 -b 115200 sysutil.spk
Please press RESET button on target board
>>> Install files ...
install -b 115200
Install binaries/sysutil.spk
|0%-----------------------------50%------------------------------100%|
######################################################################
174080 bytes loaded.
Package validation is OK.
Saving package to "sysutil"
updater# >>> Save Configuration to FlashROM ...
set bootable M0P
M0P is not valid bootable. config not changed.
updater# sync
updater# Restarting the board ...
reboot
Now you can configure and compile NuttX for Spresense:
$ ./tools/configure.sh spresense:nsh
$ make -j
It will create the file nuttx.spk then flash it this way:
$ ./tools/flash_writer.py -c /dev/ttyUSB0 -b 115200 nuttx.spk
Please press RESET button on target board
>>> Install files ...
install -b 115200
Install nuttx.spk
|0%-----------------------------50%------------------------------100%|
######################################################################
97680 bytes loaded.
Package validation is OK.
Saving package to "nuttx"
updater# >>> Save Configuration to FlashROM ...
set bootable M0P
M0P is not valid bootable. config not changed.
updater# sync
updater# Restarting the board ...
reboot
Now just run minicom (or your preferred serial console terminal) and you will get:
NuttShell (NSH) NuttX-12.0.0
nsh> uname -a
NuttX 12.0.0 c9b917bcee Mar 24 2023 17:52:28 arm spresense
nsh>