LoRa---sx1278的FIFO工作流程和应用注意事项

单开一篇,介绍sx1278的FIFO工作流程和应用设置,分析下出的一些小问题,毕竟也困扰了我几天。亦或是我比较愚钝。总之,记下来吧!

/******************************************************************************************************************************************************************************/

 SX1278的FIFO介绍:

  先贴一段datasheet的定义:   SX1276/77/78配备了256字节的RAM数据缓存,该缓存仅能通过LoRa模式进行访问。 RAM区(以下称为“FIFO数据缓存)可以完全由用户定制,用于访问接收的或发送的数据。LoRaTMFIFO数据缓存只能通过SPI接口访问。

               这些FIFO数据缓存保存与最后接收操作相关的数据,除睡眠模式之外,在其他操作模式下 均可读。在切换到新的接收模式时,它会自动清除旧内容。 

                    

  这段介绍是说,在睡眠模式下,会清空FIFO数据缓存区的数据。在其他模式都是可以读的。另外,在datasheet的其他地方有提到,FIFO数据缓存区仅在待机模式可写。

  话不多说,先贴张图:

    

  这张图可以说是很详细,一眼看过去就全清楚了。首先,在LoRa模式下,SX1278芯片接收到的数据和要发送的数据,都是存放在这个256byte的FIFO数据缓冲区中,其次,发送缓存区指针RegFifoTxBaseAddr 和接受缓冲区指针RegFifoRxBaseAddr
分别指向缓冲区的某一个位置,这个位置可以由用户自己设置,即要用多大的空间由用户自己说了算,如果一次性收发的数据量很大(小于256byte),可以把整个FIFO缓冲区当作接收或者发送缓冲区,是不是很棒呢。官方原话是这么说的(FIFO数据缓存拥有双端口配置,因此可以在缓存内同时存储将要发送和接收的信息。寄存
RegFifoTxBaseAddr明确规定了存储将要发送信息的起始位置。同样的,针对接收操作,寄存器RegFifoRxBaseAddr也显示了接收操作中写入缓存的起始位置。)

  两个基地址RegFifoTxBaseAddr 和RegFifoRxBaseAddr 默认值是0x80和0x00,即各128byte。

  再看一遍图,发现还有两个指针RegFifoRxCurrentAddr 和 RegFifoAddrPtr 。下面着重讲这两个指针(为什么?因为官方讲的太隐晦了,导致我只能猜,然后找证据):

    RegFifoRxCurrentAddr 用于连续接受模式,图中它也指向接收缓冲区FIFO,作用是记录本次接收数据的起始地址,用户在这个地方开始读取本次接受到的数据。--------为什么要用这货(RegFifoRxCurrentAddr)?由于连续接受模式,新数据包的第一个字节会在上一个数据包的最后一个字节之后立即写入,这个时候,接受指针(RegFifoRxByteAddr就是这货)已经随着接收到的数据,在FIFO中移动到了数据地址的最尾端,如果要读取RegFifoRxBaseAddr处的数据,是读不到的,因为这个地址后面没有数据,RegFifoRxCurrentAddr实质上是保存的上一个数据接受完成后RegFifoRxBaseAddr的地址值,即本次接收数据的起始地址。(应该说清楚了吧?没说清楚?下面补充!)。

    RegFifoAddrPtr用于用户读取FIFO中的数据,它指向FIFO的哪里,便从哪里开始读,读多少数据也是用户自己来定。--------那读多少数据呢?在显式报头的情况下,收到的数据包中包含了本次有效数据的长度(RegRxNbBytes ),在取得数据前,可以先获得本次数据的长度,这样就可以读出这次发送的全部数据了。

   由于datasheet关于指针的描述很隐晦,这里进行说明和举证:

    Q1、datasheet中的接收指针(The RX modem address pointer )是啥?

    A1:接收指针是这货RegFifoRxByteAddr上面已经提到了这点,那为什么是这货,举证:

      datasheet描述:可以手动将RegFifoAddrPtr设置为RegFifoRxByteAddr减去RegRxNbBytes的值,使该指针从当前数据包开始,一直指向最后接收的数据包的存储位置。可以通过RegRxNbBytes次读取寄存器RegFifo中的地址,以提取数据包的有效负载字节。(英文:it is possible to manually point to the location of the last packet received, from the start of the currentpacket, by setting RegFifoAddrPtr to RegFifoRxByteAddr minus RegRxNbBytes. The payload bytes can then be read from the FIFO by reading the RegFifo address RegRxNbBytes times. )

      这句话的意思是在连续接受模式读取FIFO中数据的另外一种方式:用RegFifoRxCurrentAddr = RegFifoRxByteAddr - RegRxNbBytes。这就说明了接收指针就是RegFifoRxByteAddr,接收数据前,它被用户指定指向FIFO中的某一个地址(缺省值为0x00),接收到数据后,它会指向接受到的数据的末尾地址。

    Q2、单次接收模式下,一次接收数据结束后,RegFifoRxByteAddr会重置为基地址0x00(或者用户设定的某一个地址)吗?

    A2、会,datasheet中有单次接收流程:用户从FIFO的基地址0x00处(如果你把基地址设置为其他值,则从你设置的值处)开始读取数据,一次读取数据结束,下次读取时,需要将再次从基地址0x00处(如果你把基地址设置为其他值,则从你设置的值处)读取,那么就是说完成每次的单次接收后,都会RegFifoRxByteAddr都会重置。(datasheet没有说明,就只能这样猜测了,没有直接证据)

      Q3、连续接收模式下,需要判断接收缓冲区满的情况吗?

      A3、需要的,datasheet中也明确说明:关联微控制器MCU必须对地址指针进行处理,以保证FIFO数据缓存不会溢出。这种情况下,就要视情况来对接收指针RegFifoRxByteAddr进行设置,只要在FIFO没有满的情况下,将接收指针RegFifoRxByteAddr指向基地址就行,当然,RegFifoRxCurrentAddr也要同时指向基地址。

     补充一下,MCU通过SPI读取接受到的数据是发送寄存器RegFifo地址(0x00)来读取寄存器中的值。

