移動設(shè)備普遍提供藍牙功能,藍牙非常適合消費者以無線方式輕松訪問智能產(chǎn)品。然而,對于物聯(lián)網(wǎng)開發(fā)人員而言,構(gòu)建藍牙連接的傳感器網(wǎng)絡(luò)存在一些挑戰(zhàn),例如實現(xiàn)電池壽命最大化、優(yōu)化藍牙協(xié)議以及確保設(shè)備之間安全連接等。
本文將說明,使用Cypress Semiconductor提供的先進藍牙器件和相關(guān)開發(fā)環(huán)境,開發(fā)人員可以加快解決這些問題,并快速實現(xiàn)安全的藍牙集線器傳感器網(wǎng)絡(luò)。
為什么使用藍牙?
智能手機和其他移動設(shè)備廣泛支持藍牙,這使其成為將消費者與可穿戴設(shè)備和醫(yī)療設(shè)備等個人電子設(shè)備連接起來的首選無線技術(shù)。隨著藍牙 5 的出現(xiàn),物聯(lián)網(wǎng)開發(fā)人員既可利用這些優(yōu)勢,又能滿足傳感器網(wǎng)絡(luò)和其他物聯(lián)網(wǎng)應(yīng)用對更長通信距離和更高數(shù)據(jù)速率不斷增長的需求。
為了構(gòu)建針對這些應(yīng)用的設(shè)計,開發(fā)人員可以借助越來越多的支持藍牙 5 的器件。這些器件結(jié)合了完整的 RF 子系統(tǒng)和處理器內(nèi)核,能夠執(zhí)行與藍牙通信相關(guān)的低級事務(wù)。然而,物聯(lián)網(wǎng)網(wǎng)絡(luò)需要維持低功耗并確保安全連接,這樣一來,在這些應(yīng)用中部署藍牙會更加復(fù)雜。
集成解決方案
Cypress SemiconductorCYW20719經(jīng)過專門設(shè)計,可滿足物聯(lián)網(wǎng)、可穿戴設(shè)備、個人電子產(chǎn)品和其他低功耗應(yīng)用對電池供電型藍牙連接設(shè)計不斷增長的需求。除了功耗低之外,它還支持先進的藍牙 5 特性,包括自適應(yīng)跳頻,這在與此類應(yīng)用相關(guān)的繁忙無線電環(huán)境中是一個重要優(yōu)勢。
該器件集成了低功耗藍牙無線電子系統(tǒng)、帶浮點單元 (FPU) 的 Arm? Cortex?-M4 內(nèi)核及多個外設(shè)塊(圖 1)。此外,片載安全引擎可加速公鑰加密,并提供所需的關(guān)鍵加密功能來幫助確保藍牙操作的安全性。最后,片載電源管理單元 (PMU) 為開發(fā)人員提供了一種靈活的機制來滿足藍牙設(shè)備日益增長的超低功耗運行要求。
圖 1:Cypress Semiconductor CYW20719 結(jié)合了 Arm? Cortex?-M4、完整的藍牙子系統(tǒng)和內(nèi)置軟件服務(wù),為低功耗設(shè)計提供完整的支持藍牙 5 的無線 MCU。(圖片來源:Cypress Semiconductor)
CYW20719 無線電子系統(tǒng)包括完整的 2.5 GHz RF 信號路徑,用于發(fā)射 (Tx) 和接收 (Rx) 操作。對于 Rx 信號路徑,此器件會衰減帶外信號,實現(xiàn) -95.5 dBm Rx 靈敏度,且在需要時,開發(fā)人員無需額外的片外濾波器即可使用該器件。Tx 信號路徑包括一個集成功率放大器 (PA),旨在支持從 -24 dBm 到最大 +4 dBm 的可配置發(fā)射功率等級。除了集成物理層 (PHY) 之外,該器件還包括一個完整的片載藍牙 5 介質(zhì)訪問控制 (MAC) 層。憑借優(yōu)化的 Rx 和 Tx 信號路徑,該器件僅消耗 5.9 mA Rx 電流或 5.6 mA (@ 0 dBm) Tx 電流。
為了進一步降低功耗,該器件提供由集成電源管理單元 (PMU) 管理的多種功率模式。PMU 設(shè)計用于提供獨立的 RF 和數(shù)字功率域,結(jié)合了一個集成降壓穩(wěn)壓器、一個用于數(shù)字電路的低壓差穩(wěn)壓器 (LDO) 和一個用于 RF 電路的獨立 LDO(圖 2)。此外,PMU 還包括一個獨立的旁路 LDO (BYPLDO),如果電源 VBAT 電壓低于 2.1 V,它會自動旁路降壓穩(wěn)壓器,為數(shù)字和 RF LDO 供電。
圖 2:Cypress CYW20719 PMU 管理獨立的多個功率域,在不同低功耗模式下可以選擇性地禁用功率域,以降低低功耗設(shè)計的電流消耗。(圖片來源:Cypress Semiconductor)
在運行中,PMU 根據(jù)選定的功率模式(包括完全活動模式、空閑模式和三種休眠模式)調(diào)整功率域。在功耗最低的關(guān)斷休眠 (SDS) 模式下,除 I/O 電源、實時時鐘 (RTC)、專用低功耗振蕩器(用作某些塊和喚醒定時的時鐘源)之外,PMU 關(guān)閉所有器件塊。
即使只使用最少量的資源,SDS 模式下的 CYW20719 也能與另一個先前配對的藍牙設(shè)備保持連接,在此過程中消耗的電流小于 70 微安 (μA)。但是,該模式下的器件不會保留存儲器內(nèi)容,需要熱啟動恢復(fù)狀態(tài)后才能繼續(xù)執(zhí)行更復(fù)雜的操作。另外兩種休眠模式是省電休眠 (PDS) 和休眠狀態(tài),可維持包括存儲器內(nèi)容保留在內(nèi)的較高器件活動水平,而功耗則相應(yīng)地遞增。即便如此,功率預(yù)算有限的開發(fā)人員可以利用 PDS 模式進行低功耗藍牙廣告(約 125 μA)和支持活動連接(約 170 μA)。通過管理器件功率模式,開發(fā)人員可以輕松實現(xiàn)超低功耗運行而不影響功能。
系統(tǒng)集成
雖然 CYW20719 有靈活的工作模式和豐富的功能,但它仍需要少量額外元器件來完成系統(tǒng)設(shè)計中的硬件集成。由于其集成了片載關(guān)鍵元器件,開發(fā)人員只需添加幾個電阻器、耦合電容器、2.2 μH 電感(如MurataLQH2MCN2R2M52L)及鐵氧體磁珠(如 MurataBLM15AG601SN1D)(圖 3)。此外,最好在 CYW20719 和天線匹配元件之間放置一個帶通濾波器以減少諧波。
圖 3:Cypress CYW20719 集成了所有關(guān)鍵功能,因此開發(fā)人員只需添加幾個元器件(包括推薦的帶通濾波器以減少諧波)即可完成硬件集成。(圖片來源:Cypress Semiconductor)
該器件擁有豐富的片載存儲器,包括 1 MB 閃存、512 KB RAM 和 2 MB ROM,因此亦有助于簡化軟件集成。閃存和 RAM 為開發(fā)人員提供應(yīng)用程序存儲區(qū)域,片載 ROM 則保留用于器件固件和藍牙配置文件。為了在需要時支持固件補丁,該器件提供了補丁 RAM——一個通過補丁控制邏輯連接的 RAM 區(qū)域(參見上圖 1)。最后,該器件提供一個不間斷存儲器 (AON) 區(qū)域,讓器件即使在低功耗模式下也能存儲數(shù)據(jù)(如 SDS,會關(guān)閉易失存儲器)。
與其他先進器件相比,該器件芯片上提供的 RAM 和閃存看起來可能很有限,但 ROM 內(nèi)置的廣泛軟件支持可確保典型應(yīng)用有充足的內(nèi)存可用。Cypress 為片載 ROM 配置了一個全面的軟件堆棧,從最低的硬件抽象層 (HAL) 一直到用于WICED(嵌入式設(shè)備無線互聯(lián)網(wǎng)連接)環(huán)境的應(yīng)用程序編程接口 (API)(圖 4)。
圖 4:Cypress CYW20719 的 2 MB ROM 固件提供包括實時操作系統(tǒng)在內(nèi)的完整軟件堆棧,降低了開發(fā)人員應(yīng)用程序代碼的復(fù)雜度和占用空間。(圖片來源:Cypress Semiconductor)
以 HAL 為基礎(chǔ),ROM 固件執(zhí)行內(nèi)置實時操作系統(tǒng)并處理與 CYW20719 硬件的所有交互。同時,ROM 固件包含全套藍牙服務(wù)層,包括支持基本藍牙通用屬性配置文件 (GATT) 和通用訪問配置文件 (GAP) 的服務(wù)層。
對于典型應(yīng)用,開發(fā)人員代碼從 RAM 運行,使用 WICED API 訪問 RTOS、外設(shè)和其他特性。雖然 RAM 需求可能有很大差異,但 CYW20719 的大多數(shù)應(yīng)用程序代碼通常會為數(shù)據(jù)或工作內(nèi)存留下充足的可用 RAM。例如,后面描述的 hello_sensor 應(yīng)用程序留下了大約 240 KB 的可用 RAM。
但對于代碼庫特別大的應(yīng)用程序,開發(fā)人員可以利用 CYW20719 的一項特性 — 從片載閃存就地執(zhí)行 (XIP) 應(yīng)用程序代碼。這種情況下,WICED 環(huán)境將開發(fā)人員指定的代碼和只讀數(shù)據(jù)部分加載到片載閃存中,并將其余部分放入 RAM 中。這種方法固然會減少應(yīng)用程序的 RAM 占用空間,但可能會影響性能。因此,開發(fā)人員在指定 XIP 代碼部分時需要小心,確保將時間關(guān)鍵型功能置于 RAM 中。
應(yīng)用開發(fā)
盡管 CYW20719 簡化了設(shè)計集成,但專注于安全低功耗藍牙應(yīng)用的開發(fā)人員仍可能在完成硬件設(shè)計和應(yīng)用開發(fā)時面臨嚴重延遲。CypressCYW920719Q40EVB-01評估套件旨在演示基于 CYW20719 的應(yīng)用,可與 Cypress WICED 軟件環(huán)境配合使用,為創(chuàng)建符合藍牙 5.0 標(biāo)準的物聯(lián)網(wǎng)應(yīng)用提供參考設(shè)計和綜合開發(fā)平臺。
評估套件圍繞一個載波模塊構(gòu)建,載波模塊包括圖 3 設(shè)計中的 CYW20719,外加一個Torex SemiconductorXC6119N測壓器,后者連接到 CYW20719 的 RST_N 引腳以執(zhí)行復(fù)位。載波模塊焊接到套件基板,基板包括STMicroelectronicsLSM9DS1TR9 軸運動傳感器、MurataNCU 系列NTC 熱敏電阻、CYW20719 GPIO 端口、調(diào)試連接、Arduino 兼容擴展針座,以及用作簡單用戶界面的開關(guān)和 LED(圖 5)。
圖 5:Cypress CYW920719Q40EVB-01 評估套件將載波模塊上的 CYW20719 與多個基板元器件結(jié)合在一起,可支持典型物聯(lián)網(wǎng)應(yīng)用。(圖片來源:Cypress Semiconductor)
Cypress 示例軟件使用 CYW20719 和其他元器件,廣泛演示由多個傳感器和一個中央集線器組成的代表性物聯(lián)網(wǎng)網(wǎng)絡(luò)中的安全藍牙連接(圖 6)。通過此示例應(yīng)用,開發(fā)人員可以探索傳感器和集線器配對的不同安全級別,并評估這些不同安全級別對數(shù)據(jù)交換的影響。
圖 6:Cypress 示例應(yīng)用設(shè)計用于配合多個 CYW920719Q40EVB-01 套件和 Cypress WICED 開發(fā)環(huán)境使用,可在代表性物聯(lián)網(wǎng)應(yīng)用中演示安全藍牙連接。(圖片來源:Cypress Semiconductor)
關(guān)于應(yīng)用的硬件,開發(fā)人員將一個單獨的 CYW920719Q40EVB-01 套件配置為安全集線器,并將其他套件配置為網(wǎng)絡(luò)中的傳感器。一臺 PC 串行連接到各套件,為設(shè)置參數(shù)、查看數(shù)據(jù)、打印調(diào)試消息及與示例應(yīng)用的其他交互提供一個控制臺。
此類典型應(yīng)用唯一剩下的要素是連接到移動設(shè)備以執(zhí)行應(yīng)用監(jiān)測和控制功能,不過本示例應(yīng)用中未包括此項。這里,串行連接的 PC 基本上就是起這個作用。
Cypress 將此示例應(yīng)用的軟件捆綁在 WICED 開發(fā)環(huán)境下的 CYW20917BLE Secure HubC 語言包中。在本例中,該軟件包有兩個項目,對應(yīng)于示例應(yīng)用中的兩個獨立角色。一個項目 (secure_hub) 設(shè)計為在指定為安全集線器的套件上運行,它使集線器能夠支持多種藍牙協(xié)議角色。具體而言,集線器軟件旨在以不同安全級別與作為從設(shè)備運行的不同套件進行配對。
配置為從設(shè)備的套件運行傳感器項目 (hello_sensor),用于演示以配對期間建立的安全級別進行數(shù)據(jù)收集和通信。每個項目都包含若干頭模塊和代碼模塊以支持相應(yīng)的功能角色。在這些文件中,secure_hub 和 hello_sensor 項目各包含通用屬性配置文件 (GATT) 頭文件 (gatt_db.h) 和代碼文件 (gatt_db.c)。
在藍牙協(xié)議中,一個稱為 GATT 數(shù)據(jù)庫 (DB) 的查找表通過一組已定義服務(wù)來定義藍牙連接的屬性和功能,每個服務(wù)包括一組支持的特征。例如,藍牙規(guī)范包括預(yù)定義的 GATT 服務(wù),范圍從提醒通知和設(shè)備信息等實用功能到血壓和脈搏血氧儀服務(wù)等專用功能。設(shè)備的藍牙通用訪問配置文件 (GAP) 所起的作用比 GATT 服務(wù)更為基礎(chǔ),其定義設(shè)備如何在網(wǎng)絡(luò)中宣傳自己的存在,以及設(shè)備經(jīng)發(fā)現(xiàn)后如何建立連接。
secure_hub 項目和 hello_sensor 項目中的 gatt_db.h 頭文件和 gatt_db.c 代碼文件分別定義配置為安全集線器和傳感器的套件的 GAP 和 GATT 服務(wù)。對于此演示應(yīng)用,每個項目根據(jù)其角色定義一個定制 GATT 服務(wù)。例如,hello_sensor 項目頭文件包含一個定義強制性 GATT 和 GAP 服務(wù)句柄的 Cenum類型,以及用于傳感器服務(wù)的定制 GATT 定義(列表 1a)。該項目的 gatt_db.c 文件進而使用這些定義來構(gòu)建藍牙協(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 項目中包含一個頭文件,其為不同特征定義了一個枚舉類型 (A),供相應(yīng)的代碼模塊用以構(gòu)建藍牙運行所需的 GATT 數(shù)據(jù)庫。(代碼來源:Cypress Semiconductor)
嵌入在這些定義中的 GATT 傳感器服務(wù)還定義其底層服務(wù)特征是否可以讀取、寫入、通知或指示信息(使用相連的控制臺)。例如,LED 閃爍特征(列表 1a 中聲明并在列表 1b 中應(yīng)用的HANDLE_HSENS_SERVICE_CHAR_BLINK)包括位掩碼(列表 1b 中的LEGATTDB_CHAR_PROP_READ | LEGATTDB_CHAR_PROP_WRITE),指示該特征可讀可寫。
hello_sensor 項目的 gatt_db.c 文件則將這些定義與實現(xiàn)對該特征的安全訪問的代碼結(jié)合在一起。也就是能讓 LED 閃爍,閃爍次數(shù)由開發(fā)者鍵入控制臺的字符指示。就本示例應(yīng)用而言,訪問此功能要求通過藍牙中間人 (MITM) 配對,使用配對期間從控制臺輸入的用戶提供的密鑰,建立與該傳感器套件的連接。
一般而言,當(dāng)請求調(diào)用某一功能時,相應(yīng)的處理程序執(zhí)行專用任務(wù),并且同時考慮已定義特征和安全訪問要求。對于 LED 閃爍示例,當(dāng)請求執(zhí)行 LED 閃爍功能時,用于確保權(quán)限和授權(quán)訪問的實際代碼非常簡單。
為了更改 LED 閃爍特征值 (HANDLE_HSENS_SERVICE_CHAR_BLINK_VAL),代碼使用一個條件語句來確認寫入權(quán)限和訪問授權(quán)(列表 2)。針對寫入權(quán)限,條件語句將請求的權(quán)限 (LEGATTDB_PERM_AUTH_WRITABLE) 與實際 LED 器件的閃爍權(quán)限設(shè)置LED_BLINK_CHAR_PERMISSION(列表 1b 的頂部定義)進行比較。針對授權(quán),條件語句檢查當(dāng)前配對安全級別 (paired_security_level) 是否是通過 MITM 配對 (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)用的這個代碼片段中,當(dāng)請求執(zhí)行 LED 閃爍特征時,首先需要通過權(quán)限和安全授權(quán)檢查(突出顯示部分)。(代碼來源:Cypress Semiconductor)
通過適用于傳感器項目和集線器項目的 GATT DB 定義和支持代碼,本示例應(yīng)用為開發(fā)人員提供了與三種不同安全級別相關(guān)的基本設(shè)計模式,包括任何級別的配對、此處描述的 MITM 配對和藍牙低功耗安全配對。后一種配對方法使用基于橢圓曲線 Diffie-Hellman (ECDH) 密鑰交換的驗證方法,安全性最高。CYW20719 的集成安全引擎包含 ECDH 加速器,因此開發(fā)人員可以運用此方法而不會影響性能。
總結(jié)
隨著集成式藍牙無線 MCU 的出現(xiàn),開發(fā)人員爭相將此類器件集成到其設(shè)計中。然而,為了實現(xiàn)安全的藍牙網(wǎng)絡(luò),開發(fā)人員在創(chuàng)建藍牙兼容服務(wù)和編寫能夠安全使用這些器件的應(yīng)用程序時面臨多重挑戰(zhàn)。
Cypress Semiconductor CYW920719Q40EVB-01 藍牙評估套件和 WICED 開發(fā)環(huán)境基于 Cypress CYW20719 藍牙 MCU,為構(gòu)建這些應(yīng)用提供了一個綜合性平臺。將該套件和 WICED 環(huán)境與 Cypress BLE Secure Hub 軟件包結(jié)合使用,開發(fā)人員可以快速評估安全藍牙應(yīng)用,并將其迅速擴展到能夠利用藍牙 5 的增強速度和范圍的定制應(yīng)用中。
-
藍牙
+關(guān)注
關(guān)注
114文章
5843瀏覽量
170776 -
FPU
+關(guān)注
關(guān)注
0文章
42瀏覽量
21346 -
PMU
+關(guān)注
關(guān)注
1文章
108瀏覽量
21643
發(fā)布評論請先 登錄
相關(guān)推薦
評論