期盼了许久,终于收到了两个包裹,一个是主板,另一个为扩展板。
主板的包裹里只有CXD5602PWBMAIN1板和信息表,板的顶部包括一个复位按钮、四个用户LED、一个电源LED、一个启动恢复按钮、相机接口、索尼CXD5247电源管理和音频模拟接口芯片(下图中的黑色),索尼CXD5602 hexa核心Arm Cortex-M4F微控制器支持GNSS - 在封装上看作D5602GG,两排2.54mm间距I / O接头,以及板极右边缘的GNSS天线。
该板的底部采用MXIC MX25U6435F SPI NOR闪存,8MB容量,100针连接器,用于连接主板和扩展板,CP2102N USB到TTL芯片,以及用于电源和编程的微型USB端口。
信息表主要包含法律术语,规范以及Spresense支持网站的链接和QR代码。
扩展板附带了类似的信息表,以及用于将主板固定到位的四个塑料钻头。
扩展板配有Arduino兼容接头,100针插座,用于连接主板,部分跳线,3.5mm音频插孔和micro SD卡插槽。
下图为电路板的正面,另一侧主要是两个芯片:72040电平转换器和TI LSF0108八进制双向多电压电平转换器,当然也有着“扩展”用的微型USB端口。
两块板的组装都很简单,只需将四个黑色塑料钻头插入扩展板的安装孔中,将主板放在顶部,然后将其向下推。
如Spresense软件文档中所述,有两种方法可以使用Spresense板:
Spresense Arduino库- 使用许多开发人员熟悉的Arduino IDE。
Spresense SDK- 索尼最初的CXD5602芯片组开发环境,基于NuttX实时操作系统,并利用GNU Make工具链。低级API使开发人员能够优化内存使用,节省电源,控制多核处理等等,而Arduino库可能无法实现这一点。
下文针对Spresense SDK软件系统进行说明。
▲Spresense SDK的结构
让我们试着跟着说明指南在运行Ubuntu 18.04的笔记本电脑上调试运行它。
安装Spresense SDK
首先,我们需要在终端窗口中安装一些terminal windows:
1 | sudo apt install git gperf libncurses5-dev flex bison gcc-arm-none-eabi genromfs pkg-config autoconf automake cmake |
下一步是从nuttx-tools安装kconfig-frontends包:
1 2 3 4 5 |
git clone https://bitbucket.org/nuttx/tools.git cd tools/kconfig-frontends/ ./configure --disable-shared make -j8 sudo make install |
查看SDK源代码:
1 2 3 |
cd ../.. git clone --recursive https://github.com/sonydevworld/spresense.git git submodule foreach git checkout master |
USB连接
将当前用户添加到拨出组,然后注销以确保可以访问串行端口:
1 | sudo usermod -a -G dialout $USER |
是时候通过USB将主板连接到计算机了,这是内核日志的输出:
1 2 3 4 5 6 7 8 |
[99898.675476] usb 3-2: new full-speed USB device number 3 using xhci_hcd [99898.849262] usb 3-2: New USB device found,idVendor=10c4, idProduct=ea60 [99898.849267] usb 3-2: New USB device strings:Mfr=1, Product=2, SerialNumber=3 [99898.849270] usb 3-2: Product: CP2102N USB to UART Bridge Controller [99898.849272] usb 3-2: Manufacturer: Silicon Labs [99898.849275] usb 3-2: SerialNumber:1601ea6abb61e811841264b55bfef139 [99898.851295] cp210x 3-2:1.0: cp210x converter detected [99898.864393] usb 3-2: cp210x converter now attached to ttyUSB0 |
电路板被正确检测为具有10c4 VID和ea60 PID的CP210x转换器。
Spresense SDK安装程序
首先设置初始NuttX内核配置:
1 2 |
cd spresense/sdk tools/config.py --kernel release |
然后设置初始SDK配置:
1 | tools/config.py examples/hello |
输出:
1 2 3 4 5 6 7 |
WARNING: New loader v1.1.0 is required, please download and install. Download URL : https://developer.sony.com/file/download/download-spresense-firmware-v1-1-000 Install command: 1. Extract loader archive into host PC. ./tools/flash.sh -e 2. Flash loader into Board. ./tools/flash.sh -l/home/jaufranc/edev/spresense/spresense/firmware/spresense -c |
此时提示要求安装新的loader,由于下载URL需要EULA,因此无法从命令行来下载。但下载后,可以使用以下命令轻松将其闪存到电路板:
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 4 5 6 7 8 9 10 11 12 13 14 15 16 |
>>> Install files ... install -b 115200 Install ../../firmware/spresense/loader.espk Waiting for XMODEM (CRC or 1K) transfer. Ctrl-X to cancel. ....................................................................................................................115856 bytes loaded. Package validation is OK. Saving package to "loader" updater# install -b 115200 Install ../../firmware/spresense/gnssfw.espk Waiting for XMODEM (CRC or 1K) transfer. Ctrl-X to cancel. ..........................................................................................................................................................................................................................................................................................................................................................................................................................................................450336bytes loaded. Package validation is OK. Saving package to "gnssfw" updater# sync updater# Restarting the board ... reboot |
构建示例映像:
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还有其他更有趣的样本:
1 2 3 4 5 6 7 8 9 10 11 12 |
ls examples/ accelcameragyro press adccolorsensor helloprime alarmdecimator helloxxproximity Application.mk dnnrt_lenet Kconfigpwm asmp fft libexamples.aREADME.md audio_player fwupdateLibTarget.mk sixaxis audio_player_objif geofencelighttilt audio_recorder gnsslte_http_get voice_call audio_throughgnss_atcmdmagvoice_command bluetooth_le_peripheralgnss_factoryMake.defswatchdog bluetooth_sppgnss_pvtlog Makefile |
每一个示例程序都都在Spresense NuttX的开发指南中详细地描述,但并未描述是何种类型或者是否新颖的样本。
某些示例项目需要安装额外的硬件,如相机附加装置,蓝牙LE附加装置,传感器附加装置等。可以通过向下滚动开发者网站的主页面找到这些列表。
由于音频和GNSS是电路板的一些主要功能,以下将尝试使用C++和C语言编写的audio_player和gnss的示例程序。
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文件所述:
之后,您可以在目录sdk / modules / audio / dsp中看到工作二进制文件'MP3DEC','WAVDEC'。
在选项指定的路径中存储工作二进制文件,播放列表和播放内容。
- 默认路径
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 cp ../examples/audio_player/PLAYLIST/ mkdir pushd modules/audio/dsp cp MP3DEC WAVDEC 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,否则会得到以下错误:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Traceback (most recent call last): File "serial/serialposix.py", line 495, in read serial.serialutil.SerialException: device reports readiness to read but returned no data (device disconnected or multiple access on port?) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "flash_writer.py", line 504, in File "flash_writer.py", line 446, in main File "flash_writer.py", line 316, incancel_autoboot File "flash_writer.py", line 263, in readline File "serial/serialposix.py", line 505, in read serial.serialutil.SerialException: read failed:device reports readiness to read but returned no data (device disconnected or multiple access on port?) [8067] Failed to execute script flash_writer |
另外还需要注意使用将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制造,可以单独购买,但目前只在日本购买。希望他们能够找到一种更简单的订购方法,可能在不久的将来使用完整的开发套件。
-
转换器
+关注
关注
27文章
8701浏览量
147146 -
电路板
+关注
关注
140文章
4960浏览量
97779 -
索尼
+关注
关注
18文章
3193浏览量
104848
原文标题:索尼Spresense拆箱与Spresense SDK运行测试
文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论