记:sx1278芯片

2023-09-21 17:46:23

目录

lora数字接口

静态配置寄存器

状态寄存器

lora模式FIFO数据缓存

数字IO引脚映射

FIFO操作原理

lora调制解调器操作模式

LoRa调制解调器状态机序列

数据发送序列

数据接收序列

单一接收操作模式

连续接收操作模式

从FIFO数据缓存提取有效负载数据

基于前导码起始的数据包过滤


lora数字接口

lora调制解调器有三种数字接口,静态配置寄存器状态寄存器和一个FIFO缓存

静态配置寄存器

静态配置寄存器在任何设备模式下(包括睡眠模式)均可读,但仅在睡眠模式和待机模式下可写

注意:lora模式下,自动顶级定序器(TLS模式)不可用。lora配置寄存器的内容在FSK/OOK模式下是保持的。

状态寄存器

状态寄存器在接收机运行过程中提供状态信息。

lora模式FIFO数据缓存

SX1276/77/78配备了256字节的RAM数据缓存(作为FIFO),该缓存仅能通过(lora模式,SPI接口)进行访问。

除睡眠模式外,其他模式下均可读

数字IO引脚映射

SX1276/77/78的6个通用IO引脚在LoRa模式下均可用。它们的映射关系取决于RegDioMapping1和RegDioMapping2这两个寄存器的配置。

DIOx映射DIO5DIO4DIO3DIO2DIO1DIO0
00ModeReadyCadDetectedCadDoneFhssChangeChannelRxTimeoutRxDone
01ClkOutPllLockValidHeaderFhssChangeChannelFhssChangeChannelTxDone
10ClkOutPllLockPayloadCrcErrorFhssChangeChannelCadDetectedCadDone
11------

FIFO操作原理

FIFO数据缓存拥有双端口配置,因此可以在缓存内同时存储将要发送和接收的信息。

RegFifoTxBaseAddr寄存器记录将要发送信息的起始位置,RegFifoRxBaseAddr寄存器记录接收操作中写入缓存的起始位置。

默认情况下,器件上电后,以保证一半的可用内存用于Rx(RegFifoRxBaseAddr寄存器被初始化至地址0x00),另一半的可用内存用于Tx(RegFifoTxBaseAddr寄存器被初始化至地址0x80)。

然而,鉴于FIFO数据缓存固有的毗连特性,Tx的Rx的基址可以在256字节的内存区内进行设置。每个指针均可在FIFO中任意独立设置。

为了充分利用FIFO数据缓存内存将要发送或接收数据的空间,可以将RegFifoTxBaseAddr寄存器或RegFifoRxBaseAddr寄存器设置为0x00,从而使整个FIFO数据缓存仅在发送或接收模式下使用。

器件被设置为睡眠模式时,FIFO数据缓存被清空。因此,在睡眠模式下无法访问FIFO数据缓存。

然而,当器件切换到lora的其他操作模式时,FIFO数据缓存中的数据则保持不变,因此接收的数据包在控制器经过最简单的数据处理后可以被重发出去。

当一组新数据被写入已被占用的缓存单元时,只是覆盖掉旧数据(不会自行清空,除非设置为睡眠模式)。

通过SPI接口读取或写入当前数据的FIFO数据缓存单元由RegFifoAddrPtr地址指针定义。因此在进行任何读取或写入操作前,必须先将该指针初始化为对应的基地址

从FIFO数据缓存(RegFifo寄存器)读取数据或FIFO数据缓存写入数据后,RegFifoAddrPtr地址指针将自动增值

在成功完成数据接收操作时,RegRxNbBytes寄存器会定义待写入数据的所占缓存单元的大小。

RegPayloadLength寄存器则显示待发送数据所占用的缓存单元大小。

RegFifoRxCurrentAddr寄存器显示最后接收的数据包在FIFO数据缓存中的存储位置。

因此通过将RegFifoAddrPtr地址指针指向RegFifoRxCurrentAddr寄存器,即可轻松读取该数据包。

在隐式报头模式下,RegRxNbBytes寄存器是无效的,因为此时有效负载字节数必须是已知的。而在显式报头模式下,接收缓存区的初始空间与所要接收的报头携带的数据包长度一致。

