期盼了許久,終于收到了兩個(gè)包裹,一個(gè)是主板,另一個(gè)為擴(kuò)展板。
主板的包裹里只有CXD5602PWBMAIN1板和信息表,板的頂部包括一個(gè)復(fù)位按鈕、四個(gè)用戶LED、一個(gè)電源LED、一個(gè)啟動(dòng)恢復(fù)按鈕、相機(jī)接口、索尼CXD5247電源管理和音頻模擬接口芯片(下圖中的黑色),索尼CXD5602 hexa核心Arm Cortex-M4F微控制器支持GNSS - 在封裝上看作D5602GG,兩排2.54mm間距I / O接頭,以及板極右邊緣的GNSS天線。
該板的底部采用MXIC MX25U6435F SPI NOR閃存,8MB容量,100針連接器,用于連接主板和擴(kuò)展板,CP2102N USB到TTL芯片,以及用于電源和編程的微型USB端口。
信息表主要包含法律術(shù)語(yǔ),規(guī)范以及Spresense支持網(wǎng)站的鏈接和QR代碼。
擴(kuò)展板附帶了類(lèi)似的信息表,以及用于將主板固定到位的四個(gè)塑料鉆頭。
擴(kuò)展板配有Arduino兼容接頭,100針插座,用于連接主板,部分跳線,3.5mm音頻插孔和micro SD卡插槽。
下圖為電路板的正面,另一側(cè)主要是兩個(gè)芯片:72040電平轉(zhuǎn)換器和TI LSF0108八進(jìn)制雙向多電壓電平轉(zhuǎn)換器,當(dāng)然也有著“擴(kuò)展”用的微型USB端口。
兩塊板的組裝都很簡(jiǎn)單,只需將四個(gè)黑色塑料鉆頭插入擴(kuò)展板的安裝孔中,將主板放在頂部,然后將其向下推。
如Spresense軟件文檔中所述,有兩種方法可以使用Spresense板:
Spresense Arduino庫(kù)- 使用許多開(kāi)發(fā)人員熟悉的Arduino IDE。
Spresense SDK- 索尼最初的CXD5602芯片組開(kāi)發(fā)環(huán)境,基于NuttX實(shí)時(shí)操作系統(tǒng),并利用GNU Make工具鏈。低級(jí)API使開(kāi)發(fā)人員能夠優(yōu)化內(nèi)存使用,節(jié)省電源,控制多核處理等等,而Arduino庫(kù)可能無(wú)法實(shí)現(xiàn)這一點(diǎn)。
下文針對(duì)Spresense SDK軟件系統(tǒng)進(jìn)行說(shuō)明。
▲Spresense SDK的結(jié)構(gòu)
讓我們?cè)囍f(shuō)明指南在運(yùn)行Ubuntu 18.04的筆記本電腦上調(diào)試運(yùn)行它。
安裝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連接
將當(dāng)前用戶添加到撥出組,然后注銷(xiāo)以確保可以訪問(wèn)串行端口:
1 | sudo usermod -a -G dialout $USER |
是時(shí)候通過(guò)USB將主板連接到計(jì)算機(jī)了,這是內(nèi)核日志的輸出:
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 |
電路板被正確檢測(cè)為具有10c4 VID和ea60 PID的CP210x轉(zhuǎn)換器。
Spresense SDK安裝程序
首先設(shè)置初始NuttX內(nèi)核配置:
1 2 |
cd spresense/sdk tools/config.py --kernel release |
然后設(shè)置初始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 |
此時(shí)提示要求安裝新的loader,由于下載URL需要EULA,因此無(wú)法從命令行來(lái)下載。但下載后,可以使用以下命令輕松將其閃存到電路板:
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 |
構(gòu)建示例映像:
1 2 3 |
cd .. make buildkernel -j8 make -j8 |
最終在當(dāng)前目錄中使用nuttx.spk固件:
1 2 |
ls nuttx.spk-l -rw-r--r-- 1 jaufranc jaufranc 153776 ?.?. 5 16:11nuttx.spk |
刷新并運(yùn)行固件
此時(shí),系統(tǒng)要求刷新引導(dǎo)加載程序,但這項(xiàng)命令已經(jīng)在上面完成了,所以我們可以刷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 |
運(yùn)行hello world程序需要使用minicom或其他工具連接115200 8N1參數(shù)的串口:
1 | minicom -D /dev/ttyUSB0 -b 115200 -s |
在串行端口設(shè)置中禁用硬件流控制,然后按Esc并選擇Exit退出。我們現(xiàn)在應(yīng)該可以訪問(wèn)NuttX的NuttShell(NSH)shell。
鍵入hello以運(yùn)行演示程序:
1 2 3 4 |
NuttShell (NSH)NuttX-7.22 nsh> hello Hello,World!! nsh> |
成功,hello world程序的源代碼可以在examples / hello / hello_main.c中找到,是典型的C語(yǔ)的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有一些類(lèi)似于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中的示例項(xiàng)目
Hello World是開(kāi)始運(yùn)行很好的示例程序,但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 |
每一個(gè)示例程序都都在Spresense NuttX的開(kāi)發(fā)指南中詳細(xì)地描述,但并未描述是何種類(lèi)型或者是否新穎的樣本。
某些示例項(xiàng)目需要安裝額外的硬件,如相機(jī)附加裝置,藍(lán)牙LE附加裝置,傳感器附加裝置等。可以通過(guò)向下滾動(dòng)開(kāi)發(fā)者網(wǎng)站的主頁(yè)面找到這些列表。
由于音頻和GNSS是電路板的一些主要功能,以下將嘗試使用C++和C語(yǔ)言編寫(xiě)的audio_player和gnss的示例程序。
Spresense音頻播放器
構(gòu)建和刷新過(guò)程與hello world程序相同,并在sdk目錄中執(zhí)行以下命令:
1 2 3 |
./tools/config.py examples/audio_player make -j8 sudo tools/flash.sh -c /dev/ttyUSB0 nuttx.spk |
該程序被加載到主板上,但我們需要一些額外的文件存儲(chǔ)在micro SD卡中,其中包含音樂(lè),播放列表和“worker”二進(jìn)制文件,如audio_player示例目錄中的README.txt文件所述:
之后,您可以在目錄sdk / modules / audio / dsp中看到工作二進(jìn)制文件'MP3DEC','WAVDEC'。
在選項(xiàng)指定的路徑中存儲(chǔ)工作二進(jìn)制文件,播放列表和播放內(nèi)容。
- 默認(rèn)路徑
worker二進(jìn)制文件:/ mnt / sd0 / BIN
播放列表:/ mnt / sd0 / PLAYLIST內(nèi)容:/ mnt / sd0 / AUDIO
作為播放列表的示例,PLAYLIST文件夾中有TRACK_DB.CSV。另外,作為內(nèi)容示例,AUDIO文件夾中有Sound.mp3。Sound.mp3的采樣頻率為48000,位長(zhǎng)16,編解碼器MP3文件。
起初出現(xiàn)這些提示時(shí),還存在困惑,但最終明白后將文件復(fù)制到用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 |
現(xiàn)在將microSD卡插入Spresense板,并連接揚(yáng)聲器,然后在NuttShell中啟動(dòng)應(yīng)用程序。
1 2 3 4 5 |
NuttShell (NSH)NuttX-7.22 nsh> player Start AudioPlayer example Running time is 10sec Running time is 10 sec |
一切似乎按預(yù)期工作,但聽(tīng)不到任何音頻。檢查音頻插孔連接是否接觸不良,揚(yáng)聲器的功率和音量水平,但仍然沒(méi)有聲音。后來(lái)設(shè)想也許Spresense主板和擴(kuò)展板之間可能存在不良接觸,所以按下了主板最終成功了!終于可以聽(tīng)到Sound.mp3文件發(fā)出的嗶聲,有趣的是,微型SD卡確實(shí)有效,但不是音頻。
GNSS樣本
讓試一試GNSS示例程序:
1 2 3 |
./tools/config.py examples/gnss make -j8 sudo tools/flash.sh -c /dev/ttyUSB0 nuttx.spk |
順便說(shuō)一下記得在運(yùn)行flash.sh前退出minicom,否則會(huì)得到以下錯(cuò)誤:
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引入安裝選項(xiàng)的選項(xiàng)來(lái)運(yùn)行config.py。
1 | ./tools/config.py -m examples/gnss |
繼續(xù)進(jìn)行GPS測(cè)試,我試圖將電路板靠近窗戶,但我所處的建筑結(jié)構(gòu)并不容易接收GPS信號(hào),在1小時(shí)30分之后,我只獲得了UTC時(shí)間。所以我搬到了戶外,重新啟動(dòng)了電路板,一切都很順利,我在24秒后獲得了UTC時(shí)間:
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秒后定位數(shù)據(jù):
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 |
樣本代碼太長(zhǎng),無(wú)法在本次審核中詳細(xì)介紹,但您可以在examples目錄中找到源代碼,Spresense SDK文檔看起來(lái)結(jié)構(gòu)清晰,非常詳細(xì)和透徹。
總結(jié)
我不得不承認(rèn)Spresense主板上進(jìn)行的一切評(píng)測(cè)都很順利,開(kāi)發(fā)的文檔看起來(lái)很棒。但對(duì)于大多數(shù)項(xiàng)目,可能需要附加板,因?yàn)樵跊](méi)有任何類(lèi)型的無(wú)線或有線連接的情況下,必須有許多需要GNSS和音頻的應(yīng)用。
索尼Spresense主板在Framos US上售價(jià)65美元,也可以在45美元左右找到擴(kuò)展板,很快就會(huì)有一個(gè)500萬(wàn)像素的攝像頭板將在本月晚些時(shí)候推出。Spresense相機(jī)售價(jià)在計(jì)算增值稅后29歐元,傳感器和藍(lán)牙附加板由ROHM制造,可以單獨(dú)購(gòu)買(mǎi),但目前只在日本購(gòu)買(mǎi)。希望他們能夠找到一種更簡(jiǎn)單的訂購(gòu)方法,可能在不久的將來(lái)使用完整的開(kāi)發(fā)套件。
-
轉(zhuǎn)換器
+關(guān)注
關(guān)注
27文章
8743瀏覽量
148040 -
電路板
+關(guān)注
關(guān)注
140文章
4996瀏覽量
98855 -
索尼
+關(guān)注
關(guān)注
18文章
3218瀏覽量
105119
原文標(biāo)題:索尼Spresense拆箱與Spresense SDK運(yùn)行測(cè)試
文章出處:【微信號(hào):gh_c472c2199c88,微信公眾號(hào):嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論