转载于:https://www.cnblogs.com/leo0621/p/7851505.html

SX1278 Lora跳频 要求接收机收到前导码后在开始跳接收机的频率 4.1.1.8. Frequency Hopping with LoRa® Frequency hopping spread spectrum (FHSS) is typically employed when the duration of a single packet could exceed regulatory requirements relating to the maximum permissible channel dwell tim. 阅读详情

相关推荐

SX1276/77/78学习笔记3 - SX1278FIFO 工作流程应用注意事项

SX1278FIFO 工作流程应用注意事项 SX1276/77/78 配备了256字节的RAM数据缓存,该缓存仅能通过 LoRa 模式进行访问。 RAM区(以下称为“FIFO数据缓存”)可以完全由用户定制,用于访问接收的或发送的数据。 LoRaFIFO 数据缓存只能通过SPI接口访问。这些FIFO数据缓存保存与最后接收操作相关的数据,除睡眠模式之外,在其他操作模式下均可读。在切换

森林之猫猫狗狗 6107

sx1278收发程序及中文版手册

sx1278收发程序及中文版手册

LoRa学习:LoRa关键参数(扩频因子,编码率,带宽)的设定及解释

LoRa学习:LoRa关键参数(扩频因子,编码率,带宽)的设定及解释 1、扩频因子(SF) 2、编码率(CR) 3、信号带宽(BW) 4、LoRa信号带宽BW、符号速率Rs数据速率DR的关系 5、 LoRa信号带宽、扩频因子编码率的设定 6、空中速率 针对特定应用,开发人员可通过调制扩频因子、调制带宽、纠错编码率这三个关键设计参数,对LoRa调制解调技术进行优化。。 ...

HowieXue 薛永浩的博客 9万+

SX1278 LoRa通讯的频率设定

如何精确计算SX1287的RF频率LoRa频率频率试验实验一:434 MHz频率调整试验总结 LoRa频率 采用扩频通讯对频率要精确计算,有文献说对单片机要进行精确的设定频率。对我们来说,SX1278频率在硬件方面不会任何改变的可能,只有在软件方面可以做出设定。在数据手册上提到的数据如下: 部件号 频率范围 扩频因子 带宽 SX1276 137~1020MHz 6-12 7.8~...