注意:即使CRC无效,所有接收到的数据也都会写入FIFO数据缓存,这样可以让用户按照自定义的方式对损坏的数据进行后续操作;另外,接收数据包时,如果数据包大小超过分配给Rx的缓存空间,它会覆盖掉缓存内储存的部分发送数据。

lora调制解调器操作模式

启动lora模式后(即设置RegOpMode寄存器的LongRangeMode位),就可以查看lora调制解调器的操作模式。

通过改变RegOpMode寄存器的值,可以从任意一种模式切换到另一种模式。

操作模式描述
睡眠模式

低功耗模式。在这种模式下,仅SPI和配置寄存器可以访问,不能访问LoRa FIFO。

这是唯一允许FSK/OOK模式与LoRa模式切换的操作模式。

待机模式晶体振荡器和LoRa基带模块被开启,而射频部分和PLL则被关闭
FSTx模式这是一种用于发射的频率合成模式。选定的发射PLL处于锁定状态,并在发送频率上保持活跃。射频部分被关闭。
FSRx模式这是一种用于发射的频率合成模式。选定的发射PLL处于锁定状态,并在接收频率上保持活跃。射频部分被关闭。
Tx模式这种模式被激活后,SX1276/77/78将打开发送所需的所有模块、打开功率放大器(PA)、发送数据包,并切换回待机模式。
Rx连续模式这种模式被激活后,SX1276/77/78将打开接收所需的所有模块、处理所有接收到的数据,直到客户请求改变操作模式
Rx单一模式这种模式被激活后,SX1276/77/78将打开接收所需的所有模块、在收到有效数据包前保持此状态、随后切换回待机模式
CAD模式在CAD模式下,设备将检测已知信道,以检测LoRa前导码信号

LoRa调制解调器状态机序列

数据发送序列

在发送模式下,仅在需要发送数据包数据时才会启动射频模块、PLL模块及PA模块,这样可以优化功率消耗率。

数据接收序列

单一接收操作模式

在这种模式下,调制解调器在给定的时间窗口内搜索前导码。如果在该时间窗口结束时还未找到前导码,则芯片会产生RxTimeout中断信号并切换回待机模式。

时间窗口长度由RegSymbTimeout寄存器定义,必须为4~1023个符号。调制解调器获取前导码锁的最短时间为4个符号,缺省值为5个符号。

在有效负载结束时,如果负载CRC无效,则会产生RxDone中断信号和PayloadCrcError中断信号。然而,即使CRC无效,仍然可以在FIFO数据缓存中写入数据,以便后续进行处理。RxDone中断产生后,芯片切换回待机模式。

当RxDone或RxTimeout中断信号产生时,调制解调器都会自动回到待机模式。因此,只有在数据包到达时间窗口为已知的情况下才会使用Rx单一接收模式。而在其他情况下,应使用Rx连续模式

在Rx单一模式下,接收到数据包后,应立即关闭PLL和射频模块,以降低功耗。流程如下:

1. 将FifoAddrPtr设置为FifoRxBaseAddr。

2. 静态配置寄存器在睡眠模式、待机模式或FSRx模式下均可写入数据。

3. 通过选择Rx单一操作模式,可以启动单一数据包接收操作。

4. 接收机等待接收有效前导码。接收到有效前导码后,接收通路增益即刻被设定。随后将接收到由ValidHeader中断信号表示的有效显式报头后,开始数据包接收。数据包接收完毕后,产生RxDone中断信号。最后,芯片自动恢复到待机模式,以减少功耗。

5. 应检查接收机状态寄存器PayloadCrc,以保证数据包有效负载的完整性。

6. 如果接收到有效的数据包,则应该读取FIFO数据缓存中的数据。如果后续需要触发单一数据包接收过程,则应该重选Rx单一操作模式,以便再次启动接收程序(务必将SPI指针FifoAddrPtr重选调整到缓存的接收基地址FifoRxBaseAddr)。

连续接收操作模式

在连续接收模式下,调制解调器会持续扫描信道,以搜索前导码。每当检测到前导码时,调制解调器都会在收到数据包前对该前导码进行检测及跟踪,然后继续等待检测下一前导码。

如果前导码长度超过RegPreambleMsb和RegPreambleLsb寄存器设定的预计值(按照符号周期测量),则前导码会被丢弃,并重新开始前导码搜索。但在这种场景不会产生中断标志。

