随着用户越来越熟悉物联网(IoT)的应用程序,开发人员需要通过能够证明新概念或竞争产品的全功能原型快速响应新兴机会。然而,大多数物联网开发解决方案需要付出巨大努力才能使它们正常工作,特别是在软件方面。
为了加快这一过程,开发人员需要一个能够消除许多现有障碍的物联网开发解决方案,从而减缓响应速度适应新物联网应用的机会。 Nordic Semiconductor的快速开发套件满足了这一需求,为蓝牙连接的无线传感器设计提供了完整的硬件/软件解决方案。
本文将讨论设计要求,介绍合适的蓝牙无线解决方案,并指导开发人员如何快速启动和运行。
无线物联网设备要求和解决方案选项
作为高端物联网应用的数据源,无线传感器系统需要满足广泛需求一系列复杂的要求。在这些要求中,对蓝牙连接的期望不断提高,以及用户对通过智能手机应用轻松实现物联网监控的期望。半导体制造商通过一系列解决方案(包括蓝牙收发器IC,模块和片上系统(SoC)器件)满足了这一日益增长的需求。
虽然每种解决方案都满足不同类别的应用要求,但蓝牙SoC已经成为可穿戴设备和微型物联网设备的一个特别有吸引力的解决方案。通过集成蓝牙通信子系统,这些设备可在不影响功能和性能的前提下,降低BOM,占地面积小,功耗最小。
在此类设备中,Nordic Semiconductor nRF52832蓝牙SoC将处理器核心和无线电子系统与灵活的软件架构集成在一起,旨在简化无线系统的开发。
无线MCU
基于32位ARM ® Cortex ® -M4F内核,Nordic nRF52832具有嵌入式2.4 GHz收发器,能够支持包括蓝牙低功耗(BLE)在内的标准协议和ANT,以及专有协议。在其外设中,该器件集成了模拟比较器和8通道可编程增益12位模数转换器(ADC),以及3个实时计数器(RTC),32个GPIO,多个脉冲宽度调制器(PWM)通道和串行接口。
片上可编程外设互连(PPI)矩阵使这些外设能够同步其活动,直接交互或通过直接内存访问(DMA)进行交互,无需处理器干预。此外,该器件还集成了多个硬件模块,用于高级功能,包括正交解码,AES加密和蓝牙加密服务的加速地址解析等。
该器件的功耗为58μA/MHz 512 Kbyte闪存或51.6μA/MHz从其64 KB RAM运行。多种低功耗模式使开发人员能够在应用程序处于非活动状态时降低功耗。例如,器件在低功耗空闲状态下仅消耗1.5μA,其中器件保持完全RAM状态并且能够在任何事件中唤醒。实际上,开发人员可以将设备置于特殊的恒定延迟子模式,以确保CPU唤醒和PPI子系统响应的持续时间最短。利用其灵活的工作模式,外设和片上硬件模块,开发人员可以对nRF52832进行编程,以满足功耗,性能和功能要求的特定组合。
通信服务
对于其所有集成功能,nRF52832和Nordic nRF52系列其他成员最显着的特点之一是其通信服务架构。 Nordic在早期的无线SoC系列中引入了SoftDevice架构,以减少开发人员使用通信协议栈时的摩擦。
SoftDevice体系结构作为可更新的固件实现,它通过提供程序员可以利用的预先测试的服务层来简化软件开发,而不会使自己的开发过程复杂化。对于BLE应用,Nordic的S132 SoftDevice提供了完整的蓝牙协议栈(图1)。
图1:Nordic Bluetooth SoftDevice实现了完整的蓝牙协议作为固件堆栈,提供全套服务,无需开发人员将协议栈库链接到其应用程序。 (图片来源:Nordic Semiconductor)
SoftDevice不仅仅是一个简单的软件层,它使用复杂的基于中断的模型,允许开发人员在开发过程中使用SoftDevice服务而无需将SoftDevice代码链接到他们的应用程序中。开发人员只需使用一组C语言API头文件中定义的一系列Supervisor调用(SVC)访问SoftDevice应用程序编程接口(API)。
SVC实现为软件触发的中断,因此当开发人员调用API函数,SoftDevice SVC中断处理程序找到正确的SoftDevice函数并将函数参数传递给它,使用回调函数返回结果。这种方法消除了在构建时链接SoftDevice资源地址的需要,同时还提供了线程安全的服务实现。
为了实现这个模型,Nordic将SoftDevice与低级中断机制和硬件资源联系起来。较低级别的中断冒泡到SoftDevice,它使用保留的IRQ将应用程序特定的中断传递给应用程序,并自行处理剩余的中断。此外,作为其服务职责的一部分,SoftDevice直接访问设备硬件,包括无线电和其他外围设备。
为了避免可能争用共享硬件资源,Nordic提供了一个时间段功能,可以调度资源之间的资源分配。 SoftDevice和定义的时间间隔内的应用程序。应用程序可以在给定时间请求最早的时间段或一个时间段。尽管这种机制具有潜在的复杂性,但Nordic的API减少了应用程序对一些高级调用的负担。例如,应用程序可以通过打开无线电会话(清单1)以及实际广告操作的回调(清单2)来启动信标。在每次传递期间,回调递增一个简单的枚举类型(清单3)以逐步执行一系列状态,直到广告过程完成( mode == ADV_DONE )。
复制 void app_beacon_start(void){if(m_beacon.is_running || m_beacon.keep_running){return; } DEBUG_PRINTF(0,“app_beacon_start:\ r \ n”); m_beacon.keep_running = true; m_beacon.is_running = true; uint32_t err_code = sd_radio_session_open(m_timeslot_callback); if((err_code!= NRF_SUCCESS)&&(m_beacon.error_handler!= NULL)){m_beacon.error_handler(err_code); } err_code = m_request_earliest(NRF_RADIO_PRIORITY_NORMAL); if((err_code!= NRF_SUCCESS)&&(m_beacon.error_handler!= NULL)){m_beacon.error_handler(err_code);清单1:Thingy软件包包括示例例程,例如 app_beacon_start ,它演示与SoftDevice的交互以创建具有特定回调的无线电会话( m_timeslot_callback )并请求最早的可用无线电时隙用于信标传输( m_request_earliest )。 (代码来源:Nordic Semiconductor)
复制 static nrf_radio_signal_callback_return_param_t * m_timeslot_callback(uint8_t signal_type){static nrf_radio_signal_callback_return_param_t signal_callback_return_param; static enum mode_t mode; signal_callback_return_param.params.request.p_next = NULL; signal_callback_return_param.callback_action = NRF_RADIO_SIGNAL_CALLBACK_ACTION_NONE; switch(signal_type){case NRF_RADIO_CALLBACK_SIGNAL_TYPE_START:m_handle_start(); mode = ADV_INIT;模式++;打破; case NRF_RADIO_CALLBACK_SIGNAL_TYPE_RADIO:if(NRF_RADIO-> EVENTS_DISABLED == 1){NRF_RADIO-> EVENTS_DISABLED = 0; m_handle_radio_disabled(模式); if(mode == ADV_DONE){DEBUG_PRINTF(0,“app_beacon_adv_done:\ r \ n”); NRF_PPI-> CHENCLR =(1 << 8); if(m_beacon.keep_running){signal_callback_return_param.params.request.p_next = m_configure_next_event(); signal_callback_return_param.callback_action = NRF_RADIO_SIGNAL_CALLBACK_ACTION_REQUEST_AND_END; } else {signal_callback_return_param.callback_action = NRF_RADIO_SIGNAL_CALLBACK_ACTION_END;打破} mode ++;打破default:if(m_beacon.error_handler!= NULL){m_beacon.error_handler(NRF_ERROR_INVALID_STATE);打破} return(&amp; signal_callback_return_param);}
清单2:Thingy软件包提供了样本软件,它提供了代表性的设计模式,例如使用此处显示的回调例程来执行一系列信标广告的无线电操作。 (代码来源:Nordic Semiconductor)
复制 enum mode_t {ADV_INIT,/**初始化。 */ADV_RX_CH37,/**在Rx频道37上做广告。*/ADV_RX_CH38,/**在Rx频道38上做广告。*/ADV_RX_CH39,/**在Rx频道39上做广告。*/ADV_DONE/**完成广告。 */};
清单3:Thingy软件包中的示例回调例程使用此枚举类型在信标通告序列期间使系统走过一系列阶段。 (代码来源:Nordic Semiconductor)
nRF52832的SoftDevice服务和集成硬件功能为无线传感器系统的开发提供了有效的基础,且零件数量最少。然而,这些SoC器件的复杂性可以为设计人员提供实现传感器设计的重要学习曲线,更不用说完整的物联网应用。 Nordic Semiconductor NRF6936 Thingy:52 IoT传感器套件可帮助开发人员显着缩短开发有用的蓝牙连接传感器系统所需的时间。
快速开发Thingy
Nordic Thingy:52套件优惠用于无线传感器设计的快速原型解决方案。该套件基于nRF52832蓝牙SoC,旨在提供开箱即用的全部功能,无需硬件或固件开发即可实现带有连接移动应用程序的物联网传感器解决方案。
其功能中, nRF6936板包括一个完整的传感器套件,包括:
Rohm Semiconductor BH1745色彩传感器
STMicroelectronics HTS221湿度传感器
STMicroelectronics LPS22HB压力传感器
ams CCS811气体传感器
STMicroelectronics MP34DB02 MEMS麦克风
TDK InvenSense MPU-9250惯性测量单元(IMU)传感器
与...用于完整9轴运动跟踪的MPU-9250 IMU,Thingy板包括一个独立的专用运动传感器,STMicroelectronics LIS3DH加速度计,用于唤醒系统运动。 LIS3DH直接从板载稳压器获取电源,确保无论VDD状态如何都能保持供电。参考设计包括原理图,显示LIS3DH如何保持隔离,通过设计中提供的外部I 2 C总线连接以支持外部硬件(图2)。
图2:Thingy参考设计提供完整的原理图并演示设计技术,例如使用STMicroelectronics LIS3DH加速度计在移动时唤醒空闲MCU。 (图片来源:Nordic Semiconductor)
如图2所示,此设计中使用的智能传感器降低了复杂性,需要与主机进行简单的双线I 2 C连接。通过这种参考设计,Nordic演示了一种简单的方法,可以在设计占地面积上进行最小的增量交换,从而在低活动期间显着降低功耗。在这里,设计将一些传感器耦合到专用的NXP NX3DV2567模拟开关,当操作条件允许时,MCU允许MCU(通过MPU_WR_CTRL)断开特定传感器与电源,MCU中断和I 2 C总线的连接。 (图3)。
图3:Thingy硬件设计利用了集成传感器(如TDK InvenSense MPU-9250运动传感器)所需的简单硬件接口,但是增加了恩智浦NX3DV2567模拟开关,将传感器与系统分离,以节省电能。 (图片来源:Nordic Semiconductor)
开发人员可以通过添加外部设备来扩展Thingy硬件补充。四个连接器支持Grove 4针格式,允许设计人员通过大量可用的Grove兼容设备轻松添加硬件功能。额外的2 x 10引脚接头带来了额外的MCU端口,甚至包括四条缓冲线。这些线路均包含一个DiodesDMN3190LDW N-MOS晶体管,能够驱动LED或小型直流电机等外部元件。事实上,Thingy设计为设计人员提供的I/O数量超过了nRF52832自身的GPIO引脚数。 Nordic增加了一套Semtech Corp SX1509 GPIO扩展器,以增强Thingy系统设计的I/O能力。
由于Thingy的I/O可扩展性,硬件开发人员只需将外部设备连接到电路板即可创建原型设计。全面的软件平台为软件工程师提供了相同的易开发性。
软件平台
Thingy开发平台扩展了nRF52软件开发套件(SDK),并提供了一系列所需的服务。让应用程序开发人员专注于更高级别的流程而不是低级别的流程(图4)。例如,Thingy软件包添加了一层传感器驱动程序,这些驱动程序构建在SDK的外围驱动程序和硬件抽象层(HAL)上,以处理诸如配置传感器,启动或停止传感器以及检索传感器数据等操作。
图4:Thingy软件包扩展了Nordic nRF52软件开发套件(SDK),其中包含专为Thingy设计的应用级服务和实用程序模块应用。 (图片来源:Nordic Semiconductor)
Nordic通过一系列客户开发资源完善了从传感器到移动应用的物联网链。该公司提供单独的开放存储库,其中包含适用于iOS开发人员的Swift中的库和示例应用程序以及适用于Android开发人员的Java。此外,另一个开放式存储库提供了一个JavaScript库,用于开发基于Polymer Web组件库和Web蓝牙API构建的Web应用程序。
只需从Apple App商店或Google Play商店下载Nordic Thingy应用程序,开发人员就可以快速了解Thingy操作。开发商随后启动了Thingy,它采用嵌入式1440 mAh锂离子电池供电,通过USB电源连接进行充电。在应用程序发现并连接到Thingy系统后,它会提供传感器数据的运行显示(图5)。该应用甚至支持与IFTTT的连接,允许用户使用由Thingy数据触发的IFTTT事件链创建基于云的applet。
图5:配套应用程序通过蓝牙与Thingy系统交互,提供传感器数据的运行显示以及Thingy配置和固件的服务更新。 (图片来源:Digi-Key)
在Thingy参考设计和软件平台的基础上,开发人员可以快速扩展Thingy系统以满足他们自己的特定要求。开发人员可以使用KeilμVision或GCC使用ARM Cortex-M的GNU工具链编译新的Thingy固件。 Thingy系统提供安全的无线更新设施,用于加载新固件。标准的Thingy应用程序包括一个选项,用于从Nordic更新到最新版本的Thingy固件,或者由开发人员使用Nordic提供的开源实用程序创建的自定义固件包。
结论
在充满快速变化的物联网机会的市场中,开发人员面临着更快地对复杂应用程序进行原型设计的需求。虽然开发人员可以找到越来越多的物联网开发平台,但是当工程师完成与这些平台相关的复杂实现细节时,项目经常会发生绊倒。
Nordic Thingy:52通过快速原型设计平台简化了物联网开发,该平台隐藏了底层硬件设计和软件架构的复杂性。使用Nordic Thingy套件,开发人员可以快速构建支持蓝牙的多传感器系统原型 - 后来以Thingy参考设计为基础,创建自定义物联网设备。
全部0条评论
快来发表一下你的评论吧 !