物联网技术
直播中

李义坤

7年用户 594经验值
私信 关注

构建安全,低功耗的蓝牙集线器和传感器网络

凭借其在移动设备上的广泛应用,蓝牙非常适合为消费者提供对智能产品的轻松无线访问。然而,对于物联网开发人员而言,构建蓝牙连接的传感器网络带来了诸如最大化电池寿命,优化蓝牙协议以及确保设备之间的安全连接等挑战。

正如本文将展示的那样,使用赛普拉斯半导体公司的高级蓝牙设备和相关开发环境,开发人员可以加快解决这些问题并快速实施安全的蓝牙集线器传感器网络。

为什么蓝牙?
蓝牙在智能手机和其他移动设备上的广泛支持使其成为将消费者与可穿戴设备和医疗设备等个人电子设备连接起来的首选无线技术。随着蓝牙5的出现,物联网开发人员可以利用这些优势,同时满足与传感器网络和其他物联网应用相关的更长距离和更高数据速率的不断增长的需求。

为了构建这些应用程序的设计,开发人员可以转向越来越多的支持蓝牙5的设备。这些设备结合了完整的RF子系统和处理器内核,能够执行与蓝牙通信相关的低级事务。然而,在物联网网络中维持低功耗并确保安全连接的需求可能在这些应用中部署蓝牙时更加复杂。

综合解决方案
赛普拉斯半导体CYW20719专为满足物联网,可穿戴设备,个人电子产品和其他低功耗应用的电池供电蓝牙连接设计不断增长的需求而设计。除了低功耗功能外,它还支持先进的蓝牙5功能,包括自适应跳频,在与这些应用相关的繁忙无线电环境中提供了重要优势。

该器件集成了低功耗蓝牙无线电子系统,带有浮点单元(FPU)的ARM®Cortex®-M4内核和多个外设模块(图1)。此外,片上安全引擎可加速公钥加密,并提供所需的关键加密功能,以帮助确保蓝牙操作的安全性。最后,片上电源管理单元(PMU)为开发人员提供了一种灵活的机制,可满足蓝牙设备日益增长的超低功耗操作要求。



图1:赛普拉斯半导体CYW20719结合了Arm®Cortex®-M4,完整的蓝牙子系统和内置软件服务,可为低功耗设计提供完整的蓝牙5无线MCU。(图片来源:赛普拉斯半导体)

CYW20719无线电子系统包括完整的2.5 GHz RF信号路径,用于发送(Tx)和接收(Rx)操作。对于Rx信号路径,器件衰减带外信号,实现-95.5 dBm Rx灵敏度,同时使开发人员无需额外的片外滤波器即可使用该器件。其Tx信号路径包括一个集成功率放大器(PA),旨在支持从-24 dBm到最大+4 dBm的可配置发射功率电平。除了集成的物理层(PHY)功能外,该器件还包括一个完整的片上蓝牙5介质访问控制(MAC)层。凭借其优化的Rx和Tx信号路径,该器件仅使用5.9 mA Rx电流或5.6 mA(@ 0 dBm)Tx电流。

为了进一步降低功耗,该器件提供由集成电源管理单元(PMU)管理的多种电源模式。PMU旨在提供独立的RF和数字电源域,它集成了一个集成的降压稳压器,一个用于数字电路的低压差(LDO)稳压器,以及一个用于RF电路的独立LDO(图2)。此外,PMU还包括一个独立的旁路LDO(BYPLDO),如果源VBAT电源电压低于2.1伏,它会自动旁路降压稳压器为数字和RF LDO供电。



图2:赛普拉斯CYW20719 PMU管理独立的电源域,可在不同的低功耗模式下有选择地禁用,以降低低功耗设计中的电流消耗。(图片来源:赛普拉斯半导体)

在操作中,PMU根据所选择的功率模式调整功率域,其包括完全活动模式,空闲模式和三种不同的睡眠模式。在最低功耗关闭睡眠(SDS)模式下,PMU关闭除I / O电源,实时时钟(RTC)和用作时钟源的专用低功耗振荡器(LPO)之外的所有器件模块对于某些块和唤醒时间。

