前言
2023年Zephyr开发者大会(ZDS)于6月27日至30日在捷克布拉格隆重举行。与以往两次不同,本次ZDS由Zephyr项目规划和管理,并作为首届嵌入式开源峰会(EOSS)的一部分进行。在这个令人期待已久的盛会中,全球Zephyr开发者们共同探讨了Zephyr实时操作系统(RTOS)的最新技术与发展趋势。作为一款开源、灵活和可扩展的嵌入式实时操作系统,Zephyr项目在2014年由英特尔发起,2016年作为Linux基金会项目正式面向公众启动,得到了全球范围内的广泛关注和采用。
ZDS 2023共70余个技术报告,涵盖了使用指导与展示、新功能与技术、架构修改与操作系统、多核异构与虚拟化、模拟器、测试、工业流程与代码管理、安全性、应用案例、工具与调试等丰富多样的内容。湖大嵌入式实验室的小伙伴们将对本次大会的所有技术报告进行逐一收集、整理与分享,尽最大努力为Zephyr开发者提供ZDS 2023技术报告的开发经验、实践成果以及解决方案的参考。
今天分享第63篇技术报告,由胡宇昊整理,题目为:
“基于Zephyr&pytest测试无线物联网产品”
作者简介
Andreas Müller
嵌入式开发主管,Gardena (Husqvarna Group)
Andreas Müller拥有电气工程背景,是Gardena物联网产品线的嵌入式开发人员。
Reto Schneider
高级嵌入式开发人员,Gardena (Husqvarna Group)
Reto Schneider 拥有计算机科学背景,是 Gardena 物联网产品线的嵌入式开发人员。
文章简介
本篇工作主要是分享测试基于Zephyr的专有sub-GHz无线协议的经验。解释了如何使测试平台免受不必要的射频干扰,以及如何确定性地重新引入干扰,讨论了使用 USB 的一些冒险经历、发现哪些硬件工具非常有用,以及在什么情况下即使是非常便宜的工具也足以取代昂贵的测试设备。在软件方面,报告讨论了 Zephyr 的各种有用功能、使用 pytest 测试物理设备,以及其他一些有价值的开源工具,如 GNU Radio 和 Scapy。虽然在嘈杂的射频环境中测试物理产品是一项艰巨的挑战,但本讲座展示了各种工具和开源产品如何帮助每个人更轻松地完成任务。
背景
上图是Gardena智能系统,主要由几个花园中常用的设备组成,支持物联网,能与用户家中的网关通信(基于赫兹射频通信,使用Lemonbeat的专有协议)。目的在于想要提高独立性,不再专注于单个MCU,因此选择弃用裸机系统并保存模型。并且保证了向后兼容性,在重构整个系统的基础上,充分考虑了用户需求以及设备兼容,故保留了RF通信通道。
无线电通信与屏蔽
如何避免射频干扰?
下图是某个应用程序TQR-X的截图:在其中可以看到频谱(就像在频谱分析仪中看到的) ;x轴上的频谱大概是860到870兆赫兹;y轴上的下半部分为振幅。可以看到频谱非常干净,干扰过多。
而当时间来到一些时间段,可以看到出现许多干扰频谱,这些频谱非常接近我们的频道,这也是为什么开发的一些功能在下午还能正常运行而到晚上却开始错误频出。在使用这个程序测试后,才发现原因。最后我们尝试在办公室开始测试:包括四个团队20+的网关和50+的设备,所有的设备都在使用RF频谱发射内容。理想情况下,协议如果完成,这些影响并不重要,但在开发过程中,并未有所有的安全机制,因此开发变得困难。对此的应对方案有:1.将测试协调到干扰较少的时间段,但是发现这样比较困难而且不灵活;.2将测试转移到干扰少的隐蔽地点,但这种方法昂贵且繁琐。因此最终我们的最佳选择是屏蔽测试系统。
补充知识1:Bel(B)、dB和dBm。Bel贝尔,表示比例的对数值;dB分贝,贝尔的十分之一(分);dBm 是功率值,以 1 mW 为基准的 dB。
补充知识2:Link Budget链路预算(过度简化),计算射频功率的增益和损耗;发射功率与最弱 RX 信号之差(即我们仍能接收到的最低功率)
对于射频屏蔽,需要考虑的问题:1.为实现有效屏蔽,设备必须完全封闭在导电材料中;2.未经过滤的连接(USB 等)会产生干扰;3.经验法则:具有开口的外壳(最长尺寸)小于干扰信号波长的1/20,可提供20 dB的屏蔽效果。
我们采用电阻式的对称功率分配器来连接所有设备,然而市面上的商用分配器都成本过高。因此我们选择自己DIY一个,不仅在所需频率下工作良好,而且成本低、便宜、无外壳/无屏蔽、适用于测试。
最终成果图如下:
SDR 和 GNU Radio
什么是SDR?Software-define radio (SDR):用软件而非硬件构建无线电,即选择软件来进行信号处理,例如信号过滤、调制/解调等。然而实际上,我们的模数转换器是有限的(采样率、位深度等),因此需要模拟前端(如滤波、混频至中频),以及需要通用SDR硬件。
对于硬件的选择,可以以下列信息作为参考:仅RX与RX/TX、目标频率、所需带宽/采样率、全双工与半双工、所需的时钟稳定性、所需通道数、空间(最好将SDR放在屏蔽箱内)。
用硬件做什么:检查干扰,产生干扰(如 噪音或特定信号类型等),发送和接收数据包
(可与 scapy结合使用,允许使用假头值(→模糊化)),还能进行基本定性测量(如检测信号是否存在以及振幅等,但精度不高)。
什么是GNU Radio?GNU Radio是一个免费开源软件开发工具包,提供信号处理模块以实现软件无线电。GNU Radio模块:相当于Mini-Circuits的软件组件。那么有什么用处呢?主要功能有三个:
可快速构建 DR流程图
免费提供多种协议实现
虚拟和物理测试的实现方式相同
python测试
工具选择:pytest
工具介绍:pytest 是一款成熟的全功能 Python 测试工具,能够帮助开发者编写更好的程序,同时也非常适合基于硬件的测试。
固定装置,能以非常简短的方式为测试设置提供确定、可靠和一致的上下文;唯一需要做的就是监听特定端口的网络服务器以及定义硬件状态。注意,请使用合理的作用域和依赖关系,以及隐藏夹具的复杂性,尽量保持测试简单。
举例:
假设我们有一个名为电源的固定装置,它除了初始化电源外不会做更多的事情,并且效果显著;假设将其返回给测试代码,其中测试代码可以用其做任何事;则在会话范围内执行是有意义的,因此每次测试运行只完成一次;而下面有一个固定装置,事实上它重用了上面的固定装置,同时还使输出的功率设置了某一值。
Pytest与Zephyr的集成:
手动测试
能使用 pytest 的 shell命令
许多有用的现有模块,如 net、kernel
能自己的代码随意添加新的 shell 命令
总结
为什么要使用物理设备进行测试?
在开发过程中有用
在维护期间有用
防止回归
建立模型并对 868 MHz 频谱的发展做出反应
有什么帮助?
屏蔽和电缆连接设置,实现可重复性
pytest 非常适合基于硬件的测试
-
SDR 和 GNU Radio 对射频工作帮助很大