英语| 简体中文| 繁体中文| 日本语|德意志| 한국어
SX1268 Sub-GHz无线电收发器是远程无线应用程序的理想设备。它是为长时间的电池寿命而设计的,仅4.2 mA主动接收电流消耗。 The SX1268 can transmit up to +22 dBm at 490 MHz with highly efficient integrated power amplifiers.At 780 MHz, the SX1268 consumes less than 20 mA to transmit a +10 dBm signal at its antenna port.SX1268 supports LoRa modulation for LPWAN use cases and (G)FSK modulation for legacy use cases.使用Lorawantm标准或专用协议满足不同的应用要求是高度可配置的。该设备旨在符合Lora Alliancet发布的Lorawantm规范的物理层要求。该电台适用于针对无线电法规的系统,包括但不限于中国监管要求,以及来自中国监管要求的频率和ETESI EN 300 220(410(410))。 MHz允许支持490和780 MHz中国低功率短距离设备频段。SX1268可用于智能电表,供应链和物流,建筑自动化等。
libdriver SX1268是由libdriver启动的SX1268的完整功能驱动程序。它提供了无线发送,无线接收,CAD等的功能。Libdriver符合Misra。
/src包括libdriver sx1268源文件。
/接口包括Libdriver SX1268 SPI平台独立模板。
/测试包括Libdriver SX1268驱动程序测试代码,此代码可以简单地测试芯片所需的功能。
/示例包括libdriver SX1268示例代码。
/DOC包括Libdriver SX1268离线文档。
/数据表包括SX1268数据表。
/项目包括通用Linux和MCU开发委员会样本代码。所有项目都使用Shell脚本来调试驱动程序,并且可以在每个项目的readme.md中找到详细说明。
/Misra包括Libdriver Misra代码扫描结果。
参考 /接口SPI平台独立模板并完成平台SPI驱动程序。
将 /src目录,平台的接口驱动程序以及您自己的驱动程序添加到项目中,如果您想使用默认示例驱动程序,请在项目中添加 /示例目录。
您可以参考 /示例目录中的示例以完成自己的驱动程序。如果您想使用默认的编程示例,则是如何使用它们的方法。
#include "driver_sx1268_lora.h"
uint8_t ( * g_gpio_irq )( void ) = NULL ;
uint8_t res ;
static uint8_t gs_rx_done ;
static void a_callback ( uint16_t type , uint8_t * buf , uint16_t len )
{
switch ( type )
{
case SX1268_IRQ_TX_DONE :
{
sx1268_interface_debug_print ( "sx1268: irq tx done.n" );
break ;
}
case SX1268_IRQ_RX_DONE :
{
uint16_t i ;
sx1268_bool_t enable ;
float rssi ;
float snr ;
sx1268_interface_debug_print ( "sx1268: irq rx done.n" );
/* get the status */
if ( sx1268_lora_get_status (( float * ) & rssi , ( float * ) & snr ) != 0 )
{
return ;
}
sx1268_interface_debug_print ( "sx1268: rssi is %0.1f.n" , rssi );
sx1268_interface_debug_print ( "sx1268: snr is %0.2f.n" , snr );
/* check the error */
if ( sx1268_lora_check_packet_error ( & enable ) != 0 )
{
return ;
}
if (( enable == SX1268_BOOL_FALSE ) && len )
{
for ( i = 0 ; i < len ; i ++ )
{
sx1268_interface_debug_print ( "%c" , buf [ i ]);
}
sx1268_interface_debug_print ( "n" );
gs_rx_done = 1 ;
}
break ;
}
case SX1268_IRQ_PREAMBLE_DETECTED :
{
sx1268_interface_debug_print ( "sx1268: irq preamble detected.n" );
break ;
}
case SX1268_IRQ_SYNC_WORD_VALID :
{
sx1268_interface_debug_print ( "sx1268: irq valid sync word detected.n" );
break ;
}
case SX1268_IRQ_HEADER_VALID :
{
sx1268_interface_debug_print ( "sx1268: irq valid header.n" );
break ;
}
case SX1268_IRQ_HEADER_ERR :
{
sx1268_interface_debug_print ( "sx1268: irq header error.n" );
break ;
}
case SX1268_IRQ_CRC_ERR :
{
sx1268_interface_debug_print ( "sx1268: irq crc error.n" );
break ;
}
case SX1268_IRQ_CAD_DONE :
{
sx1268_interface_debug_print ( "sx1268: irq cad done.n" );
break ;
}
case SX1268_IRQ_CAD_DETECTED :
{
sx1268_interface_debug_print ( "sx1268: irq cad detected.n" );
break ;
}
case SX1268_IRQ_TIMEOUT :
{
sx1268_interface_debug_print ( "sx1268: irq timeout.n" );
break ;
}
default :
{
break ;
}
}
}
/* gpio init */
res = gpio_interrupt_init ();
if ( res != 0 )
{
return 1 ;
}
g_gpio_irq = sx1268_lora_irq_handler ;
/* lora init */
res = sx1268_lora_init ( a_callback );
if ( res != 0 )
{
( void ) gpio_interrupt_deinit ();
g_gpio_irq = NULL ;
return 1 ;
}
/* set send mode */
res = sx1268_lora_set_send_mode ();
if ( res != 0 )
{
( void ) sx1268_lora_deinit ();
( void ) gpio_interrupt_deinit ();
g_gpio_irq = NULL ;
return 1 ;
}
sx1268_interface_debug_print ( "sx1268: send %s.n" , "123" );
/* send data */
res = sx1268_lora_send (( uint8_t * ) "123" , strlen ( "123" ));
if ( res != 0 )
{
( void ) sx1268_lora_deinit ();
( void ) gpio_interrupt_deinit ();
g_gpio_irq = NULL ;
return 1 ;
}
/* deinit */
res = sx1268_lora_deinit ();
if ( res != 0 )
{
( void ) gpio_interrupt_deinit ();
g_gpio_irq = NULL ;
return 1 ;
}
( void ) gpio_interrupt_deinit ();
g_gpio_irq = NULL ;
return 0 ; #include "driver_sx1268_lora.h"
uint8_t ( * g_gpio_irq )( void ) = NULL ;
uint8_t res ;
uint32_t timeout ;
static uint8_t gs_rx_done ;
static void a_callback ( uint16_t type , uint8_t * buf , uint16_t len )
{
switch ( type )
{
case SX1268_IRQ_TX_DONE :
{
sx1268_interface_debug_print ( "sx1268: irq tx done.n" );
break ;
}
case SX1268_IRQ_RX_DONE :
{
uint16_t i ;
sx1268_bool_t enable ;
float rssi ;
float snr ;
sx1268_interface_debug_print ( "sx1268: irq rx done.n" );
/* get the status */
if ( sx1268_lora_get_status (( float * ) & rssi , ( float * ) & snr ) != 0 )
{
return 1 ;
}
sx1268_interface_debug_print ( "sx1268: rssi is %0.1f.n" , rssi );
sx1268_interface_debug_print ( "sx1268: snr is %0.2f.n" , snr );
/* check the error */
if ( sx1268_lora_check_packet_error ( & enable ) != 0 )
{
return 1 ;
}
if (( enable == SX1268_BOOL_FALSE ) && len )
{
for ( i = 0 ; i < len ; i ++ )
{
sx1268_interface_debug_print ( "%c" , buf [ i ]);
}
sx1268_interface_debug_print ( "n" );
gs_rx_done = 1 ;
}
break ;
}
case SX1268_IRQ_PREAMBLE_DETECTED :
{
sx1268_interface_debug_print ( "sx1268: irq preamble detected.n" );
break ;
}
case SX1268_IRQ_SYNC_WORD_VALID :
{
sx1268_interface_debug_print ( "sx1268: irq valid sync word detected.n" );
break ;
}
case SX1268_IRQ_HEADER_VALID :
{
sx1268_interface_debug_print ( "sx1268: irq valid header.n" );
break ;
}
case SX1268_IRQ_HEADER_ERR :
{
sx1268_interface_debug_print ( "sx1268: irq header error.n" );
break ;
}
case SX1268_IRQ_CRC_ERR :
{
sx1268_interface_debug_print ( "sx1268: irq crc error.n" );
break ;
}
case SX1268_IRQ_CAD_DONE :
{
sx1268_interface_debug_print ( "sx1268: irq cad done.n" );
break ;
}
case SX1268_IRQ_CAD_DETECTED :
{
sx1268_interface_debug_print ( "sx1268: irq cad detected.n" );
break ;
}
case SX1268_IRQ_TIMEOUT :
{
sx1268_interface_debug_print ( "sx1268: irq timeout.n" );
break ;
}
default :
{
break ;
}
}
}
/* gpio init */
res = gpio_interrupt_init ();
if ( res != 0 )
{
return 1 ;
}
g_gpio_irq = sx1268_lora_irq_handler ;
/* lora init */
res = sx1268_lora_init ( a_callback );
if ( res != 0 )
{
( void ) gpio_interrupt_deinit ();
g_gpio_irq = NULL ;
return 1 ;
}
/* start receiving */
sx1268_interface_debug_print ( "sx1268: start receiving...n" );
gs_rx_done = 0 ;
timeout = 3000 ;
/* start receive */
res = sx1268_lora_set_continuous_receive_mode ();
if ( res != 0 )
{
( void ) sx1268_lora_deinit ();
( void ) gpio_interrupt_deinit ();
g_gpio_irq = NULL ;
return 1 ;
}
while (( timeout != 0 ) && ( gs_rx_done == 0 ))
{
timeout -- ;
sx1268_interface_delay_ms ( 1000 );
}
if ( gs_rx_done == 0 )
{
/* receive timeout */
sx1268_interface_debug_print ( "sx1268: receive timeout.n" );
( void ) sx1268_lora_deinit ();
( void ) gpio_interrupt_deinit ();
g_gpio_irq = NULL ;
return 1 ;
}
/* deinit */
res = sx1268_lora_deinit ();
if ( res != 0 )
{
( void ) gpio_interrupt_deinit ();
g_gpio_irq = NULL ;
return 1 ;
}
( void ) gpio_interrupt_deinit ();
g_gpio_irq = NULL ;
return 0 ;在线文档:https://www.libdriver.com/docs/sx1268/index.html。
离线文档:/doc/html/index.html。
请参考贡献。
版权(c)2015年 - 目前的libdriver保留所有权利
麻省理工学院许可证(MIT)
特此免费授予任何获得副本的人的许可
该软件和相关文档文件(“软件”)
在软件中无限制的软件中,包括无限制的权利
使用,复制,修改,合并,发布,分发,转销和/或出售
软件的副本,并允许软件的人
符合以下条件的规定,可以这样做:
上述版权通知和此许可通知应包含
该软件的副本或大量部分。
该软件是“原样”提供的,没有任何形式的保证,明确或
暗示,包括但不限于适销性保证,
适合特定目的和非侵扰的适合度。在任何情况下都不会
作者或版权持有人应对任何索赔,损害赔偿或其他责任负责
责任,无论是在合同,侵权的诉讼中还是其他责任,是由
与软件或使用或与使用或其他交易有关
软件。
请发送电子邮件至[email protected]。