英语| 简体中文| 繁体中文| 日本语|德意志| 한국어
LLCC68子GHZ无线电收发器是远程无线应用的理想选择。它的设计用于长时间的电池寿命,仅4.2 mA主动接收电流消耗。LLCC68可以使用高效的集成功率放大器传输+22 dbm。LLCC68支持LORA®用于LPWAN使用案例的LORA®调制和(G)FSK调制传统用例。该设备提供了与Lorawan Alliance™发布的Lorawan™规范相兼容的Lora®调制器的设备,可满足行业和消费者使用的不同应用要求。该设备适用于针对符合无线电法规的系统,包括但不限于ETSI ETSI ENSI EN 300 220,FCC CFR 47 Part Optribible,CERAMERIP 15 ers 15,日本徒气和日本鸟类的批准。连续的频率覆盖范围从150 MHz到960 MHz允许全球所有主要的Sub-GHz ISM频段的支持。LLCC68可用于智能电表,供应链和物流,建筑自动化等。
libdriver llcc68是由libdriver启动的LLCC68的完整功能驱动程序。它提供了无线发送,无线接收,CAD等的功能。Libdriver符合MISRA。
/src包括libdriver llcc68源文件。
/接口包括Libdriver LLCC68 SPI平台独立模板。
/测试包括Libdriver LLCC68驱动程序测试代码,此代码可以简单地测试芯片所需的功能。
/示例包括libdriver llcc68示例代码。
/DOC包括LIBDRIVER LLCC68离线文档。
/数据表包括LLCC68数据表。
/项目包括通用Linux和MCU开发委员会样本代码。所有项目都使用Shell脚本来调试驱动程序,并且可以在每个项目的readme.md中找到详细说明。
/Misra包括Libdriver Misra代码扫描结果。
参考 /接口SPI平台独立模板并完成平台SPI驱动程序。
将 /src目录,平台的接口驱动程序以及您自己的驱动程序添加到项目中,如果您想使用默认示例驱动程序,请在项目中添加 /示例目录。
您可以参考 /示例目录中的示例以完成自己的驱动程序。如果您想使用默认的编程示例,则是如何使用它们的方法。
#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 ;在线文档:https://www.libdriver.com/docs/llcc68/index.html。
离线文档:/doc/html/index.html。
请参考贡献。
版权(c)2015年 - 目前的libdriver保留所有权利
麻省理工学院许可证(MIT)
特此免费授予任何获得副本的人的许可
该软件和相关文档文件(“软件”)
在软件中无限制的软件中,包括无限制的权利
使用,复制,修改,合并,发布,分发,转销和/或出售
软件的副本,并允许软件的人
符合以下条件的规定,可以这样做:
上述版权通知和此许可通知应包含
该软件的副本或大量部分。
该软件是“原样”提供的,没有任何形式的保证,明确或
暗示,包括但不限于适销性保证,
适合特定目的和非侵扰的适合度。在任何情况下都不会
作者或版权持有人应对任何索赔,损害赔偿或其他责任负责
责任,无论是在合同,侵权的诉讼中还是其他责任,是由
与软件或使用或与使用或其他交易有关
软件。
请发送电子邮件至[email protected]。