nRF52810使用官網SDK開發入門教程
一、概述
近來,物聯網已成為大勢所趨,VR與AR正方興未艾,各種手環、遙控、智能家居也在粉墨登場。技術前沿的領航者們已經快馬加鞭,各種意志與暗示也在上傳下達。物聯網,無線通訊,移動互聯,將成為新的目標與寵兒。最近開的電賽動員會上已經明確而徹底的傳達了“互聯網+”的精神,甚至要用手機做APP來操控云云,總之是無線通信已經被擺在了前所未有的位置上。
現在常用的有規范標準的無限通信協議主要有WiFi(802.11a/b/g/n),藍牙(Bluetooth),ZigBee(802.15.4)等等,他們各有各的優點與不足。
WiFi的功耗太大,速率高,適合來傳輸數據流(文件),而不是做控制,距離較短。藍牙功耗很低(BLE),而且歷史悠久,技術成熟,是手機的標配,距離適中,適合做控制以及小規模的數據傳輸。(BLE是低功耗藍牙的意思,也就是指藍牙4.2。)ZigBee功耗也很低,且通信距離較遠,傳輸速率很低,是專為自動控制設計的通信協議,但目前技術仍不夠成熟,且組網較為復雜。
此外還有Z-wave,Threa;6LoWPAN似乎也很有潛力,但是目前才剛剛開始。ANT等各種無線通信協議,但是不如以上幾種通用程度高作為無線通信入門,我選擇了從藍牙開始。市面上常見的藍牙模塊有很多,TI的CC系列,Dialog的DA系列,以及Nordic的nRF系列都是很優秀的產品。
Dialog的產品硬件結構較特殊,整體成本低但是開發復雜,CC系列和nRF系列都是資料資源豐富且廣泛使用的產品,我所選擇的產品就是Nordic的nRF52810,支持藍牙4.2(BLE),甚至可以支持5.0。這些藍牙模塊多半都是帶有MCU核的,或者說根本就是一個MCU帶有藍牙功能。相對于TI產品,nRF52810的硬件資源要豐厚許多(Cortex-M4F,512K Flash,64K RAM,xxAA版),這也就意味著更大規模的工程成為可能。
開發板不想買了,因為已經習慣了用TI的TM4C1294進行開發,所以一般主體工程都是靠1294完成,學習52832主要是想熟練藍牙的配置與使用。于是買了個最小系統板(嚴格來說都不算,只是把所有引腳引出來而已,然后加一段鍍銅天線),然后就遇到了許多問題。
之前用1294時是TI官方的EvaluationKit板,自帶仿真模塊(Stellaris ICDI),只要驅動一裝就能刷金程序然后Debug調試。因此也從來沒有考慮過什么接口仿真的問題?,F在對著52810芯片手冊上的管腳圖,只找到了兩個SWDIO和SWDCLK引腳,對于具體如何把程序燒寫進去依然一無所知?;叵肫鹌渌?2開發板的情況,似乎需要一個名為Jlink的東東?快速上淘寶翻了下52810開發板的情況,確實如此,Jlink仿真器是必須的,開發板上已經預留好了20腳的JTAG接口,直接將仿真器連在開發板與PC中間,再輔以相應的驅動程序就能實現下載與仿真。但是我買的產品上可沒有JTAG接口,而且SWD和JTAG似乎也不太一樣的吧?
一頓搜索,大概對JTAG,SWD,JLink都有了一番了解。JTAG和SWD確實是不一樣的協議,Jlink本身默認JTAG,但是從JLinkV6以后,Jlink仿真器也開始支持SWD,到了V8以后,對SWD的支持已經相當不錯了。于是又買了塊Jlink仿真器,說是給nrf5系列專用的V8,一個仿真器比兩個我買的52810板還貴,拿到手以后,做工讓我瞬間就斷定是盜版貨了。。還好上面似乎有標識JTAG+SWD...在52810的數據手冊上,基本已經確定了這款芯片只支持SWD了,希望能用吧(笑)。大概就是把SWD的引腳接到仿真器的特定引腳上吧。
然后是軟件環節。習慣了TI的datasheet和SDK,Nordic的真的是....體驗感差好多呀。。采用的IDE是MDK Keil,然而官網提供的nRF_DeviceFamilyPack最新版和SDK最新版例程里的pack版本居然不一樣(pack已經更新到8.14.1了,而SDK里用的是8.12.0,SDK用的也是最新版)。好吧或許SDK那邊還沒更新,但是老版的pack下載在哪里呢?只能手動添加Device和CMSIS,然后是令人煩躁的include paths。SDK的文件結構相當出色,各種包各種drivers各種libraries相當完善有條理,但是初始化必須的一些驅動和庫文件被包含在了各個文件夾,相比之下,TI的driverlib簡直太方便了。至于TI的pdf函數庫對Nordic的html的無比的優越性。。用了都知道。
終于到了編譯環節,把官方的例程拿出來編譯,果然一大堆錯誤,定義變量語句不在函數開頭之類的問題比比皆是,還有一大堆定義結構體順便初始化的奇怪格式也是層出不窮,難道我的Keil MDK 5.20已經很老了嗎~
在手動改完官方庫的所有錯誤之后,把自己的初始化空工程拿出來終于編譯通過..比TI的果然是慢了好多好多。。
二、搭建開發環境
1.官方代碼與工具下載
http://www.nordicsemi.com/eng/Products/Bluetooth-low-energy/nRF52-DK
2.開發板硬件資料
硬件資料保含開發板的原理圖,BOM,Layout。在調試時候或者外接擴展時候看。
協議棧燒寫工具nRFgo studio下載
這個軟件是前期用來燒寫固件。對于這款芯片固件分三個部分:藍牙協議棧SoftDevice ,固件升級bootloader,App(用戶自己寫的程序)
nRF52 DK下載
http://www.nordicsemi.com/eng/Products/Bluetooth-low-energy/nRF5-SDK
官方例程和庫文件
S132 SoftDevice 下載
藍牙協議棧
http://www.nordicsemi.com/eng/Products/S132-SoftDevice
Nordic 自家的藍牙測試安卓或ios app
常用:nRF Master Countrol pannel
可以在github下載源碼用于App開發
3.試驗第一個程序
· 打開 nRFgo studio
我使用的是開發板,開發板上自帶有jlink芯片,軟件能識別到nRF52 development boards。
注意:在使用過程中由于jlink驅動版本的問題會出現不識別芯片的情況。需要安裝該軟件自帶的segger驅動。
右側窗口中可以清楚的看到芯片存儲空間的結構,包括上述三部分程序的起止地址和大小,其中SoftDevice 和Application是不可以缺失的。
l 燒寫固件
以“虛擬串口”為例,分別選擇三部分程序的hex文件,路徑如下:
softdevice
/s132_nrf52_2.0.1/s132_nrf52_2.0.1_softdevice.hex
bootloader nRF5_SDK_11.0.0_89a8197/examples/dfu/bootloader/pca10040/dual_bank_ble_s132/arm5_no_packs/_build/nrf52832_xxaa_s132.hex
Application
nRF5_SDK_11.0.0_89a8197/examples/ble_peripheral/ble_app_uart/pca10040/s132/arm5_no_packs/_build/nrf52832_xxaa_s132.hex
l 成功燒錄之后就可以打開app搜索了,藍牙4.0不需要配對
使用keil調試
打開測試固件對應的keil工程文件,就可以進行debug等操作
1.Keil軟件安裝;
2.Jlink驅動安裝;
3.nRFgoStdio安裝,該軟件用來燒寫藍牙協議棧和應用軟件。第二步安裝了Jlink驅動后,不要安裝nRFgo里自帶的Jlink驅動。
4.安裝nRF51SDK,安裝完成后,在Keil的目錄里有51822的相關的例程和源碼。
Windows: win7 64bit
Keil:V5.13.0.0 (mdk_513.exe)
Jlink:V4.96d (Setup_JLink_V496d.exe)
nRFgoStdio:V1.17.1 (nrfgostudio_win-64_1.17.1_installer.msi)
nRF51SDK: V6.1.0(nrf51_sdk_v6_1_0_b2ec2e6.msi)
SoftDevice:V7.1.0 (s110_nrf51810_7.1.0.zip)
4.遇到的問題
開發環境,包括軟件環境以及硬件環境可以參考官方的User Guide 文檔。期間遇到的問題有兩個:
1. nRFgoStdio無法識別nRF6310 MotherBoard?
在這里沒有解決這個問題,對我的開發工作影響不大,我們的開發工作只需要更新ble stack和應用層APP即可,大部分時候只需要燒錄app即可。
2.keil打開.uvproj后綴名的工程,無法編譯?
安裝的最新的keil版本以及SDK需要打開.uvprojx后綴名的工程,則編譯無錯誤。
3.通過nRFgo燒寫SoftDevice 和 ble_app_hrs無法工作?
這里存在nRF51SDK與SoftDevice和app的兼容性問題,本機安裝了SDK的6版本,在Nordic官網SoftDevice有5,6,7三個版本,逐一嘗試后,最新的版本7和app兼容,能正常工作。
4.在調試期間可能遇到VTG燈變紅、異常閃爍或不亮,nRFgo 和keil無法燒寫?
如果是電池供電的話,則很可能是電池沒電。檢測電池的電壓才1v,新電池1.6v左右。更換電池解決問題。
不能解決的問題,可以在Nordic官網論壇提問,會有Nordic的員工為你解答。
https://devzone.nordicsemi.com/questions/ 為了更好的結合串口打印信息,來分析代碼的流程。故結合6310里的uart_example例程,來調試UART功能,并將該初始化函數移植到要分析的例程去。
在uart_exam ple的simple_uart_config函數中,對uart指定輸出輸入引腳,關鍵是找到6310板子上的該兩個引腳的位置。因為沒有6310的原理圖,經過查閱了很多資料,終于找到這兩個引腳,分別是P9 端口的,p2.0與p2.1,連接到電腦的USB串口線并另一個接地,在電腦端配置好相應的串口參數,則解決問題。
信馳達科技專注藍牙領域十年,擁有豐富的方案設計經驗。信馳達科技的Nordic產品方案表現出色,了解更多Nordic產品詳情請聯系我們。