Sony Spresense Board Review with NuttX based Spresense SDK

Sony Spresense Arduino compatible board with audio and global navigation satellite systems (GNSS) support and its extension board launched in Japan this summer. The company has now expanded markets, and is offering the boards in the United States and Europe as well.

They also tasked an agency to send samples to various reviewers, and I got selected to receive one as well. I’ll start the review by checking out the hardware, shortly discuss software development options, and report my experience with Spresense SDK.

Sony Spresense Unboxing

I received two packages…

Sony Spresense review
… one the main board, and the other for the extension board.

Spresense main board & extension board

The main board package only comes with CXD5602PWBMAIN1 board and an information sheet. The top of the board includes a reset button, four user LEDs, a power LED, a boot recovery button, the camera interface, Sony CXD5247 power management and audio analog interface chip (Black on the photo below, but in reality it’s a reflective surface), Sony CXD5602 hexa core Arm Cortex-M4F microcontroller with GNSS support – seen as D5602GG on the package, two rows of 2.54mm pitch I/O headers, as well as the GNSS antenna on the very right edge of the board.

Sony Spresense board
Click to Enlarge

The bottom part of the board features MXIC MX25U6435F SPI NOR flash with 8MB capacity, a 100-pin connector to connect the main board to the extension board, CP2102N USB to TTL chip, and a micro USB port for power and programming.

The important information sheet mostly contains legalese, as well as specifications, and a link and QR code to Spresense support website.

Spresense user manual

The extension board comes with a similar information sheet, as well as four plastic bits that will be used to hold the main board into place.

Spresense extension board unboxing
Click to Enlarge

The extension board comes with Arduino compatible headers, a 100-pin socket to connect to the main board, some jumpers, a 3.5mm audio jack, and a micro SD card slot.

Spresense extension board top
Click to Enlarge

That was for the top side of the board, and the other side mostly features two more chips: 72040 which must be a level shifter, and TI LSF0108 octal bidirectional multi-voltage-level translator, as well as the “extension” micro USB port.

Spresense extension board bottom
Click to Enlarge

Assembly of both boards is straightforward. Simply insert the four black plastic bits in the mounting holes of the extension board, place the main board on top, and push it down.

Sony Spresence Kit Assembled
Click to Enlarge

Two Software Development Environments

There are two ways to work with Spresense board as explained in Spresense software documentation:

  • Spresense Arduino Library – To work with the Arduino IDE familiar to many developers.
  • Spresense SDK – Sony’s original development environment for the CXD5602 chipset, based on NuttX real-time operating system, and leveraging GNU Make toolchain. The low level API enables developers to optimize memory use, power saving, control of multicore processing, and more, which may not be possible with the Arduino library.

I’ve published many reviews with the Arduino IDE for other hardware platforms, and others have already published projects using Spresense with the Arduino IDE, so I thought it would be more interesting for myself and readers to instead look at Spresense SDK.

Spresense SDK Architecture
Structure of Spresense SDK – Click to Enlarge

Getting Started with Spresense SDK

A guide is already available to get started with the SDK. So let’s try to follow it in a laptop running Ubuntu 18.04.

Installing Spresense SDK

  • First we need to install some dependencies in a terminal windows:

  • The next step os to install the kconfig-frontends package from nuttx-tools:
  • And check out the SDK source code:

USB Connection

You may also want to add your current user to the dialout group, and logout to make sure you can access the serial port:


Time to connect the main board to your computer via USB. Here’s the output from the kernel log:


The board is properly detected as a CP210x converter with 10c4 VID and ea60 PID.

Spresense SDK Setup

  • First set the initial NuttX kernel configuration:
  • Then set the initial SDK configuration:

Output:


We’ve being ask to…

  • Install a new loader

The download URL requires you to accept an EULA, so it can’t downloaded from the command from the command line. But after download, I could easily flash it to the board with the following commands:


Last command output:

  • Build the example image:


You should end up with nuttx.spk firmware in the current directory:

Flash and run the firmware

At this point, we’re asked to flash the bootloader, but we’ve already done it above, so we can just flash nuttx.spk:


Output from the command:


To run the hello world program we need to connect with serial with 115200 8N1 parameters using minicom or other tools:


