Inglés | 简体中文 | 繁體中文 | 日本語 | Deutsch | 한국어
El transceptor de radio SX1268 Sub-GHZ es el dispositivo ideal para aplicaciones inalámbricas de largo alcance. Está diseñado para una duración de batería larga con solo 4.2 mA de consumo de corriente de recepción activa. El SX1268 puede transmitir hasta +22 dBm a 490 MHz con amplificadores de potencia integrados altamente eficientes. A 780 MHz, el SX1268 consume menos de 20 mA para transmitir una señal de +10 dBm en su puerto de antena. Es altamente configurable cumplir con los diferentes requisitos de aplicación que utilizan los protocolos estándar o propietario de Lorawantm. El dispositivo está diseñado para cumplir con los requisitos de la capa física de la especificación de Lorawantm lanzada por el Lora Alliancet. MHz a 810 MHz permite el soporte de las bandas de dispositivos de corto alcance de baja potencia de 490 y 780 MHz. SX1268 se puede usar en medidores inteligentes, cadena de suministro y logística, automatización de edificios, etc.
Libdriver SX1268 es el controlador de función completa de SX1268 lanzado por Libdriver. Proporciona funciones de envío inalámbrico, recepción inalámbrica, CAD, etc. Libdriver cumple con Misra.
/SRC incluye archivos de origen Libdriver SX1268.
/La interfaz incluye la plantilla independiente de la plataforma SPI Libdriver SX1268.
/Prueba incluye el código de prueba del controlador Libdriver SX1268 y este código puede probar la función necesaria del chip simplemente.
/Ejemplo incluye el código de muestra Libdriver SX1268.
/Doc incluye el documento fuera de línea Libdriver SX1268.
/hoja de datos incluye la hoja de datos SX1268.
/El proyecto incluye el código de muestra Common Linux y MCU Development Board. Todos los proyectos usan el script de shell para depurar el controlador y la instrucción detallada se puede encontrar en el readMe.md de cada proyecto.
/Misra incluye los resultados de escaneo del código Libdriver Misra.
Plantilla independiente de la plataforma SPI de referencia /interfaz y finalice el controlador SPI de su plataforma.
Agregue el directorio /SRC, el controlador de interfaz para su plataforma y sus propios controladores a su proyecto, si desea usar los controladores de ejemplo predeterminados, agregue el directorio /Ejemplo a su proyecto.
Puede consultar los ejemplos en el directorio /ejemplo para completar su propio controlador. Si desea utilizar los ejemplos de programación predeterminados, esto es cómo usarlos.
#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 ;Documentos en línea: https://www.libdriver.com/docs/sx1268/index.html.
Documentos fuera de línea: /doc/html/index.html.
Consulte la contribución. MD.
Copyright (c) 2015 - Presente Libdriver Todos los derechos reservados
La licencia del MIT (MIT)
Por la presente, se otorga el permiso, de forma gratuita, a cualquier persona que obtenga una copia
de este software y archivos de documentación asociados (el "software"), para tratar
en el software sin restricción, incluidos los derechos de los derechos
para usar, copiar, modificar, fusionar, publicar, distribuir, sublicense y/o vender
copias del software y para permitir a las personas a quienes es el software
proporcionado para hacerlo, sujeto a las siguientes condiciones:
El aviso de derechos de autor anterior y este aviso de permiso se incluirán en todos
copias o porciones sustanciales del software.
El software se proporciona "tal cual", sin garantía de ningún tipo, expreso o
Implícito, incluidos, entre otros, las garantías de comerciabilidad,
Fitness para un propósito particular y no infracción. En ningún caso el
Los autores o los titulares de derechos de autor seré responsable de cualquier reclamo, daños u otros
Responsabilidad, ya sea en una acción de contrato, agravio o de otra manera, derivada de,
Fuera o en relación con el software o el uso u otros tratos en el
SOFTWARE.
Envíe un correo electrónico a [email protected].