영어 | 简体中文 | 繁體中文 | 日本語 | 도이치치 | 한국어
SX1268 Sub-GHZ Radio Transceiver는 장거리 무선 응용 프로그램에 이상적인 장치입니다. 4.2 Ma의 활성 수신 전류 소비로 긴 배터리 수명을 위해 설계되었습니다. SX1268은 높은 효율적인 통합 전력 증폭기를 사용하여 490 MHz에서 최대 +22 DBM을 전송할 수 있습니다. 780 MHz에서 SX1268은 안테나 포트에서 +10 dBM 신호를 전송하기 위해 20 MA 미만을 소비합니다. SX1268은 LPWAN 사용 사례 및 (G) FSK Modulation을 지원합니다. Lorawantm 표준 또는 독점 프로토콜을 사용하는 다양한 응용 프로그램 요구 사항을 충족하는 것이 매우 구성 가능합니다.이 장치는 Lora Alliancetm에서 발표 한 Lorawantm Specification의 물리적 계층 요구 사항을 준수하도록 설계되었습니다. 무선은 중국 규정 요구 사항을 포함한 무선 규정을 대상으로하는 시스템에 적합하지만 434 MHZ (434 MHZ). MHZ ~ 810 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 개발 보드 샘플 코드가 포함됩니다. 모든 프로젝트는 쉘 스크립트를 사용하여 드라이버를 디버깅하고 각 프로젝트의 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.
Contributing.md를 참조하십시오.
Copyright (C) 2015- 현재 Libdriver 판권 소유
MIT 라이센스 (MIT)
이에 따라 사본을 얻는 사람에게 무료로 허가가 부여됩니다.
이 소프트웨어 및 관련 문서 파일 ( "소프트웨어")의
권리를 포함하여 제한이없는 소프트웨어에서
사용, 복사, 수정, 병합, 출판, 배포, 하선 및/또는 판매
소프트웨어 사본 및 소프트웨어가있는 사람을 허용하기 위해
다음 조건에 따라이를 위해 제공됩니다.
위의 저작권 통지 및이 권한 통지는 모두에 포함되어야합니다.
소프트웨어의 사본 또는 상당 부분.
소프트웨어는 어떤 종류의 보증없이 "있는 그대로"제공됩니다.
상업성의 보증을 포함하되 이에 국한되지 않는 암시,
특정 목적과 비방을위한 적합성. 어떠한 경우에도
저자 또는 저작권 보유자는 청구, 손해 또는 기타에 대해 책임을집니다.
계약, 불법 행위 또는 다른 방법으로,
소프트웨어 또는 사용 또는 기타 거래와 관련하여
소프트웨어.
[email protected]으로 이메일을 보내주십시오.