1. 程式人生 > >關於青風藍芽NRD52832開發經驗(一)

關於青風藍芽NRD52832開發經驗(一)

1.首先是按照環境的搭建,藍芽協議和外設功能用到的是keil5和nRFgo Studio(賊不好用,用來進行協議的下載)開發工具,52832用的協議是S132的藍芽協議,關於藍芽mesh的開發在nordic官網上面找到一個關於藍芽點燈的程式,開啟這個程式用的開發環境是(Embedded_studio這個開發環境集成了協議的,Embedded_Studio使用在老版本的基礎上安裝新版本在一個目錄下這樣就可以使用JLINK下載。)。這裡還要考慮不同的協議支援不同版本的程式,謹記

這裡可能在使用軟體的時候會被識別出JLINK是盜版的,需要你更新驅動,一旦你更新了驅動,jilink會被識別出是盜版的出現閃退,這裡推薦使用我之前釋出一篇文章參考更新驅動。

https://mp.csdn.net/postedit/82381417  文章連結。

2.首先是關於藍芽mesh的理論的大致的講解(熟悉時間不是很長,所以暫時到這個地步)第一藍芽mesh有四種特性第一種中繼節點(也就是將接收到訊息進行傳送給匹配的節點,可以設定中繼的次數),第二種代理節點(可以將不是組網外的裝置新增到組網中來,再新增裝置時要考慮到兩種金鑰一種是公共金鑰一種是私有金鑰。手機之類的都可以作為代理節點。);第三種好友節點(好友節點和低功耗節點相輔相成的,低功耗節點要考慮到功耗的原因並不會一直工作,好友節點主要用來代替低功耗節點接收的訊息);4.低功耗節點主要用在感測器採集和開關開啟物理層裝置的控制中(低功耗節點會定時對好友節點進行掃描來獲取好友節點代替接收到的訊息)

關於藍芽mesh系統架構 由下而上依次是藍芽低功耗(只是提供基礎無線通訊功能所必須的)-從承載層(承載層定義了網路PDU 如何由給定的通訊系統進行處理)開始-網路層-底層傳輸層-上層傳輸層-訪問層-基礎模型-模型。

3.關於52832藍芽通訊協議

藍芽最基本的配置檔案(Profile)為:GAP(Generic Access Profile)(通用訪問配置檔案),服務發現應用配置檔案(SDAP)

藍芽profile框架(每個attribute屬性被UUID唯一表示) 包括(1)特徵(characteristics)包含一個單獨的value和0-n個用來描述特徵的descriptor。可以理解為特徵是一個類,而描述符只是類中的一個。(2)描述符(descriptor)是被定義的attributes,這裡自己理解是(描述符就是子服務的UUID識別符號)。(3)服務 (這裡說明一下比如串列埠作為一個主服務,而RX和TX在這就是特徵characteristic)

藍芽裝置可以包括多個profile,一個profile中有多個service,一個service中有多個characteristic,一個characteristic包括一個value和多個descriptor(描述符)

關於UUID的講解:私有任務的UUID 可以通過軟體生成私有服務ID   私有任務使用BLE_UUID_TYPE_VENDOR_BEGIN 這個函式來定義UUID型別;公有任務UUID 使用的是藍芽聯盟公用的UUID使用#define BLE_UUID_BLE_ASSIGN(instance, value) do {\ instance.type = BLE_UUID_TYPE_BLE; \instance.uuid = value;} while(0)  來定義UUID型別

關於如何在從機中建立通知服務:例如按鍵的通知服務

在按鍵服務中新增char_md.char_props.notify = 1; 將其新增到協議中   在於主機互動式  主機會發給從機一個通知使能的命令,通知使能後,從機按鍵按下,主機就能收到響應命令。  

關於如何在從機中建立多個服務:例如在串列埠中新增按鍵服務。  

首先在服務中新增這個服務的API函式,其次是資料結構體宣告包括回撥函式和服務控制代碼等,設定子服務UUID,特徵值和描述符,新增處理協議棧事件()當寫入描述符或特徵值就發生此事件(事件指的是SERVICES_init中的函式控制代碼例如串列埠用的是nus_data_handler再來執行命令。這裡用到協議棧的派發函式ble_evt_dispatch)就是將任務分配給不同的函式執行)  在想主機發送訊息時用的是sd_ble_gatts_hvx函式來發送訊息。