无线通讯LoRa—SX1278芯片开发笔记

1、资源搜集Datasheet 和驱动源码

Semtech官网下载最新驱动代码

http://www.semtech.com/apps/filedown/down.php?file=sx12xxDrivers-V2.1.0.zip

Datasheet我上传了资源,中文版和英文版都有,还带了笔记的

http://download.csdn.net/detail/csdn_logo/9560768

2、过一遍Datasheet,过之前必须对一些英文缩写有些了解,不然会要到处翻

专业术语及其缩写:

FHSS 跳频扩频技术             FIFO 先进先出队列,这里代表队列寄存器 

PA 功率放大器                       LNA 低噪声放大器

SNR 信噪比                           SF 扩频因子                                                     

PLL 锁相环                            CAD 信道活动检测

CR 编码率                              BW 带宽                                                             

RS符号速率                           Preamble 序头

。。。

重要参数:

扩频因子 RegModulationCfg

因为不同扩频因子(SpreadingFactor)之间为正交关系,因此必须提前获知链路发

送端和接收端的扩频因子。另外,还必须获知接收机输入端的信噪比。在负信噪比条件下信

号也能正常接收,这改善了LoRa接收机的灵敏度、链路预算及覆盖范围。

注:SF=6 时必须用ImplicitHeader 模式

 

循环纠错编码cyclic error coding

 

信号带宽Bandwidth

较低频段(169 MHz)不支持250kHz和500kHz的带宽

 

数据包结构

     序头preamble                                     报头 header (可配)                  数据段 payload              校验码CRC

对于希望前导码是固定开销的情况,可以将前导码寄存器长度设置在6到65536之间来改变发送前导码长度,实际发送前导码的长度范围为6+4至65535+4个符号。这样几乎就可以发送任意长的前导码序列。接收机会定期执行前导码检测。因此,接收机的前导码长度应与发射机一致。如果前导码长度为未知或可能会发生变化,应将接收机的前导码长度设置为最大值。

报头分显示报头模式和隐式报头模式

 

低数据速率优化LowDataRateOptimize

当单个符号传输时间超过16毫秒时,必须使用LowDataRateOptimize位。注意:发射机和接收机的LowDataRateOptimize位设置必须一致。

 

有效负载 payload

其实就是数据段,即你要发或者要收的数据

 

数字寄存器和 数字I/O

寄存器113个,数字I/O也有6个,太多了,具体见Datasheet

 

操作模式 OpMode

3、分析驱动源码

解压后打开doc下的README.txt

找到关于sx1276的相关说明如下:

2.1.3 SX1276 driver version V2.1.0

——————————————————————————-

The SX1276 driver is split in 4 parts  (驱动源码包含如下四个部分)

1. Generic SX1276 driver.    驱动调用接口

  ( src\radio\SX1276.c )

2. SX1272 FSK modem driver.    FSK调制模式用

  ( src\radio\SX1276-Fsk.c andsrc\radio\SX1276-FskMisc.c )

3. SX1272 LoRa modem driver.   LoRa调制模式用

  ( src\radio\SX1276-LoRa.cand src\radio\SX1276-LoRaMisc.c )

4. SX1276 HAL ( Hardware Abstraction Layer ).    硬件抽象层

  (src\platform\sx12xxEiger\SX1276-Hal.c )

 

1. The generic SX1276 driver implements atleast the functions required by

  the RadioDriver structure defined in src\radio\radio.h file. It offersalso

  the same interface for the FSK or the LoRa modem.

 

   Inorder to choose which modem to use one must modify the src\radio\radio.h

   file as follows:

   -For FSK modem

       #define LORA                                        0

 

   -For LoRa modem

       #define LORA                                        1

2. FSK调制的可以跳过不看

3. The LoRa modem driver handles the SX1276as a LoRa modem

   Inorder to change generic LoRa modem settings one must modify the following

  parameters in file src\radio\SX1276-LoRa.c (LoRa模式初始化参数配置的结构体)

  tLoRaSettings LoRaSettings =

   {

     870000000,  // RFFrequency   收发频率

     20,         // Power  发射功率

     8,          // SignalBw [0: 7.8kHz, 1: 10.4 kHz, 2: 15.6 kHz, 3: 20.8 kHz, 4: 31.2 kHz,    带宽

                 // 5: 41.6 kHz, 6: 62.5 kHz, 7: 125 kHz, 8:250 kHz, 9: 500 kHz, other: Reserved]

     7,          // SpreadingFactor [6:64, 7: 128, 8: 256, 9: 512,     扩频因子

                  // 10: 1024, 11: 2048, 12:4096  chips]

     2,          // ErrorCoding [1:4/5, 2: 4/6, 3: 4/7, 4: 4/8]      循环纠错编码

     true,        // CrcOn   CRC校验

     false,       // ImplicitHeaderOn   序头模式

     1,          // RxSingleOn    接收模式中的single模式开关  0代表continue模式

     0,          // FreqHopOn    跳频开关

     4,          // HopPeriod     跳频周期

     100,        // TxPacketTimeout   发送超时时间

     100,        // RxPacketTimeout   接收超时时间

     4           // PayloadLength    负载数据长度

   };

 