即使使用这些最少的资源,SDS模式下的CYW20719也可以与另一个先前配对的蓝牙设备保持连接,在此过程中消耗的电流小于70微安(μA)。但是,在此模式下,设备不会保留内存,并且在继续执行更复杂的操作之前需要热启动才能恢复状态。另外两种睡眠模式,即断电睡眠(PDS)和睡眠状态,维持设备活动水平的提高,包括内存保留,以及相应的功耗增量增加。即便如此,使用非常有限的功率预算的开发人员也可以利用PDS模式进行低功耗蓝牙广告(约125μA)和有源连接(约170μA)。通过管理器件功耗模式,开发人员可以轻松实现极低功耗运行,而不会影响功能。

系统集成
即使具有灵活的操作模式和广泛的功能,CYW20719也需要很少的额外组件来完成系统设计中的硬件集成。由于它集成了芯片上的关键元件,因此开发人员只需添加一些电阻,耦合电容,一个2.2μH电感(如Murata LQH2MCN2R2M52L)和铁氧体磁珠(如Murata BLM15AG601SN1D)(图3)。但是,在CYW20719和天线匹配组件之间放置带通滤波器以减少谐波是明智的。



图3:由于赛普拉斯CYW20719集成了所有关键功能,开发人员只需几个附加组件即可完成硬件集成,包括推荐的带通滤波器以减少谐波。(图源:赛普拉斯半导体)

该器件同样有​​助于通过其广泛的片上存储器简化软件集成,包括1 Mbyte闪存,512 KB RAM和2 MB ROM。虽然闪存和RAM为开发人员提供了应用程序的内存区域,但片上ROM仍保留用于设备固件和蓝牙配置文件。为了在需要时支持固件补丁,设备提供补丁RAM - 通过补丁控制逻辑连接的RAM区域(参见上面的图1)。最后,该器件提供一个永远在线存储器(AON)区域,该区域允许器件即使在低功耗模式(如SDS)中也能存储数据,否则会关闭易失性存储器。

尽管与其他最先进的器件相比,芯片上提供的RAM和闪存可能看起来有限,但ROM内置的广泛软件支持可确保为典型应用提供充足的内存。赛普拉斯为片上ROM配置了一个全面的软件堆栈,从最低硬件抽象层(HAL)延伸到WICED(嵌入式设备无线互联网连接)环境的应用程序编程接口(API)(图4)。



图4:赛普拉斯CYW20719的2 MB ROM固件提供了完整的软件堆栈,包括实时操作系统,降低了开发人员应用程序代码的复杂性和占用空间。(图片来源:赛普拉斯半导体)

ROM固件基于HAL,执行内置的实时操作系统,并处理与CYW20719硬件的所有交互。同时,ROM固件包括全套蓝牙服务层,包括支持基本蓝牙通用属性配置文件(GATT)和通用访问配置文件(GAP)的蓝牙服务层。

对于典型应用程序,开发人员代码从RAM运行,使用WICED API访问RTOS,外围设备和其他设备功能。虽然RAM要求可能有很大差异,但CYW20719的大多数应用程序代码通常会为数据或工作内存留下足够的可用RAM。例如,后面描述的hello_sensor应用程序可以释放大约240 KB的RAM。

但是,对于具有特别大的代码库的应用程序,开发人员可以利用CYW20719处理设计用于从片上闪存执行就地(XIP)的应用程序代码的能力。这里,WICED环境将开发人员指定的代码和只读数据部分加载到片上闪存中,并将其余部分放入RAM中。这种方法当然会减少应用程序的RAM占用空间,但它会影响性能。因此,开发人员在指定XIP代码段时需要谨慎,并确保将时间关键功能放在RAM中。