与单一Rx模式相反,在连续Rx模式下,当产生超时中断时,设备不会进入待机模式。这是,用户必须在设备继续等待有效前导码的同时直接清除中断信号。

注意:被解调字节是按照接收序列写入数据缓存区的。即新数据包的第一个字节会在上一个数据包的最后一个字节之后立即写入。在这种模式下,接收地址指针将不会重置。因此,关联微处理器MCU必须对地址指针进行处理,以保证FIFO数据缓存不会溢出。

在连续模式下,被接收数据包的处理序列如下:

1. 在睡眠或待机模式下,选择RXCONT模式。

2. 收到有效报头后,紧接着会产生RxDone中断。芯片一直处于RxCONT模式,等待下一个lora数据包。

3. 检查PayloadCrcError标志,以验证数据包完整性。

4. 如果数据包被正确接收,则可以读取FIFO数据缓存。

5. 接收过程(步骤2~4)可重复,或在需要的情况下可退出接收机操作模式。

在接收连续操作模式,仅可查看最后一个接收数据包对应的状态信息。即应在接收到下一个RxDone信号之前读取对应寄存器。

从FIFO数据缓存提取有效负载数据

为从FIFO数据缓存检索接收数据,用户必须保证状态寄存器RegIrqFlags的ValidHeader、PayloadCrcError、RxDone和RxTimeout等中断信号未意外生效,以确保数据包接收成功终止(即不应设置任何标志)。

如果发生错误,应跳过以下步骤,同时丢弃数据包。为从FIFO数据缓存检索到有效的接收数据,用户必须:

RegRxNbBytes:表示到现在为止已接收到的字节数。

RegFifoAddrPtr:精确标志了LoRa调制解调器接收数据写入位置的动态指针。

将RegFifoAddrPtr设置为RegFifoRxCurrentAddr:表示将FIFO指针指向FIFO数据缓存中最后接收的数据包的存储位置。可以通过RegRxNbBytes去读取RegFifo寄存器的数据,以提取数据包的有效负载数据。

或者,可以手动将RegFifoAddrPtr设置为RegFifoRxCurrentAddr减去RegRxNbBytes的值,使该指针从当前数据包开始,一直指向最后接收的数据包的存储位置。可以通过RegRxNbBytes去读取RegFifo寄存器的地址,以提取数据包的有效负载字节。

基于前导码起始的数据包过滤

数据包过滤的目的是确定数据包是否存在发往接收机的有效数据包。如果没有,则芯片将切换回睡眠模式,以便延长电池的使用寿命。

LoRa调制解调器会根据寻址自动过滤接收到的数据包。但SX1276/77/78却支持基于有效负载的前几个字节的内容对接收的数据包进行软件过滤。以下以4字节地址为例。地址长度可由设计人员确定。

软件数据包过滤的步骤如下:

每次接收到RxDone中断信号时,锁存start_address变量的RegFifoRxByteAddr[7:0]寄存器内容。SX1276/77/78的RegFifoRxByteAddr[7:0]寄存器实时显示由LoRa接收调制解调器写入数据缓存的最后一个字节的地址+1(或下一个字节将要写入的地址)。通过这种方式可以保证start_address变量总是包含下一个数据包的起始地址。

收到ValidHeader中断信号后,立即开始轮询RegFifoRxByteAddr[7:0]寄存器,直到该寄存器开始增值。该寄存器的增值速度取决于扩频因子、纠错码和调制带宽(隐式模式下仍然会产生该中断信号)。

只要RegFifoRxByteAddr[7:0]大于或等于起始地址+4,则前4个字节(地址)就会被存入FIFO数据缓存。可以通过读取和检测这些字节,来确定数据包是否发往该芯片,以及是否继续保持Rx模式以便接收剩下的数据包,或者在非Rx模式下,LoRa调制解调器是否恢复到睡眠模式等。

更多推荐

Git 代理(Proxy) 配置

某些情况下,我们需要通过代理才能访问特定网络环境下的git资源,git支持代理配置,支持http(s),SOCKS4/SOCKS5.HTTP(S)HTTP代理配置格式如下:gitconfig--globalhttp.proxyhttp://[proxy]:[port]实际环境下,其实我们大多数情况下,并不需要全部git

