本文的目的是針對物聯網藍牙應用開發,對一些常識性知識點進行說明。
目錄
1、藍牙簡介
2、BLE 體系結構
3、藍牙事件
4、藍牙參數屬性
5、藍牙廣播
6、設備地址
7、MTU交換
8、DFU固件更新
9、開發套路
10、參考文章
1、藍牙簡介
1.1、 藍牙技術的起源
藍牙的創始人是瑞典愛立信公司,愛立信早在 1994 年就已進行研發。1997 年愛立信與其他設備生產商聯系,并激發了他們對該項技術的濃厚興趣。1998 年 2 月,5 個跨國大公司,包括愛立信、諾基亞、IBM、東芝及 Intel 組成了一個特殊興趣小組(SIG),他們共同的目標是建立一個全球性的小范圍無線通信技術,即現在的藍牙。
藍牙技術是以 10 世紀的一位丹麥國王命名的。“藍牙(Bluetooth)”一詞來源于 10 世紀的丹麥國王 Harald Blåtand(英文姓名為 Harold Bluetooth)。這位國王將四分五裂的局面統一起來的行為,與這種傳輸技術將各種設備無線連接起來,有相似的地方。為了紀念他,SIG 將自己的無線技術取名“藍牙”。
1.2、什么是藍牙低功耗
BLE 是藍牙低功耗的簡稱(Bluetooh Low Energy)。藍牙低功耗(BLE)技術是低成本、短距離、可互操作的魯棒性無線技術,工作在免許可的 2.4GHz ISM 射頻頻段。它從一開始就設計為超低功耗(ULP)無線技術。它利用許多智能手段Z大限度地降低功耗。
低成本,低功耗。
快速啟動,瞬間連接。Z快 3ms 低延遲。
傳輸距離的提高。
高安全性,使用 AES-128 加密算法進行數據包加密認證。
藍牙低功耗在短距離無線通信領域占據著越來越重要的地位,在很多應用場合均可見到藍牙低功耗的身影。
醫療和健康設備,如血糖儀、數字血壓計、血氣計、心率監視器等。
運動休閑,如心率監測儀、體溫計、計步器等。
鼠標、鍵盤、遙控器。
Beacons 藍牙信標。
智能家居,如燈光控制、溫濕度控制、安全鎖控制等。
1.3、藍牙版本及 4.0 和 BLE 的關系
藍牙技術聯盟 :(Bluetooth Special Interest Group, SIG),是藍牙核心規格版本及藍牙技術的管理者,本身不負責具體的藍牙產品的設計和生產等。藍牙技術的發展經歷了下面幾個主要的版本:
1、藍牙 1.0:基本碼率,Basic Rate,BR。
2、藍牙 2.0:增強碼率,Enhanced Data Rata,EDR。
3、藍牙 3.0:引入全新的交替射頻技術(AMP: Alternate MAC/PHY),允許藍牙協議棧針對任一任務動態地選擇正確射頻,通過瞬間使用消費者設備中已存在的輔助無線電提供更快的吞吐量。
4、藍牙 4.0 是第一個綜合性規范,其加入了全新的藍牙低功耗技術BLE(Bluetooth Low Energy),即藍牙 4.0 集三種規格于一體。
5、藍牙 4.2 提升了 BLE 數據傳輸速度,支持長包傳輸,單個數據包Z大可傳輸 255 個字節,同時改善了隱私保護程度。
6、藍牙 5.0 相對于藍牙 4.2,具有 2 倍的數據速率、4 倍的覆蓋范圍和 8 倍的廣播能力。
高速模式:支持 2Mbps 數據速率,實現了數據吞吐量翻倍。
遠距模式:通過 500kbps 和 125kbps 速率的全新編碼物理層 (PHY) 實現遠距離覆蓋。
廣播擴展:藍牙 BLE 有 3 個廣播信道(具體見2.1),之前的藍牙 BLE 版本中廣播載荷通過全部三個廣播通道進行發送,藍牙 5.0 中這三個通道僅用于發送指針,顯示發送載荷的時間和地點,廣播載荷僅在一個數據通道上傳輸一次。
1.4、 藍牙設備類型
1.4.1 藍牙的標志
為了更好地區分藍牙的版本,SIG 發布了三種標志Logo用于人們分辨這三個版本之間的區別和兼容性。
Bluetooth Smart Ready:適用于任何雙模藍牙 4.0 的電子產品,如蘋果公司 iPhone 4S 及以后的產品和安裝了安卓 4.3 以上的系統,并且藍牙芯片支持 4.0 的手機。
Bluetooth Smart:單模設備,如智能手環。
標準Bluetooth:傳統藍牙設備,如用于傳輸語音的藍牙耳機。
1.4.2 設備類型
低功耗藍牙分為單模(Bluetooth Smart)和雙模(Bluetooth Smart Ready)兩種設備:單模設備:只支持藍牙低功耗 (BLE),單模設備對低功耗的要求很高。雙模設備:既支持經典藍牙也支持藍牙低功耗,這兩種技術使用同一個射頻前端和天線,雙模設備一般都有足夠的供電能力,對低功耗要求不高。
雙模設備之間:可以通過 LE 通信,也可以通過傳統藍牙通信;雙模設備和單模設備通 過 LE 通信;雙模設備和傳統藍牙通過傳統藍牙通信。單模設備之間:通過 LE 通信。傳統藍牙:通過傳統藍牙通信。單模設備和傳統藍牙:不能通信。
2、BLE 體系結構
藍牙低功耗包含三個部分:控制器、主機和應用程序。
2.1、 物理層(Physical Layer)
- 調制方式:GFSK,高斯頻移鍵控。工作在 2.4GHz ISM 頻段。頻率范圍:2.400-2.4835 GHzISM 頻段:(Industrial Scientific Medical Band)主要是開放給工業、科學和醫用 3 個主要機構使用的頻段。ISM 頻段屬于無許可(Free License)頻段。2.4G ISM 頻段是唯一在所有國家都無需授權的頻段,只需要遵守一D的發射功率即可。我們熟知的無線局域網、藍牙、ZigBee 等無線網絡,均可工作在 2.4GHz ISM 頻段上。2.4G 被劃分為 40 個 RF 信道(f=2402+k*2 MHz, k=0, „ ,39),信道間隔 2MHz,其中:廣播信道:3 個,固定;數據信道:37 個,自適應跳頻。無線速率:1Mbps、2Mbps。
2.2、鏈路層(LL)
鏈路層負責廣播、掃描、建立和維護連接,以及確保數據包按照正確的方式組織、正確地校驗值和加密序列等。鏈路層信道映射
廣播信道:37 、38、39,對應的中心頻率是 2402MHz,2426MHz,2480MHz。廣播信道之間至少相差 24MHz。每次廣播,都會在 3 個信道上將廣播數據發送一次,有效地避免干擾,即使一個信道存在干擾,另外的信道也可以很好地工作,而三個信道同時被上擾的情況極少。
為什么廣播信道是 3 個,而不是更多?
廣播信道越多,各個信道同時受到干擾的幾率越小,抗干擾性越強。但是廣播信道越多,> 發射數據占用的時間就越長,功耗也就越高。綜合考慮抗干擾性和功耗的情況, SIG 將廣播信道設定為 3 個。
2.3、 主機控制器接口(HCI)
主機控制器接口 HCI(Host controller interface)在 Host 和 Controller 之間提供一個標準化的接口,該層可以由應用程序接口 API 實現或者使用硬件接口 UART、SPI 或 USB 來控制?刂破魍ㄟ^ HCI 發送數據和事件給主機,主機通過 HCI 發送命令和數據給控制器。
2.4、 邏輯鏈路控制和適配協議(L2CAP)
L2CAP 層向上層提供數據封裝服務,從而使邏輯上允許端到端的數據通信。L2CAP 提供可復用,分割和重組的面向連接或者無連接的數據服務。L2CAP 數據包可以達到 64K。L2CAP 允許每個 L2CAP 通道流控和重傳。
2.5、 安全管理層(SM)
安全管理層 SM(Security Manager)提供配對和密鑰的分發。
2.6、 屬性協議(ATT)
屬性協議(ATT)規定了怎樣去訪問對端設備的數據,數據存儲在屬性服務器的“屬性”里,供屬性客戶端進行讀寫操作。
2.7、 通用屬性配置文件(GATT)
通用屬性配置文件(GATT)建立在屬性協議的基礎上,GATT 通過使用 ATT 協議層定義 了如何發現與使用服務、特征和描述符的標準方法。
客戶端與服務器架構:GATT 定義了兩個角色:服務器和客戶端。
服務器:客戶端提供數據服務,就是數據中心。
客戶端:從服務器讀寫應用數據,就是訪問數據者。
特別注意:下面三個概念是完全獨立的,針對不同層的不同稱呼。如主機既可以是 GATT客戶端,也可以是 GATT 服務器。而從機也一樣,既可以是 GATT 客戶端,也可以是GATT 服務器。
服務器:客戶端提供數據服務,就是數據中心?蛻舳耍簭姆⻊掌髯x寫應用數據,就是訪問數據者。
主機、從機:針對鏈接層。
外圍設備、中央設備:GAP 定義的角色。
2.8、 通用訪問配置文件(GAP)
GAP 層負責處理設備的接入方式和過程,包括設備發現,鏈路建立,鏈路終止以及實現綁定。
2.9、 應用層
應用層定義了三種種類型:特征(characteristic)、服務(service)和配置文件(profile)。
特征:采用已知格式、以通用唯一識別碼(UUID)作為表示的一個小塊數據,由于特征要求能夠重復使用,因而設計時沒有涉及行為,特征被定義為計算機的可讀格式,當計算機遇到一個從未接觸過的特征時,計算機可以去更新這個特征的讀取規則,從而正確讀取特征,并向用戶展示讀取的特征。
服務:服務是人類可讀的一組特征及其相關的行為規范,只定義了位于服務器上的相關特性和行為,而不定義客戶端的行為。服務有兩種類型,首要服務和次要服務,一個服務是首要服務還是次要服務取決于服務的定義,首要服務表征一個給定的設備主要做些什么。正是通過這些服務,用戶才了解到該設備是做什么的。次要服務是那些協助主要業務或其他次要服務的服務。
配置文件:是用例或應用的Z終體現。配置文件是描述一個或多個設備的說明,每一個設備提供一個或多個服務,配置文件描述了如何發現和連接設備,從而為每臺設備確定了拓展結構,配置文件還描述的客戶端的行為,用于發現服務和服務特性。
基于SDK的軟件開發,前面基本都是使用既有API,主要app邏輯是在應用層,也就一般軟件工程師的發揮余地。
3、藍牙事件
3.1、廣播事件
通用廣播:Z常用的廣播方式,可以被掃描,接收到連接請求時可以作為從設備進入一個連接。
定向廣播:針對于快速建立連接的需求,定向廣播會占滿整個廣播信道,數據凈荷只包 含廣播者和發起者地址,發起者收到發給自己的定向廣播后,會立即發送連接請求。
不可連接廣播:廣播數據,而不進入連接態。
可發現廣播:不可連接,但可以響應掃描。
BLE 廣播間隔:是指兩次廣播事件之間的Z小時間間隔,一般取值范圍在 20ms-10.24S之間,鏈路層會在每次廣播時間期間產生一個隨機廣播延時時間(0ms-10ms)。
3.2、掃描事件
每次掃描,設備打開接收器去監聽廣播設備,這稱為一個掃描事件,掃描事件有兩個時間參數掃描窗口和掃描間隔:
掃描窗口(scan window):一次掃描進行的時間寬度。掃描間隔(scan interval):兩個連續的掃描窗口的起始時間之間的時間差,包括掃描休息的時間和掃描進行的時間。
通俗的解釋就是,每隔一段時間(掃描間隔)開啟掃描一段時間(掃描窗口),在低功耗應用中需要考慮,掃描是比較耗電的,但是掃描間隔太長又會出現可能掃描不到指定的廣播。
關于掃描,分為主動掃描和被動掃描 ,如果僅需要廣播數據則設置為被動掃描,主動掃描可以獲得廣播數據和掃描回應數據,廣播者會額外回復掃描回復包內容,例如iBeacon的電量信息。有些傳感器會在3個信道廣播不同消息,還需多次掃描才能獲取完整信息。
3.3、連接事件
一個連接事件是指主設備和從設備之間相互發送數據包的過程,所有的數據交換都是通過連接事件來完成,每個事件發生在某個數據通道(0~36)。一個連接中,主從設備依靠連接事件交換數據。設備連接后,無論有無數據收發,連接事件都在按照設置的連接參數周而復始的進行著,直到一方停止響應。主機與從機可在單次連接事件,即連接后,可以進行多次數據傳輸。
連接間隔:必須是 1.25ms 的倍數,范圍是從Z小值 6(7.5ms)到Z大值 3200(4.0s)。監督超時:這是兩個成功的連接事件之間間隔的Z大值。如果超過這個時間還未出現成功的連接事件,那么設備將會考慮失去連接,返回一個未連接狀態。這個參數值使用10ms 的步進(10ms 的倍數)。監督超時時間從Z小 10(100ms)到Z大 3200(32.0s)。
不同的應用也許需要不同的連接間隔,一個長時間的連接間隔將會節約更多的能量,因為設備可以在兩個連接事件之間睡眠更長的時間。但是他會導致數據發送不及時,如果有數據要發送那么他只能夠在下一次連接事件到來時才能被發送。
4、藍牙參數屬性
4.1、 profile(配置文件)
profile 是 Service 的集合,它是預定義的,并不是實際存在于設備中,所以在外圍設備的代碼中,我們看不到 profile 的實現代碼。Profile 分為標準的和自定義的,標準的 profile是由 SIG 定義和發布的,如心率 profile、防丟 profile,自定義的 profile 是由開發者自己定義。
標準的 profile 可以在 SIG 的網站上查到,網址 https://www.bluetooth.com/specifications/gatt
一個 profile 文件可以包含一個或者多個服務,如心率 profile 包含了 Heart Rate Service(心率服務)和 Device Information Service(設備信息服務),從 SIG 網站上下載心率 profile,打開后可以看到心率傳感器服務需求表格,由表中可以看到心率 profile 規定必須包含 HeartRate Service 和 Device Information Service。
4.2、 Service(服務)
服務是一組特征和它們公開的行為的集合,一個服務可以包含一個或多個特性。Service也分為標準的和自定義的,標準的 Service 是由 SIG 定義和發布的,如心率 Service、防丟Service,自定義的 Service 是由開發者自己定義。標準的 Service 可以在 SIG 的網站上查到(網址同 profile)。
4.3、Characteristic(特征)
特征是具有特定意義的數值,如心率、溫度值等等。BLE 主從機之間的數據傳輸實際傳輸的就是特征值。
4.4、UUID
UUID(Universally Unique Identifier)是一個 128 位的數字,用來標志屬性的類型。Service和 Characteristic 都是一種屬性,都需要一個唯一的 UUID 來標識。
既然 UUID 是 128 位的數字,那么為什么有 16 位的 UUID?因為 128 位的 UUID 相當長,設備間為了識別數據的類型需要發送長達 16 字節的數據。為了提高傳輸效率,藍牙技術聯盟(SIG)定義了一個“UUID 基數”,結合一個較短的 16 位數使用。二者仍然遵循通用唯一識別碼的分配規則,只不過在設備間傳輸常用的 UUID 時,只發送較短的 16 位版本,接收方收到后補上藍牙 UUID 基數即可。
UUID 分為標準的 UUID 和廠商自定義的 UUID。標準的 UUID:由 SIG 發布,采用 UUID 基數+16 位 UUID 的形式,如心率服務的 UUID 是 0x180D,使用的 UUID 基數是:00000000 - 0000 - 1000 - 8000 – 00805F9B34FB。廠商自定義的 UUID:同樣采用 UUID 基數+16 位 UUID 的形式,由廠商定義。為了方便管理,增加 UUID 的可讀性,藍牙低功耗使用的那部分 UUID 被分為下列幾組:
0x1800 ~ 0x26FF:用作服務類通用唯一識別碼。
0x2700 ~ 0x27FF:用于標識計量單位。
0x2800 ~ 0x28FF:用于區分屬性類型。
0x2900 ~ 0x29FF:用作特征描述。
0x2A00 ~ 0x7FFF:用于區分特征類型。
對于開發標準藍牙產品,如心律監測,需要參考SIG標準,但一般物聯網設備使用藍牙,都是自定義,其參數沒有明確要求,不要和標準定義沖突即可。一般自定義服務,以及在服務下自定義成對的UUID屬性,分別用于收發交互。
5、藍牙廣播
對外廣播的目的,是為了像周邊的設備顯示自己的存在和“我是誰”,所以廣播包必須按照規定的格式填充。
設備每次廣播時,會在 3 個廣播信道上發送相同的報文。這些報文被稱為一個廣播事件。除了定向報文以外,其他廣播事件均可以選擇“20ms ~ 10.28s”不等的間隔。
5.1 、廣播類型
廣播就是設備將自身愿意展示的信息按照一D的間隔以“掃描者”可理解的方式向周邊發射。廣播有如下四種類型,廣播報文的報頭中有 4 位專門用于指示廣播報文的類型。
通用廣播:Z常用的廣播方式,可以被掃描,接收到連接請求時可以作為從設備進入一個連接。
定向廣播:針對于快速建立連接的需求,定向廣播會占滿整個廣播信道,定向廣播的數據凈荷只包含廣播者和發起者地址,發起者收到發給自己的定向廣播后,會立即發送連接請求。定向廣播Z長時間不能超過1.28 秒,并且不能被主動掃描。
不可連接廣播:廣播數據,而不進入連接態,也不響應掃描,這是唯一一個允許硬件設備只有發射機的廣播類型,因為它不需要接收任何數據。
可發現廣播:不可連接,但可以響應掃描。
5.2、廣播數據包報文結構
BLE 報文結構如下:
1、前導
前導是一個 8 比特的交替序列。他不是 01010101 就是 10101010,取決于接入地址的第 一個比特。若接入地址的第一個比特為 0:01010101 若接入地址的第一個比特為 1:10101010 接收機可以根據前導的無線信號強度來配置自動增益控制。
2、接入地址 接入地址有兩種類型:廣播接入地址和數據接入地址。廣播接入地址:固定為 0x8E89BED6,在廣播、掃描、發起連接時使用。數據接入地址:隨機值,不同的連接有不同的值。在連接建立之后的兩個設備間使用。對于數據信道,數據接入地址是一個隨機值。
3、報頭 報頭的內容取決于該報文是廣播報文還是數據報文。廣播報文的報頭包含 4bit 廣播報文類型、2bit 保留位、1bit 發送地址類型和 1bit 接收地址類型。
廣播報文類型
內核協議中定義了 7 種類型:
發送地址類型和接收地址類型
發送地址類型和接收地址類型,俗稱藍牙MAC,指示設備使用公共地址(Public Address)還是隨機地址 (Random Address)。公共地址和隨機地址的長度一樣,都包含 6 個字節共 48 位。BLE 設備 至少要擁有這兩種地址類型中的一種,也可以同時擁有這兩種地址類型。具體見第6章。
4、長度 廣播報文:長度域包含 6 個比特,有效值的范圍是 6~37。數據報文:長度域包含 5 個比特,有效值的范圍是 0~31。
廣播報文和和數據報文的長度域有所不同,主要原因是:廣播報文除了Z多 31 個字節 的數據之外,還必須要包含 6 個字節的廣播設備地址。6+31=37,所以需要 6 比特的長度域。
5、 數據(AdvData)
廣播和掃描響應的數據格式如下圖所示,由有效數據部分和無效數據部分組成。
有效數據部分:包含 N 個 AD Structure,每個 AD Structure 由 Length,AD Type 和 AD Data 組成。對于應用層開發,實際可見或者操作的只是有效數據部分,其格式為:Length:AD Type 和 AD Data 的長度。AD Type:指示 AD Data 數據的含義。AD Data:數據內容。
其中AD Type表示的意義,可以查看SIG標準。
https://www.bluetooth.com/specifications/assigned-numbers/generic-access-profile
5.3、廣播可以包含的數據
參照前一節的數據(AdvData)格式,廣播中的有效數據,按SIG規定的添加部分。一般情況下,建議廣播包中至少包含:設備名稱、Flags、外觀和首要服務的 UUID,如果需連接IOS手機的包括MAC地址。內容總長度不得大于31字節。
目前與廣播應用較多的,諸如藍牙傳感器,蘋果的iBeacon信標,都是設備掃描它,從廣播中獲取傳感器結果等信息。更多細節請關注微信公眾號【嵌入式系統】。
6、設備地址
BLE 設備地址可以使用公共地址(Public Device Address)或隨機地址(Random Device Address)兩種地址類型,一個 BLE 至少使用一種地址類型,當然也可以同時具備兩種地址類型。公共地址和隨機地址的長度一樣,都是 48 位(6 個字節)的。BLE 設備地址類型的關系如下圖所示。
設備地址一共有如下 4 種類型:
公共地址:從 IEEE 申請(購買),IEEE 保證地址分發的唯一性。
隨機靜態地址(Static Device Address):自定義,上電初始化完成后不能修改。
隨機不可解析私有地址(Non-resolvable private address):定時更新地址,藍牙內核協議建議 15 分鐘更新一次。
隨機可解析私有地址(RPA:Resolvable Private Address):通信雙方使用共享的身份解析密鑰(IRK:Identity Resolving Key),生成和解析可解析私有地址。只有一臺設備擁有另一臺廣播設備的 IRK 時,才能跟蹤該廣播設備的活動。
6.1、公共地址
公共地址由兩部分組成,如下圖所示。公共地址由制造商從 IEEE 申請(購買),由 IEEE注冊機構為該制造商分配的機構唯一標識符 OUI(Organizationally Unique Identifier)。這個地址是獨一無二,不能修改的。
公共地址能明確的指示出設備,同時具有唯一性,但是安全度不夠,為了加強隱私保護,藍牙內核協議中提供了另外一種地址:隨機地址,隨機地址是隨機產生的,不是固定分配的,隨機地址又分為多種類型,以適應不同的應用場景對隱私的需求。
6.2、隨機靜態地址
隨機靜態地址是隨機生成的 48 位地址,隨機靜態地址必須符合以下要求:
靜態地址的Z高 2 位有效位必須是 1。
靜態地址Z高 2 位有效位之外的其余部分不能全為 0。
靜態地址Z高 2 位有效位之外的其余部分不能全為 1。
一個上電周期內不變。
靜態地址的格式如下,共 48 位,Z高 2 位是固定的,必須是 1。
6.3、不可解析私有地址
設備生成不可解析私有地址時必須符合以下要求:
地址的Z高 2 位有效位必須是 0。
地址Z高 2 位有效位之外的其余部分不能全為 0。
地址Z高 2 位有效位之外的其余部分不能全為 1。
不可解析私有地址不能和公共地址一樣。
不可解析私有地址的格式如下,共 48 位,Z高 2 位是固定的,必須是 0。
不可解析私有地址相當于周期性改變的隨機靜態地址,不可解析私有地址一直在變化,并且該地址是個隨機數,沒有提供任何可解析的信息,因此,很難通過跟蹤地址來跟蹤設備,所以具有很高的安全性。但是因為地址一直變化,在隱私上“敵我”不分,實際應用中使用的不多。
6.4、可解析私有地址
設備生成可解析私有地址時必須符合以下要求:
地址的Z高 2 位有效位必須是 0 和 1。
Prand 中地址Z高 2 位有效位之外的其余部分不能全為 0。
Prand 中地址Z高 2 位有效位之外的其余部分不能全為 1。
不可解析私有地址不能和公共地址一樣。
不可解析私有地址的格式如下,共 48 位,Z高 2 位是固定的,必須是 01。
7、MTU交換
藍牙 4.2 之前,BLE 的 MTU(Maximum Transmission Unit,Z大傳輸單元)為 23 個字節,這 23 個字節中包含了 1 個字節的操作碼(op code)和 2 個字節的屬性句柄(attribute handle),因此一次Z多傳輸 20 個字節。從藍牙 4.2 開始,BLE 支持長包傳輸,MTU 擴展到了 247 個字節,除去 op code 和 attribute handle,一次可傳輸的Z大長度為 244 個字節。兩種 MTU 存在,那么客戶端和服務器是如何知道使用什么樣的 MTU 的?客戶端和服務器是通過協商來交換各自支持的 MTU 的長度的,這個過程稱為 MTU 交換(Exchange MTU),通過 MTU 交換,客戶端和服務器具備了自適應 MTU 的功能,但是注冊每個建立的連接只能在連接建立時交換一次,而不能實時通過 MTU 交換協商數據傳輸長度。
8、DFU固件更新
產品交付后,使用中可能發現隱藏的BUG 或者需要增加新功能,重新召回產品使用編程器更新軟件,對成本是個考驗,Z好的方式使用空中升級,DFU(Device Firmware Upgrade)固件更新就是非接觸解決軟件版本升級的問題。
一般芯片SDK都提供了完整的DFU方案,支持對 SD、Bootloader 或 APP 升級,DFU 的核心是Bootloader,接收新固件、更新應用程序。
自定義升級方案可參考 終端設備在線升級 一文。
9、開發套路
- 基于SDK的藍牙設備端開發,一般是先熟悉API,主要包括藍牙開啟、關閉,設置廣播內容、間隔,設備名稱和MAC,發起掃描請求,連接請求,新建服務(物聯網產品一般都是GATT低功耗設備)以及接收事件回調(如連接成功事件、斷開事件)、廣播掃描結果。再針對應用場景,本機是作為客戶端主動發起藍牙連接,還是提供藍牙服務等待外設連接。如果是客戶端,開啟藍牙掃描周圍廣播,找到合適的發起連接,再使用對應的UUID進行通信交互;有些簡單的BLE傳感器,不需要連接,只需解析廣播數據即可獲取有效信息。特別說明,藍牙掃描比較耗電。如果是服務端,開啟藍牙建立服務,一般都是自定義服務ID和其下多個屬性UUID,屬性UUID配置支持讀或者寫或者通知。其廣播內容參考標準格式定義,總長不得大于31字節,一般得包含MAC,否則IOS APP開發人員有意見,然后等待外部藍牙來連接。藍牙連接后,為保證數據安全,一般使用AES128加密通信,不過BLE藍牙單次傳輸數據包長度有限,效率不高。調試時使用手機APP對接,個人一般使用Android版 nRF Connect.apk,功能全面;調試時也使用IOS手機看看效果,尤其關注MAC地址類型(第6章)的影響,IOS的開發比較特別。
10、參考文章
本文主要參考 艾克姆科技的藍牙低功耗開發指南。
文中提到的物聯網可以讀讀 物聯網之移動通訊的演化史。
關于AES加密算法可參考 嵌入式算法6---AES加密/解密算法 。