索尼Spresense拆箱与Spresense SDK运行测试

网友投稿 274 2022-11-09

索尼Spresense拆箱与Spresense SDK运行测试

期盼了许久,终于收到了两个包裹,一个是主板,另一个为扩展板。

信息表主要包含法律术语,规范以及Spresense支持网站的链接和QR代码。

扩展板附带了类似的信息表,以及用于将主板固定到位的四个塑料钻头。

两块板的组装都很简单,只需将四个黑色塑料钻头插入扩展板的安装孔中,将主板放在顶部,然后将其向下推。

如Spresense软件文档中所述,有两种方法可以使用Spresense板:

Spresense Arduino库- 使用许多开发人员熟悉的Arduino IDE。

Spresense SDK- 索尼最初的CXD5602芯片组开发环境,基于NuttX实时操作系统,并利用GNU Make工具链。低级API使开发人员能够优化内存使用,节省电源,控制多核处理等等,而Arduino库可能无法实现这一点。

下文针对Spresense SDK软件系统进行说明。

▲Spresense SDK的结构

让我们试着跟着说明指南在运行Ubuntu 18.04的笔记本电脑上调试运行它。

安装Spresense SDK

下一步是从nuttx-tools安装kconfig-frontends包:

查看SDK源代码:

USB连接

将当前用户添加到拨出组,然后注销以确保可以访问串行端口:

1 sudo usermod -a -G dialout $USER

是时候通过USB将主板连接到计算机了,这是内核日志的输出:

Spresense SDK安装程序

首先设置初始NuttX内核配置:

1
2
cd spresense/sdk
tools/config.py --kernel release

然后设置初始SDK配置:

1 tools/config.py examples/hello

输出:

1
2
3
4
cd tools
mv ~/Downloads/spresense-binaries-v1.1.0.zip .
./flash.sh -e spresense-binaries-v1.1.0.zip
sudo ./flash.sh -l ../../firmware/spresense/ -c/dev/ttyUSB0

命令输出:

构建示例映像:

1
2
3
cd ..
make buildkernel -j8
make -j8

最终在当前目录中使用nuttx.spk固件:

1
2
ls nuttx.spk-l
-rw-r--r-- 1 jaufranc jaufranc 153776 ม.ค. 5 16:11nuttx.spk

刷新并运行固件

此时,系统要求刷新引导加载程序,但这项命令已经在上面完成了,所以我们可以刷flashtx.spk:

1 sudo tools/flash.sh -c /dev/ttyUSB0 nuttx.spk

命令输出:

1
2
3
4
5
6
7
8
9
10
>>> Install files ...
install -b 115200
Install nuttx.spk
Waiting for XMODEM (CRC or 1K) transfer. Ctrl-X to cancel.
.........................................................................................................................................................153776bytes loaded.
Package validation is OK.
Saving package to "nuttx"
updater# sync
updater# Restarting the board ...
reboot

运行hello world程序需要使用minicom或其他工具连接115200 8N1参数的串口:

1 minicom -D /dev/ttyUSB0 -b 115200 -s

在串行端口设置中禁用硬件流控制,然后按Esc并选择Exit退出。我们现在应该可以访问NuttX的NuttShell(NSH)shell。

键入hello以运行演示程序:

1
2
3
4
NuttShell (NSH)NuttX-7.22
nsh> hello
Hello,World!!
nsh>

成功,hello world程序的源代码可以在examples / hello / hello_main.c中找到,是典型的C语的hello world程序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
****************************************************************************
* Included Files
****************************************************************************/
#include
#include
/****************************************************************************
* Public Functions
****************************************************************************/
/****************************************************************************
* hello_main
****************************************************************************/
#ifdef CONFIG_BUILD_KERNEL
int main(int argc, FAR char *argv[])
#else
int hello_main(int argc, char *argv[])
#endif
{
printf("Hello, World!!");
return 0;
}

作为参考,NuttX shell有一些类似于busybox中的命令:

1
2
3
4
5
6
7
8
9
10
11
12
nsh> help
help usage:help [-v] []
[ datehelpmksmartfs rmuname
? ddhexdump mhrmdir umount
basenamedfkillmount set unset
break echolsmvshusleep
cat printfmbmwshutdownxd
cdexecmkdir poweroffsleep
cpexitmkfatfs pstest
cmp false mkfifopwd time
dirname freemkrdreboottrue

Spresense中的示例项目

Hello World是开始运行很好的示例程序,但Spresense SDK还有其他更有趣的样本:

每一个示例程序都都在Spresense NuttX的开发指南中详细地描述,但并未描述是何种类型或者是否新颖的样本。

Spresense音频播放器

构建和刷新过程与hello world程序相同,并在sdk目录中执行以下命令:

1
2
3
./tools/config.py examples/audio_player
make -j8
sudo tools/flash.sh -c /dev/ttyUSB0 nuttx.spk

该程序被加载到主板上,但我们需要一些额外的文件存储在micro SD卡中,其中包含音乐,播放列表和“worker”二进制文件,如audio_player示例目录中的README.txt文件所述:

在选项指定的路径中存储工作二进制文件,播放列表和播放内容。

- 默认路径

worker二进制文件:/ mnt / sd0 / BIN

播放列表:/ mnt / sd0 / PLAYLIST内容:/ mnt / sd0 / AUDIO

作为播放列表的示例,PLAYLIST文件夹中有TRACK_DB.CSV。另外,作为内容示例,AUDIO文件夹中有Sound.mp3。Sound.mp3的采样频率为48000,位长16,编解码器MP3文件。

起初出现这些提示时,还存在困惑,但最终明白后将文件复制到用FAT32格式化的4GB micro SD卡:

1
2
3
4
5
6
cp ../examples/audio_player/AUDIO -R
cp ../examples/audio_player/PLAYLIST/ -R
mkdir /BIN
pushd modules/audio/dsp
cp MP3DEC WAVDEC /BIN/
popd

现在将microSD卡插入Spresense板,并连接扬声器,然后在NuttShell中启动应用程序。

1
2
3
4
5
NuttShell (NSH)NuttX-7.22
nsh> player
Start AudioPlayer example
Running time is 10sec
Running time is 10 sec

一切似乎按预期工作,但听不到任何音频。检查音频插孔连接是否接触不良,扬声器的功率和音量水平,但仍然没有声音。后来设想也许Spresense主板和扩展板之间可能存在不良接触,所以按下了主板最终成功了!终于可以听到Sound.mp3文件发出的哔声,有趣的是,微型SD卡确实有效,但不是音频。

GNSS样本

让试一试GNSS示例程序:

1
2
3
./tools/config.py examples/gnss
make -j8
sudo tools/flash.sh -c /dev/ttyUSB0 nuttx.spk

顺便说一下记得在运行flash.sh前退出minicom,否则会得到以下错误:

另外还需要注意使用将menuconfig引入安装选项的选项来运行config.py。

1 ./tools/config.py -m examples/gnss

继续进行GPS测试,我试图将电路板靠近窗户,但我所处的建筑结构并不容易接收GPS信号,在1小时30分之后,我只获得了UTC时间。所以我搬到了户外,重新启动了电路板,一切都很顺利,我在24秒后获得了UTC时间:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
NuttShell (NSH) NuttX-7.22
nsh>
nsh>
nsh> gnss
Hello, GNSS(USE_SIGNAL) SAMPLE!!
start GNSS OK
>Hour:0, minute:0, sec:3, usec:497
>No Positioning Data
>Hour:0, minute:0, sec:4, usec:512
>No Positioning Data
>Hour:0, minute:0, sec:5,usec:15289
...
>No Positioning Data
>Hour:0, minute:0, sec:23, usec:507
>No Positioning Data
>Hour:0, minute:0, sec:24, usec:522
>No Positioning Data
>Hour:6, minute:59, sec:32, usec:554
>No Positioning Data
>Hour:6, minute:59, sec:33, usec:561
>No Positioning Data

并在1分40秒后定位数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
>Hour:7, minute:0, sec:47,usec:559
>No Positioning Data
>Hour:7, minute:0, sec:48,usec:533
>No Positioning Data
>Hour:7, minute:0, sec:49,usec:533
>No Positioning Data
>Hour:7, minute:0, sec:49,usec:769162
>LAT37.02.1428
>LNG95.36.5893
>Hour:7, minute:0, sec:50,usec:578
>LAT37.02.1428
>LNG95.36.5893
>Hour:7, minute:0, sec:51, usec:574

样本代码太长,无法在本次审核中详细介绍,但您可以在examples目录中找到源代码,Spresense SDK文档看起来结构清晰,非常详细和透彻。

总结

我不得不承认Spresense主板上进行的一切评测都很顺利,开发的文档看起来很棒。但对于大多数项目,可能需要附加板,因为在没有任何类型的无线或有线连接的情况下,必须有许多需要GNSS和音频的应用。

索尼Spresense主板在Framos US上售价65美元,也可以在45美元左右找到扩展板,很快就会有一个500万像素的摄像头板将在本月晚些时候推出。Spresense相机售价在计算增值税后29欧元,传感器和蓝牙附加板由ROHM制造,可以单独购买,但目前只在日本购买。希望他们能够找到一种更简单的订购方法,可能在不久的将来使用完整的开发套件。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:什么是低代码(Low-Code)?
下一篇:第一章 网络发展历程,进制转换
相关文章

 发表评论

暂时没有评论,来抢沙发吧~