应用开发
尽管CYW20719简化了设计集成,但是专注于安全低功耗蓝牙应用的开发人员仍然可能在完成硬件设计和应用开发方面遇到严重延迟。赛普拉斯CYW920719Q40EVB-01评估套件旨在演示基于CYW20719的应用,可与赛普拉斯WICED软件环境配合使用,为创建符合蓝牙5.0标准的物联网应用提供参考设计和综合开发平台。

评估套件围绕载波模块构建,该载波模块包括图3设计中的CYW20719,并添加了一个Torex Semiconductor XC6119N电压检测器,连接到CYW20719的RST_N引脚以执行复位。载体模块焊接到套件的基板,其中包括STMicroelectronics LSM9DS1TR 9轴运动传感器,Murata NCU系列NTC热敏电阻,CYW20719 GPIO端口,调试连接,用于扩展的Arduino兼容接头,以及作为开关和LED的开关和LED简单的用户界面(图5)。



图5:赛普拉斯CYW920719Q40EVB-01评估套件将载波模块上的CYW20719与多个基板组件相结合,能够支持典型的物联网应用。(图片来源:赛普拉斯半导体)

赛普拉斯的样品软件使用CYW20719和其他组件作为代表性物联网网络中安全蓝牙连接的广泛演示的一部分,该网络包括多个传感器设备和一个中央集线器(图6)。通过此示例应用程序,开发人员可以探索不同的安全级别,以便在传感器设备和集线器之间进行配对,并评估这些不同安全级别对数据交换的影响。



图6:赛普拉斯示例应用程序设计用于与多个CYW920719Q40EVB-01套件和赛普拉斯WICED开发环境配合使用,可在代表性的物联网应用中演示安全的蓝牙连接。(图片来源:赛普拉斯半导体)

对于应用程序的硬件,开发人员使用单独的CYW920719Q40EVB-01套件作为安全集线器,并在网络中配置为单独的传感器。通过串行连接与每个套件链接的PC提供了一个控制台,用于设置参数,查看数据,打印调试消息以及以其他方式与示例应用程序交互。

虽然未包含在此示例应用程序中,但典型应用程序中唯一剩余的元素(例如此类)将是用于应用程序监视和控制功能的移动设备的连接。这里,串联连接的PC具有相同的功能。

赛普拉斯将其用于此示例应用程序的软件捆绑在其CYW20917 BLE Secure Hub C语言包中,用于其WICED开发环境。在这种情况下,程序包包含两个项目,用于示例应用程序中的两个单独角色。设计为在指定为安全集线器的套件上运行,一个项目(secure_hub)使集线器能够支持多种蓝牙协议角色。特别是,集线器软件旨在实现在不同安全级别与作为从属运行的不同套件进行配对。

配置为从站的套件运行传感器项目(hello_sensor),旨​​在说明在配对期间建立的安全级别的数据收集和通信。每个项目都包含支持每个功能角色所需的几个头和代码模块。在这些文件中,secure_hub和hello_sensor项目各自包括通用属性配置文件(GATT)头(gatt_db.h)和代码(gatt_db.c)文件。

在蓝牙协议中,称为GATT数据库(DB)的查找表通过一组定义的服务定义蓝牙连接的性质和能力,每个定义的服务包括一组支持的特征。例如,蓝牙规范包括预定义的GATT服务,范围从警报通知和设备信息等实用程序功能到血压和脉搏血氧仪服务等特定应用功能。设备的蓝牙通用访问配置文件(GAP)服务于比GATT服务更基本的角色,定义了它如何通过网络发布自己的广告以及它在发现后如何建立连接。

secure_hub项目和hello_sensor项目中的gatt_db.h头和gatt_db.c代码分别为安全集线器和传感器配置的套件定义GAP和GATT服务。对于此演示应用程序,每个项目根据其角色定义自定义GATT服务。例如,hello_sensor项目头包含一个C enum类型,它定义了强制性GATT和GAP服务句柄,以及传感器服务的自定义GATT定义(清单1a)。反过来,该项目的gatt_db.c文件使用这些定义来构建蓝牙协议中所需的GATT DB(清单1b)。
复制