Disable hardware flow control in Serial port setup, and exit by pressing Esc and selecting Exit. We should now have access to NuttShell (NSH) shell for NuttX.

NuttShell
Click to Enlarge

Type hello to run the demo program:


Success. The source code of the hello world program can be found in examples/hello/hello_main.c, and is mostly your typical C hello world program:


For reference NuttX shell has some similar commands as you’d find in busybox:

Spresense Sample Programs

Hello word is fine to get started but there are other, more interesting samples in Spresense SDK:


Each sample is described in Spresense NuttX developer guide. Somehow there is no blinky sample, what kind of develeloper guide is that! 😉

Some samples requires additional hardware such as camera add-on, Bluetooth LE add-on, sensors add-ons and so on. You’ll find a list by scrolling down on the main page of the developer website.

Since audio and GNSS are some of the main features of the board, I’ll try the audio_player and gnss samples respectively written in C++ and C programming languages.

Spresense Audio Player

The build and flash procedure is the same as for the hello world program with the following commands executed in sdk directory:


The program is loaded to the board, but we’ll need some extra files stored in a micro SD card with music, playlist and “worker” binaries as described in the README.txt file in the audio_player sample directory:

After that, you can see worker binary ‘MP3DEC’, ‘WAVDEC’ in directory sdk/modules/audio/dsp.
Store worker binary, playlist and play contents in the path specified by option.
– Default path
worker binary : /mnt/sd0/BIN
play list : /mnt/sd0/PLAYLIST
contents : /mnt/sd0/AUDIO

As a sample of Playlist, there is TRACK_DB.CSV in the PLAYLIST folder. Also, as a sample of contents, there is Sound.mp 3 in the AUDIO folder. Sound.mp3 is a sampling frequency of 48000, bit length 16, codec MP3 file.

I was initially confused about the wording of the instructions at first, but eventually figured it, and copied the files to a 4GB micro SD card formatted with FAT32:


Now insert the microSD card into Spresense board, and connect some speakers, before launching the app in NuttShell.

Spresense Audio Player
Click to Enlarge


Everything appears to work as expected, except I could not hear any audio…I check the audio jack connection in case of bad contact, my speakers’ power and volume level, but still nothing. Then I thought maybe there’s a bad contact between Spresense main board and the extension board, so I pressed on the top of the board and… success !!! I could finally hear the beep sound from Sound.mp3 file. Interesting that the micro SD card did work, but not the audio.

GNSS Sample

Let’s move on to the GNSS sample:


By the way remember to always exit minicom before running flash.sh, or you’ll end up with the following error:


Another site note is that you can run the config.py with an option that brings menuconfig to setup options:


Spresense SDK menuconfig
Click to Enlarge

Back to GPS testing. I tried to place the board close to the window, but the building design is not really suitable to get a proper GPS signal, and after 1h30, I only got the UTC time. So I moved outdoors, restarted the board, and everything worked pretty well. I got the UTC time after just 24 seconds:


and positioning data after one minute 40 seconds:


and no, I don’t live in Coffeyville 😉

The code for the samples is too long to go into details in this review, but you’ll find the source in the examples directory, and Spresense SDK documentation looks to be clearly structured, quite detailed and thorough.

Final words

Recently, I’ve been having troubles with hardware reviews, and there was always sometimes that went wrong, but I have to admit everything went rather smoothly with Spresense board, samples just work, and developer documentation looks great.

For most project you’ll likely need add-ons board, as there must not be many applications that require GNSS and audio without any type of wireless or wired connectivity.

Sony Spresense main board goes for $65 on Framos US, where you’ll also find the extension board for $45, and soon the 5MP camera board that will become available later his month. If you are based in Europe, you can also buy from RS Components or Vido instead. The Spresense camera is 29 Euros ex. VAT on the latter. The sensors and Bluetooth add-ons board are made by ROHM and can be purchased separately, but only in Japan for now.  Hopefully, they’ll work out an easier ordering method, maybe with a full development kit in the near future.

Support CNX Software - Donate via PayPal or cryptocurrencies, become a Patron on Patreon, or buy review samples
Subscribe
Notify of
guest
8 Comments
oldest
newest most voted
Advertisements