發表文章

目前顯示的是 9月, 2016的文章

文章總列表

假日嵌入式藍芽開發工程師:nRF51822 (5)

圖片
Introduction of SoftDevice 這一篇我要介紹Nordic SDK的用法,我第一次讀完寫的筆記。自己也都不大會,只好寫下來給社會大眾笑了。 通信系統一般會包括 {Antenna, LNA, RF filter-chain, Digital-front-end, Baseband, BLE protocol}。Baseband/ protocol包括硬體加速器和軟體,這邊的軟體就是SoftDevice,Nordic提供編譯好的binary,燒進指定區域就有BLE protocol可以用。Nordic提供 一系列的SoftDevice ,我只用過S110,其他的都是照著網頁的寫(心虛) S110:BLE Peripheral S120:BLE Peripheral or Central S130:BLE Central, Observer, Broadcaster S210:ANT+ S310:BLE & ANT+ concurrent Nordic的SoftDevice燒進去後,memory map如下圖,S110占Flash(96KB),RAM(8KB),這個數量級證明BLE protocol沒辦法自幹。Nordic SDK讓BLE protocol和User code跑在同個space裡,使用MPU(Memory Protection Unit)保護記憶體不互踩,只是debug要花點心思。另外SoftDevice會佔某些MCU的硬體,用戶要知道哪些硬體還可以用。這種做法最優的地方是BLE protocol能無痛升級,怎麼設計SoftDevice也很有趣。用戶的code用SVC(Supervisor Call)呼叫SoftDevice,這部分等有空再寫一下。我在用的S110 SoftDevice這裡有 文件 可以閱讀。 Basic Program Structure of LBS Example 底下介紹 上一篇 的程式,Nordic sample code結構都差不多,先把周邊設備都初始化,然後初始化BLE stack,最後進入一個low power的main-loop等待事件。Nordic整份SDK都用了event-driven思維,這部分也很值得學習。 看懂

假日嵌入式藍芽開發工程師:nRF51822 (4)

圖片
Introduction 這篇開始要進入BLE主題,首先會介紹怎麼跑起來BLE-blinky這個範例,然後介紹Nordic的BLE protocol怎麼使用。 Compile & Flash Nordic LBS Example Against PCA10001 Nordic提供不少BLE的範例,裡面最簡單的就是LBS(LED-Button Service)。這個範例讓手機透過BLE遠端控制板子的LED亮暗;按下button時候,手機也可以即時收到通知。這個範例包括central和peripheral雙向通訊,仔細研究大概就能抓住Nordic SDK怎麼用。編譯和Flash的步驟如下: Sample code路徑如下: nRF51_SDK_10.0.0_dc26b5e/ examples/ ble_peripheral/ experimental_ble_app_blinky/ 把裡面的pca10028整個複製一份叫pca10001,把裡面S110的Makefile和Linker script做必要的修改,然後Makefile也可以補強一點。這裡不再重寫一次,直接參考前一篇文章。 然後下去build,送你一個build error應該是合情合理的 (3)的原因是某個目錄找不到,名稱和board name以及softdevice name有關。我們換了一個board,這裡也得幫他準備 從這個:experimental_ble_app_blinky/ config/ experimental_ble_app_blinky_s110_pca10028 複製到:experimental_ble_app_blinky/ config/ experimental_ble_app_blinky_s110_pca10001 這個目錄只有一個檔案,叫nrf_drv_config.h,這個檔案其實是SDK的一部分,調整那些功能要啟動。Nordic也不希望直接改SDK裡的這個檔案,正確的做法是拷貝這個檔案到project底下,然後修改inclusion search path,把private header放到最前面。這也是實戰中非常常見的做法。 然後理論上就可以build以及燒錄進去,接下來開發版就變成一個BLE periphe

假日嵌入式藍芽開發工程師:nRF51822 (3)

圖片
Introduction 這篇文章介紹怎麼用Makefile + GCC搭建NRF51的開發環境,我試著結合自己工作經驗,聊一下我對建構開發環境的看法。另外我在Windows/ Linux/ Mac三個作業系統都試過可以用,投資時間在GCC開發環境其實是值得的。 我認為工程師一定要自己親手架設過開發環境,親身體驗所有細節,才會成為高手。我工作的地方選擇專業分工,大多環境的東西都有專人維護,團隊成員只要會用會抱怨就可以了。但是compiler如果出問題,最好的手法是單獨抽出compile command,修改compile flag,或著丟出pre-processor output來觀察。能弄清楚程式怎麼編譯,連結,image檔怎麼出來,真的是好處多多。 我過去我用過Keil ARM寫Samsung S3C2410的bootloader。產生好ELF以後,抽出text/data section,自己寫工具下載到NAND Flash,然後看CPU開機載入我寫的程式 -> 爽!不過前面的敘述裡,還是有個版權物Keil ARM。所以這次我要脫離舒適圈,採用GCC + Makefile做一樣的事。 目錄結構 好的目錄結構帶你上天堂!這個題目其實沒有聖杯,端看規劃的目的。我規劃的目錄結構如下,設計初衷是整個目錄能放在隨身碟帶著走,所以compiler也解壓縮到裡面去。但我還是得安裝另外一些小工具。最後我還是用安裝檔裝到/c/Program Files/底下,這樣能大幅壓縮開發包目錄。開發包目錄我會搭配版本控制一起用,預期裡面的東西 一行都不能改 (不過後面有些原因會放寬),我選擇用另外一個git project來儲存user code(但最後也不是,呵呵)。 雖然不完美,還是放出來給大家見笑一下,過幾個月我再回來笑自己。 nrf51822_dev_pkg/ dist/ 放下載回來的安裝包,比如compiler,SDK,Nordic-Tool都放這裡 doc/ 放網路上找到的文件,比如板子的schematic,IC的data sheet,Application Note SDK/ 放Nordic SDK解壓縮的本體 tool/ 放工具解壓縮後的目錄,比如compiler

