关于沃进科技无线模块demo软件移植问题

文章目录

    • 一、无线模块开发测试准备
    • 二、开发板硬件
    • 三、开发板默认功能
      • 上电默认界面
      • 功能选择界面
        • 数据包发送界面
        • 数据包接收显示界面
        • 射频性能测试界面
        • 参数设置界面
        • 固件信息显示界面
    • 四、软件开发
      • 软件SDK框图
        • 1、射频硬件驱动(详见./radio/myRadio_gpio.c)
        • 2、无线底层驱动API(详见./radio/其他.c)
        • 3、无线操作API(详见./radio/myRadio.c)
      • 软件移植
      • 软件架构说明

一、无线模块开发测试准备

  • 开发板:2套,包含主板、模块转接板、无线模块
    • 用于做收发测试
    • 默认出厂烧录 adapterBoardDriver_xxxxxxxxxxxxxxx工程的固件
  • 模块转接板:模块转接板可以焊接不同型号的无线模块,然后通过金手指与开发板连接
  • 开发软件包:
    • adapterBoardDriver_xxxxxxxxxxxxxxx,带屏幕显示的工程,可以选择更多的功能操作
    • VGKitBoard_xxxxxxx_easyDemo_V01,不带屏幕显示,收发测试有LED指示灯指示
    • radio,无线模块驱动库
      在这里插入图片描述

二、开发板硬件

供电:

  • 支持3种供电方式:可以通过拨动开关选择
    1. 3节5号电池
    2. USB数据线供电
    3. 2.54端子外接

显示屏: JLX19296G-382

按键: 5个功能操作按键,1个主控复位按键

  1. S1按键:向上移动光标
  2. S3按键:向下移动光标
  3. S2按键:返回上一个界面
  4. S4按键:预留
  5. S5按键:进入下一个界面,设置确定,开始
  6. RST按键:主控复位

金手指连接器P1: PCIE连接器52PINH5.2
可以通过主板上的排针选择输出到转接板的供电

USB座子P7: Micro-B座子

  • 供电
  • 串口转USB:连接电脑,可通过串口进行无线数据收发固件更新升级(按住S5按键上电即可进入固件升级模式)

SWD烧录接口P5: 可以接J-link仿真器、DAP仿真器或其他烧录器

三、开发板默认功能

  开发板出厂默认烧录带屏幕显示的工程的固件,用户拿到开发板后可以进行无线模块的收发测试,可以设置不同的频点信道、发射功率、无线波特率等。

上电默认界面

功能选择界面

数据包发送界面
数据包接收显示界面
射频性能测试界面
参数设置界面
固件信息显示界面

四、软件开发

软件SDK框图

在这里插入图片描述
  根据框图可知,与无线操作有关的软件主要集中在无线操作API无线底层驱动API射频硬件驱动,只要熟悉了这3个部分,无线应用的开发就可以如鱼得水了,SDK里的其他部分都是为了项目的功能实现而来的,需要根据不同的MCU平台和项目需求来实现和调用。
接下来详细介绍下这3部分的软件实现:

1、射频硬件驱动(详见./radio/myRadio_gpio.c)

  大部分的无线模块要想运行起来都是通过SPI接口驱动,SPI接口又分3线和4线,模块操作的时候基本是通过操作寄存器,所以对于SPI接口,只需要把SPI的字节操作接口封装好,对于寄存器操作来说3线或者4线基本没有区别,比如台湾笙科的A7169支持3线和4线SPI驱动,如果有省IO口的需求可以在3线和4线SPI选择方面做优化。
  射频硬件驱动操作一般包括:SPI接口初始化无线响应触发中断IRQ信号辅助IO(比如磐启的PAN3020有模式控制脚CE,CMOSTEK的CMT2300A有内存访问片选脚CSB和FCSB)

SPI接口初始化 注意事项:

  • 数据长度(DataSize):一般是8bit
  • 极性(Clock_Polarity):极性是指SPI的时钟脚clk空闲时的电平,是低电平还是高电平,这个每个无线模块的要求可能会不一样
  • 边沿(Clock_Phase):即是在clk的上升沿还是下降沿收发数据
  • 片选(Slave_Select_management):一般如果是使用硬件SPI的时候要特别注意。由于SPI通讯是一种总线通讯,即总线上可以并联多个SPI设备,所以可以将多个无线模块的spi引脚并联接在一起,然后通过片选脚选择不同的模块进行操作,这时每个模块的片选择都要独立控制,MISO、MOSI、CLK这三个脚可以都并联接一起。

