1. 程式人生 > >藍芽4.0/BLE協議棧學習筆記(一)

藍芽4.0/BLE協議棧學習筆記(一)



需要的軟體工具:

1BLE協議棧(BLE-CC254x-1.4.0

2IAR開發軟體(IAR Embedded Workbench8.20.2

注:1.4.0協議棧使用8.20.2iar版本,1.3.2協議棧等使用的是8.10.4iar版本。

BLE協議棧安裝目錄下資料夾說明:

Accessories一些工具和已經編譯好的Hex檔案此資料夾中有Btool的安裝包、USB-CDC的驅動附件。

ComponentsHal驅動,OSAL原始碼、協議棧通用原始碼此資料夾是OSAL各層元件的實現。

Documents幫助文件協議棧說明文件,包括協議棧和DEMO的相關介紹和開發文件,這是學習BLE

最好的資料。

Projects工程檔案這裡有一些TIDemo,我們開發一般是在Demo的基礎上進行修改。

關於BLE協議棧工作流程圖大概就是下面這個樣子:

BLE協議棧分為主機和控制器兩部分。主機部分包括:邏輯鏈路控制及自適應協議層、安全管理層、屬性協議層、通用訪問配置檔案層、通用屬性配置檔案層;控制器部分包括:物理層,鏈路層、主機控制介面層。

BLE協議棧的配置檔案層包括GAP角色/安全配置檔案、GATT配置檔案兩部分,處於協議棧的頂層,配置檔案層將協議棧和應用層聯絡在一起。GAP層負責處理裝置訪問模式和連線,如廣播的使能/禁止、廣播的間隔、配對繫結及連線的控制、初始化安全管理。在成功連線裝置後,可以呼叫對應的函式來獲得裝置的service

(服務),並對service中的characterister(標籤)進行讀寫。GATT層主要是用來資料通訊,即servicecharacterister。可以在裝置的BLE協議棧中新增一個或多個service,而service(服務)中包含一個或多個characterister(標籤)。

BLE協議棧四種裝置型別:Central主機、Peripheral從機、Observer觀察者、Broadcaster廣播者。主機和從機的通訊過程大概是:從機開啟廣播,主機開始掃描,當從機接收到主機的掃描訊息後,會向主機發送掃描迴應資料。然後主機發起連線,建立通訊。

訊息廣播:

在完成一個處理事件後,需要把這個訊息廣播出去,就把值填加到廣播陣列中advertData[],

呼叫GAPRole_SetParameter(GAPROLE_ADVERT_DATA, sizeof( advertData ), advertData );函式廣播出去,這樣還不能廣播成功。進入GAPRole_SetParameter裡面發現缺少GAP_UpdateAdvertisingData函式,需要修改動態廣播資料,加入以下程式碼:

      case GAPROLE_ADVERT_DATA:

if ( len <= B_MAX_ADV_LEN )

{

VOID osal_memset( gapRole_AdvertData,0, B_MAX_ADV_LEN );

VOID osal_memcpy( gapRole_AdvertData,pValue, len );

gapRole_AdvertDataLen = len;

GAP_UpdateAdvertisingData(gapRole_TaskID,

TRUE,gapRole_AdvertDataLen, gapRole_AdvertData );

}

else

{

ret = bleInvalidRange;

}

break;

在呼叫完GAPRole_SetParameter函式後可以廣播了,需要控制任務呼叫時間控制後面新增osal_start_timerEx函式,這個是定時迴圈向任務傳送事件訊息,具體實際時間可以自己定。

GAPRole_SetParameter(GAPROLE_ADVERT_DATA, sizeof( advertData ), advertData );

osal_start_timerEx(simpleBLEBroadcaster_TaskID,SBP_ADV_RGB_EVT,100);

return ( events ^SBP_ADV_RGB_EVT );

這樣資料就可以廣播了,採用PacketSniffer抓包就可以在AdvData看到廣播資料了(十六進位制數)。

在使用某個功能時,必須在Option下配置C/C++Compiler Preprocessor新增巨集定義來開啟。比如使用串列埠時新增HAL_UART=TURE,登出POWER_SAVING。在使用ADC功能時,新增HAL_ADC=TRUE