4. The HAL makes the SX1276 driver platformindependent.One must modify each function inside this file

    (src\platform\sx12xxEiger\SX1272-Hal.c ) according to the platform used.

(根据硬件平台修改硬件抽象层)

 

3. How to use the driver:

——————————————————————————-

This driver has been tested for high speedtransmission (up to 100kbps in FSK)

and long payloads (up to 255 bytes in FSK or LoRa). To set a transmission /

reception, it is necessary to:

   -Change the payload length

The payload length for the system isdefined with the parameter BUFFER_SIZE

located in main.c

#define BUFFER_SIZE                                 128 // Definethe payload // size here

The payload length can be configured from 1up to 255

4、用例

自己定义一个函数用来动态的初始化芯片

 
  1. static void RFInit()  
  2. {  
  3.     Radio->LoRaSetOpMode( RFLR_OPMODE_STANDBY );  
  4.     // set the RF settings  
  5.     Radio->LoRaSetPa20dBm( false );  
  6.     Radio->LoRaSetRFPower( 5 );  
  7.     Radio->LoRaSetSpreadingFactor( 7 ); // SF6 only operates in implicit header mode.  
  8.     Radio->LoRaSetErrorCoding( 1 );  
  9.     Radio->LoRaSetPacketCrcOn( 0 );  
  10.     Radio->LoRaSetSignalBandwidth( 7 );  
  11.     Radio->LoRaSetImplicitHeaderOn( 0 );    
  12.     Radio->LoRaSetSymbTimeout( 0x3FF );  
  13.     Radio->LoRaSetPayloadLength( 128 );  
  14.     Radio->LoRaSetLowDatarateOptimize( true );  
  15.     Radio->LoRaSetFreqHopOn(false);      
  16.     Radio->LoRaSetRxSingleOn(true);  
  17.     Radio->LoRaSetPreambleLength( 6 );   
  18.     Radio->LoRaSetOpMode( RFLR_OPMODE_STANDBY );  
  19. }  

通过RF发送数据的发送函数,主要用于收发异频,收发异频能减少干扰

 
  1.  INT8U RFWrite(INT8U* buff, INT8U size, INT32U freq )  
  2. {  
  3.     Radio->LoRaSetRFFrequency( freq );// 478750000   DownChannel[10]  
  4.     Radio->SetTxPacket( buff, size);  
  5.     while( Radio->Process( ) != RF_TX_DONE );  
  6.       
  7.     return size;  
  8. }  

通过RF接收数据的接收函数

 
  1. INT8U RFRead(INT8U* buff, INT32U freq, INT8U timeout )  
  2. {  
  3.     uint32_t result;  
  4.     INT16U RxLen;  
  5.       
  6.     Radio->LoRaSetRFFrequency( freq );   
  7.     Radio->LoRaSetRxPacketTimeout( timeout*1500 );   // 1s = 1500  
  8.     Radio->StartRx( );  
  9.   
  10.     while( 1 )  
  11.     {  
  12.         result = Radio->Process( );///SX1276LoRaProcess  
  13.         if( (result == RF_RX_DONE) || (result == RF_RX_TIMEOUT) )  
  14.         {  
  15.             break;  
  16.         }  
  17.     }  
  18.       
  19.     if( result == RF_RX_DONE )//RFBuffer  
  20.     {  
  21.         Radio->GetRxPacket( buff, &RxLen );  
  22.         return RxLen;  
  23.     }  
  24.     else  
  25.     {  
  26.         return 0;  
  27.     }  
  28.   
  29. }  
说明:LPWA物联网应用站(LPWAP.com)通过公开互联网收集、整理并转载有关LPWA物联网应用解决方案,以供广大LPWA应用开发者和爱好者共同学习交流和参考运用到实际生产生活中。本站所有转载的文章、图片、音频、视频等资料的版权归版权所有人所有并衷心感谢您的付出,由于本站采纳的非本站原创文章及图片等内容无法一一联系确认版权者,如果本网所选内容的文章原创作者认为其作品不宜放在本站,请及时通过以下留言功能通知我们采取适当措施,避免给双方造成不必要的经济损失。如果您希望保留文章在本站,但希望文章末尾提供对作者的致谢或者产品、网站交换链接的,也请将需求写入以下留言栏中,谢谢您的支持。让我们共同努力,打造万物互联的未来美好生活!

您的留言或需求: