英語| 簡體中文| 繁體中文| 日本語|德意志| 한국어
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]。