OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 37935|回复: 94

SX1278芯片LoRa通信官方驱动源码详细讲解

  [复制链接]

15

主题

137

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1427
金钱
1427
注册时间
2019-4-22
在线时间
272 小时
发表于 2019-9-27 14:24:18 | 显示全部楼层 |阅读模式
本帖最后由 1209943162 于 2020-5-18 22:05 编辑

       这段时间一直在搞SX1278芯片的LoRa通信,用的是周立功的模块,因为这次写的程序关于一个项目,所以就不能把源码全部传上来,但是我会把SX1278官方的驱动源码传上来。有人可能会想,网上那么多SX1278的官方驱动源码驱动,要你的干嘛?因为我把官网源码都用自己的理解方式加了很多中文注释,并且删去了不必要的文字,让代码看上去更加简洁。看过SX1278官方驱动源码的网友都知道,有好几个文件代码量都是上千行。当然,更重要的是,你用我的源码再配合着我后面的讲解你会更明白一点。本次讲解的是全方位的透析SX1278的官方驱动源码,希望能给很多初学者帮助,但我希望的是,初学者们不要抱着会用这个模块,会调用一些函数就好了,我希望都能抱着完全的学习态度,去一点一点的去透析每一段源码。相信我,这样一个过程坚持下去你会收获很大。

       看过我以前写过帖子(有点菜,哈哈)的网友可能会知道我讲解原理性的东西很少,更多讲的是如何分析代码,但不代表原理性的东西不重要,而这些就需要初学者们去百度了。好了不废话,我开始正式讲解了。


       首先在看代码的时候,先要明白几个最基础的概念性东西,这几个一定要记住,因为它贯穿整个代码。(参考帖子:https://blog.csdn.net/miao19920101/article/details/79110240
      1.扩频因子(SF):扩频设置用的,扩频因子越大,信噪比越高,传输距离越远,传输速率越低。
    2.低噪声放大器(LNA):这个是把天线接受到的信号进行放大,为解码做准备的。
      3.信噪比(SNR):信号和噪声的比值,信噪比越高,说明信号干扰越小。  
    4.扩频调制带宽 (BW):宽也表示传输速率,这里的带宽指的是频宽,即频段的频率宽度,它决定了中心频率的上下频率。比如中心频率433MHZ, 带宽是2MHZ,则通信的频谱(信道)的频率为432MHZ~434MHZ
    5.功率放大器(PA)就是常说的功放,用来放大信号的。
      先讲上面5个概念,当然还有很多概念还需要了解,这靠你们自己去查了,我只是列举出我觉得重要的几个。

   到代码后,你们会看到很多 .C 和 .H 的文件,你可能会不知所措,不知道每一个文件的代码有什么用,但是别急,我这里给你分析。(可能我后面讲的有点少,因为我在官方驱动源码中注释了了很多,你对着我的代码看我的讲解就能懂了,我这里只是引导你怎么去理解源码,但是具体的理解还得靠你自己,因为我只是给方法
我这份驱动源码一共有9个.C的文件,但是因为我们用的是LoRa模式,所以Fsk那两个文件我不会去讲。

     platform.h:这个文件主要是关于你平台的选择,比如你用的是SX1278呀还是SX1276呀啥的以及一些芯片的具体型号呀,这些东西都用宏定义给你定义好了,你用的哪款芯片就把该宏定义置1。

      sx12xxEiger.h:这个文件其实很简单,就是官方为了方便你移植,所以给你了一个初始化函数,还有一个延时函数,基本上我们都不用这几个函数,大家就大概看看就好。

     radio.h和radio.c:这两个文件主要是定义了一个结构体,这个结构体里面定义了常用的一些函数,意思就说,我原本定义了一个函数,现在又是把我定义的这个函数赋给了我这个结构体里面定义的函数,这样做的好处就是,我通过这个结构体我就能大致了解到我用到了那些常用的函数。但是我没用这种方式,我是直接用的定义函数,因为用结构体方式每次我要跳转去看这个函数的具体源码就很麻烦。除结构体以外,这个函数的.H文件还定义了一个很重要的枚举变量,这些变量在sx1276-LoRa.c文件用到。

      fifo.h和fifo.c :这两个文件顾名思义,肯定是关于fifo相关操作的函数,比如往fifo里面读数据,写数据,又或者判断fifo是否满了又或者是否为空。这些函数的作用我都注释的有。

      sx1276-Hal.h和sx1276-Hal.c:这两个文件主要是关于底层硬件,比如IO配置,IO初始化,读写寄存器和fifo的函数。在sx1276-hal.c文件中10行~53行就是关于IO配置的一些宏定义,你要改引脚直接改这里就行。这个文件具体用了哪些函数以及每个函数的作用,可以去它的头文件里面去看,里面我都注释的有。

      以上几个文件我觉得算是偏底层的函数了,就是一些最最基本的函数,而后面我要讲的几个文件就是关于SX1278实际性的操作。

      sx1276.h和sx1276.c:先看头文件,里面有个这个数组 SX1276Regs[0x70],这个数组是用来存放SX1276芯片寄存器的地址,从0x70这个数就能了解到,sx1276是有多么多的寄存器了。然后再看SX1276_Init( void )和SX1276_Reset( void )两个函数,一个是用来初始化SX1276芯片,一个是复位SX1276。然后你会发现这个头文件里面在这两个函数的后面还有很多函数,但是最后都没用到,因为在官方驱动源码中分别在lora和fsk这两个文件中又分别定义作用完全相同的代码。举个例子,SX1276SetOpMode这个函数,在fsk里面就被定义为SX1276FskSetOpMode,而在lora里就被定义为SX1276LoRaSetOpMode,虽然他们名字不一样,但是作用是一样的。

       sx1276-LoRa.h和sx1276-LoRa.c:先看头文件sx1276-LoRa.h 9行~25行的代码,这是一个结构体,这个结构体里面的参数很重要,大家一定要搞懂,否则后面配置的时候你会懵逼的,而每个参数的作用我都注释了,具体的看源码。然后后面你会看到一大堆的宏定义,其实这些都是SX1276芯片的寄存器宏定义以及一些寄存器宏定义操作。可能大家可能会说,这么寄存器我怎么去记呢,这里我有个建议,我们当然不用去记,但我们需要用到一个很重要很重要的东西——数据手册,数据手册大家一定要学会怎么去看,因为很重要的东西里面都讲了,比如每个寄存器的作用,该怎么操作寄存器都可以在数据手册中找到。所以大家可以先不管每个寄存器的作用,当你看后面源码时,用到那个寄存器你再去查该寄存器的作用,当然,这些我在源码都注释了。再往后面看,你就会看到很多自定义的函数了,而这些大部分函数跟SX1276.h里面定义的函数作用一样的。我们再看sx1276-LoRa.c这个文件,里面有个SX1276LoRaProcess( void )函数,这个函数特别特别重要,它关系了你是否能发送,是否能接受,以及各种发射和接收的初始化配置,这个函数每一步骤我觉得难点的地方都注释了,大家看着注释来。
       sx1276-LoRaMisc.h和sx1276-LoRaMisc.c:这两个文件其实就是用来配置SX1276的一些功能或者得到一些功能信息的函数,比如设置发射功率呀,得到发射功率呀,设置操作模式呀,得到操作模式呀,具体还有那些作用大家都可以在源码注释中看。

      

        好了,我就讲这些了,实在写不下去了,说实话,我都感觉我讲的没啥干货,特别水,很多地方都是让你们自己看源码注释。但是,其实我也没办法,这么庞大的驱动源码光用文字来讲,真的很难给你们讲懂。你们如果是真的想搞懂SX1276这块芯片怎么用的,我建议还是好好分析源码,看数据手册,查资料,我这里更多的是给你思路。虽然这样的过程很艰辛,但是你坚持下来收获一定很大,不管是代码功力上还是解决问题上,都会有很大的提升。像我自从搞懂这块芯片后,我觉得给我任意一块模块芯片,只要给我官方例程和数据手册,我就能很快的搞懂这个模块使用,而绝对不是仅仅只会调用函数而已。好了,大家加油吧!
       最后分享几个也是由正点原子贴大佬们写的代码,这些都是完整的代码
       http://www.openedv.com/forum.php ... 67&highlight=SX1278
       http://www.openedv.com/thread-278024-1-1.html




2020.5.18           
     原来上传的那份我给删掉了,新上传的例程重新包含这我对官方驱动源码的的注释。

     上传一份当初的第一个版本例程,用战舰写的,模块用的是周立功的。不过可能写的有点不好,希望能给一定的参考。(看代码时,先看下readme.txt这个文件)

      注:以后有问题的老哥们,不要叫我前辈啥啥的啦,我真的承受不起,叫我老哥老弟啥的都可以。其实我也很菜,而且我目前就一个考研狗。我写这些就希望我的经验能给后面接触的人一点小小的帮助,少走一些弯路。然后也希望最后搞定的人,也能最后写一份总结的帖子,这样以后接触的人就能少走很多很多弯路了。

主机(STM32F103ZET6).zip (6.46 MB, 下载次数: 8532)
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

271

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1236
金钱
1236
注册时间
2015-5-14
在线时间
352 小时
发表于 2020-3-19 14:54:25 | 显示全部楼层
不要用这个驱动了,原厂已经不维护了,建议升级到最新驱动,从这里下载:https://github.com/Lora-net/LoRaMac-node
30年众生牛马,60年诸佛龙象!
回复 支持 2 反对 0

使用道具 举报

15

主题

137

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1427
金钱
1427
注册时间
2019-4-22
在线时间
272 小时
 楼主| 发表于 2019-10-15 15:39:20 | 显示全部楼层
yoka 发表于 2019-10-7 10:55
楼主您好,看了您的帖子,感觉您对LORA了解的真的很透彻,我是小白,想从头自己写一个LORA代码,但不知道怎 ...

LORA官方有驱动源码,就是我发的这个,你要是能把里面百分之90几的代码看懂就完美了。当然,里面可能有一些概念性的知识,比如信噪比之内的,这些就需要你不断百度看别人怎么介绍的。而最关键的怎么配置,其实你把源码硬啃完,你就大概了解里面是怎么回事,里面的重点就是学会看数据手册,数据手册有每个寄存器的详细介绍。可能这样看着很头痛,但是坚持下来收获一定会很大。
回复 支持 1 反对 0

使用道具 举报

15

主题

137

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1427
金钱
1427
注册时间
2019-4-22
在线时间
272 小时
 楼主| 发表于 2020-4-10 17:33:42 | 显示全部楼层
451279786x 发表于 2020-4-10 17:27
抛开看门狗
问题是第一次大概率发送失败,能不能帮看看?

这个还是得靠你来调试的,一步一步打断点看是哪一步出了错。反正这也是一个学习的过程嘛。你也可以看看我帖子里放的那两个链接,链接里都是大佬们写的完整的能用的工程代码,你可以去参考参考。
回复 支持 1 反对 0

使用道具 举报

0

主题

13

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2019-8-19
在线时间
9 小时
发表于 2019-10-7 10:51:57 | 显示全部楼层
真的很佩服,很多注释的都很详细!
回复 支持 1 反对 0

使用道具 举报

0

主题

13

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2019-8-19
在线时间
9 小时
发表于 2019-10-6 21:20:21 | 显示全部楼层
很好呀,我感觉收获很多。对,想问下吧主,这些驱动源码在原子哥给的程序里面也有么?还是原子哥依照源码改写名字了?
回复 支持 反对

使用道具 举报

0

主题

13

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2019-8-19
在线时间
9 小时
发表于 2019-10-7 10:17:06 | 显示全部楼层
platform.h:这个文件主要是关于你平台的选择,比如你用的是SX1278呀还是SX1276呀啥的以及一些芯片的具体型号呀,这些东西都用宏定义给你定义好了,你用的哪款芯片就把该宏定义置1。

代码如下:
#ifndef __PLATFORM_H__
#define __PLATFORM_H__

#ifndef __GNUC__
#define inline
#endif

//平台的定义
#define Bleeper                                     3
#define SX1243ska                                   2
#define SX12xxEiger                                 1
#define SX12000DVK                                  0

//平台的选择。
//请取消平台定义并选择您的平台,或在编译器定义选项上添加/更改平台定义
#define PLATFORM                                    SX12xxEiger

#if( PLATFORM == SX12xxEiger )     //如果PLATFORM == SX12xxEiger就定以下面的东西

        //lora模块型号的选择。
        //请取消对所需电台的注释,并对其他平台进行注释,或在编译器定义选项上添加/更改所需型号定义
        #define USE_SX1276_RADIO
        //#define USE_SX1232_RADIO
        //#define USE_SX1272_RADIO
        //#define USE_SX1243_RADIO

        //模块的选择。
        //SX1276现有三个模块。请将连接的模块设置为值1,并将其他模块设置为0
        #ifdef USE_SX1276_RADIO
                #define MODULE_SX1276RF1IAS                     0
                #define MODULE_SX1276RF1JAS                     0
                #define MODULE_SX1276RF1KAS                     1
        #endif

        #include "sx12xxEiger/sx12xxEiger.h"
        #define USE_UART                                     0

#elif( PLATFORM == SX12000DVK )   //如果PLATFORM == SX12000DVK就定以下面的东西

        #define USE_SX1276_RADIO
        //#define USE_SX1232_RADIO
        //#define USE_SX1272_RADIO
        //#define USE_SX1243_RADIO
        #include "sx1200dvk/sx1200dvk.h"

#elif( PLATFORM == SX1243ska )   //如果PLATFORM == SX1243ska

#elif( PLATFORM == Bleeper )     //如果PLATFORM == Bleeper就定以下面的东西
    #define USE_SX1272_RADIO
   
    #include "bleeper/bleeper.h"
    #define USE_UART                                       0

#else                         //如果PLATFORM没有定义
    #error "Missing define: Platform (ie. SX12xxEiger)"
#endif


void Soft_delay_us(u16 time);
void Soft_delay_ms(u16 time);


#endif

答主,这里面没有ssx1278吧
回复 支持 反对

使用道具 举报

0

主题

13

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2019-8-19
在线时间
9 小时
发表于 2019-10-7 10:55:56 | 显示全部楼层
楼主您好,看了您的帖子,感觉您对LORA了解的真的很透彻,我是小白,想从头自己写一个LORA代码,但不知道怎么下手,不知道怎么配置,能否稍微指点一下,谢谢楼主。
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2019-10-15
在线时间
4 小时
发表于 2019-10-15 10:38:48 | 显示全部楼层
感谢楼主代码,最近要用LoRa感觉一头雾水,下载学习一下。
回复 支持 反对

使用道具 举报

15

主题

137

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1427
金钱
1427
注册时间
2019-4-22
在线时间
272 小时
 楼主| 发表于 2019-10-15 15:33:32 | 显示全部楼层
yoka 发表于 2019-10-6 21:20
很好呀,我感觉收获很多。对,想问下吧主,这些驱动源码在原子哥给的程序里面也有么?还是原子哥依照源码改 ...

原子上没有的,这是在官网下载的驱动源码然后移植过来的
回复 支持 反对

使用道具 举报

15

主题

137

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1427
金钱
1427
注册时间
2019-4-22
在线时间
272 小时
 楼主| 发表于 2019-10-15 15:34:36 | 显示全部楼层
yoka 发表于 2019-10-7 10:17
platform.h:这个文件主要是关于你平台的选择,比如你用的是SX1278呀还是SX1276呀啥的以及一些芯片的具体型 ...

其实SX1278和SX1276和SX1277的驱动源码非常相似,所以这里没有SX1278也没关系
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2019-6-4
在线时间
3 小时
发表于 2019-11-4 21:16:33 | 显示全部楼层
已下载,不错
回复 支持 反对

使用道具 举报

2

主题

20

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
280
金钱
280
注册时间
2019-5-8
在线时间
81 小时
发表于 2019-11-5 14:59:09 | 显示全部楼层
学习一下,支持
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2019-5-18
在线时间
12 小时
发表于 2019-11-19 10:55:41 | 显示全部楼层
请问这个可以传输多远的距离呢,我做的为什么只能传几百米,改配置也不行
回复 支持 反对

使用道具 举报

15

主题

137

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1427
金钱
1427
注册时间
2019-4-22
在线时间
272 小时
 楼主| 发表于 2019-11-20 16:18:30 | 显示全部楼层
niyu 发表于 2019-11-19 10:55
请问这个可以传输多远的距离呢,我做的为什么只能传几百米,改配置也不行

我看了官方的测试数据手册,在一般城市下的条件下的测试结果在300米到600米左右。在空旷条件下的能达到4km。
关于距离其实我也能纳闷,我当初在学校测试也只能在500米左右有效且正常。当然,其实还能更远,但是那样发送数据和接收数据时间太长了。
回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2019-5-10
在线时间
11 小时
发表于 2019-11-27 12:19:42 | 显示全部楼层
LoRa模式下,SX1278如何在发送数据和接收数据之间切换呢?
回复 支持 反对

使用道具 举报

15

主题

137

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1427
金钱
1427
注册时间
2019-4-22
在线时间
272 小时
 楼主| 发表于 2019-11-27 17:35:41 | 显示全部楼层
Limints 发表于 2019-11-27 12:19
LoRa模式下,SX1278如何在发送数据和接收数据之间切换呢?

我直接这样给你讲,讲了你也会听不明白。你去分析源码SX1276LoRaProcess( void )这个函数,你就清楚了,SX1278接收、发送、初始化、还有各种模式配置全在这个函数里面。
回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2019-5-10
在线时间
11 小时
发表于 2019-11-28 10:36:25 | 显示全部楼层
1209943162 发表于 2019-11-27 17:35
我直接这样给你讲,讲了你也会听不明白。你去分析源码SX1276LoRaProcess( void )这个函数,你就清楚了,S ...

用的是SX1276LoRaGetRxPacket()和SX1276LoRaGetTxPacket(),这两个函数,不是网上的“PiNG”“PONG”的实验例子,这些有什么分别呢?
回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2019-5-10
在线时间
11 小时
发表于 2019-11-28 10:38:42 | 显示全部楼层
Limints 发表于 2019-11-28 10:36
用的是SX1276LoRaGetRxPacket()和SX1276LoRaGetTxPacket(),这两个函数,不是网上的“PiNG”“PONG”的实 ...

我数据单收,单发都是没问题的,但收发放在一起就不行了,要不只能收,要么只能发
回复 支持 反对

使用道具 举报

15

主题

109

帖子

0

精华

高级会员

Rank: 4

积分
825
金钱
825
注册时间
2016-6-28
在线时间
160 小时
发表于 2019-11-28 10:40:49 | 显示全部楼层
你好,在这个u8 LoRaTxData (u8 *pbuf, u8 size ,u8 *pcrcbuf ,u8 crcflag)函数里面,        SX1276LR->RegPayloadLength = size;
回复 支持 反对

使用道具 举报

15

主题

109

帖子

0

精华

高级会员

Rank: 4

积分
825
金钱
825
注册时间
2016-6-28
在线时间
160 小时
发表于 2019-11-28 10:44:30 | 显示全部楼层
你好,在这个u8 LoRaTxData (u8 *pbuf, u8 size ,u8 *pcrcbuf ,u8 crcflag)函数里面,      
SX1276LR->RegPayloadLength = size;
SX1276Write( REG_LR_PAYLOADLENGTH, SX1276LR->RegPayloadLength +4);
说这不包括CRC长度,怎么还加4.
SX1276WriteFifo( pbuf, SX1276LR->RegPayloadLength );
那这里写入FIFO的长度,已经大于pbuf的本身长度了。
        if(crcflag==1)
        {
                if( size<(256-4) )
                        SX1276WriteFifo( pcrcbuf, 4 );
                else
                        return 1;
        }
然后在这又把CRC写进去了,就是搞不懂前面那个+4的地方?麻烦解答一下

回复 支持 反对

使用道具 举报

15

主题

137

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1427
金钱
1427
注册时间
2019-4-22
在线时间
272 小时
 楼主| 发表于 2019-11-28 15:53:16 | 显示全部楼层
zhanming1990 发表于 2019-11-28 10:44
你好,在这个u8 LoRaTxData (u8 *pbuf, u8 size ,u8 *pcrcbuf ,u8 crcflag)函数里面,      
SX1276LR-> ...

你再仔细看看我的注释,我说的是负载的长度不包括crc长度,但是后面+4是因为我要把总的长度写入 REG_LR_PAYLOADLENGTH这个寄存器里面去。还有就是你可能把SX1276Write和SX1276WriteFifo这两个函数搞混了,前者只是写寄存器操作,后者是要把你要发送的数据写到fifo里面去,这样到时才能发送你的数据。总的来说,最开始没有加4,是因为我想得到有效的数据长度是多少,这个有效数据长度不包括crc。后面又加4,是因为我要把crc数据写到fifo里面去,这样才能发送出去。
回复 支持 反对

使用道具 举报

15

主题

137

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1427
金钱
1427
注册时间
2019-4-22
在线时间
272 小时
 楼主| 发表于 2019-11-28 15:56:27 | 显示全部楼层
Limints 发表于 2019-11-28 10:38
我数据单收,单发都是没问题的,但收发放在一起就不行了,要不只能收,要么只能发

所以这需要你自己去设置,你收数据可以,但是变成发送数据时肯定要改变一些寄存器参数的,还有一些初始化,而你光是用那两个函数肯定是不行的。还是我前面说的,想完全搞清楚,就去分析我给你说的那个函数,只要你认真分析完,你肯定有思路的。
回复 支持 反对

使用道具 举报

15

主题

137

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1427
金钱
1427
注册时间
2019-4-22
在线时间
272 小时
 楼主| 发表于 2019-11-28 16:03:34 | 显示全部楼层
本帖最后由 1209943162 于 2019-11-28 16:04 编辑
Limints 发表于 2019-11-28 10:36
用的是SX1276LoRaGetRxPacket()和SX1276LoRaGetTxPacket(),这两个函数,不是网上的“PiNG”“PONG”的实 ...
6~{YMV%SCQNTZ1CUKC}[98W.jpg
111.png 这是我对这两个函数的注释
回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2019-5-10
在线时间
11 小时
发表于 2019-11-28 17:11:54 | 显示全部楼层
1209943162 发表于 2019-11-28 16:03
这是我对这两个函数的注释

已经解决了,还是自己寻找问题的能力不行,谢谢大家了
回复 支持 反对

使用道具 举报

15

主题

109

帖子

0

精华

高级会员

Rank: 4

积分
825
金钱
825
注册时间
2016-6-28
在线时间
160 小时
发表于 2019-11-28 17:16:50 | 显示全部楼层
1209943162 发表于 2019-11-28 15:53
你再仔细看看我的注释,我说的是负载的长度不包括crc长度,但是后面+4是因为我要把总的长度写入 REG_LR_P ...

刚刚想错了,(SX1276LR->RegPayloadLength +4)其实并没有改变SX1276LR->RegPayloadLength的值,刚一下认为这个值最后也等于加了4
回复 支持 反对

使用道具 举报

4

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2015-8-23
在线时间
10 小时
发表于 2019-12-3 12:31:16 | 显示全部楼层
学习了,楼主优秀
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2019-11-4
在线时间
3 小时
发表于 2019-12-3 14:52:06 | 显示全部楼层
学习一下,谢谢楼主
回复 支持 反对

使用道具 举报

17

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2019-11-7
在线时间
38 小时
发表于 2019-12-4 16:06:08 | 显示全部楼层
前辈你好,请问一下你这sx1278的驱动 MCU是不是只能试用stm32,我的mcu是nxp的可以用这个驱动吗或者再那个位置去找指定mcu的官方驱动
回复 支持 反对

使用道具 举报

5

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
169
金钱
169
注册时间
2017-9-6
在线时间
33 小时
发表于 2019-12-5 09:59:03 | 显示全部楼层
NarcissusQAQ 发表于 2019-12-4 16:06
前辈你好,请问一下你这sx1278的驱动 MCU是不是只能试用stm32,我的mcu是nxp的可以用这个驱动吗或者再那个位 ...

驱动是SPI的,可以直接移植呀,
回复 支持 反对

使用道具 举报

17

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2019-11-7
在线时间
38 小时
发表于 2019-12-5 14:24:24 | 显示全部楼层
lichenxu95 发表于 2019-12-5 09:59
驱动是SPI的,可以直接移植呀,

我看了下,我现在用的NXP对于gpio的函数以及标志位啥的都得改 现在弄得快差不多了,现在的问题是如何编写代码操作多个lora模块,现在初始化这一阶段改的有点凌乱了
回复 支持 反对

使用道具 举报

17

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2019-11-7
在线时间
38 小时
发表于 2019-12-6 16:07:28 | 显示全部楼层
前辈你好请问一下 代码中关于设置功率的函数你的注释是 Pmax=10.8+0.6 * power   那现在我设置SX1276LoRaSetRFPower(20,发射功率是20dbm还是22.8?
回复 支持 反对

使用道具 举报

15

主题

137

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1427
金钱
1427
注册时间
2019-4-22
在线时间
272 小时
 楼主| 发表于 2019-12-7 13:38:07 来自手机 | 显示全部楼层
NarcissusQAQ 发表于 2019-12-5 14:24
我看了下,我现在用的NXP对于gpio的函数以及标志位啥的都得改 现在弄得快差不多了,现在的问题是如何编写 ...

我有个思路,你可以试试,一个lora模块需要一个spi接口,所以,spi接口一次只能跟一个lora通信,但是lora模块一般都会有一个片选引脚,这样的话,你就可以通过一个spi接口控制多个lora模块了。当然,还有更直接的方法,那就是你要用几个lora模块就用几个spi接口,但是这个数量会受到单片机的限制。
回复 支持 反对

使用道具 举报

15

主题

137

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1427
金钱
1427
注册时间
2019-4-22
在线时间
272 小时
 楼主| 发表于 2019-12-7 13:39:39 来自手机 | 显示全部楼层
NarcissusQAQ 发表于 2019-12-6 16:07
前辈你好请问一下 代码中关于设置功率的函数你的注释是 Pmax=10.8+0.6 * power   那现在我设置SX1276LoRaSe ...

20,因为lora的最大功率也就20。这个驱动源码我好久没看,有点记不清了,我记得针对不同的power值,会有不同的功率计算公式。
回复 支持 反对

使用道具 举报

15

主题

109

帖子

0

精华

高级会员

Rank: 4

积分
825
金钱
825
注册时间
2016-6-28
在线时间
160 小时
发表于 2019-12-10 11:34:33 | 显示全部楼层
你好,你清楚原子的LORA模块里面,空中速率怎么得来的吗?我有个lora模块,想与原子模块通讯,不知道怎么设置到相同的速率?
回复 支持 反对

使用道具 举报

15

主题

137

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1427
金钱
1427
注册时间
2019-4-22
在线时间
272 小时
 楼主| 发表于 2019-12-10 16:04:57 来自手机 | 显示全部楼层
zhanming1990 发表于 2019-12-10 11:34
你好,你清楚原子的LORA模块里面,空中速率怎么得来的吗?我有个lora模块,想与原子模块通讯,不知道怎么设 ...

不好意思呀,这个我就不知道了。
回复 支持 反对

使用道具 举报

15

主题

109

帖子

0

精华

高级会员

Rank: 4

积分
825
金钱
825
注册时间
2016-6-28
在线时间
160 小时
发表于 2019-12-11 15:00:41 | 显示全部楼层
1209943162 发表于 2019-12-10 16:04
不好意思呀,这个我就不知道了。

你好,void LoRaRxDataRead (u8 *pbuf, u8 *size )这个函数里面,在隐式报头模式下读到的数据存在RFBuffer数组里面,SX1276ReadFifo( RFBuffer, SX1276LR->RegPayloadLength );所以调用此函数的SX1276RxDataReadCRC32(u8 *pbuf, u8 *size )取不出去数据,是不是要改一下?
回复 支持 反对

使用道具 举报

15

主题

137

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1427
金钱
1427
注册时间
2019-4-22
在线时间
272 小时
 楼主| 发表于 2019-12-16 10:40:29 来自手机 | 显示全部楼层
zhanming1990 发表于 2019-12-11 15:00
你好,void LoRaRxDataRead (u8 *pbuf, u8 *size )这个函数里面,在隐式报头模式下读到的数据存在RFBuffe ...

你别用CRC那个函数,那个函数我借鉴的别人的,但是没成功
回复 支持 反对

使用道具 举报

15

主题

109

帖子

0

精华

高级会员

Rank: 4

积分
825
金钱
825
注册时间
2016-6-28
在线时间
160 小时
发表于 2019-12-18 17:18:45 | 显示全部楼层
1209943162 发表于 2019-12-16 10:40
你别用CRC那个函数,那个函数我借鉴的别人的,但是没成功

我倒是成功了,你有试一下跳频通信FHSS吗?能不能加个Q1003845491,交流一下。
回复 支持 反对

使用道具 举报

8

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
389
金钱
389
注册时间
2019-4-25
在线时间
99 小时
发表于 2020-1-10 14:13:54 | 显示全部楼层
xingjianpeng 发表于 2019-10-15 10:38
感谢楼主代码,最近要用LoRa感觉一头雾水,下载学习一下。

先写一对一的通信,称pingpong系统设计,然后定义自己的私有协议进行通信,lorawan就不懂了
回复 支持 反对

使用道具 举报

8

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
389
金钱
389
注册时间
2019-4-25
在线时间
99 小时
发表于 2020-1-10 14:17:18 | 显示全部楼层
楼主关于CAD活动信号检测写的不多啊
回复 支持 反对

使用道具 举报

15

主题

137

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1427
金钱
1427
注册时间
2019-4-22
在线时间
272 小时
 楼主| 发表于 2020-1-11 10:03:05 | 显示全部楼层
a314825348 发表于 2020-1-10 14:17
楼主关于CAD活动信号检测写的不多啊

因为当初做的东西只需要用到了LoRa通信,所以其他模式我都没有怎么研究,当然你想研究还想像我说的,多读源码,跟着数据手册查就能懂的。只需一些细节,就需要自己慢慢研究。
回复 支持 反对

使用道具 举报

4

主题

116

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3802
金钱
3802
注册时间
2017-11-15
在线时间
314 小时
发表于 2020-1-17 09:15:37 | 显示全部楼层
怎么不见使用sx1280?
www.littlebutler.top
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2019-12-9
在线时间
8 小时
发表于 2020-1-17 17:19:32 | 显示全部楼层
下载参考一下
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2020-2-3
在线时间
0 小时
发表于 2020-2-3 22:17:18 | 显示全部楼层
学习中,谢谢分享
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2019-11-2
在线时间
1 小时
发表于 2020-2-20 23:03:29 | 显示全部楼层
太感谢了!非常有帮助,对我这个小白
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
339
金钱
339
注册时间
2019-7-17
在线时间
39 小时
发表于 2020-3-6 10:27:47 | 显示全部楼层
谢谢。小白下载看看学习了
回复 支持 反对

使用道具 举报

10

主题

271

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1236
金钱
1236
注册时间
2015-5-14
在线时间
352 小时
发表于 2020-3-19 15:22:21 | 显示全部楼层
我下载下来了,上传下

LoRaMac-node-develop.zip

6.34 MB, 下载次数: 569

30年众生牛马,60年诸佛龙象!
回复 支持 反对

使用道具 举报

15

主题

137

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1427
金钱
1427
注册时间
2019-4-22
在线时间
272 小时
 楼主| 发表于 2020-3-26 17:47:34 | 显示全部楼层
无痕幽雨 发表于 2020-3-19 15:22
我下载下来了,上传下

感谢
回复 支持 反对

使用道具 举报

17

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2019-11-7
在线时间
38 小时
发表于 2020-4-3 08:52:28 | 显示全部楼层
前辈你好 想问下 RxPacketRssiValue和 RegRssiValue这两个有啥区别,RegRssiValue 是代表当前的发射强度吗?还有能不能讲讲 RFLR_IRQFLAGS_CADDETECTED 这个东西
回复 支持 反对

使用道具 举报

15

主题

137

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1427
金钱
1427
注册时间
2019-4-22
在线时间
272 小时
 楼主| 发表于 2020-4-3 17:46:15 | 显示全部楼层
NarcissusQAQ 发表于 2020-4-3 08:52
前辈你好 想问下 RxPacketRssiValue和 RegRssiValue这两个有啥区别,RegRssiValue 是代表当前的发射强度吗 ...

RxPacketRssiValue用来记录信号强度。
RegRssiValue是与信号强度相关的寄存器地址
RFLR_IRQFLAGS_CADDETECTED是一个与CAD相关的中断屏蔽位
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 12:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表