caixf的博客 1万+

LoRaWan】节点端(一)--SX1278介绍

一 简介 LoRa作为IOT的技术实现中的一种,伴随着使用该技术的产品项目逐渐增多,其优势已逐步被人们所熟知 -- 长距离与低功耗。比较适用于对数据传输量较少,传输频率不高的场合。 LoRa原理简单的说就是因为采用了扩频调制技术,从而在同等的功耗下取得更远的通信距离。具体请看其他文章介绍,本文主要偏向于实际应用。 说明:本人经验有限,此文仅...

丨晋丨 6281

LoRa SX1278通信代码学习笔记

lora sx1278

weixin_46545987的博客 4180

从零上手SX1278LoRa模块核心原理与STM32实战指南

本文详细介绍了SX1278 LoRa模块的核心原理与STM32实战应用,涵盖硬件连接、驱动代码编写、性能优化及Mesh组网等关键环节。通过具体案例代码示例,帮助开发者快速掌握LoRa技术,实现远距离低功耗通信,适用于物联网、农业监测等场景。

weixin_30859423的博客 333

深入解析SX1278 LoRa驱动移植:从SPI通信到嵌入式实战优化

SPI通信是嵌入式系统中连接微控制器与外围设备的核心接口协议,其通过主从架构全双工同步传输实现高效数据交换。在物联网远程监测场景中,LoRa技术凭借其长距离、低功耗的特性成为无线通信的关键解决方案,尤其适用于STM32等资源受限的嵌入式平台。通过剖析经典的sx12xxDrivers-V2.1.0驱动库,可以深入理解如何通过SPI操作射频芯片寄存器,实现硬件抽象层(HAL)的灵活适配。本文基于LoRa驱动移植STM32实战经验,详细拆解了驱动架构的分层设计、数据流路径以及调试过程中的常见问题,为嵌入式

weixin_33860528的博客 319

STM32L0CubeMX之lora编程笔记

该笔记主要是记录使用STM32L0xx,MCU ,升特LORA无线扩频芯片,基于SPI的编程笔记,希望能帮助到这方面有所需要的人。 Sx1278LORA扩频模块基本参数:   工作频率 :137- 525 MHz 扩散因子 :6 – 12 带宽:7.8 - 500 kHz 有效比特率:018 - 37.5 kbps 灵敏度:-111 到 -148 dBm 工作电

JoyHuangJunjie的博客 1万+

深入解析LoRa驱动移植:从硬件抽象层到STM32实战

嵌入式物联网开发中,硬件抽象层(HAL)是连接上层应用与底层硬件的关键桥梁,其核心原理在于通过统一的接口定义屏蔽不同微控制器(MCU)芯片平台的差异。这种设计模式极大地提升了代码的可移植性可维护性,其技术价值在于允许开发者专注于业务逻辑,而无需深陷于特定硬件的寄存器操作细节。在LoRa这类远距离、低功耗通信技术的应用场景中,稳定的底层驱动是设备可靠通信的基石。本文以经典的`sx12xxDrivers-V2.1.0`驱动库为例,详细剖析其分层架构,并聚焦于**硬件抽象层(HAL)**的实现与**SPI通

weixin_33796177的博客 392

双芯片信号转换系统设计与实现:PCF8591与dsPIC33FJ256GP710A应用

信号转换是嵌入式系统的核心功能,涉及模拟信号与数字信号的相互转换。通过ADC/DAC技术实现信号采集与输出,其原理基于采样定理量化处理。在工程实践中,采用专用转换芯片(如PCF8591)与高性能微控制器(如dsPIC33FJ256GP710A)的组合方案,既能扩展接口能力,又能提升处理效率。这种架构特别适合工业传感器数据采集、音频处理等多通道应用场景。I2C通信协议作为关键互联技术,确保了设备间的高效数据交换。通过合理的硬件设计软件优化,可以构建灵活可靠的双芯片信号处理系统,满足中低精度控制需求。

快马扬鞭须努力! 490

嵌入式开发实战:50个核心模块、低功耗设计与调试优化全解析

