【芯片驱动】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

相关文章

C++使用栈实现括号匹配的代码详解

《C++使用栈实现括号匹配的代码详解》在编程中,括号匹配是一个常见问题,尤其是在处理数学表达式、编译器解析等任务时,栈是一种非常适合处理此类问题的数据结构,能够精确地管理括号的匹配问题,本文将通过C+... 目录引言问题描述代码讲解代码解析栈的状态表示测试总结引言在编程中,括号匹配是一个常见问题,尤其是在

Java实现检查多个时间段是否有重合

《Java实现检查多个时间段是否有重合》这篇文章主要为大家详细介绍了如何使用Java实现检查多个时间段是否有重合,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录流程概述步骤详解China编程步骤1:定义时间段类步骤2:添加时间段步骤3:检查时间段是否有重合步骤4:输出结果示例代码结语作

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

Java覆盖第三方jar包中的某一个类的实现方法

《Java覆盖第三方jar包中的某一个类的实现方法》在我们日常的开发中,经常需要使用第三方的jar包,有时候我们会发现第三方的jar包中的某一个类有问题,或者我们需要定制化修改其中的逻辑,那么应该如何... 目录一、需求描述二、示例描述三、操作步骤四、验证结果五、实现原理一、需求描述需求描述如下:需要在

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

如何通过Python实现一个消息队列

《如何通过Python实现一个消息队列》这篇文章主要为大家详细介绍了如何通过Python实现一个简单的消息队列,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录如何通过 python 实现消息队列如何把 http 请求放在队列中执行1. 使用 queue.Queue 和 reque

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景