【芯片驱动】2. CMT2300A配合硬件测试(灵敏度和发射功率)的软件实现

本文主要是介绍【芯片驱动】2. CMT2300A配合硬件测试(灵敏度和发射功率)的软件实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

        在开发一款无线射频产品的时候,软件是一部分,硬件也是一部分。而决定无线收发性能的,首先是硬件的匹配电路,然后才到软件部分的优化。
        一款无线射频产品,首先需要先决定是在那个频率范围内(当然是国家允许的范围内),然后硬件则需要在基于这个频点范围进行硬件的参数匹配,具体又分为发送功率匹配、天线匹配、和接收灵敏度的匹配。
        现在我们使用2300a这款无线芯片来说,除非自己的团队是射频专家,则可以自己进行无线外围电路的设计外,另外一种更加快捷的方式,就是寻找原厂技术支持,他们会给出相对较好的建议,特别是硬件设计之初,需要注意的点,绕开某个坑之类的,原厂工程师经验最为丰富。
        那么,在硬件出来之后,则需要软件配合进行一些硬件的测试。就像上面说的那三个测试一样,除开天线匹配测试(需要将产品放在实际的产品壳子内,使用网络分析仪进行匹配分析)的之外,我主要讲解如何编写测试发送功率的测试软件,以及如何编写测试接收灵敏度的测试程序。


1.发送功率匹配测试程序开发详解


 原理:

        无线射频数据发送,有一个我们俗称的发送功率,发射功率越大🈷越稳定,则说明发射的能量越大越稳定。当然,如果在发射电路上匹配一个增益放大电路的话,那么发射功率会比芯片实际设置的要大。发射功率的大小,和发射电路的匹配有关,其中还涉及到谐波、频偏等。我非硬件出身,只是略懂这些名词,具体还得请教硬件工程师。
硬件工程师则需要我们的软件配合他们测试,具体是想让我们的程序在上电后,在固定的频点一直不停的发射。软件这边的实现原理则是:使用CMOSTEK RFPDK V1.46软件生成一个指定频点的配置(如433.7MHz,具体下面会讲解),然后在程序初始化之后,直接进入TX模式,while 1死等,让无线芯片一直处于TX状态。我们需要关心射频芯片发出来的东西是什么,我们只需要关心射频芯片一直在发送数据,不停不间断的发送数据就可以来。
具体实现:
        A. 打开CMOSTEK RFPDK V1.46软件,选择2300a芯片,进行配置,这里我们使用433.7MHz,Modulation为OOK,速率为2.4Kbps,发射功率设置为芯片支持的最大功率值:20dBm,数据模式为packet包模式。具体配置如下图所示:

        需要注意的是,我们在选择速率的时候,需要查看一下频谱仪的精度,如果使用太高的速率,可能会频谱仪测试出来的数据会偏小。这是我踩过的坑,当时硬件工程已经改好匹配电路,设置了20dBm,没有增益电路,正常来说应该会出来19.2dBm左右,但是只是出来来16dBm左右,后面有经验的软件工程师修改为以上的配置,在硬件不改动的情况下,频谱仪测到的19dBm左右,才是正常。
        再说一句,在验证发射功率和接收灵敏度前,其实先应该测试spi与射频芯片是否通信上,必要的时候需要上示波器进行分析。或者根据我的前两篇相关博客进行调试,希望对你们有帮助。
        B. 完整配置表后,使用脚本将exp文件生成.h文件,在参考射频芯片的初始化demo程序进行数据初始化之后,将射频芯片切换到TX模式,然后可以写个死等的代码,此时,无线芯片就会一直处于发送状态,我们不需要关系它发什么数据。

2. 接收灵敏度测试程序开发详解


原理:
        无线射频的接收,对于射频芯片来说,就是对射频信号进行解调。射频信号经过接收电路,最终到达射频芯片,那么接收电路就需要进行对杂波的一些过滤啊,微弱数据进行放大之类的。我们不说直接使用两个模块进行收发测试的这种测试方式,因为这个不确定的因素太多。
       2300a有个数据直通模式(数据流模式),设置好频点,频偏,调制等方式后。发送方使用信号源发送0101数据,此时配置接收方(2300a)的gpio3为输出模式,将示波器接在gpio3上,示波器就可以抓到方波数据,此时肉眼就可以判断丢包是否严重,如果是规律的010101产生的方波就是连续的,如果接收差的话,看到的方波是丢数据的。

具体实现:
        A. 打开CMOSTEK RFPDK V1.46软件,选择2300a芯片,具体的配置需要根据项目具体使用那个频点,速率,频偏等参数进行配置。最重要的是将数据模式选择直通模式。如下图标红红色部分。

        B. 将exp配置文件使用脚本生成.h文件。软件部分的实现:根据官方提供的demo,对2300a无线芯片进行初始化后。需要说明的是,2300a的gpio3能在板子上引出来,方便示波器进行测试。比如说,正常我们的配置是:gpio1,gpio2默认让2300a控制天线开关,我们使用gpio3作为外部中断脚。这里因为是我们需要测试接收灵敏度,2300a收到数据后需要往外直接输出,所以我们需要将gpio3配置为输出,然后将2300a状态设置为Rx状态。至此,接收灵敏度的测试程序完成。这里我就不贴具体的代码实现了,有疑问的话欢迎交流,一起进步。


3.最后的话


        在无线产品确定后,还需要在真实的环境进行拉距离测试。官方文档上说的,直接距离以及极限的RSSI,都是在空旷环境下进行的测试,具体复杂的环境就不一样了。其实就我们接触的半年里,2300a芯片如果是同款芯片进行通信的话,理论值非常好。但是在真实的复杂环境中,抗干扰性还有待提升。我们之前是使用si4438 si4432,是比较稳定,抗干扰比较强。我们不评价好坏,只是说,选择放在适宜的产品上,将产品的效益最大化,功能满足,性能稳定是关注。
另外需要说的是(避坑):

  1. 2300a配套的demo调试版,虽然可以快速的进行数据的收发测试,但是千万不要100%相信它,目前我使用的版本,接收只能接收32个字节,之后的数据都为0;
  2. 2300a配套的demo调试版,发送也只能发送32个数据,后面的数据要么是乱码,要么是全0;
  3. 如果修改中断的产生方式,比如将下降沿产生中断改为上升沿产生中断,那么就要好好看文档,有些中断标志是需要根据极性进行取反!!!而0x68这个寄存器是不需要取反的!!!
  4. 文档中有个寄存器(0x6E)的说明和代码中的宏定义不一致,以代码中的宏定义为准;
  5. 如果在发送里有写while(1)去读寄存器标志,一定要加超时,因为2300a会出异常,整个芯片异常,此时超时后需要进行对它软件复位(2300a没有硬件复位);
  6. 接收数据的时候,要提前给2300a设置数据长度,否则会因为数据太短,很快就接收完成,而此时还没有读取中断标志而被意外清除,导致异常的情况。所以建议在接收或者发送完成后切换为接收状态时,顺便将数据长度设置长一点,比如我每次接收完后我就设置payload长度为100,这样中断标志出错的概率就少很多。

这篇关于【芯片驱动】2. CMT2300A配合硬件测试(灵敏度和发射功率)的软件实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/200192

相关文章

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测