typedef enum

{

    HANDLE_HSENS_GATT_SERVICE = 0x1,//服务句柄



    HANDLE_HSENS_GAP_SERVICE = 0x14,//服务句柄

        HANDLE_HSENS_GAP_SERVICE_CHAR_DEV_NAME,//特色手柄

        HANDLE_HSENS_GAP_SERVICE_CHAR_DEV_NAME_VAL,//字符值句柄



        HANDLE_HSENS_GAP_SERVICE_CHAR_DEV_APPEARANCE,//特征手柄

        HANDLE_HSENS_GAP_SERVICE_CHAR_DEV_APPEARANCE_VAL,// char值句柄





    HANDLE_HSENS_SERVICE = 0x28,

        HANDLE_HSENS_SERVICE_CHAR_UART,//特征手柄

        HANDLE_HSENS_SERVICE_CHAR_UART_VAL,// char值句柄

        HANDLE_HSENS_SERVICE_CHAR_CFG_DESC,// charconfig desc handl



        HANDLE_HSENS_SERVICE_CHAR_BLINK,//特色手柄

           HANDLE_HSENS_SERVICE_CHAR_BLINK_VAL,// char值句柄



           HANDLE_HSENS_SERVICE_CHAR_TEMP,//特征手柄

                  HANDLE_HSENS_SERVICE_CHAR_TEMP_VAL,// char值句柄

                  HANDLE_HSENS_SERVICE_CHAR_TEMP_CFG_DESC,// charconfig desc handl

(一个)
复制



/ *自定义特征的权限* /

#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 [] =

{

    //声明强制性GATT服务

    PRIMARY_SERVICE_UUID16(HANDLE_HSENS_GATT_SERVICE,UUID_SERVICE_GATT),



    //声明强制性GAP服务。设备名称和外观是必需的

    // GAP服务的特征

    PRIMARY_SERVICE_UUID16(HANDLE_HSENS_GAP_SERVICE,UUID_SERVICE_GAP),



        //声明强制GAP服务特征: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),



        //声明强制性GAP服务特征:外观

        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),



    //使用128字节UUID声明专有的Hello Service

    PRIMARY_SERVICE_UUID128(HANDLE_HSENS_SERVICE,UUID_HELLO_SERVICE),

        //声明用于通知/指示更改的特征

        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),





            //声明客户端特征配置描述符

            //客户端可以修改描述符的值

            //在连接和连接期间应保留修改的值

            //用于绑定设备。将值设置为1会告诉此应用程序发送通知

            //当特征值发生变化时 值2是允许指示。

                CHAR_DESCRIPTOR_UUID16_WRITABLE(HANDLE_HSENS_SERVICE_CHAR_CFG_DESC,UUID_DESCRIPTOR_CLIENT_CHARACTERISTIC_CONFIGURATION,

                     LEGATTDB_PERM_READABLE | LEGATTDB_PERM_WRITE_REQ),

        //声明特征性Hello配置

        //配置由1个字节组成,表示要多少次

       //当用户按下按钮时,LED闪烁。

        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),





            //声明客户端特征配置描述符

            //客户端可以修改描述符的值

            //在连接和连接期间应保留修改的值

            //用于绑定设备。将值设置为1会告诉此应用程序发送通知

            //当特征值发生变化时 值2是允许指示。

                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:包含在赛普拉斯BLE安全集线器应用程序的hello_sensor项目中,头文件定义了不同特征的枚举类型(A),相应的代码模块用于构建蓝牙操作所需的GATT数据库。(代码来源:赛普拉斯半导体)

嵌入在这些定义中的GATT传感器服务还定义其底层服务特征是否可以读取,写入,通知或指示(使用连接的控制台)。例如,LED闪烁特性(HANDLE_HSENS_SERVICE_CHAR_BLINK在清单1a中声明并在清单1b中应用)包括位掩码(LEGATTDB_CHAR_PROP_READ | LEGATTDB_CHAR_PROP_WRITE在清单1b中),表明该特性是可读写的。