无线响应触发中断IRQ信号 注意事项:
  一般的无线模块都有一个引脚用来做一些状态响应的中断信号,虽然有些无线模块可以通过寄存器查询的方式查询状态响应,但是这种做法是不够明智的,特别是在接收模式下,频繁操作SPI会影响无线的底噪,对于无线通讯来说这是很致命的,通讯距离会大打折扣。
  这个信号可以通过外部中断来接收或者查看电平的方式。比如发送数据时,发送完成或者发送出错模块都会通过这脚输出一个电平翻转信号出来,知道用户操作了SPI或者清除相关中断寄存器。翻转为高电平或者低电平可查看对应的芯片引脚说明。

辅助IO 注意事项:

2、无线底层驱动API(详见./radio/其他.c)

  这部分代码一般是基于SPI驱动封装一些无线模块的寄存器操作(比如寄存器的读写)和一些无线模块的基本功能操作(比如射频寄存器的初始化、PLL校准等),这部分驱动基本是要射频芯片原厂来提供,一颗无线模块性能的好坏,7分看原厂提供的这部分SDK的优化程度。

3、无线操作API(详见./radio/myRadio.c)

  这部分API是同时对接应用层和底层驱动层用的,可以说是起到承上启下的作用,更是为了方便应用层兼容不同厂家的射频芯片的驱动。因为每个芯片厂家提供驱动的封装都基本不一样,所以封装这一层API是为了给用户提供更好的API操作,统一应用层的无线操作API

软件移植

  对于单片机嵌入式开发,每个项目的开发环境都不尽相同,这时要想模块在对应的项目平台上跑起来,就需要将相应的驱动移植过来

软件架构说明

..\adapterBoardDriver_xxxxxxxxxxxxxxx_Vxx
├──app \\常用应用模块封装
|  └──
├──core    \\MCU内核文件
|  └──
├──STM32F10x_FWLib \\MCU官方库函数└──
├──image   \\md文件显示用的图片
|  └──
├──keil_v5 \\keil编译器工程文件,包含编译生成的HEX文件
|  └──Object  \\编译生成的HEX文件在此文件夹
├──peripheral  \\项目用到的MCU外设
|  └──
├──project \\项目的主函数和GPIO定义包含文件
|  └──main.c
├──radio   \\射频底层驱动文件
|  ├──myRadio_gpio.c  \\射频驱动接口硬件初始化
|  └──myRadio.c   \\为无线应用通用封装API
|  └──其他.c   \\为无线底层封装API

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/310518.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【ARM 裸机】汇编 led 驱动之烧写 bin 文件

1、烧写概念 bin 文件烧写到哪里呢?使用 STM32 的时候烧写到内部 FLASH,6ULL 没有内部 FLASH,是不是就不能烧写呢?不,6ULL 支持 SD卡、EMMC、NAND FLASH、NOR FLASH 等方式启动,在裸机学习的工程中&#x…

c语言顺序表的简单介绍

顺序表的分类: 静态顺序表物理结构上呈线性存储,而动态在逻辑结构上呈线性存储(何为线性存储?数据按照线性顺序(也称为顺序存储)排列在连续的存储单元中。)动态顺序表当空间不够时可以自行增容&…

三.音视频编辑-音频混合-概述

引言 当我们在前两篇博客中成功地构建了一个媒体组合,并且略过了音频部分时,我们意识到了我们需要对这个项目进行更详细的探讨。在本篇博客中,我们将会展示如何创建一个包含视频轨道、配音音频轨道以及背景音频轨道的完整媒体组合。更进一步…

Python setuptools简介

distutils(包分发的始祖) 简介 distutils 是 Python 的一个标准库,从命名上很容易看出它是一个分发(distribute)工具(utlis),它是 Python 官方开发的一个分发打包工具,所有后续的打包工具&…

Android IPC机制

在Android系统中,IPC(Inter-Process Communication,进程间通讯)是指在不同进程之间传送数据和通讯的机制。Android中的应用通常运行在独立的沙箱环境中的进程里,由于安全限制,这些进程无法直接访问彼此的内…

【vue】v-bind动态属性绑定

