本文主要目的是在拿到一個藍牙模塊後,將其作為從機來對一些基本的軟體功能進行測試,用以快速驗證是否滿足基本的使用需求和功能指標。 ...
摘要:本文主要目的是在拿到一個藍牙模塊後,將其作為從機來對一些基本的軟體功能進行測試,用以快速驗證是否滿足基本的使用需求和功能指標。針對測試的方法和測試的項目進行總結,作為對藍牙模塊從設備模式下的功能的一個初步評估。
一、測試目的
1、快速驗證藍牙模塊從機模式下的基本功能。
2、初步評估藍牙模塊從機模式下通信參數指標是否滿足軟體功能需求。
3、掌握藍牙調試助手的使用方法。
4、熟悉藍牙模塊從機相關測試方法。
5、熟悉藍牙模塊相關設置命令和含義。
二、測試工具
硬體:
1、藍牙模塊一個,後續需要根據藍牙模塊是單模還是雙模進行針對性的協議測試。
2、USB轉串口線,用於連接藍牙模塊和PC端通信,設置命令和數據收發,當然藍牙模塊還有別的類型的介面,這裡僅對串口藍牙模塊進行測試。
3、手機一個或多個,用於連接上藍牙模塊後收發數據,可以使用多個品牌的手機,進行不同手機系統相容性測試。
軟體:
1、PC端串口調試工具軟體,用於收發從藍牙模塊串口的數據,如sscom,xcom,Secure CRT等。
2、手機端藍牙調試助手,用於和藍牙模塊連接後,通過手機藍牙收發藍牙模塊的空中數據。根據用的藍牙模塊是單模還是雙模選擇,如BLE調試助手,SPP調試助手,調試全能王等。
關於藍牙調試助手:
1、針對不同協議進行測試時使用的藍牙助手工具也不同,分別使用SPP藍牙助手和BLE藍牙助手。
2、打開藍牙調試助手,搜索藍牙設備,找到需要測試的藍牙模塊進行連接。
3、藍牙服務相關
連上之後,就會看到幾個藍牙服務,實時日誌里也會看到連接狀態的提示;使用藍牙對外提供服務的設備,需要有對應的服務功能。藍牙服務分為服務、特性、屬性三個部分:
(1)、服務(Service)
每一個具體的藍牙應用是由多個服務(Service)組成的,而每一個服務(Service)又是由多個特性(Characteristic)組成的。服務(Service) 可以理解為一個房間,當這個房間為空的時候他什麼也不是,不能提供任何的服務功能,所以,房間裡面至少需要有一個或多個傢俱,不同的傢俱有不同的功能,這就是特性(Characteristic)。不同的服務(Service)應該有不同的編號(UUID),用以區分不同的服務(Service)。
比如藍牙連上之後,可以看到這幾個藍牙服務,Generic Access、Generic Attribute、Device Information以及Unknown Service。
(2)、特性(Characteristic)
特性(Characteristic) 是依附於某個服務(Service)的,就像前面說到房間里每樣傢俱可以提供與之相關的不同功能。同樣,我們需要給每樣傢俱分配一個編號,這就是特性(Characteristic)的UUID。我們知道,每種傢俱會有一個或多個不同的子功能,這個子功能就是特性(Characteristic)所包含的屬性(Property) 。例如床單可以更換、床的高低可以調整。
比如服務Generic Access的含義是“通用訪問”,下麵有特性:
DeviceName,設備名。
Appearance,說明自己是個什麼設備(比如藍牙滑鼠)。
Peripheral Preferred Connection Parameters,外設首選連接參數。
服務Generic Attribute的含義是“通用屬性”,下麵有特性:
ServiceChanged,服務改變。
(3)、屬性(Property)
通常的數據交互的屬性有如下幾個:
Read:讀屬性,具有這個屬性的特性是可讀的,也就是說這個屬性允許手機來讀取一些信息。手機可以發送指令來讀取某個具有讀屬性UUID的信息。
Notify:通知屬性, 具有這個屬性的特性是可以發送通知的,也就是說具有這個屬性的特性(Characteristic),藍牙模塊可以主動發送信息給手機。Notify是一直讀取,Read是想讀取的時候讀取。
Write:寫屬性, 具有這個屬性的特性是可以接收寫入數據的。通常手機發送數據給藍牙模塊就是通過這個屬性完成的。這個屬性在Write 完成後,會發送寫入完成結果的反饋給手機,然後手機再可以寫入下一包或處理後續業務,這個屬性在寫入一包數據後,需要等待應用層返回寫入結果,速度比較慢。
WriteWithout Response:寫屬性,從字面意思上看,只是寫,不需要返回寫的結果,這個屬性的特點是不需要應用層返回,完全依靠協議層完成,速度快,但是寫入速度超過協議處理速度的時候,會丟包。
Indication:在手機收到藍牙模塊數據後會主動回一個應答,有確認機制,藍牙模塊收到應答後才繼續發送下一個數據,保證數據正確到達,也起到了流控的作用。Notify無確認機制,不會保證數據發送是否到達。
(4)、UUID
通用唯一標識符。是藍牙組織聯盟定義的用於區分藍牙服務和特性的的標識符,總長度為128 Bit。UUID 用於標識藍牙服務以及通訊特征訪問屬性,不同的藍牙服務和屬性使用不同的訪問方法,就像人們語言交流一樣,語言相同才能正常交流(找到正確的UUID,才能使用正確的功能)。
簡單理解UUID就是編號,對應不同服務的一個唯一的編號,用於區分不同的服務及服務特性的個體。服務和特性都有各自的UUID。他很像網路應用中的埠號,例如80是HTTP協議的埠,他提供的是HTTP服務。
為了明確標準的藍牙服務,藍牙技術聯盟SIG定義UUID共用了一個基本的UUID。總共128Bit,據藍牙官網Assigned Numbers | Bluetooth® Technology Website里的文檔Service Discovery,可以看到基本的UUID為:
128Bit的UUID占用16個位元組,在變成個傳輸的時候都很不方便,所以藍牙聯盟定義了一個UUID的基地址,允許在此基礎上使用16Bit的UUID,進一步簡化基本UUID:
0x0000xxxx-0000-1000-8000-00805F9B34FB
每一個藍牙技術聯盟定義的屬性有一個唯一的16BitUUID,以代替上面的基本UUID的‘x’部分。使用16Bit的UUID便於記憶和操作,如SIG定義了“Device Information”的16BitUUID為0x180A。
也就是說,不管是什麼樣的藍牙設備,只要你提供設備信息(Device Information) 的服務功能,就必須使用”0x180A“的UUID號。這樣,當應用程式需要讀取這藍牙設備的設備信息時,只需要找到對應UUID號為0x180A的服務,就可以獲取到。
技術聯盟已定義好較多的標準服務UUID。根據藍牙官網的16bit UUID文檔,可以看到:
同時,也允許廠商定義自己的UUID,以滿足已定義服務外的功能實現。很多廠家的藍牙串口模塊(及某些服務)並沒真正使用規定的標準UUID編號,而使用自己定義的UUID。
三、測試項目
1、協議功能
藍牙模塊按照對藍牙協議棧支持的數量可以分為單模模塊(經典藍牙或低功耗藍牙)和雙模模塊(經典藍牙和低功耗藍牙),如經典藍牙的數據傳輸基於SPP協議,低功耗藍牙的數據傳輸基於BLE協議。同樣針對不同協議進行測試時使用的藍牙助手工具也不同,分別使用SPP藍牙助手和BLE藍牙助手,後續的測試項目中針對藍牙模塊支持的協議的不同,要使用對應的藍牙助手進行連接以應對不同協議的測試。
2、波特率支持
主要是選用藍牙模塊規格書中支持的藍牙串口波特率來進行和手機通信測試,一般藍牙模塊都有對應的命令對藍牙模塊的波特率進行修改。根據項目的藍牙模塊串口通信要求,為藍牙模塊設置對應的波特率,從而滿足單位時間內數據帶寬的要求,這裡的波特率指的是藍牙模塊上硬體串口的數據吞吐量,實際要看透傳理論最大空中速度(如一定距離內,數據從模塊發送至手機的空中速度為10KB/s),只要串口的輸入速度小於等於數據在空中的發送速度,模塊就沒有位元組限制。實際速度會根據軟硬體差異、環境、距離等的不同而有所差異。
為藍牙模塊設置好固定的波特率後,需要在PC端串口調試工具上設置好對應的波特率進行數據收發。
3、發送間隔
在對應的藍牙協議模式下,分別在手機藍牙助手上設置數據自動發送的間隔和PC端串口工具的自動發送間隔,設置好後,可以測試手機給藍牙模塊發送或者藍牙模塊給手機發送,以及手機和藍牙模塊同時互相發送這種全雙工通信的情況,主要是為了模擬在軟體程式開發中實際通信時的每包數據的發送間隔,驗證在設置的數據包時間間隔下的通信效率。當然,測試時需要設置好相互發送的每包數據長度。
分別在PC端串口調試工具和藍牙調試助手上設置好每包數據迴圈發送的時間間隔,觀察互發互收的情況。
4、丟包率
指測試中所丟失數據包數量占所發送數據的比率。手機藍牙助手和PC端的串口工具都可以檢測到數據包發送的數量和接收的數量,因此可以為藍牙模塊設定好固定的波特率,以及分別在藍牙助手和PC端串口工具上設置需要發送的數據包長度,在一定通信距離和時間內測試手機給藍牙模塊發送或者藍牙模塊給手機發送,以及手機和藍牙模塊同時互相發送這種全雙工通信的情況,觀察雙方收發數據包的個數是否有丟失。
可以分別在PC端串口調試工具和藍牙調試助手上觀察相互收發的數據位元組長度,來確認是否有數據丟包的情況。
5、通信距離
測量通信距離是使用用手機離藍牙模塊一段距離後通信的數據是否正常,當然,這個和具體藍牙模塊設計的射頻發射功率,接收靈敏度,收發環境,空中速率,無線電壓以及天線的類型和位置有關係,同樣可以選定不同的場景測試,如直線或非直線距離,是否穿牆及穿牆的層數等。一般可以先通過命令修改好藍牙模塊的射頻功率,同時配置好數據發送間隔和包長等參數後,進行一個初步模擬實際使用時的通信距離測試。
可以在藍牙調試助手上看到掃描到的模塊信號的強度,dbm 中文是分貝毫瓦,是一個表示無線功率的絕對值。它的數值是以1mw功率為基準的一個比值。計算公式如下:dbm=10log(p/1mw)
為什麼常見的信號強度都是負數的值呢?因為1mw = 0 dbm, 而隨著信號在空間內傳播,又受到障礙物的干擾,能量會衰減,所以常見的接收端顯示的信號強度都為負值,表示比1mw弱。由此也可以得知,信號強度這個值越大,表示信號越好。比如-30dbm比-90dbm好。
嘗試分別在近距離和遠距離測試藍牙模塊,可以在藍牙調試助手上觀察到信號強度的變化。
6、通信回連測試
如果一個藍牙設備已經與藍牙中心設備連接上,那麼當該藍牙設備的斷電重啟,其依然會和配對過的中心主設備連接上,而不需要重新走配對的流程,這個過程叫做回連。
當設備重啟之後,藍牙協議棧以及所有的上層的profile都要重新進行初始化,之前的配對信息是保存在文件bt_config.conf中,藍牙起來之後,會去載入這個文件,去解析曾經配對過的設備,對於已經配對過的設備,並且配對信息保持完整,那麼就會對該設備發起回連。手機連接藍牙模塊後,藍牙模塊斷電再上電,在藍牙調試助手上觀察藍牙模塊回連狀態。
7、通信穩定性
需要說明的是這裡的通信穩定性僅僅是在正常的環境下,對藍牙模塊進行一個基本綜合測試。主要是進行一個長時間的手機和藍牙模塊通信數據收發測試,選定好波特率、包長、通信包發送時間間隔、通信距離等參數後,進行例如1h或更長時間的數據收發測試後,檢查是否有丟包,誤碼,斷連等異常情況發生。
8、相容性測試
安卓手機版本眾多,各大安卓品牌都深度定製,略有差異。所以為了達到好的效果,需要使用不同品牌和型號的手機來測試藍牙模塊的數據傳輸,這也是有必要的。
四、總結
最後用一張思維導圖作為藍牙模塊從機的測試總結。
更多技術內容和書籍資料獲取敬請關註微信公眾號“明解嵌入式”
本文來自博客園,作者:Sharemaker,轉載請註明原文鏈接:https://www.cnblogs.com/Sharemaker/p/17050946.html