但是,hello_sensor项目的gatt_db.c文件将这些定义与实现对该特性的安全访问的代码相结合。也就是说,能够使LED闪烁由开发者键入控制台的字符所指示的次数。出于此示例应用程序的目的,对此功能的访问要求使用在配对期间使用控制台输入的用户提供的密钥与蓝牙中间人(MITM)配对建立与该传感器套件的连接。

通常,当请求调用某些功能时,相应的处理程序执行特定于应用程序的任务,同时考虑已定义的特征和安全访问要求。对于LED闪烁示例,当请求执行LED闪烁功能时,用于确保许可和授权访问的实际代码足够简单。

要更改LED闪烁特征值(HANDLE_HSENS_SERVICE_CHAR_BLINK_VAL),代码使用条件语句来确认写入权限和访问权限(清单2)。对于写入权限,条件将所请求的权限(LEGATTDB_PERM_AUTH_WRITABLE)与实际LED设备的闪烁权限设置LED_BLINK_CHAR_PERMISSION(在清单1b的顶部定义)进行比较。对于授权,条件检查当前配对的安全级别(paired_security_level)是使用MITM配对(BTM_SEC_LINK_PAIRED_WITH_MITM)创建的(清单2)。
复制

/*

*来自对等设备的进程写请求或写命令

*/

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  r  n”,conn_id,p_data-> handle,p_data-> is_prep,p_data-> offset,p_data - > val_len);



    开关(p_data->句柄)

    {



    .

    .

    .



    案例HANDLE_HSENS_SERVICE_CHAR_TEMP_CFG_DESC:

           if(p_data-> choice_len!= 2)

           {

               返回WICED_BT_GATT_INVALID_ATTR_LEN;

           }

           WICED_BT_TRACE(“Temp Notif Enabled  r  n”);



           hello_sensor_hostinfo.temp_characteristic_client_configuration = p_attr [0] | (p_attr [1] << 8);

           打破;



    案例HANDLE_HSENS_SERVICE_CHAR_BLINK_VAL:



        if(p_data-> choice_len!= 1)

        {

            返回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(“写入失败:认证不足 r  n”);

            返回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  r  n”,hello_sensor_hostinfo.number_of_blinks);

            wiced_bt_app_hal_led_blink(250,250,hello_sensor_hostinfo.number_of_blinks);

        }

        打破;



    默认:

        result = WICED_BT_GATT_INVALID_HANDLE;

        打破;

    }



    返回结果;

}

清单2:在赛普拉斯BLE安全集线器应用程序的这个片段中,执行LED闪烁特性的请求首先需要通过检查(突出显示)以获得许可和安全授权。(代码来源:赛普拉斯半导体)

使用适用于传感器项目和中心项目的GATT数据库定义和支持代码,此示例应用程序为开发人员提供了与三种不同安全级别相关的基本设计模式,包括任何级别的配对,此处描述的MITM配对和蓝牙LE安全配对。后一种配对方法使用基于椭圆曲线Diffie-Hellman(ECDH)密钥交换的认证方法提供最高的安全性。由于CYW20719的集成安全引擎包含ECDH加速器,开发人员可以在不影响性能的情况下部署此方法。

结论
集成蓝牙无线MCU的可用性帮助开发人员加速了这些设备与其设计的集成。然而,为了实现安全的蓝牙网络,开发人员在创建蓝牙兼容服务和编写能够安全使用这些设备的应用程序时面临多重挑战。

赛普拉斯半导体CYW920719Q40EVB-01套件蓝牙评估套件和WICED开发环境基于赛普拉斯CYW20719蓝牙MCU,为构建这些应用提供了全面的平台。将套件和WICED环境与赛普拉斯BLE安全集线器套件结合使用,开发人员可以快速评估安全的蓝牙应用,并将其快速扩展到能够利用蓝牙5的增强速度和范围的自定义应用中。


更多回帖

发帖
×
20
完善资料,
赚取积分