作者:Jacob Beningo
关键词:IOT,开发工具,方案
嵌入式和物联网 (IoT) 开发团队承受着压力,需要尽快完成并交付设计。为了能够快速行动,他们需要使用经过验证且具有强大生态系统的元器件和软件框架。他们还需要研究如何维护系统,以及将来如何扩展,这意味着解决方案还需要具备可移植性,并且在需要时能够跨多种硬件平台工作。
但是,微控制器供应商经常将开发人员束缚在自己的生态系统中,这使得在微控制器之间进行切换不是那么容易。此外,微控制器生态系统的软件工具常常不足,大部分是基于C语言,这对开发团队而言也是绊脚石。
考虑到这些需求,本文将介绍Arm Mbed平台和操作系统。文中将展示开发人员如何利用Mbed生态系统来加速嵌入式产品开发,并使用它来扩展到微控制器供应商生态系统之外的世界。
什么是Arm Mbed?
Mbed是由Arm主导的面向物联网设备开发人员的在线协作体系。Mbed为开发人员提供极为丰富的资源来加速开发,从Mbed OS、Mbed TLS一直到Mbed库支持的开发板和各种元器件。
Mbed的初衷是让开发人员能够利用在线社区中200,000开发人员以及主要微控制器供应商(例如 Cypress Semiconductor、NXP Semiconductors和STMicroelectronics)所支持的大型生态系统,借助现有元器件、开发工具和库来加快开发速度。使用Mbed生态系统有许多优势:
- 库和示例均用C++编写,C++是一种现代的面向对象语言,其设计使得代码可扩展且可重用。
- 支持利用现有硬件平台快速开发嵌入式产品原型以证明其可行性。
- 使用Mbed在线和离线编译器以及Mbed命令行界面 (CLI),简化软件测试的开发(测试甚至包括在许多示例和库中)。
- 内置用于开发物联网设备的工具,例如云连接器服务,不仅简化了设备到云的连接,而且简化了通过其他基于云的服务管理设备的工作。
Mbed的通用架构模型给嵌入式开发人员提供了极大的灵活性和可扩展性。举例来说,该架构模型一般分为三个单独的层(图1):
- 低级硬件抽象层 (HAL)
- Mbed OS API,用作中间件,提供存储、RTOS、安全连接、通信堆栈等能力
- 高级物联网层,包括开发人员的应用程序代码、Mbed OS 库和连接客户端
该架构的设计方式让开发人员可以加入应用所需的组件,而省去其余工作。这使该架构具有可伸缩性和灵活性,方便开发人员用来快速开发原型,并在较短时间内将原型变为量产产品。
Mbed从硬件开始
尽管Mbed提供了良好的软件基础,但除了软件和开发软件所需的工具之外,还会提供其他功能。团队开发产品的最快方法是在使用软件的同时利用Mbed硬件生态系统。硬件生态系统包括三个不同方面:
- 模块
- 开发板
- 元器件
模块本质上是以物联网为中心的连接设备,它以经过认证且随时可用的封装形式提供。例如,开发人员若要开发一款支持LoRaWAN的产品,可以选择Multi-Tech Systems的MTMDK-XDOT-NA1-A00 xDot模块开发套件(图2)。xDot模块在视距应用中可提供长达10英里的双向通信距离,在建筑物中可提供1到3英里的双向通信距离,数据速率从每秒293位 (bps) 到每秒20Kb (kbps)。该模块使用低功耗STMicroelectronics的STM32L151CCU6处理器,其工作频率为32兆赫 (MHz),可以通过SPI、UART或I2C接口利用AT消息传递方案进行控制。
Mbed板本质上是Mbed全面支持的不同微控制器系列的开发板。每个开发板都有微控制器供应商提供的独特特性和功能。例如,对支持低功耗蓝牙 (BLE) 的开发板感兴趣的开发人员,可能会喜欢Cypress Semiconductor的CY8CKIT-062-BLE(图3)。
CY8CKIT的独特之处在于它使用多核PSoC 62安全微控制器。一个内核是Arm® Cortex®-M4处理器,第二个内核是低功耗Arm Cortex-M0+。这使开发人员可以划分应用程序代码,例如让一个处理器处理BLE通信,或者使用Cortex-M0+内核作为安全处理器来锁定应用程序。板上提供的I/O扩展可将Mbed元器件连接到系统,从而大大减轻开发人员开发系统原型的工作。
Mbed元器件是一个硬件元器件,具有Mbed支持的库及其相关的中间件,这些库和中间件充当产品开发的构件。例如,从事物联网项目的开发人员可能会决定要使用温度传感器。开发人员可以在Mbed元器件中搜索其支持的温度传感器,例如,他们可能会在外设模块中发现Maxim Integrated的MAX31723PMB1,该模块可用于快速开发原型(图4)。
此类Mbed元器件的优点在于,它们几乎总是作为开发板提供并带有原理图。这样,开发人员不仅可以查看使传感器工作所需的硬件配置,还可以使用软件库来启动和运行传感器。
Mbed并非只有像测量温度和湿度的传感器那样的简单传感器。例如,开发医疗设备的开发人员会发现,Maxim Integrated的MAXREFDES220#模块为他们提供了基于手指的心率和SpO2血氧传感器的参考设计(图5)。
此外,还有诸如Seeed Technology的114991252 VL53L0X Flow分线板之类的组件,它们可用于光线检测和3D飞行时间 (ToF) 测距等应用(图6)。例如,尝试在边缘开发基于手势的技术的开发人员,可能会对该传感器感兴趣。
开发人员选定开发板和元器件之后,便可开始利用Mbed进行开发,通过创建“Hello World” LEDBlinky应用程序来测试他们是否可以成功对开发板进行编程并使LED灯闪烁。
用Mbed编写“Hello World” LEDBlinky应用程序
开发Mbed应用程序有多种方法:通过在线编译器;通过离线编译器;或使用命令行界面 (CLI) 工具。根据个人经验,建议使用CLI,因为它能更好地控制开发过程,并且更易于集成到开发流程中,例如测试工具和连续集成服务器。
CLI提供了命令行界面功能,因此使用Windows的开发人员可以使用命令提示符来编译代码。创建LEDBlinky应用程序的第一步是使用Mbed随附的预写示例。这可以通过在命令提示符中输入以下命令来完成:
mbed import mbed-os-example-blinky
下载示例需要几分钟时间,因为还会下载 Mbed OS 和应用中可能会使用的其他支持组件。下载完成后,开发人员便可导航到 mbed-os-example-blinky 文件夹,其中有一个 main.cpp 文件。开发人员可以在自己喜欢的编辑器中打开此模块,其中代码大致如下所示:
#include “mbed.h” #include “platform/mbed_thread.h” #include “stats_report.h” DigitalOut led1(LED1); #define SLEEP_TIME 500 // (msec) #define PRINT_AFTER_N_LOOPS 20 // main() runs in its own thread in the OS int main() { SystemReport sys_state( SLEEP_TIME * PRINT_AFTER_N_LOOPS /* Loop delay time in ms */); int count = 0; while (true) { // Blink LED and wait 0.5 seconds led1 = !led1; thread_sleep_for(SLEEP_TIME); if ((0 == count) || (PRINT_AFTER_N_LOOPS == count)) { // Following the main thread wait, report on the current system status sys_state.report_state(); count = 0; } ++count; } }
开发人员可以在此进行修改,但是对于本文而言,使用默认值即可。更值得注意的是编译和部署代码。具体用来编译和部署代码的命令将因硬件而异。下面的例子显示了如何使用一条命令对Cypress CY8CKIT-062-BLE开发板进行编译和编程:
mbed compile -m CY8CKIT_062_BLE -t GCC_ARM -f
第一次编译项目可能需要几分钟,因为工具链需要构建所有自动进入Mbed应用程序的关联文件。编译周期完成后,结果应类似于下面的图7所示。
命令行中的 -f 选项将会自动获取已编译的十六进制文件,并将其复制到开发板上,开发板显示为DAPLink大容量存储设备。此时,LED应该闪烁,开发人员可以开始开发主要应用程序。
Mbed的使用技巧与诀窍
Mbed入门非常简单,但对于开发人员来说可能存在挑战。以下是关于开始使用Mbed开发产品的一些“技巧与诀窍”:
- 避免使用在线编译器。虽然这对于业余爱好者来说很好,但对于专业人士而言,让其他人的服务器拥有源代码可能是个问题。此外,来回云端可能会减慢调试速度。诸如Mbed IDE或Mbed CLI之类的本地编译器是更好的选择。
- Mbed支持多线程,但默认情况下,主函数在自己的线程中运行。
- 从Mbed示例项目开始,对其进行考察,了解如何更有效地使用Mbed应用程序。
- 利用Mbed测试工具确保应用开发没有无意间破坏Mbed框架中的任何内容。
- 使用Mbed硬件站点搜索可以快速集成在一起来开发产品的开发板、元器件和模块。
上述技巧将有助于确保开发人员尽量减少花费在嵌入式产品开发上的时间。
总结
嵌入式和物联网开发人员需要一个受到良好支持的生态系统来为他们提供现代化的工具、流程和软件,帮助他们加快开发工作并使开发成本最小。如本文所示,Mbed平台和OS是开发人员可以利用的一种潜在选择。
Mbed提供可扩展且灵活的软件架构,其中包含许多已经集成在一起并经过测试的组件。由于对各种硬件模块、开发板和元器件的强大支持,开发人员可以轻松创建产品原型,然后将其扩展成生产解决方案。
参考资料
———————————————————–
如有任何问题,欢迎联系得捷电子Digi-Key客服团队。
中国(人民币)客服
- 400-920-1199
- service.sh@digikey.com
- QQ在线实时咨询 |QQ号:4009201199
中国(美金)/ 香港客服
- 400-882-4440
- 8523104-0500
- china.support@digikey.com
到微信搜寻“digikey”或“得捷电子”
关注我们官方微信
并登记成会员,
每周接收工程师秘技,
赚积分、换礼品、享福利