v-bind 简写:value <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><styl…

【深度学习实战(6)】搭建通用的语义分割推理流程

一、代码 #---------------------------------------------------# # 检测图片 #---------------------------------------------------# def detect_image(self, image, countFalse, name_classesNone):#---------------------------------------------------------## 在…

IDEA 找不到或无法加载主类

IDEA 中&#xff0c;有时候会遇到明明存在这个类&#xff0c;import 也没有报错&#xff0c;但编译时会报找不到或无法加载主类。 解决方法&#xff1a; 图像化操作 右侧 Maven > 根项目 > Lifecycle > clean > install 命令操作 mvn clean install

如何更好地理解 Vue 3 watch 侦听器的用法

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Vue error:can not find module ‘@/views/××ב

如果你线上环境遇到这个问题的话&#xff0c;请不要着急 因为我已经踩过坑了&#xff0c;下边咱们说一下这个原因以及解决错失。 从字面上来看是相应路由找不到模块&#xff0c;本地没有问题&#xff0c;线上有问题&#xff0c;就像是本机说话计算机能够理解&#xff0c;而线上…

M系Mac关闭SIP

文章目录 M系Mac关闭SIP一&#xff1a;查看SIP状态二&#xff1a;关闭SIP步骤 M系Mac关闭SIP 一&#xff1a;查看SIP状态 1、使用终端 打开终端 输入csrutil status&#xff0c;回车 你会看到以下信息中的一个&#xff0c;指示SIP状态 已打开 System Integrity Protection s…

康耐视visionpro-CogDistancePointLineTool操作工具详细说明

◆CogDistancePointLineTool:功能说明&#xff1a; 测量点到线的距离 备注&#xff1a;在“Geometry-Measurement”选项中的所有工具都是测量尺寸或角度工具&#xff0c;包括测量线与线的角度、点与线的距离、圆与圆的距离等测量工具&#xff0c;工具使用的方法相似。 ①.打开…

【LeetCode: 3117. 划分数组得到最小的值之和 + 动态规划】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

蓝桥杯 — —灵能传输

灵能传输 友情链接&#xff1a;灵能传输 题目&#xff1a; 输入样例&#xff1a; 3 3 5 -2 3 4 0 0 0 0 3 1 2 3输出样例&#xff1a; 3 0 3思路&#xff1a; 题目大意&#xff1a;给出一个数组&#xff0c;每次选择数组中的一个数&#xff08;要求不能是第一个数与最后一个…

分享一个 git stash 的实际使用场景。

当我将新的变更记录提交为 git commit --amend 后&#xff0c;发现这需要修改云端上的提交记录&#xff0c;也就是 vscode 中会出现这张图 于是&#xff0c;我通过 git reset head^ 撤销掉刚刚的提交。 reset 前&#xff1a; reset 后&#xff1a; 但在撤销的同时&#xf…

设计模式之观察者模式(上)

观察者模式 1&#xff09;概述 1.定义 定义对象之间的一种一对多依赖关系&#xff0c;使得每当一个对象状态发生改变时&#xff0c;其相关依赖对象皆得到通知并被自动更新。 观察者模式的别名包括发布-订阅&#xff08;Publish/Subscribe&#xff09;模式、模型-视图&#…

纯css实现switch开关

代码比较简单&#xff0c;有需要直接在下边粘贴使用吧~ html: <div class"switch-box"><input id"switch" type"checkbox"><label></label></div> css&#xff1a; .switch-box {position: relative;height: 25px…

C++ 封装

1.封装 cpp认为万事万物都可以封装 封装将属性和行为作为一个整体&#xff0c;表现生活中的事物。 将属性和行为加以权限控制。 语法&#xff1a; class 类名{ 访问权限: 属性或者行为 } //学生类 class Student { public:void setName(string name) {m_name name;}vo…

已经下载了pytorch,但在正确使用一段时间后出现No module named torch的错误

问题描述 使用的是叫做m2release的虚拟环境&#xff0c;在此环境下使用conda list可以发现是存在pytorch的&#xff0c;但是运行代码时却报No module named torch的错误。 解决方案 想尝试卸掉这个pytorch重新装一次&#xff0c;但是想卸载会提示找不到&#xff0c;想重新…

经典问题解答(顺序表)

问题一&#xff1a;移除元素 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不…