藍牙模塊測試那些事之從機測試

来源:https://www.cnblogs.com/Sharemaker/archive/2023/01/14/17050946.html
-Advertisement-
Play Games

本文主要目的是在拿到一個藍牙模塊後,將其作為從機來對一些基本的軟體功能進行測試,用以快速驗證是否滿足基本的使用需求和功能指標。 ...


​  摘要:本文主要目的是在拿到一個藍牙模塊後,將其作為從機來對一些基本的軟體功能進行測試,用以快速驗證是否滿足基本的使用需求和功能指標。針對測試的方法和測試的項目進行總結,作為對藍牙模塊從設備模式下的功能的一個初步評估。

一、測試目的

        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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 2023-01-12 一、Mybatis中緩存機制 1、一級緩存 (1)概述:一級緩存(即本地緩存或SqlSession級別緩存) (2)特點: ①一級緩存預設開啟 ②不能關閉 ③可以清空 (3)緩存原理 ①當第一次獲取數據時,需要先從資料庫中載入數據,將數據緩衝到Mybatis一級緩存中(緩存底層 ...
  • 1 簡介 為了更好的版本控制和問題定位,我們需要知道正在運行的應用是什麼版本,什麼時候打包的,Git的相關信息等。通過/actuator/info可以幫助我們獲取這些信息。 2 配置 首先要有actuator的依賴: <dependency> <groupId>org.springframework ...
  • .Net6中想實現對某個網址截屏,可通過Selenium模擬訪問網址並實現截圖。 實現 安裝Nuget包 <PackageReference Include="Selenium.Chrome.WebDriver" Version="85.0.0" /> <PackageReference Inclu ...
  • ABP Framework 在架構上有四大目標:模塊化、DDD、多租戶和微服務。從 `7.0` 更新的功能來看,其側重點轉向微服務場景的實現,比如:Dapr 集成、動態許可權和功能、外部本地化、分散式實體緩存服務,都是對微服務和分散式架構所提出的解決方案。 ...
  • public class SerializeHelper { #region 二進位格式 /// <summary> /// Binary 序列化使用前需要標記類可序列化 /// </summary> /// <param name="fileName">序列化到指定的文件</param> /// ...
  • Helix 解碼庫提供了MP3內容的MPEG相容解碼, 支持可變比特率, 恆定比特率以及立體聲和單聲道音頻格式. Helix 的定點解碼庫專門針對ARM處理器進行了優化. Helix 解碼庫是以幀為解碼單位的, 一次解碼一幀, 運行需要占用的資源很少, 可以在任何能夠執行長整數乘法運算(兩個32位輸... ...
  • 以下介紹PY32F0系列在Ubuntu下如何使用GCC Arm Embedded Toolchain環境進行開發和燒錄. GitHub 倉庫地址: https://github.com/IOsetting/py32f0-template ...
  • PY32F0 屬於 32位 M0 內核的MCU, 配置上有 16KF+2KR, 20KF+3KR, 32KF+4KR, 64KF+8KR 這些組合, 根據外設的豐富程度分成了 PY32F002, PY32F003, PY32F030, PY32F072 這四個系列, 另外還有一家芯嶺科技貼牌的 XL... ...
一周排行
    -Advertisement-
    Play Games
  • 1. 說明 /* Performs operations on System.String instances that contain file or directory path information. These operations are performed in a cross-pla ...
  • 視頻地址:【WebApi+Vue3從0到1搭建《許可權管理系統》系列視頻:搭建JWT系統鑒權-嗶哩嗶哩】 https://b23.tv/R6cOcDO qq群:801913255 一、在appsettings.json中設置鑒權屬性 /*jwt鑒權*/ "JwtSetting": { "Issuer" ...
  • 引言 集成測試可在包含應用支持基礎結構(如資料庫、文件系統和網路)的級別上確保應用組件功能正常。 ASP.NET Core 通過將單元測試框架與測試 Web 主機和記憶體中測試伺服器結合使用來支持集成測試。 簡介 集成測試與單元測試相比,能夠在更廣泛的級別上評估應用的組件,確認多個組件一起工作以生成預 ...
  • 在.NET Emit編程中,我們探討了運算操作指令的重要性和應用。這些指令包括各種數學運算、位操作和比較操作,能夠在動態生成的代碼中實現對數據的處理和操作。通過這些指令,開發人員可以靈活地進行算術運算、邏輯運算和比較操作,從而實現各種複雜的演算法和邏輯......本篇之後,將進入第七部分:實戰項目 ...
  • 前言 多表頭表格是一個常見的業務需求,然而WPF中卻沒有預設實現這個功能,得益於WPF強大的控制項模板設計,我們可以通過修改控制項模板的方式自己實現它。 一、需求分析 下圖為一個典型的統計表格,統計1-12月的數據。 此時我們有一個需求,需要將月份按季度劃分,以便能夠直觀地看到季度統計數據,以下為該需求 ...
  • 如何將 ASP.NET Core MVC 項目的視圖分離到另一個項目 在當下這個年代 SPA 已是主流,人們早已忘記了 MVC 以及 Razor 的故事。但是在某些場景下 SSR 還是有意想不到效果。比如某些靜態頁面,比如追求首屏載入速度的時候。最近在項目中回歸傳統效果還是不錯。 有的時候我們希望將 ...
  • System.AggregateException: 發生一個或多個錯誤。 > Microsoft.WebTools.Shared.Exceptions.WebToolsException: 生成失敗。檢查輸出視窗瞭解更多詳細信息。 內部異常堆棧跟蹤的結尾 > (內部異常 #0) Microsoft ...
  • 引言 在上一章節我們實戰了在Asp.Net Core中的項目實戰,這一章節講解一下如何測試Asp.Net Core的中間件。 TestServer 還記得我們在集成測試中提供的TestServer嗎? TestServer 是由 Microsoft.AspNetCore.TestHost 包提供的。 ...
  • 在發現結果為真的WHEN子句時,CASE表達式的真假值判斷會終止,剩餘的WHEN子句會被忽略: CASE WHEN col_1 IN ('a', 'b') THEN '第一' WHEN col_1 IN ('a') THEN '第二' ELSE '其他' END 註意: 統一各分支返回的數據類型. ...
  • 在C#編程世界中,語法的精妙之處往往體現在那些看似微小卻極具影響力的符號與結構之中。其中,“_ =” 這一組合突然出現還真不知道什麼意思。本文將深入剖析“_ =” 的含義、工作原理及其在實際編程中的廣泛應用,揭示其作為C#語法奇兵的重要角色。 一、下劃線 _:神秘的棄元符號 下劃線 _ 在C#中並非 ...