Английский | 简体中文 | 繁體中文 | 日本語 | Deutsch | 한국어
Радиоперсивер Sub-GHZ LLCC68 идеально подходит для беспроводных приложений на дальние расстояния. Он предназначен для длительного срока службы батареи с 4,2 мА активного потребления тока приема. Он высоко настраивается для удовлетворения различных требований применения для использования в отрасли и потребителях. Устройство обеспечивает модуляцию LORA®, совместимые с SEMTECH Приемопередатчиками, используемыми в спецификации Lorawan ™, опубликованной LORA Alliance ™. Радио подходит для систем, нацеленных на соответствие радиоуправлениям, включая, но не ограничиваясь ETSI EN 300 220, FCC CFR 47 Part 15, China REGINETIORS REGINETIORTITION и THAPARIB. Непрерывное покрытие частоты от 150 МГц до 960 МГц позволяет поддерживать все основные полосы ISM Sub-GHZ по всему миру. LLCC68 может использоваться в интеллектуальных счетчиках, цепочке поставок и логистике, автоматизации здания и так далее.
Libdriver LLCC68 является полной функциональной драйвером LLCC68, запущенной Libdriver.it, предоставляет функции беспроводной передачи, беспроводного получения, CAD и т. Д. Libdriver соответствует MISRA.
/SRC включает в себя исходные файлы Libdriver LLCC68.
/Интерфейс включает в себя независимый шаблон платформы Libdriver LLCC68 SPI.
/Тест включает в себя код тестирования драйвера Libdriver LLCC68, и этот код может просто проверить необходимую функцию чипа.
/Пример включает в себя код образца Libdriver LLCC68.
/DOC включает в себя Libdriver LLCC68 Offline Document.
/DataSheet включает в себя LLCC68.
/Project включает в себя общий код образца Development Board. Все проекты используют скрипт оболочки для отладки драйвера, и инструкция по деталям можно найти в 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.
Оффлайн документы: /док/html/index.html.
Пожалуйста, обратитесь к Appling.md.
Copyright (C) 2015 - НАСТОЯЩИЕ ЛИБРИРЕР. Все права защищены
Лицензия MIT (MIT)
Настоящим предоставляется разрешение бесплатно любому лицу, получающему копию
этого программного обеспечения и связанных с ними файлов документации («Программное обеспечение»), чтобы иметь дело
в программном обеспечении без ограничений, включая, помимо прочего, права
Чтобы использовать, копировать, изменять, объединять, публиковать, распространять, сублиценс и/или продавать
копии программного обеспечения и разрешить лицам, которым является программное обеспечение
меблировано для этого, при условии следующих условий:
Вышеуказанное уведомление об авторском праве и это уведомление о разрешении должно быть включено во все
копии или существенные части программного обеспечения.
Программное обеспечение предоставляется «как есть», без каких -либо гарантий, экспресс или
Подразумевается, в том числе, но не ограничиваясь гарантиями торговой точки зрения,
Фитнес для определенной цели и не нанесения нанесения. Ни в каком случае
Авторы или владельцы авторских прав нести ответственность за любые претензии, ущерб или другие
Ответственность, будь то в действии договора, деликт или иным образом, возникает из
Вне или в связи с программным обеспечением или использованием или другими делами в
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ.
Пожалуйста, отправьте электронное письмо по адресу [email protected].