nrf51822-广播模式
http://blog.chinaunix.net/uid-28852942-id-5752396.html
解決以下幾個問題:
1 SDK9 中的幾種廣播模型
2 廣播超時如何進入睡眠
3?如何取消廣播超時睡眠使其可以無限廣播。
?
1 SDK9?中的幾種廣播模型
Nordci SDK對于廣播方面有一個模塊。這個模式定義了幾種廣播模式,當然這些模式并非規范中的廣播模式,僅僅是sdk自己定義的一些模式而已。
如下圖
Direct模式及直連模式,利用的就是ble中的直連廣播,該模式是為了快速重連上剛剛斷開的設備,比如利用在快速重連上意外斷開的設備,已達到無縫恢復的目的。(實踐代碼中還分成了)
Fast模式:就是普通的廣播,不過連接間隔我們可以設置的快一點。
Slow模式:普通廣播,連接間隔設置的慢一點
Idle模式:停止廣播。
這四種模式是遞進的,比如你設置了啟動廣播時選擇Direct模式,但是如果你并未在初始化時設置Direct模式的相關參數,那么它就會回嘗試Fast模式,如果初始化時Fast模式的相關信息也沒設置,就會再嘗試Slow模式,如果初始化時Slow模式相關信息也沒設置最后就直接進入到Idle模式了。
同樣的,廣播超時后的超時處理就是選擇下一個模式再進行廣播,比如你Fast模式啟動廣播成功后,如果超時時間是3分鐘,3分鐘后,廣播超時處理中就是選擇嘗試Slow模式廣播。
其實模式的定義只是給出了一個可以直接利用的模塊,比如Fast模式和Slow模式并沒有定義所謂的快慢是多少,只是給以一個你可以直接使用的代碼模塊。比如你的使用場景是希望設備上電后以30ms快速廣播20s,如果一直都沒有被連接上,30s后切換成200ms的廣播3分鐘以達到減小功耗目的。
那么在廣播初始化的時候就可以忽略Direct模式的相關設置,設置Fast模式使能,并且廣播間隔為30ms,超時時間為20s,設置Slow模式使能,并且其廣播間隔為200ms,超時時間設置為180s。之后啟動Fast模式廣播就可以了,當20s超時到期后,就會收到協議棧的BLE timeout事件,sdk中的處理就是切換成Slow模式繼續廣播。如果Slow模式180s也超時了,協議棧就會上拋Slow timeout事件,最終就停止廣播了。
2廣播超時后如何進入睡眠:
Main函數中調用了advertising_init來初始化廣播參數
從上圖可以看到,sdk中默認只初始化了Fast?這個模式的參數,也就是說當我們用Fast模式啟動廣播后,當廣播超時后。由之前的描述知道Sdk會再選擇SLOW模式,但是初始化這里并未設置SLOW模式參數,所以最終會再選擇IDLE模式也就是進入睡眠了。分析如下:
?
Main中初始化廣播后,啟動FAST模式廣播
如果一直沒有其他設備來連接,當廣播超時后,協議棧就會上拋一個TIMEOUT事件,廣播模塊的事件處理函數會處理這個事件
可以看到對TIMEOUT的事件處理為先判斷是不是廣播的TIMEOUT事件。如果是就判斷模式,因為是FAST模式啟動,所以代碼中就會再次啟動SLOW模式的廣播。
?
再看下啟動廣播函數,只看相關的幾個代碼段:
下面這段代碼就是根據啟動廣播的模式和初始化時設置的參數來決定真正的廣播模式。
第一次啟動時,因為是FAST模式啟動的,并且初始化函數advertising_init中設置了FAST模式的相關參數,所以確定就是FAST模式,當FAST廣播模式超后,上面的代碼顯示是又啟動了SLOW模式,但是advertising_init函數中并未設置SLOW模式的相關參數,從下面的代碼中看到最終設置成了IDLE模式。即并未按照要求啟動了SLOW廣播,因為初始化時沒有設置SLOW模式的相關參數。
PS:上圖的DIRECT_SLOW這個模式就是利用ble中的Low Duty Cycle Directed Advertising。4.0時規范只定義了DIRECT廣播類型,就是定向廣播,并且廣播周期為3.75ms,并且只能持續1.28s。4.1開始分成了Low Duty Cycle Directed Advertising和High Duty Cycle Directed Advertising,High Duty Cycle Directed保持了之前的定義即3.5ms周期和最多持續1.28s,而Low Duty Cycle Directed類似普通廣播,不過是定向的而已。
函數的最后有如下片段,因為最終設置成了IDLE模式,所以沒有啟動廣播,于是調用了m_evt_handler函數。
這個函數時在廣播初始化里面設置的
實現如下
sleep_mode_enter函數的實現就是設置喚醒按鍵,然后進入深度睡眠????
喚醒按鍵設置了BUTTON0 和BUTTON1? 這里的0,1是編號的意思。我用的板子是PCA10028型號,這個板子上有4個按鍵分別是p0.17? p0.28, p0.19 ,p0.20。對應的編號就是0-3.
這里就是將17 ,18連個引腳設置為喚醒引腳。(17引腳喚醒的同時會刪除綁定信息)
綜上:廣播初始化中設置了FAST模式廣播的相關參數,然后按FAST模式啟動廣播。當廣播超時后,超時時間處理中判斷是FAST模式超時,于是再啟動SLOW模式廣播,但是因為SLOW模式廣播的相關參數并沒有設置,于是切換成IDLE模式,并且調用了初始化時設置的回調函數。回函數中會設置喚醒按鍵然后設置深度睡眠。
3如何取消廣播超時睡眠使其可以無限廣播
總結
以上是生活随笔為你收集整理的nrf51822-广播模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BLE-NRF51822教程1-常用概念
- 下一篇: 【Device Tree】设备树(一)—