Hello. I'm trying to run a sample with sending data via Lora. I'm using llcc68 but as I read in previous threads, the code for sx1262 should work on my chip.
Here is my code. I added a LED and a button to track if the device is flashed (I flash manually via nRF Connect for desktop).
#include <zephyr/device.h>
#include <zephyr/drivers/lora.h>
#include <errno.h>
#include <zephyr/sys/util.h>
#include <zephyr/kernel.h>
#include <zephyr/drivers/gpio.h>
#define DEFAULT_RADIO_NODE DT_ALIAS(lora0)
BUILD_ASSERT(DT_NODE_HAS_STATUS_OKAY(DEFAULT_RADIO_NODE),
"No default LoRa radio specified in DT");
#define MAX_DATA_LEN 10
#define LOG_LEVEL CONFIG_LOG_DEFAULT_LEVEL
#include <zephyr/logging/log.h>
LOG_MODULE_REGISTER(lora_send);
char data[MAX_DATA_LEN] = {'h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd'};
#define POWER_GPIO_NODE DT_ALIAS(powergpio)
static const struct gpio_dt_spec power_gpio_spec = GPIO_DT_SPEC_GET(POWER_GPIO_NODE, gpios);
#define SW0_NODE DT_ALIAS(sw0)
static const struct gpio_dt_spec button = GPIO_DT_SPEC_GET(SW0_NODE, gpios);
/* LED0_NODE is the devicetree node identifier for the node with alias "led0". */
#define LED0_NODE DT_ALIAS(led1)
static const struct gpio_dt_spec led = GPIO_DT_SPEC_GET(LED0_NODE, gpios);
/* STEP 4 - Define the callback function */
void button_pressed(const struct device *dev, struct gpio_callback *cb, uint32_t pins)
{
gpio_pin_toggle_dt(&led);
}
/* STEP 5 - Define a variable of type static struct gpio_callback */
static struct gpio_callback button_cb_data;
int main(void)
{
int ret;
ret = gpio_pin_configure_dt(&power_gpio_spec, GPIO_OUTPUT_ACTIVE);
//gpio_pin_set_dt(&power_gpio_spec, 1);
if (ret < 0) {
return -1;
}
k_sleep(K_MSEC(1000));
if (!device_is_ready(led.port)) {
return -1;
}
if (!device_is_ready(button.port)) {
return -1;
}
ret = gpio_pin_configure_dt(&led, GPIO_OUTPUT_INACTIVE);
if (ret < 0) {
return -1;
}
ret = gpio_pin_configure_dt(&button, GPIO_INPUT);
if (ret < 0) {
return -1;
}
/* STEP 3 - Configure the interrupt on the button's pin */
ret = gpio_pin_interrupt_configure_dt(&button, GPIO_INT_EDGE_TO_ACTIVE);
/* STEP 6 - Initialize the static struct gpio_callback variable */
gpio_init_callback(&button_cb_data, button_pressed, BIT(button.pin));
/* STEP 7 - Add the callback function by calling gpio_add_callback() */
gpio_add_callback(button.port, &button_cb_data);
const struct device *const lora_dev = DEVICE_DT_GET(DEFAULT_RADIO_NODE);
struct lora_modem_config config;
if (!device_is_ready(lora_dev)) {
LOG_ERR("%s Device not ready", lora_dev->name);
return 0;
}
config.frequency = 865100000;
config.bandwidth = BW_125_KHZ;
config.datarate = SF_10;
config.preamble_len = 8;
config.coding_rate = CR_4_5;
config.iq_inverted = false;
config.public_network = false;
config.tx_power = 4;
config.tx = true;
ret = lora_config(lora_dev, &config);
if (ret < 0) {
LOG_ERR("LoRa config failed");
return 0;
}
while (1) {
ret = lora_send(lora_dev, data, MAX_DATA_LEN);
if (ret < 0) {
LOG_ERR("LoRa send failed");
return 0;
}
LOG_INF("Data sent!");
/* Send data at 1s interval */
k_sleep(K_MSEC(1000));
}
return 0;
}
Here is my overlay
&spi1 {
compatible = "nordic,nrf-spi";
status = "okay";
cs-gpios = <&gpio0 15 GPIO_ACTIVE_LOW>;
pinctrl-0 = <&spi1_default>;
pinctrl-1 = <&spi1_sleep>;
pinctrl-names = "default", "sleep";
lora0: sx1262@0 {
compatible = "semtech,sx1262";
status = "okay";
reg = <0>;
reset-gpios = <&gpio0 19 GPIO_ACTIVE_LOW>;
busy-gpios = <&gpio0 20 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)>;
dio1-gpios = <&gpio0 7 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)>;
spi-max-frequency = <4000000>;
};
};
/ {
aliases {
lora0 = &lora0;
};
};
The project is building, I am flashing it, and the button with the LED works. The module manages to send something once if I press reset and that's it.


I am using NCS 2.8.0. Also I don't use dio1-gpios, it is just a dummy pin.
Has anyone encountered such problems? Please help.