English | 简体中文 | 繁體中文 | 日本語 | Deutsch | 한국어
SX1268 sub-GHz 無線電收發器是遠程無線應用的理想器件。它專為延長電池壽命而設計,有效接收電流消耗僅為 4.2 mA。 SX1268 可以通過高效集成功率放大器在 490 MHz 時傳輸高達 +22 dBm。在 780 MHz 時,SX1268 在其天線端口傳輸 +10 dBm 信號的功耗不到 20 mA。 SX1268 支持用於 LPWAN 用例的 LoRa 調製(G)FSK 調製用於傳統用例。它具有高度可配置性,可利用 LoRaWANTM 標准或專有協議滿足不同的應用要求。該設備旨在符合 LoRa AllianceTM 發布的 LoRaWANTM 規範的物理層要求。該無線電適用於以符合無線電法規為目標的系統,包括但不限於中國監管要求和 ETSI EN 300 220 (434 MHz)。從 410 MHz 到 810 MHz 的連續頻率覆蓋允許支持 490 和 780 MHz 中國低功耗短距離設備頻段。 SX1268 可用於智能電錶、供應鏈與物流、樓宇自動化等。
LibDriver SX1268是LibDriver推出的SX1268全功能驅動,提供無線發送、無線接收、cad等功能並且它符合MISRA標準。
/src目錄包含了LibDriver SX1268的源文件。
/interface目錄包含了LibDriver SX1268與平台無關的SPI總線模板。
/test目錄包含了LibDriver SX1268驅動測試程序,該程序可以簡單的測試芯片必要功能。
/example目錄包含了LibDriver SX1268編程範例。
/doc目錄包含了LibDriver SX1268離線文檔。
/datasheet目錄包含了SX1268數據手冊。
/project目錄包含了常用Linux與單片機開發板的工程樣例。所有工程均採用shell腳本作為調試方法,詳細內容可參考每個工程裡面的README.md。
參考/interface目錄下與平台無關的SPI總線模板,完成指定平台的SPI總線驅動。
將/src目錄,/interface目錄和/example目錄加入工程。
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 sent mode */
res = sx1268_lora_set_sent_mode();
if (res != 0)
{
(void)sx1268_lora_deinit();
(void)gpio_interrupt_deinit();
g_gpio_irq = NULL;
return 1;
}
sx1268_interface_debug_print("sx1268: sent %s.\n", "123");
/* sent data */
res = sx1268_lora_sent((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;
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
版權 (c) 2015 - 現在 LibDriver 版權所有
MIT 許可證(MIT)
特此免費授予任何獲得本軟件副本和相關文檔文件(下稱“軟件”)的人不受限制地處置該軟件的權利,包括不受限制地使用、複製、修改、合併、發布、分發、轉授許可和/或出售該軟件副本,以及再授權被配發了本軟件的人如上的權利,須在下列條件下:
上述版權聲明和本許可聲明應包含在該軟件的所有副本或實質成分中。
本軟件是“如此”提供的,沒有任何形式的明示或暗示的保證,包括但不限於對適銷性、特定用途的適用性和不侵權的保證。在任何情況下,作者或版權持有人都不對任何索賠、損害或其他責任負責,無論這些追責來自合同、侵權或其它行為中,還是產生於、源於或有關於本軟件以及本軟件的使用或其它處置。