【芯片驱动】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配合硬件测试(灵敏度和发射功率)的软件实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/sishuihuahua/article/details/107639094
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/200192

相关文章

使用animation.css库快速实现CSS3旋转动画效果

《使用animation.css库快速实现CSS3旋转动画效果》随着Web技术的不断发展,动画效果已经成为了网页设计中不可或缺的一部分,本文将深入探讨animation.css的工作原理,如何使用以及... 目录1. css3动画技术简介2. animation.css库介绍2.1 animation.cs

Java进行日期解析与格式化的实现代码

《Java进行日期解析与格式化的实现代码》使用Java搭配ApacheCommonsLang3和Natty库,可以实现灵活高效的日期解析与格式化,本文将通过相关示例为大家讲讲具体的实践操作,需要的可以... 目录一、背景二、依赖介绍1. Apache Commons Lang32. Natty三、核心实现代

SpringBoot实现接口数据加解密的三种实战方案

《SpringBoot实现接口数据加解密的三种实战方案》在金融支付、用户隐私信息传输等场景中,接口数据若以明文传输,极易被中间人攻击窃取,SpringBoot提供了多种优雅的加解密实现方案,本文将从原... 目录一、为什么需要接口数据加解密?二、核心加解密算法选择1. 对称加密(AES)2. 非对称加密(R

基于Go语言实现Base62编码的三种方式以及对比分析

《基于Go语言实现Base62编码的三种方式以及对比分析》Base62编码是一种在字符编码中使用62个字符的编码方式,在计算机科学中,,Go语言是一种静态类型、编译型语言,它由Google开发并开源,... 目录一、标准库现状与解决方案1. 标准库对比表2. 解决方案完整实现代码(含边界处理)二、关键实现细

python通过curl实现访问deepseek的API

《python通过curl实现访问deepseek的API》这篇文章主要为大家详细介绍了python如何通过curl实现访问deepseek的API,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编... API申请和充值下面是deepeek的API网站https://platform.deepsee

SpringBoot实现二维码生成的详细步骤与完整代码

《SpringBoot实现二维码生成的详细步骤与完整代码》如今,二维码的应用场景非常广泛,从支付到信息分享,二维码都扮演着重要角色,SpringBoot是一个非常流行的Java基于Spring框架的微... 目录一、环境搭建二、创建 Spring Boot 项目三、引入二维码生成依赖四、编写二维码生成代码五

如何在Ubuntu上安装NVIDIA显卡驱动? Ubuntu安装英伟达显卡驱动教程

《如何在Ubuntu上安装NVIDIA显卡驱动?Ubuntu安装英伟达显卡驱动教程》Windows系统不同,Linux系统通常不会自动安装专有显卡驱动,今天我们就来看看Ubuntu系统安装英伟达显卡... 对于使用NVIDIA显卡的Ubuntu用户来说,正确安装显卡驱动是获得最佳图形性能的关键。与Windo

MyBatisX逆向工程的实现示例

《MyBatisX逆向工程的实现示例》本文主要介绍了MyBatisX逆向工程的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录逆向工程准备好数据库、表安装MyBATisX插件项目连接数据库引入依赖pom.XML生成实体类、

C#实现查找并删除PDF中的空白页面

《C#实现查找并删除PDF中的空白页面》PDF文件中的空白页并不少见,因为它们有可能是作者有意留下的,也有可能是在处理文档时不小心添加的,下面我们来看看如何使用Spire.PDFfor.NET通过C#... 目录安装 Spire.PDF for .NETC# 查找并删除 PDF 文档中的空白页C# 添加与删

Java实现MinIO文件上传的加解密操作

《Java实现MinIO文件上传的加解密操作》在云存储场景中,数据安全是核心需求之一,MinIO作为高性能对象存储服务,支持通过客户端加密(CSE)在数据上传前完成加密,下面我们来看看如何通过Java... 目录一、背景与需求二、技术选型与原理1. 加密方案对比2. 核心算法选择三、完整代码实现1. 加密上