nRF52840 Dongle 的SDK example修改

最近買了nRF52840 Dongle (PCA10059) , 如下圖, 官方說法是體積小, 便宜的類隨身碟裝置, 可支援藍牙5等多種協定  (a small, low-cost USB dongle that supports Bluetooth 5, Bluetooth mesh, Thread, ZigBee, 802.15.4, ANT and 2.4 GHz proprietary protocols.)
我主要是用來開發BLE協定的應用使用, 特別是Nordic nRF Connect for Desktop這套由Nordic官方開發的程式, 以前常常在手機上使用, 可以查看附近BLE裝置的Advertising封包, 也可以連入BLE裝置, 查看GATT的服務和特徵值並且可以進行讀取或寫入等動作。
這樣功能的應用程式, 想要在桌上型電腦上使用, 想來就非其桌上電腦版莫属, 不過在電腦上使用必須搭配Nordic的開發板, 而nRF52840 Dongle就是一個最合適的選擇! 因為便宜又不佔空間, 找個USB插座, 插下就可以使用了。


但除了拿來當工具使用, 它其實也是一張迷你的開發板, 只是沒有附J-Link的功能而已, 沒有J-Link的壞處就是不能做即時的除錯, 沒有逐步執行的功能。程式寫完不知道對不對, 只能直接燒到板子上的Flash去執行, 再看看行為對不對。這其實和Arduino Uno的開發模式一樣, 其實也是用得很開心。

要開發程式, 官方給了nRF5 SDK, 下載回來解壓縮後, 得到一個目錄, 其下有許多子目錄: components, config, documentation, examples, external, ... 。其中examples目錄下有802_15_4, ant, ble_central, ble_peripheral, connectivity, crypto, dfu, dtm, iot, peripheral, ...等目錄, 可以說大約是以協定來區分, 例如要BLE的範例程式, 那就找ble開頭的那幾個子目錄就對了, 如果只要看週邊IO動作的範例程式, 打開peripheral目錄就是了。

從最簡單的閃爍LED的程式來看, peripheral/blinky目錄打開後, 可以看到hex, pca10040, pca10040e, pca10056, pca10056e, pca10059等子目錄, 其中hex目錄裡面放的是已經編譯好的hex檔, 而且放了許多適用不同開發板的檔案。如果只是想試一下開發板的功能正不正常, 可以用這裡的hex檔直接燒錄, 再看板子上LED閃爍的狀況就能判斷了。其他pca開頭的目錄則是給這些開發板用的範例程式。以nRF52840 Dongle (PCA10059)這個開發板來說, 就是打開pca10059目錄就對了。



打開後看到mbr目錄, 再打開, 就看到arm4, arm5_no_packs, armgcc, config, iar, ses等目錄。這幾個目錄其實是給不同的開發工具使用的專案:

arm4 是ARM KEIL MDK version 4
arm5_no_packs 是ARM KEIL MDK version 5
armgcc 是GNU ARM EMBEDDED Toolchain
iar 是IAR Embedded Workbench
ses則是Segger Embedded Studio for ARM

當然大家就看自己想用那套就用那套吧!

只是奇怪的是, 對於nRF52840 Dongle (PCA10059)這個小開發板來說, 並不是每個範例裡都有這個板子的專案可用! 這真是令人又警又喜的, Nordic nRF SDK支援了這麼多的開發工具, 但是對PCA10059又這麼的不太給力.

不過, Nordic DevZone的文章nrf52840-dongle-programming-tutorial倒是給了我一個希望, 文章作者Einar Thorsrud說, 基本上只要改兩個地方就可以把pca10056的專案改成適合pca10059使用。
他以ses開發工具為例說明:

1. Preprocessor Definitions: 將BOARD_PCA10056改為BOARD_PCA10059

2. linker configuration: 
FLASH_START=0x1000
FLASH_SIZE=0xDF000 
RAM_START=0x20000008
RAM_SIZE=0x3FFF8


所以, 來看個實例: examples/peripheral/blinky_systick這個目錄下, 果真是沒有pca10059目錄的, 那麼我們就來跟著實作一下, 把pca10056目錄複製貼上, 並改名為pca10059。再進入pca10059目錄, 再進入blank目錄, 首先跟著Einar Thorsrud用Segger Embedded Studio做一次, 進入ses目錄, 找到其專案檔(blinky_systick_pca10056.emProject), 當然, 專案檔的檔名看不順眼, 可以自己先改一下名子, 再點擊打開, 然後在Segger Embedded Studio環境中, 點選功能表Project -> Options...出現的小視窗就和上面的兩個圖是一樣的。此時先到左上角的下拉選單, 先選成"Common", 然後就可以依上面所說的兩個要修改的地方去修改。

當你修改好, 編譯成功, 燒錄到板子上, 應該可以成功執行。

同樣的作法, 可以用在其他開發工具。以下來看看另兩個開發工具(A. KEIL MDK, B.armgcc)的改法:

A KEIL MDK
同樣的兩個地方要修改, 先點開Options for Target...
(1) BOARD_PCA10056改為BOARD_PCA10059
  在Asm頁籤

  在C/C++頁籤

(2)
FLASH_START=0x1000
FLASH_SIZE=0xDF000 
RAM_START=0x20000008
RAM_SIZE=0x3FFF8 
  在Target頁籤

同樣對專案檔名有意見, 也是直接在檔案總管下給他改名子就可以。

B. armgcc
armgcc專案同樣要做兩個修改:
(1) BOARD_PCA10056改為BOARD_PCA10059
  打開Makefile, 直接搜尋BOARD_PCA10056, 再修改即可.

(2)
FLASH_START=0x1000
FLASH_SIZE=0xDF000 
RAM_START=0x20000008
RAM_SIZE=0x3FFF8 
  打開blinky_systick_gcc_nrf52.ld檔, 如下圖修改


留言

這個網誌中的熱門文章

D-BUS學習筆記

關於藍牙裝置找尋(inquiry, scan)兩三事

Cisco Switch學習筆記: EtherChannel