移動(dòng)設(shè)備普遍提供藍(lán)牙功能,藍(lán)牙非常適合消費(fèi)者以無線方式輕松訪問智能產(chǎn)品。然而,對(duì)于物聯(lián)網(wǎng)開發(fā)人員而言,構(gòu)建藍(lán)牙連接的傳感器網(wǎng)絡(luò)存在一些挑戰(zhàn),例如實(shí)現(xiàn)電池壽命最大化、優(yōu)化藍(lán)牙協(xié)議以及確保設(shè)備之間安全連接等。
本文將說明,使用Cypress Semiconductor提供的先進(jìn)藍(lán)牙器件和相關(guān)開發(fā)環(huán)境,開發(fā)人員可以加快解決這些問題,并快速實(shí)現(xiàn)安全的藍(lán)牙集線器傳感器網(wǎng)絡(luò)。
為什么使用藍(lán)牙?
智能手機(jī)和其他移動(dòng)設(shè)備廣泛支持藍(lán)牙,這使其成為將消費(fèi)者與可穿戴設(shè)備和醫(yī)療設(shè)備等個(gè)人電子設(shè)備連接起來的首選無線技術(shù)。隨著藍(lán)牙 5 的出現(xiàn),物聯(lián)網(wǎng)開發(fā)人員既可利用這些優(yōu)勢(shì),又能滿足傳感器網(wǎng)絡(luò)和其他物聯(lián)網(wǎng)應(yīng)用對(duì)更長通信距離和更高數(shù)據(jù)速率不斷增長的需求。
為了構(gòu)建針對(duì)這些應(yīng)用的設(shè)計(jì),開發(fā)人員可以借助越來越多的支持藍(lán)牙 5 的器件。這些器件結(jié)合了完整的 RF 子系統(tǒng)和處理器內(nèi)核,能夠執(zhí)行與藍(lán)牙通信相關(guān)的低級(jí)事務(wù)。然而,物聯(lián)網(wǎng)網(wǎng)絡(luò)需要維持低功耗并確保安全連接,這樣一來,在這些應(yīng)用中部署藍(lán)牙會(huì)更加復(fù)雜。
集成解決方案
Cypress SemiconductorCYW20719經(jīng)過專門設(shè)計(jì),可滿足物聯(lián)網(wǎng)、可穿戴設(shè)備、個(gè)人電子產(chǎn)品和其他低功耗應(yīng)用對(duì)電池供電型藍(lán)牙連接設(shè)計(jì)不斷增長的需求。除了功耗低之外,它還支持先進(jìn)的藍(lán)牙 5 特性,包括自適應(yīng)跳頻,這在與此類應(yīng)用相關(guān)的繁忙無線電環(huán)境中是一個(gè)重要優(yōu)勢(shì)。
該器件集成了低功耗藍(lán)牙無線電子系統(tǒng)、帶浮點(diǎn)單元 (FPU) 的 Arm? Cortex?-M4 內(nèi)核及多個(gè)外設(shè)塊(圖 1)。此外,片載安全引擎可加速公鑰加密,并提供所需的關(guān)鍵加密功能來幫助確保藍(lán)牙操作的安全性。最后,片載電源管理單元 (PMU) 為開發(fā)人員提供了一種靈活的機(jī)制來滿足藍(lán)牙設(shè)備日益增長的超低功耗運(yùn)行要求。
圖 1:Cypress Semiconductor CYW20719 結(jié)合了 Arm? Cortex?-M4、完整的藍(lán)牙子系統(tǒng)和內(nèi)置軟件服務(wù),為低功耗設(shè)計(jì)提供完整的支持藍(lán)牙 5 的無線 MCU。(圖片來源:Cypress Semiconductor)
CYW20719 無線電子系統(tǒng)包括完整的 2.5 GHz RF 信號(hào)路徑,用于發(fā)射 (Tx) 和接收 (Rx) 操作。對(duì)于 Rx 信號(hào)路徑,此器件會(huì)衰減帶外信號(hào),實(shí)現(xiàn) -95.5 dBm Rx 靈敏度,且在需要時(shí),開發(fā)人員無需額外的片外濾波器即可使用該器件。Tx 信號(hào)路徑包括一個(gè)集成功率放大器 (PA),旨在支持從 -24 dBm 到最大 +4 dBm 的可配置發(fā)射功率等級(jí)。除了集成物理層 (PHY) 之外,該器件還包括一個(gè)完整的片載藍(lán)牙 5 介質(zhì)訪問控制 (MAC) 層。憑借優(yōu)化的 Rx 和 Tx 信號(hào)路徑,該器件僅消耗 5.9 mA Rx 電流或 5.6 mA (@ 0 dBm) Tx 電流。
為了進(jìn)一步降低功耗,該器件提供由集成電源管理單元 (PMU) 管理的多種功率模式。PMU 設(shè)計(jì)用于提供獨(dú)立的 RF 和數(shù)字功率域,結(jié)合了一個(gè)集成降壓穩(wěn)壓器、一個(gè)用于數(shù)字電路的低壓差穩(wěn)壓器 (LDO) 和一個(gè)用于 RF 電路的獨(dú)立 LDO(圖 2)。此外,PMU 還包括一個(gè)獨(dú)立的旁路 LDO (BYPLDO),如果電源 VBAT 電壓低于 2.1 V,它會(huì)自動(dòng)旁路降壓穩(wěn)壓器,為數(shù)字和 RF LDO 供電。
圖 2:Cypress CYW20719 PMU 管理獨(dú)立的多個(gè)功率域,在不同低功耗模式下可以選擇性地禁用功率域,以降低低功耗設(shè)計(jì)的電流消耗。(圖片來源:Cypress Semiconductor)
在運(yùn)行中,PMU 根據(jù)選定的功率模式(包括完全活動(dòng)模式、空閑模式和三種休眠模式)調(diào)整功率域。在功耗最低的關(guān)斷休眠 (SDS) 模式下,除 I/O 電源、實(shí)時(shí)時(shí)鐘 (RTC)、專用低功耗振蕩器(用作某些塊和喚醒定時(shí)的時(shí)鐘源)之外,PMU 關(guān)閉所有器件塊。
即使只使用最少量的資源,SDS 模式下的 CYW20719 也能與另一個(gè)先前配對(duì)的藍(lán)牙設(shè)備保持連接,在此過程中消耗的電流小于 70 微安 (μA)。但是,該模式下的器件不會(huì)保留存儲(chǔ)器內(nèi)容,需要熱啟動(dòng)恢復(fù)狀態(tài)后才能繼續(xù)執(zhí)行更復(fù)雜的操作。另外兩種休眠模式是省電休眠 (PDS) 和休眠狀態(tài),可維持包括存儲(chǔ)器內(nèi)容保留在內(nèi)的較高器件活動(dòng)水平,而功耗則相應(yīng)地遞增。即便如此,功率預(yù)算有限的開發(fā)人員可以利用 PDS 模式進(jìn)行低功耗藍(lán)牙廣告(約 125 μA)和支持活動(dòng)連接(約 170 μA)。通過管理器件功率模式,開發(fā)人員可以輕松實(shí)現(xiàn)超低功耗運(yùn)行而不影響功能。
系統(tǒng)集成
雖然 CYW20719 有靈活的工作模式和豐富的功能,但它仍需要少量額外元器件來完成系統(tǒng)設(shè)計(jì)中的硬件集成。由于其集成了片載關(guān)鍵元器件,開發(fā)人員只需添加幾個(gè)電阻器、耦合電容器、2.2 μH 電感(如MurataLQH2MCN2R2M52L)及鐵氧體磁珠(如 MurataBLM15AG601SN1D)(圖 3)。此外,最好在 CYW20719 和天線匹配元件之間放置一個(gè)帶通濾波器以減少諧波。
圖 3:Cypress CYW20719 集成了所有關(guān)鍵功能,因此開發(fā)人員只需添加幾個(gè)元器件(包括推薦的帶通濾波器以減少諧波)即可完成硬件集成。(圖片來源:Cypress Semiconductor)
該器件擁有豐富的片載存儲(chǔ)器,包括 1 MB 閃存、512 KB RAM 和 2 MB ROM,因此亦有助于簡(jiǎn)化軟件集成。閃存和 RAM 為開發(fā)人員提供應(yīng)用程序存儲(chǔ)區(qū)域,片載 ROM 則保留用于器件固件和藍(lán)牙配置文件。為了在需要時(shí)支持固件補(bǔ)丁,該器件提供了補(bǔ)丁 RAM——一個(gè)通過補(bǔ)丁控制邏輯連接的 RAM 區(qū)域(參見上圖 1)。最后,該器件提供一個(gè)不間斷存儲(chǔ)器 (AON) 區(qū)域,讓器件即使在低功耗模式下也能存儲(chǔ)數(shù)據(jù)(如 SDS,會(huì)關(guān)閉易失存儲(chǔ)器)。
與其他先進(jìn)器件相比,該器件芯片上提供的 RAM 和閃存看起來可能很有限,但 ROM 內(nèi)置的廣泛軟件支持可確保典型應(yīng)用有充足的內(nèi)存可用。Cypress 為片載 ROM 配置了一個(gè)全面的軟件堆棧,從最低的硬件抽象層 (HAL) 一直到用于WICED(嵌入式設(shè)備無線互聯(lián)網(wǎng)連接)環(huán)境的應(yīng)用程序編程接口 (API)(圖 4)。
圖 4:Cypress CYW20719 的 2 MB ROM 固件提供包括實(shí)時(shí)操作系統(tǒng)在內(nèi)的完整軟件堆棧,降低了開發(fā)人員應(yīng)用程序代碼的復(fù)雜度和占用空間。(圖片來源:Cypress Semiconductor)
以 HAL 為基礎(chǔ),ROM 固件執(zhí)行內(nèi)置實(shí)時(shí)操作系統(tǒng)并處理與 CYW20719 硬件的所有交互。同時(shí),ROM 固件包含全套藍(lán)牙服務(wù)層,包括支持基本藍(lán)牙通用屬性配置文件 (GATT) 和通用訪問配置文件 (GAP) 的服務(wù)層。
對(duì)于典型應(yīng)用,開發(fā)人員代碼從 RAM 運(yùn)行,使用 WICED API 訪問 RTOS、外設(shè)和其他特性。雖然 RAM 需求可能有很大差異,但 CYW20719 的大多數(shù)應(yīng)用程序代碼通常會(huì)為數(shù)據(jù)或工作內(nèi)存留下充足的可用 RAM。例如,后面描述的 hello_sensor 應(yīng)用程序留下了大約 240 KB 的可用 RAM。
但對(duì)于代碼庫特別大的應(yīng)用程序,開發(fā)人員可以利用 CYW20719 的一項(xiàng)特性 — 從片載閃存就地執(zhí)行 (XIP) 應(yīng)用程序代碼。這種情況下,WICED 環(huán)境將開發(fā)人員指定的代碼和只讀數(shù)據(jù)部分加載到片載閃存中,并將其余部分放入 RAM 中。這種方法固然會(huì)減少應(yīng)用程序的 RAM 占用空間,但可能會(huì)影響性能。因此,開發(fā)人員在指定 XIP 代碼部分時(shí)需要小心,確保將時(shí)間關(guān)鍵型功能置于 RAM 中。
應(yīng)用開發(fā)
盡管 CYW20719 簡(jiǎn)化了設(shè)計(jì)集成,但專注于安全低功耗藍(lán)牙應(yīng)用的開發(fā)人員仍可能在完成硬件設(shè)計(jì)和應(yīng)用開發(fā)時(shí)面臨嚴(yán)重延遲。CypressCYW920719Q40EVB-01評(píng)估套件旨在演示基于 CYW20719 的應(yīng)用,可與 Cypress WICED 軟件環(huán)境配合使用,為創(chuàng)建符合藍(lán)牙 5.0 標(biāo)準(zhǔn)的物聯(lián)網(wǎng)應(yīng)用提供參考設(shè)計(jì)和綜合開發(fā)平臺(tái)。
評(píng)估套件圍繞一個(gè)載波模塊構(gòu)建,載波模塊包括圖 3 設(shè)計(jì)中的 CYW20719,外加一個(gè)Torex SemiconductorXC6119N測(cè)壓器,后者連接到 CYW20719 的 RST_N 引腳以執(zhí)行復(fù)位。載波模塊焊接到套件基板,基板包括STMicroelectronicsLSM9DS1TR9 軸運(yùn)動(dòng)傳感器、MurataNCU 系列NTC 熱敏電阻、CYW20719 GPIO 端口、調(diào)試連接、Arduino 兼容擴(kuò)展針座,以及用作簡(jiǎn)單用戶界面的開關(guān)和 LED(圖 5)。
圖 5:Cypress CYW920719Q40EVB-01 評(píng)估套件將載波模塊上的 CYW20719 與多個(gè)基板元器件結(jié)合在一起,可支持典型物聯(lián)網(wǎng)應(yīng)用。(圖片來源:Cypress Semiconductor)
Cypress 示例軟件使用 CYW20719 和其他元器件,廣泛演示由多個(gè)傳感器和一個(gè)中央集線器組成的代表性物聯(lián)網(wǎng)網(wǎng)絡(luò)中的安全藍(lán)牙連接(圖 6)。通過此示例應(yīng)用,開發(fā)人員可以探索傳感器和集線器配對(duì)的不同安全級(jí)別,并評(píng)估這些不同安全級(jí)別對(duì)數(shù)據(jù)交換的影響。
圖 6:Cypress 示例應(yīng)用設(shè)計(jì)用于配合多個(gè) CYW920719Q40EVB-01 套件和 Cypress WICED 開發(fā)環(huán)境使用,可在代表性物聯(lián)網(wǎng)應(yīng)用中演示安全藍(lán)牙連接。(圖片來源:Cypress Semiconductor)
關(guān)于應(yīng)用的硬件,開發(fā)人員將一個(gè)單獨(dú)的 CYW920719Q40EVB-01 套件配置為安全集線器,并將其他套件配置為網(wǎng)絡(luò)中的傳感器。一臺(tái) PC 串行連接到各套件,為設(shè)置參數(shù)、查看數(shù)據(jù)、打印調(diào)試消息及與示例應(yīng)用的其他交互提供一個(gè)控制臺(tái)。
此類典型應(yīng)用唯一剩下的要素是連接到移動(dòng)設(shè)備以執(zhí)行應(yīng)用監(jiān)測(cè)和控制功能,不過本示例應(yīng)用中未包括此項(xiàng)。這里,串行連接的 PC 基本上就是起這個(gè)作用。
Cypress 將此示例應(yīng)用的軟件捆綁在 WICED 開發(fā)環(huán)境下的 CYW20917BLE Secure HubC 語言包中。在本例中,該軟件包有兩個(gè)項(xiàng)目,對(duì)應(yīng)于示例應(yīng)用中的兩個(gè)獨(dú)立角色。一個(gè)項(xiàng)目 (secure_hub) 設(shè)計(jì)為在指定為安全集線器的套件上運(yùn)行,它使集線器能夠支持多種藍(lán)牙協(xié)議角色。具體而言,集線器軟件旨在以不同安全級(jí)別與作為從設(shè)備運(yùn)行的不同套件進(jìn)行配對(duì)。
配置為從設(shè)備的套件運(yùn)行傳感器項(xiàng)目 (hello_sensor),用于演示以配對(duì)期間建立的安全級(jí)別進(jìn)行數(shù)據(jù)收集和通信。每個(gè)項(xiàng)目都包含若干頭模塊和代碼模塊以支持相應(yīng)的功能角色。在這些文件中,secure_hub 和 hello_sensor 項(xiàng)目各包含通用屬性配置文件 (GATT) 頭文件 (gatt_db.h) 和代碼文件 (gatt_db.c)。
在藍(lán)牙協(xié)議中,一個(gè)稱為 GATT 數(shù)據(jù)庫 (DB) 的查找表通過一組已定義服務(wù)來定義藍(lán)牙連接的屬性和功能,每個(gè)服務(wù)包括一組支持的特征。例如,藍(lán)牙規(guī)范包括預(yù)定義的 GATT 服務(wù),范圍從提醒通知和設(shè)備信息等實(shí)用功能到血壓和脈搏血氧儀服務(wù)等專用功能。設(shè)備的藍(lán)牙通用訪問配置文件 (GAP) 所起的作用比 GATT 服務(wù)更為基礎(chǔ),其定義設(shè)備如何在網(wǎng)絡(luò)中宣傳自己的存在,以及設(shè)備經(jīng)發(fā)現(xiàn)后如何建立連接。
secure_hub 項(xiàng)目和 hello_sensor 項(xiàng)目中的 gatt_db.h 頭文件和 gatt_db.c 代碼文件分別定義配置為安全集線器和傳感器的套件的 GAP 和 GATT 服務(wù)。對(duì)于此演示應(yīng)用,每個(gè)項(xiàng)目根據(jù)其角色定義一個(gè)定制 GATT 服務(wù)。例如,hello_sensor 項(xiàng)目頭文件包含一個(gè)定義強(qiáng)制性 GATT 和 GAP 服務(wù)句柄的 Cenum類型,以及用于傳感器服務(wù)的定制 GATT 定義(列表 1a)。該項(xiàng)目的 gatt_db.c 文件進(jìn)而使用這些定義來構(gòu)建藍(lán)牙協(xié)議所需的 GATT DB(列表 1b)。
副本
typedef enum
{
HANDLE_HSENS_GATT_SERVICE = 0x1, // service handle
HANDLE_HSENS_GAP_SERVICE = 0x14, // service handle
HANDLE_HSENS_GAP_SERVICE_CHAR_DEV_NAME, // characteristic handl
HANDLE_HSENS_GAP_SERVICE_CHAR_DEV_NAME_VAL, // char value handle
HANDLE_HSENS_GAP_SERVICE_CHAR_DEV_APPEARANCE, // characteristic handl
HANDLE_HSENS_GAP_SERVICE_CHAR_DEV_APPEARANCE_VAL,// char value handle
HANDLE_HSENS_SERVICE = 0x28,
HANDLE_HSENS_SERVICE_CHAR_UART, // characteristic handl
HANDLE_HSENS_SERVICE_CHAR_UART_VAL, // char value handle
HANDLE_HSENS_SERVICE_CHAR_CFG_DESC, // charconfig desc handl
HANDLE_HSENS_SERVICE_CHAR_BLINK, // characteristic handl
HANDLE_HSENS_SERVICE_CHAR_BLINK_VAL, // char value handle
HANDLE_HSENS_SERVICE_CHAR_TEMP, // characteristic handl
HANDLE_HSENS_SERVICE_CHAR_TEMP_VAL, // char value handle
HANDLE_HSENS_SERVICE_CHAR_TEMP_CFG_DESC, // charconfig desc handl
(A)
副本
/* Permissions for custom characteristics */
#define LED_BLINK_CHAR_PERMISSION LEGATTDB_PERM_WRITE_REQ | LEGATTDB_PERM_AUTH_WRITABLE | LEGATTDB_PERM_READABLE
#define TEMP_CHAR_PERMISSION LEGATTDB_PERM_READABLE
#define UART_CHAR_PERMISSION LEGATTDB_PERM_READABLE
uint8_t paired_security_level;
static void temp_notificaition_timeout( uint32_t count );
const uint8_t hello_sensor_gatt_database[]=
{
// Declare mandatory GATT service
PRIMARY_SERVICE_UUID16( HANDLE_HSENS_GATT_SERVICE, UUID_SERVICE_GATT ),
// Declare mandatory GAP service.Device Name and Appearance are mandatory
// characteristics of GAP service
PRIMARY_SERVICE_UUID16( HANDLE_HSENS_GAP_SERVICE, UUID_SERVICE_GAP ),
// Declare mandatory GAP service characteristic: Dev Name
CHARACTERISTIC_UUID16( HANDLE_HSENS_GAP_SERVICE_CHAR_DEV_NAME, HANDLE_HSENS_GAP_SERVICE_CHAR_DEV_NAME_VAL,
UUID_CHARACTERISTIC_DEVICE_NAME, LEGATTDB_CHAR_PROP_READ, LEGATTDB_PERM_READABLE ),
// Declare mandatory GAP service characteristic: Appearance
CHARACTERISTIC_UUID16( HANDLE_HSENS_GAP_SERVICE_CHAR_DEV_APPEARANCE, HANDLE_HSENS_GAP_SERVICE_CHAR_DEV_APPEARANCE_VAL,
UUID_CHARACTERISTIC_APPEARANCE, LEGATTDB_CHAR_PROP_READ, LEGATTDB_PERM_READABLE ),
// Declare proprietary Hello Service with 128 byte UUID
PRIMARY_SERVICE_UUID128( HANDLE_HSENS_SERVICE, UUID_HELLO_SERVICE ),
// Declare characteristic used to notify/indicate change
CHARACTERISTIC_UUID128( HANDLE_HSENS_SERVICE_CHAR_UART, HANDLE_HSENS_SERVICE_CHAR_UART_VAL,
UUID_HELLO_CHARACTERISTIC_NOTIFY, LEGATTDB_CHAR_PROP_READ | LEGATTDB_CHAR_PROP_NOTIFY | LEGATTDB_CHAR_PROP_INDICATE, UART_CHAR_PERMISSION ),
// Declare client characteristic configuration descriptor
// Value of the descriptor can be modified by the client
// Value modified shall be retained during connection and across connection
// for bonded devices.Setting value to 1 tells this application to send notification
// when value of the characteristic changes.Value 2 is to allow indications.
CHAR_DESCRIPTOR_UUID16_WRITABLE( HANDLE_HSENS_SERVICE_CHAR_CFG_DESC, UUID_DESCRIPTOR_CLIENT_CHARACTERISTIC_CONFIGURATION,
LEGATTDB_PERM_READABLE | LEGATTDB_PERM_WRITE_REQ ),
// Declare characteristic Hello Configuration
// The configuration consists of 1 bytes which indicates how many times to
// blink the LED when user pushes the button.
CHARACTERISTIC_UUID128_WRITABLE( HANDLE_HSENS_SERVICE_CHAR_BLINK, HANDLE_HSENS_SERVICE_CHAR_BLINK_VAL,
UUID_HELLO_CHARACTERISTIC_LED_BLINK,
LEGATTDB_CHAR_PROP_READ | LEGATTDB_CHAR_PROP_WRITE,
LED_BLINK_CHAR_PERMISSION ),
CHARACTERISTIC_UUID128( HANDLE_HSENS_SERVICE_CHAR_TEMP, HANDLE_HSENS_SERVICE_CHAR_TEMP_VAL,
UUID_HELLO_CHARACTERISTIC_TEMP, LEGATTDB_CHAR_PROP_READ | LEGATTDB_CHAR_PROP_NOTIFY | LEGATTDB_CHAR_PROP_INDICATE, TEMP_CHAR_PERMISSION ),
// Declare client characteristic configuration descriptor
// Value of the descriptor can be modified by the client
// Value modified shall be retained during connection and across connection
// for bonded devices.Setting value to 1 tells this application to send notification
// when value of the characteristic changes.Value 2 is to allow indications.
CHAR_DESCRIPTOR_UUID16_WRITABLE( HANDLE_HSENS_SERVICE_CHAR_TEMP_CFG_DESC, UUID_DESCRIPTOR_CLIENT_CHARACTERISTIC_CONFIGURATION,
LEGATTDB_PERM_READABLE | LEGATTDB_PERM_WRITE_REQ ),
(B)
列表 1:Cypress BLE Secure Hub 應(yīng)用的 hello_sensor 項(xiàng)目中包含一個(gè)頭文件,其為不同特征定義了一個(gè)枚舉類型 (A),供相應(yīng)的代碼模塊用以構(gòu)建藍(lán)牙運(yùn)行所需的 GATT 數(shù)據(jù)庫。(代碼來源:Cypress Semiconductor)
嵌入在這些定義中的 GATT 傳感器服務(wù)還定義其底層服務(wù)特征是否可以讀取、寫入、通知或指示信息(使用相連的控制臺(tái))。例如,LED 閃爍特征(列表 1a 中聲明并在列表 1b 中應(yīng)用的HANDLE_HSENS_SERVICE_CHAR_BLINK)包括位掩碼(列表 1b 中的LEGATTDB_CHAR_PROP_READ | LEGATTDB_CHAR_PROP_WRITE),指示該特征可讀可寫。
hello_sensor 項(xiàng)目的 gatt_db.c 文件則將這些定義與實(shí)現(xiàn)對(duì)該特征的安全訪問的代碼結(jié)合在一起。也就是能讓 LED 閃爍,閃爍次數(shù)由開發(fā)者鍵入控制臺(tái)的字符指示。就本示例應(yīng)用而言,訪問此功能要求通過藍(lán)牙中間人 (MITM) 配對(duì),使用配對(duì)期間從控制臺(tái)輸入的用戶提供的密鑰,建立與該傳感器套件的連接。
一般而言,當(dāng)請(qǐng)求調(diào)用某一功能時(shí),相應(yīng)的處理程序執(zhí)行專用任務(wù),并且同時(shí)考慮已定義特征和安全訪問要求。對(duì)于 LED 閃爍示例,當(dāng)請(qǐng)求執(zhí)行 LED 閃爍功能時(shí),用于確保權(quán)限和授權(quán)訪問的實(shí)際代碼非常簡(jiǎn)單。
為了更改 LED 閃爍特征值 (HANDLE_HSENS_SERVICE_CHAR_BLINK_VAL),代碼使用一個(gè)條件語句來確認(rèn)寫入權(quán)限和訪問授權(quán)(列表 2)。針對(duì)寫入權(quán)限,條件語句將請(qǐng)求的權(quán)限 (LEGATTDB_PERM_AUTH_WRITABLE) 與實(shí)際 LED 器件的閃爍權(quán)限設(shè)置LED_BLINK_CHAR_PERMISSION(列表 1b 的頂部定義)進(jìn)行比較。針對(duì)授權(quán),條件語句檢查當(dāng)前配對(duì)安全級(jí)別 (paired_security_level) 是否是通過 MITM 配對(duì) (BTM_SEC_LINK_PAIRED_WITH_MITM) 創(chuàng)建的(列表 2)。
副本
/*
* Process write request or write command from peer device
*/
wiced_bt_gatt_status_t hello_sensor_gatts_req_write_handler( uint16_t conn_id, wiced_bt_gatt_write_t * p_data )
{
wiced_bt_gatt_status_t result = WICED_BT_GATT_SUCCESS;
uint8_t *p_attr = p_data->p_val;
uint8_t sec_flag, key_size;
WICED_BT_TRACE("write_handler: conn_id:%d hdl:0x%x prep:%d offset:%d len:%d ", conn_id, p_data->handle, p_data->is_prep, p_data->offset, p_data->val_len );
switch ( p_data->handle )
{
.
.
.
case HANDLE_HSENS_SERVICE_CHAR_TEMP_CFG_DESC:
if ( p_data->val_len != 2 )
{
return WICED_BT_GATT_INVALID_ATTR_LEN;
}
WICED_BT_TRACE( "Temp Notif Enabled ");
hello_sensor_hostinfo.temp_characteristic_client_configuration = p_attr[0] | ( p_attr[1] << 8 );
break;
case HANDLE_HSENS_SERVICE_CHAR_BLINK_VAL:
if ( p_data->val_len != 1 )
{
return WICED_BT_GATT_INVALID_ATTR_LEN;
}
if ((!(paired_security_level & BTM_SEC_LINK_PAIRED_WITH_MITM))&& (LED_BLINK_CHAR_PERMISSION & LEGATTDB_PERM_AUTH_WRITABLE))
{
WICED_BT_TRACE("Write Failed: Insufficient Authentication ");
return WICED_BT_GATT_INSUF_AUTHENTICATION;
}
hello_sensor_hostinfo.number_of_blinks = p_attr[0];
if ( hello_sensor_hostinfo.number_of_blinks != 0 )
{
WICED_BT_TRACE( "hello_sensor_write_handler:num blinks: %d ", hello_sensor_hostinfo.number_of_blinks );
wiced_bt_app_hal_led_blink(250, 250, hello_sensor_hostinfo.number_of_blinks );
}
break;
default:
result = WICED_BT_GATT_INVALID_HANDLE;
break;
}
return result;
}
列表 2:在 Cypress BLE Secure Hub 應(yīng)用的這個(gè)代碼片段中,當(dāng)請(qǐng)求執(zhí)行 LED 閃爍特征時(shí),首先需要通過權(quán)限和安全授權(quán)檢查(突出顯示部分)。(代碼來源:Cypress Semiconductor)
通過適用于傳感器項(xiàng)目和集線器項(xiàng)目的 GATT DB 定義和支持代碼,本示例應(yīng)用為開發(fā)人員提供了與三種不同安全級(jí)別相關(guān)的基本設(shè)計(jì)模式,包括任何級(jí)別的配對(duì)、此處描述的 MITM 配對(duì)和藍(lán)牙低功耗安全配對(duì)。后一種配對(duì)方法使用基于橢圓曲線 Diffie-Hellman (ECDH) 密鑰交換的驗(yàn)證方法,安全性最高。CYW20719 的集成安全引擎包含 ECDH 加速器,因此開發(fā)人員可以運(yùn)用此方法而不會(huì)影響性能。
總結(jié)
隨著集成式藍(lán)牙無線 MCU 的出現(xiàn),開發(fā)人員爭(zhēng)相將此類器件集成到其設(shè)計(jì)中。然而,為了實(shí)現(xiàn)安全的藍(lán)牙網(wǎng)絡(luò),開發(fā)人員在創(chuàng)建藍(lán)牙兼容服務(wù)和編寫能夠安全使用這些器件的應(yīng)用程序時(shí)面臨多重挑戰(zhàn)。
Cypress Semiconductor CYW920719Q40EVB-01 藍(lán)牙評(píng)估套件和 WICED 開發(fā)環(huán)境基于 Cypress CYW20719 藍(lán)牙 MCU,為構(gòu)建這些應(yīng)用提供了一個(gè)綜合性平臺(tái)。將該套件和 WICED 環(huán)境與 Cypress BLE Secure Hub 軟件包結(jié)合使用,開發(fā)人員可以快速評(píng)估安全藍(lán)牙應(yīng)用,并將其迅速擴(kuò)展到能夠利用藍(lán)牙 5 的增強(qiáng)速度和范圍的定制應(yīng)用中。
-
藍(lán)牙
+關(guān)注
關(guān)注
115文章
5976瀏覽量
172747 -
FPU
+關(guān)注
關(guān)注
0文章
44瀏覽量
21618 -
PMU
+關(guān)注
關(guān)注
1文章
117瀏覽量
22022
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
采用CYW207XX 藍(lán)牙芯片和WICED開發(fā)環(huán)境的全新藍(lán)牙模組系列
如何在CYW20706和CYW20719上使用HID?
CYW20719設(shè)備之間無法重新連接是為什么?
請(qǐng)問cyw20719或cyw20721是否支持RTOS?
如何為CYW20719器件進(jìn)行射頻測(cè)試
20719 SPI主時(shí)鐘配置問題
WICED 6.2是否支持CYW20706和CYW20719上的A2DP AAC編解碼器?
在哪里可以找到CYW20719的I2S驅(qū)動(dòng)程序和API?
什么時(shí)候可以使用基于CYW20719的模塊?
CYW20719可以運(yùn)行FreeRtos嗎?
求一種Cypress CYW20719的集成解決方案
基于賽普拉斯CYW207XX和WICED開發(fā)環(huán)境的全新藍(lán)牙模組套件
貿(mào)澤開售支持藍(lán)牙網(wǎng)狀網(wǎng)絡(luò)的Cypress CYW20719 SoC
基于CYW20719的無線基帶處理器解決方案

CYPRESS 集成開發(fā)環(huán)境(IDE)WICED Studio的使用

評(píng)論