1. 程式人生 > >CC2540藍牙模塊學習(1)

CC2540藍牙模塊學習(1)

undefine har hand 創建 .com ble 變量 tar 監管

本篇隨筆摘自於http://www.cnblogs.com/yygsj/p/5135150.html#undefined

一、整體

1.TI的藍牙平臺支持2種協議棧/應用配置:單一設備配置、網絡處理器配置

2.協議棧最頂層2個通用profile:

GAP 通用訪問配置文件層 Generic Access Profile

GATT 通用屬性配置文件層 Generic Attribute Profile

3. GAP:處理設備的接入方式及接入過程:①設備發現 ②鏈路建立 ③鏈路終止 ④啟動安全功能 ⑤設備配置(主要是連接參數配置)

GATT:完成服務器與客戶端之間通信的相關子過程

4.BLE支持40個信道的跳頻機制,其中3個通道用於Advertise,剩下的用於數據通信

5.OS抽象層:疑問 如何配置一個新的任務,任務的優先級,事件觸發機制,消息的傳遞

6.主要用於實現的是2個代碼文件:

OSAL_SimpleBLEPeripheral.c 任務回調函數數據的定義 和 任務初始化函數定義 作為OSAL的外部全局變量

SimpleBLEPeripheral.c BLE應用程序的實現代碼,該源文件調用一系列的BLE API函數,完成復雜的藍牙協議

通過 const pTaskEventHandleFn tasksArr[] 數組來存儲要調用的函數

simpleBLEPeripheral.h 一些常量的定義,和藍牙應用程序任務初始化和任務回調函數聲明。

7.LL層任務函數優先級 最高, 而應用程序函數的優先級最低

8.OSAL為每個任務分配了1個16位的Event,每一位代表一個事件,最高位代表SYS_EVENT_MSG,這個事件被OSAL系統保留

9.main()函數中最後進入的 void osal_run_system( void ),這個函數就是看相應任務有沒有事件發生,有時間發生就跳轉到相應的函數

10.任務間通信,一般通過 事件 和 消息 進行,每當任務間有消息傳遞,都會觸發SYS_EVENT_MSG事件,並且每次處理完事件後,都要清空標誌位。

osal_set_event() OSAL.h中 該函數會直接調度一個事件

osal_start_timerEx() OSAL_Timers.h中 需要掩飾觸發的事件,調用這個函數

11.Heap Manager(堆棧管理),函數osal_mem_alloc,給函數分配需要的字節數,osal_mem_free()用來釋放內存。

二、OSAL( 操作系統抽象層 Operate System Abstraction Layer )

1.OSAL中的消息:

發送消息前,用osal_msg_allocate()函數分配內存空間,填充數據,調用osal_msg_send()將消息發送到指定的函數中去。然後置位該函數的SYS_EVENT_MSG,然後接收端使用osal_mem_receive()將消息接收過來,接收完成後,使用osal_mem_deallocate()函數來回收當前消息所占用的內存。OSAL推薦在任務中使用獨立的消息接收函數來處理消息,例如: simpleBLEPeripheral_ProcessOSALMsg()函數。

2.GAP (通用訪問配置文件層 Generic Access Profile )

連接過程:①設備發現 ②鏈路建立 ③鏈路終止 ④啟動安全功能 ⑤設備配置(主要是連接參數配置)

GAP層總是工作在以下角色中的1種:

Broadcaster 廣播員,表明我在,但是你們只能看到我,不可以連接我

Observer 觀察者,看看誰在,我只觀察,不連接

Peripheral 外設,我存在,設想連我,我就連誰

Centeral 中心,看看誰在,工作在單層或多層的連接

3.連接過程: Peripheral向外廣播->Centeral接收到向從機發送“Scan”命令->Peripheral以“ScanResp”命令回應->Centeral發送連接請求

4.Connect Interval 通信間隙 每個間隔1.25ms為基本單位,最小6單位7.5mS,最大3200單位4.0S。

5.Slave Latency 從機延時 表示Peripheral可以連續忽略的連接數,最大不能超過499個,最長不能超過32S。

6.Supervision Timeout 監管超時 2個成功連接事件之間的最大間隔。

7.Profile 一種規範 ; Service 一個服務 ; Characteristic 特征值 ; UUID 統一標識碼(Service,Characteristic都需要),Centeral與Peripheral間的通信,均通過Characteristic實現

8.發送數據

主->從 Client調用GATT_WriteCharValue()函數發送;

從->主 Service調用GATT_Notification()函數實現。

9.接收數據

從<-主 從機接收後,會產生1個GATT_Profile_Callback調用;

三、BLE

四、低功耗部分

1.如何總是在PM1

osal_pwrmgr_device( PWRMGR_ALWAYS_ON );

2.如何進入PM2

osal_pwrmgr_device( PWRMGR_BATTERY );在空閑的時候就會進入到PM2模式

3.如何進入PM3

存在連接就斷開連接,存在廣播就停掉廣播,並確認自己創建的所有定時任務都已關閉,則系統應該就會進入PM3模式,只能進行外部中斷喚醒

4.CC2540低功耗中引腳的設置問題

不用的引腳應該與外部不連接,並將引腳配置為通用上拉輸入狀態(除了P1.0,P1.1),並且這些腳不應該與VDD,GND直接相連。

*關於P1.0,P1.1,“User Guide”給出的解釋是"except P1.0 and P1.1, which do not have pullup/pulldown capability",字面意思是沒有上下拉能力,可是我沒理解,這個上下拉,是指什麽。。。

五、常用的命令,功能,以及實現方法

1.切換電源模式

osal_pwrmgr_device( PWRMGR_ALWAYS_ON );

osal_pwrmgr_device( PWRMGR_BATTERY );

2.Peripheral怎麽主動斷開與Centeral的連接

bStatus_t GAPRole_TerminateConnection(); 在文件peripheralBroadcaster.c文件中

3.怎麽設置Peripheral的廣播的超時時間

首先保證是限制類型的廣播 即DEVDISC_MODE_LIMIT(永久廣播是 DEVDISC_MODE_GENERAL ),在 simpleBLEPeripheral.c文件 static uint8 advertData[]數組中設置。

當模式處於Limit模式時,廣播超時的設置可通過設置宏 TGAP_LIM_ADV_TIME_OUT,不設置的話,默認超時時間是180S。

4.如何打開與關閉廣播

uint8 initial_advertising_enable = TRUE/FALSE TRUE:打開廣播 FALSE:關閉廣播

GAPRole_SetParameter( GAPROLE_ADVERT_ENABLED, sizeof(uint8), &initial_advertising_enable );

分類: 藍牙

CC2540藍牙模塊學習(1)