软件的开发步骤,需求分析,开发环境搭建,接口文档 ---苍穹外卖1

目录项目总览开发准备开发步骤角色分工软件环境项目介绍产品原型技术选型开发环境搭建前端:默认已有后端使用Git版本控制数据库环境搭建前后端联调​登录功能完善导入接口文档使用swagger​和yapi的区别常用注解项目总览开发准备开发步骤角色分工软件环境项目介绍产品原型展示产品的简单框架,方便后端开发人员理解业务流程,和相

Vue 使用vue-cli构建SPA项目(超详细)

目录一、什么是vue-cli二,构建SPA项目三、运行SPA项目前言:在我们搭建SPA项目时候,我们必须去检查我们是否搭建好NodeJS环境cmd窗口输入以下指令:去检查node-vnpm-v一、什么是vue-cliVueCLI(VueCommandLineInterface)是一个官方提供的用于快速搭建Vue.js项

普通卷积、转置卷积详细介绍以及用法

转置卷积(普通卷积、转置卷积详细介绍以及用法1、普通卷积操作2、转置卷积2.1Pytorch转置卷积实验1、普通卷积操作首先回顾下普通卷积,下图以stride=1,padding=0,kernel_size=3为例,假设输入特征图大小是4x4的(假设输入输出都是单通道),通过卷积后得到的特征图大小为2x2。一般使用卷积

elementui表单的验证问题

elementui表单的验证问题elementui是基于vue的一个ui框架,用起来还是挺不错的,但是有时候还是会遇到一些摸不着头脑的情况。​我在打开一个新增数据的对话框的时候出现了一个问题,明明是新增,但是一打开就出现了错误提示,这肯定是不对的,用户体验也是极其不好的。到底是什么原因导致的呢?​经过我的检查,发现主要

【leetcode】 数组二分查找

【leetcode】数组二分查找1.二分查找二分查找(BinarySearch),也称为折半查找,是一种在有序数组中查找特定元素的高效算法。它的基本思想是不断将待查找区间缩小一半,直到找到目标元素或确定目标元素不在数组中为止。这种查找方法比线性查找效率高,因为它可以快速排除掉大部分不可能包含目标元素的区间,从而减少了比

字符函数和字符串函数(C语言进阶)

字符函数和字符串函数一.求字符串长度1.strlen二.长度不受限制的字符串函数介绍1.strcpy2.strcat3.strcmp前言C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常放在常量字符串中或者字符数组中。字符串常量适用于那些对它不做修改的字符串函数一.求字符串长度1.str

FPGA project : DS18B20

本想着一天发一个实验的,这个ds18b20,耗时两天。代码写了两次,呜呜~由于第二次写代码没画时序图,所以代码和时序图一些参数有些不一致,但问题不大。这里有几件事情值得一提:1:关于状态机的编写,我觉得还是三段式比较好。2:关于生成其他时钟信号,用来做触发边沿。我不喜欢用这种方法(提一个概念“全局时钟网络”)。所以用产

heic图片如何转为jpg格式

  heic图片如何转为jpg格式?现阶段,在技术水平不断完善的基础上,图片质量越来越好了,且图片数量也越来越多。图片内容不断丰富,导致图片格式愈发多样化。为了能够保证图片的有效应用,我们有的时候需要将图片格式进行转换。例如,我们可能会遇到将HEIC格式转换为JPG格式的问题,提高图片的利用率。在进

Hive部署,hive客户端

1、Hive部署Hive是分布式运行的框架还是单机运行的?Hive是单机工具,只需要部署在一台服务器即可。Hive虽然是单机的,但是它可以提交分布式运行的MapReduce程序运行。1.1、规划我们知道Hive是单机工具后,就需要准备一台服务器供Hive使用即可。同时Hive需要使用元数据服务,即需要提供一个关系型数据

FPGA板卡启动以及LED灯带调试

环境配置软件:MobaXterm(free版本即可)下载教程参考:MobaXterm(终端工具)下载&安装&使用教程_蜗牛也不慢......的博客-CSDN博客Win32Disklmager下载教程参考:不分类工具:Win32DiskImager安装教程_win32disklmager安装教程_月挽的博客-CSDN博客

热文推荐