嵌入式系统开发涉及从微控制器(MCU)到嵌入式Linux的广泛技术栈,其核心在于对硬件资源的直接管理对实时性的严格保障。理解其工作原理,如中断处理、内存访问外设驱动,是构建稳定系统的基石。这些技术的工程价值在于实现高性能、低功耗与高可靠性的产品,广泛应用于物联网节点、工业控制消费电子等领域。本文聚焦于嵌入式实战中的关键模块,例如通过状态机框架管理复杂逻辑以提升代码可维护性,并深入探讨了基于DMA的双缓冲机制实现高效串口通信,从而优化系统性能。这些经过验证的解决方案,旨在为开发者提供从驱动封装到系统优化

weixin_34315485的博客 342

STM32WL5x双核sub-GHz无线MCU实战:从射频匹配到低功耗设计

从无线通信的频段选择说起,sub-GHz频段凭借波长长、绕射强等特性,在远距离低功耗场景中优势明显。STM32WL5x作为集成sub-GHz无线电的双核MCU,采用Cortex-M4+M0架构,将射频协议栈与应用程序分离,结合LoRa调制实现高链路预算。实际工程中,射频匹配网络与天线设计直接影响通信质量,需关注阻抗匹配、PCB布局及频段配置。本文基于STM32WL5x参考手册与调板经验,梳理从CubeMX配置到点对点通信的完整链路,并讨论低功耗唤醒、常见射频问题排查等落地要点,帮助开发者快速上手。

weixin_33868027的博客 404

LoRa---SX1278

LoRaSX1278 LoRa介绍 sx1278支持FSK GFSK MSK GMSK LoRa OOK调制,分为Lora调制解调器FSK/OOK调制解调器,根据选定的模式可以选择传统的FSK/OOK调制技术或Lora扩频调制技术,这里对主要对Lora模式做一些介绍。 LoRa是一个基于线性调制的无线网络标准。 线性调制: 线性调制代表“压缩高强度雷达脉冲”,这是一个频率随时间增加或者减少的...

qq_28609735的博客 2910

求教SX1278多信道同时通信的问题

origin; http://www.amobbs.com/thread-5624664-1-1.html 最近用SX1278做了一套组网设备,希望能够多套网络在同一区域内同时运行。使用的LoRa模式,发射功率1W,带宽125kHz,扩频因子为6。 距离较近的情况下(10米以内): 1、当频点间隔1M时会出现信道串扰,即信道1会接收到信道2的数据。 2、当频点间隔10M时两个信道之间会互相

yazhouren的专栏 1万+

LoRa笔记02 LoRa sx1276 sx1278的发射功率研究

发射功率也是射频基础指标,目前SX1278可以支持最大20dBm。今天在了解LoRa SX1276 的发射功率,看别人代码感觉很奇怪,跟寄存器不相符。先做个梳理,明天去拿设备再验证下。

IoT小能手 3万+

sx1278lora模块常见问题解答

转发请注重原创出处,谢谢! 问:LoRaWAN数据速率是多少? 答:对于LoRa来说,LoRaWAN数据速率范围在0.3kbps到11kbps之间,欧洲地区GFSK数据速率是50kbps。在北美地区,由于FCC限制最小数据速率是0.9kbps。为使终端设备的电池寿命总体网络容量最大化,LoRaWAN网络服务器通过自适应数据速率(ADR)算法对每个终端设备数据速率RF输出分别进行管理。ADR...

u013184273的博客 1万+

记:sx1278芯片

在这种模式下,

weixin_47077788的博客 2044

STM32F030 Lora射频模块SX1278学习过程

"sx1278.h"#define LR_RegFifo 0x00 //FIFO读写访问,当器件处于睡眠模式时,FIFO被清零,无法访问#define LR_RegOpMode 0x01 //运行模式 LoraFSK选择#define LR_RegFrMsb 0x06 //RF载波频率最高有效位#define LR_RegFrMid 0x07 //RF载波频率中间有效位。

qq_55021160的博客 3326
上一篇: 委托和事件的区别
下一篇: Opencv学习笔记------Harris角点检测
weixin_30721077
博客等级 码龄11年 98粉丝 1381原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值