假日嵌入式藍芽開發工程師:nRF51822 (2)

圖片
Introduction 這篇文章想介紹怎麼建構土炮研究BLE環境,包括我的2014/2016環境。在真的拿MCU寫BLE FW之前,先找個BLE裝置玩一下人家的產品比較有趣。 BLE Development Tool, 2014 我和BLE結緣是因為一邊跑步想一邊觀測心跳,所以我買了藍芽心跳帶。那時我的小米2s還停在Android 4.1.1,根本不支援BLE。我刷上了Ivan秋葉隨風提供的AOSP Android 4.4,然後就抓得到心跳錶了! 小米2s,刷機note 我買的心跳帶是 雙揚i-GotU HRM-10 ,我懷疑他感應的是我的步伐而不是心跳,也常常抓不到,整個就很爛。最初懷疑是手機BLE收不好,我想透過Raspberry Pi和心跳帶打交道看看,畢竟Android/ Raspberry Pi都是基於Linux。我插上藍芽Dongle,編譯bluez,使用附贈的gatt-tool研究BLE原理。因為心跳帶很爛,研究做得很辛苦,BLE link經常斷線。但是從tool終究是看到心跳值,成就感滿點。 假日藍芽工程師,架設環境 假日藍芽工程師,先動起來再說 透過gatt-tool繼續探索BLE,在bluetooth的網站到處查那堆UUID,還真的給我參透了!我寫了兩篇文章講ATT/GATT,這兩篇點閱率滿高的,表示應該很多人都想研究BLE。如果我想賺100USD廣告費,多寫一點就對了(笑)。 後來我也成功在Android上寫程式讀到心跳。 假日藍芽工程師,ATT protocol 假日藍芽工程師,GATT protocol 假日藍芽/Android工程師: 寫個APP讀心跳 BLE Development Tool, 2016 我還是推薦透過心跳帶研究BLE,平常運動可用,不研究也不會浪費。我推薦名世電子的 Echowell DMH-30 ,他是BLE/ANT+雙介面,可以同時連到我的Garmin碼表(ANT+)和手機(BLE)。這間公司的產品和服務都很到位,比上面那間雙揚好多了。 2014年在Raspberry Pi開發BLE的方法還可以用,只是不大舒服,事實上我寫完文章就沒再去玩gatt-tool了。我改用Nordic Semiconductor的nRF Co

假日嵌入式藍芽開發工程師:nRF51822 (1)

Introduction 2014/10買回來的nRF51822開發版,兩年來斷斷續續學習我終於大概有點成果了。接下來想寫一些文章把這些東西紀錄一下。希望可以早日收到Google給我的100USD廣告費支票(哈)。 http://lihgong.blogspot.tw/2014/10/ble.html 開發版 我手邊的開發版是淘寶買的nRF51822EK_TM,他是Nordic Semiconductor的nRF51822 EK, PCA1001仿製品,上面多放了常見的周邊(如下),可以視為原廠的加強版,而且還賣得便宜一點,像是三軸加速器感應器就直接放上去,拿來學習還滿好的。 JLINK-OB MPU6050 (三軸加速度感應器 + Gyro) 1x 三色LED 3A Relay UART to USB (PL2308) 128M SPI Flash 1x buzzer nRF51-EK (Evaluation Kit), PCA10001 https://www.nordicsemi.com/eng/Products/Bluetooth-low-energy/nRF51822-Evaluation-Kit 時至今日,我大概不會推薦上面的方案。因為Nordic後來推的開發版叫nRF51-DK (PCA10028),支援Ardunino Uno Revision 3接頭。他也援mbed開發,這個很酷,板子上的J-Link會變成一個磁碟機,把ELF檔拖進去就可以燒錄。最要命的是新出的SDK已經不直接支援PCA10001,要稍微動點手腳才能用範例。我如果不是已經買了板子也懶得弄了。推薦直接到mouser電子買一片,只是要折騰一下他的網站就是... (但是真的滿便宜的)。 nRF51-DK (Development Kit), PCA10028 https://developer.nordicsemi.com/nRF5_SDK/ Mouser電子nRF510DK http://www.mouser.tw/ProductDetail/Nordic-Semiconductor/nRF51-DK/?qs=%2fha2pyFadugZXgh3xrn3AtVnVqf%