期盼了許久,終于收到了兩個包裹,一個是主板,另一個為擴展板。
主板的包裹里只有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文章
8694瀏覽量
147091 -
電路板
+關注
關注
140文章
4951瀏覽量
97692 -
索尼
+關注
關注
18文章
3188瀏覽量
104828
原文標題:索尼Spresense拆箱與Spresense SDK運行測試
文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論