Anglais | 简体中文 | 繁體中文 | 日本語 | Deutsch | 한국어
L'émetteur-récepteur radio LLCC68 sous-GHZ est idéal pour les applications sans fil à longue portée. Il est conçu pour une longue durée de vie de la batterie avec seulement 4,2 mA de consommation active de réception active.Le LLCC68 peut transmettre jusqu'à +22 dBm avec des amplificateurs de puissance intégrés très efficaces. Le LLCC68 prend en charge la modulation LORA® pour les cas d'utilisation LPWAN et (g) la modulation FSK pour les cas d'utilisation hérité. Il est hautement configurable de répondre à différentes exigences d'application pour l'industrie et l'utilisation des consommateurs. L'appareil fournit la modulation LORA® compatible avec les émetteurs-récepteurs SemTech utilisés par la spécification Lorawan ™ publié par la LORA Alliance ™. La radio convient aux systèmes ciblant la conformité avec la réglementation radio, notamment, mais sans s'y limiter, les exigences réglementaires ETSI EN 300 220, FCC CFR 47, partie 15, China Regulaty Exigences et le Japanese ARIB T-108. La couverture en fréquence continue de 150 MHz à 960 MHz permet le support de toutes les principales bandes ISM de sous-GHz du monde entier.
Libdriver LLCC68 est le pilote complet de la fonction de LLCC68 lancée par Libdriver.It fournit des fonctions de condamnation sans fil, de réception sans fil, de CAO, etc. Libdriver est conforme à Misra.
/ SRC comprend des fichiers source Libdriver LLCC68.
/ L'interface inclut le modèle indépendant de la plate-forme SPI LibDriver LLCC68.
/ Le test inclut le code de test du pilote LibDriver LLCC68 et ce code peut tester la fonction nécessaire pour la puce.
/ L'exemple inclut un exemple de code Libdriver LLCC68.
/ doc comprend le document hors ligne Libdriver LLCC68.
/ Fiche technique comprend la fiche technique LLCC68.
/ Le projet comprend l'exemple de code commun Linux et MCU Development Board. Tous les projets utilisent le script shell pour déboguer le pilote et l'instruction détaillée peut être trouvée dans Readme.md de chaque projet.
/ MISRA comprend les résultats de la numérisation du code MISRA Libdriver.
Modèle indépendant de la plate-forme SPI de référence / interface et terminer votre pilote SPI de plate-forme.
Ajoutez le répertoire / src, le pilote d'interface de votre plateforme et vos propres pilotes à votre projet, si vous souhaitez utiliser l'exemple par défaut, ajoutez le répertoire / exemple à votre projet.
Vous pouvez vous référer aux exemples du répertoire / exemple pour compléter votre propre pilote. Si vous souhaitez utiliser les exemples de programmation par défaut, voici comment les utiliser.
#include "driver_llcc68_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 LLCC68_IRQ_TX_DONE :
{
llcc68_interface_debug_print ( "llcc68: irq tx done.n" );
break ;
}
case LLCC68_IRQ_RX_DONE :
{
uint16_t i ;
llcc68_bool_t enable ;
float rssi ;
float snr ;
llcc68_interface_debug_print ( "llcc68: irq rx done.n" );
/* get the status */
if ( llcc68_lora_get_status (( float * ) & rssi , ( float * ) & snr ) != 0 )
{
return ;
}
llcc68_interface_debug_print ( "llcc68: rssi is %0.1f.n" , rssi );
llcc68_interface_debug_print ( "llcc68: snr is %0.2f.n" , snr );
/* check the error */
if ( llcc68_lora_check_packet_error ( & enable ) != 0 )
{
return ;
}
if (( enable == LLCC68_BOOL_FALSE ) && len )
{
for ( i = 0 ; i < len ; i ++ )
{
llcc68_interface_debug_print ( "%c" , buf [ i ]);
}
llcc68_interface_debug_print ( "n" );
gs_rx_done = 1 ;
}
break ;
}
case LLCC68_IRQ_PREAMBLE_DETECTED :
{
llcc68_interface_debug_print ( "llcc68: irq preamble detected.n" );
break ;
}
case LLCC68_IRQ_SYNC_WORD_VALID :
{
llcc68_interface_debug_print ( "llcc68: irq valid sync word detected.n" );
break ;
}
case LLCC68_IRQ_HEADER_VALID :
{
llcc68_interface_debug_print ( "llcc68: irq valid header.n" );
break ;
}
case LLCC68_IRQ_HEADER_ERR :
{
llcc68_interface_debug_print ( "llcc68: irq header error.n" );
break ;
}
case LLCC68_IRQ_CRC_ERR :
{
llcc68_interface_debug_print ( "llcc68: irq crc error.n" );
break ;
}
case LLCC68_IRQ_CAD_DONE :
{
llcc68_interface_debug_print ( "llcc68: irq cad done.n" );
break ;
}
case LLCC68_IRQ_CAD_DETECTED :
{
llcc68_interface_debug_print ( "llcc68: irq cad detected.n" );
break ;
}
case LLCC68_IRQ_TIMEOUT :
{
llcc68_interface_debug_print ( "llcc68: irq timeout.n" );
break ;
}
default :
{
break ;
}
}
}
/* gpio init */
res = gpio_interrupt_init ();
if ( res != 0 )
{
return 1 ;
}
g_gpio_irq = llcc68_lora_irq_handler ;
/* lora init */
res = llcc68_lora_init ( a_callback );
if ( res != 0 )
{
( void ) gpio_interrupt_deinit ();
g_gpio_irq = NULL ;
return 1 ;
}
/* set send mode */
res = llcc68_lora_set_send_mode ();
if ( res != 0 )
{
( void ) llcc68_lora_deinit ();
( void ) gpio_interrupt_deinit ();
g_gpio_irq = NULL ;
return 1 ;
}
llcc68_interface_debug_print ( "llcc68: send %s.n" , "123" );
/* send data */
res = llcc68_lora_send (( uint8_t * ) "123" , strlen ( "123" ));
if ( res != 0 )
{
( void ) llcc68_lora_deinit ();
( void ) gpio_interrupt_deinit ();
g_gpio_irq = NULL ;
return 1 ;
}
/* deinit */
res = llcc68_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_llcc68_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 LLCC68_IRQ_TX_DONE :
{
llcc68_interface_debug_print ( "llcc68: irq tx done.n" );
break ;
}
case LLCC68_IRQ_RX_DONE :
{
uint16_t i ;
llcc68_bool_t enable ;
float rssi ;
float snr ;
llcc68_interface_debug_print ( "llcc68: irq rx done.n" );
/* get the status */
if ( llcc68_lora_get_status (( float * ) & rssi , ( float * ) & snr ) != 0 )
{
return 1 ;
}
llcc68_interface_debug_print ( "llcc68: rssi is %0.1f.n" , rssi );
llcc68_interface_debug_print ( "llcc68: snr is %0.2f.n" , snr );
/* check the error */
if ( llcc68_lora_check_packet_error ( & enable ) != 0 )
{
return 1 ;
}
if (( enable == LLCC68_BOOL_FALSE ) && len )
{
for ( i = 0 ; i < len ; i ++ )
{
llcc68_interface_debug_print ( "%c" , buf [ i ]);
}
llcc68_interface_debug_print ( "n" );
gs_rx_done = 1 ;
}
break ;
}
case LLCC68_IRQ_PREAMBLE_DETECTED :
{
llcc68_interface_debug_print ( "llcc68: irq preamble detected.n" );
break ;
}
case LLCC68_IRQ_SYNC_WORD_VALID :
{
llcc68_interface_debug_print ( "llcc68: irq valid sync word detected.n" );
break ;
}
case LLCC68_IRQ_HEADER_VALID :
{
llcc68_interface_debug_print ( "llcc68: irq valid header.n" );
break ;
}
case LLCC68_IRQ_HEADER_ERR :
{
llcc68_interface_debug_print ( "llcc68: irq header error.n" );
break ;
}
case LLCC68_IRQ_CRC_ERR :
{
llcc68_interface_debug_print ( "llcc68: irq crc error.n" );
break ;
}
case LLCC68_IRQ_CAD_DONE :
{
llcc68_interface_debug_print ( "llcc68: irq cad done.n" );
break ;
}
case LLCC68_IRQ_CAD_DETECTED :
{
llcc68_interface_debug_print ( "llcc68: irq cad detected.n" );
break ;
}
case LLCC68_IRQ_TIMEOUT :
{
llcc68_interface_debug_print ( "llcc68: irq timeout.n" );
break ;
}
default :
{
break ;
}
}
}
/* gpio init */
res = gpio_interrupt_init ();
if ( res != 0 )
{
return 1 ;
}
g_gpio_irq = llcc68_lora_irq_handler ;
/* lora init */
res = llcc68_lora_init ( a_callback );
if ( res != 0 )
{
( void ) gpio_interrupt_deinit ();
g_gpio_irq = NULL ;
return 1 ;
}
/* start receiving */
llcc68_interface_debug_print ( "llcc68: start receiving...n" );
gs_rx_done = 0 ;
timeout = 3000 ;
/* start receive */
res = llcc68_lora_set_continuous_receive_mode ();
if ( res != 0 )
{
( void ) llcc68_lora_deinit ();
( void ) gpio_interrupt_deinit ();
g_gpio_irq = NULL ;
return 1 ;
}
while (( timeout != 0 ) && ( gs_rx_done == 0 ))
{
timeout -- ;
llcc68_interface_delay_ms ( 1000 );
}
if ( gs_rx_done == 0 )
{
/* receive timeout */
llcc68_interface_debug_print ( "llcc68: receive timeout.n" );
( void ) llcc68_lora_deinit ();
( void ) gpio_interrupt_deinit ();
g_gpio_irq = NULL ;
return 1 ;
}
/* deinit */
res = llcc68_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 ;Documents en ligne: https://www.libdriver.com/docs/llcc68/index.html.
Documents hors ligne: /doc/html/index.html.
Veuillez vous référer à contribution.md.
Copyright (C) 2015 - Présent libdriver Tous droits réservés
La licence du MIT (MIT)
L'autorisation est accordée gratuitement par la présente à toute personne qui obtient une copie
de ce logiciel et des fichiers de documentation associés (le "logiciel"), pour traiter
dans le logiciel sans restriction, y compris sans limitation, les droits
Pour utiliser, copier, modifier, fusionner, publier, distribuer, sous-licencier et / ou vendre
copies du logiciel, et pour permettre aux personnes auxquelles le logiciel est
meublé pour le faire, sous réserve des conditions suivantes:
L'avis de droit d'auteur ci-dessus et le présent avis d'autorisation doivent être inclus dans tous
copies ou parties substantielles du logiciel.
Le logiciel est fourni "tel quel", sans garantie d'aucune sorte, express ou
Implicite, y compris mais sans s'y limiter
FACTIONNEMENT dans un but particulier et sans contrefaçon. En aucun cas le ne doit
Les auteurs ou les détenteurs de droits d'auteur sont responsables de toute réclamation, dommage ou autre
Responsabilité, que ce soit dans une action de contrat, délit ou autre, découlant de,
Hors de ou en relation avec le logiciel ou l'utilisation ou d'autres transactions dans le
LOGICIEL.
Veuillez envoyer un e-mail à [email protected].