1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/lupyuen-lora-sx1262

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

LoRa Driver для Semtech SX1262 на Linux (PineDio USB-адаптер) и BL602 (PineDio Stack BL604)

Читайте статьи:

— «Создайте драйвер Linux для PineDio LoRa SX1262 USB-адаптера» (https://lupyuen.github.io/articles/usb);

— «LoRaWAN на PineDio Stack BL604 RISC-V Board» (https://lupyuen.github.io/articles/lorawan2);

— «PineCone BL602 Talks LoRaWAN» (https://lupyuen.github.io/articles/lorawan);

— «The Things Network на PineDio Stack BL604 RISC-V Board» (https://lupyuen.github.io/articles/ttn).

Внимание: отправка сообщения LoRa на PineDio USB (не BL602) свыше 29 байт приведёт к повреждению сообщения!

Внимание: получение сообщения LoRa на PineDio USB (не BL602) свыше 28 байт приведёт к повреждению сообщения!

(CH341 SPI, похоже, испытывает трудности с передачей блока из 32 байт).

Для BL602 / BL604: чтобы добавить этот драйвер в существующий проект BL602 / BL604, выполните следующие действия:

cd bl_iot_sdk/components/3rdparty
git submodule add https://github.com/lupyuen/lora-sx1262

Перенесено из эталонной реализации драйвера Semtech для SX1262...

https://github.com/Lora-net/LoRaMac-node/tree/master/src/radio/sx126x

Сборка PineDio USB Driver

Чтобы собрать драйвер PineDio USB на Pinebook Pro Manjaro Arm64, выполните следующее:

## Установите DKMS
sudo pacman -Syu dkms base-devel --needed

## Установите заголовки ядра для Manjaro: https://linuxconfig.org/manjaro-linux-kernel-headers-installation
uname -r
## Должно отобразить «5.14.12-1-MANJARO-ARM» или подобное
sudo pacman -S linux-headers
pacman -Q | grep headers
## Должно отображать «linux-headers 5.14.12-1» или подобное

## Перезагрузите компьютер для безопасности
sudo reboot now

## Установите драйвер CH341 SPI
git clone https://github.com/rogerjames99/spi-ch341-usb.git
pushd spi-ch341-usb
## TODO: отредактируйте Makefile и измените...
##   KERNEL_DIR  = /usr/src/linux-headers-$(KVERSION)/
## на...
##   KERNEL_DIR  = /lib/modules/$(KVERSION)/build
make
sudo make install
popd

## Выгрузите модуль ch341, если он был автоматически загружен
lsmod | grep ch341
sudo rmmod ch341

## Загрузите новый модуль
sudo modprobe spi-ch341-usb

## Подключите PineDio USB и проверьте, что модуль был правильно загружен.
## См. журнал dmesg ниже. Это необходимо проверять каждый раз, когда мы перезагружаем
## наш компьютер и подключаем PineDio USB.
dmesg

## Если мы увидим «spi_ch341_usb: loading out-of-tree module taints kernel»,
## Отключите PineDio USB, запустите «sudo rmmod ch341», снова подключите PineDio USB
## и ещё раз проверьте dmesg.

## Скачайте драйвер PineDio USB
git clone --recursive https://github.com/lupyuen/lora-sx1262
cd lora-sx1262

## TODO: Отредактируйте src/main.c и раскомментируйте READ_REGISTERS, SEND_MESSAGE или RECEIVE_MESSAGE.
## Смотрите «Операции PineDio USB» ниже

## Соберите драйвер PineDio USB
make

## Запустите демонстрацию PineDio USB Driver.
## Посмотрите журнал вывода ниже.
sudo ./lora-sx1262

Подробнее о PineDio USB и CH341 SPI:

https://wiki.pine64.org/wiki/JF%27s_note_on_PineDio_devices#RAW_LoRa_communication_between_USB_LoRa_adapter_and_PineDio_STACK

Операции PineDio USB

Демонстрация PineDio USB поддерживает 3 операции...

  1. Чтение регистров SX1262:

    Отредактируйте src/main.c и раскомментируйте...

    #define READ_REGISTERS

    (См. журнал чтения регистра ниже)

  2. Отправка сообщения LoRa:

    Отредактируйте src/main.c и раскомментируйте...

    #define SEND_MESSAGE

    (См. журнал отправки сообщения ниже)

  3. Получение сообщения LoRa:

    Отредактируйте src/main.c и раскомментируйте...

    #define RECEIVE_MESSAGE

    (См. журнал получения сообщения ниже)

Обратите внимание, что программирование GPIO CH341 является неполным. Нам нужно...

  1. Инициализировать контакты GPIO: SX126xIoInit

    src/sx126x-linux.c#L65-L77

  2. Зарегистрировать обработчик прерываний GPIO для DIO1: SX126xIoIrqInit

    src/sx126x-linux.c#L79-L91

  3. Сбросить SX1262 через GPIO: SX126xReset

    (На данный момент мы сбрасываем SX1262, вручную отключая PineDio USB)

    src/sx126x-linux.c#L149-L169

  4. Проверить состояние занятости SX1262 через GPIO: SX126xWaitOnBusy Мы спим 10 миллисекунд

    src/sx126x-linux.c#L171-L182

  5. Получить состояние вывода DIO1: SX126xGetDio1PinState

    src/sx126x-linux.c#L337-L344

Нам также нужны фоновые потоки для получения LoRa сообщений в фоновом режиме...

src/main.c#L355-L408

Подробнее о PineDio USB и CH341 GPIO:

https://wiki.pine64.org/wiki/JF%27s_note_on_PineDio_devices#RAW_LoRa_communication_between_USB_LoRa_adapter_and_PineDio_STACK

Журнал вывода PineDio USB

Журнал вывода от PineDio USB Demo...

Чтение регистров

Чтение регистров SX1262 на PineDio USB:

read_registers
SX126xIoInit
SX126xWakeup
sx126x_hal_write: command_length=1, data_length=1
spi tx: c0 00 
spi rx: a2 22 
TODO: SX126xWaitOnBusy
TODO: SX126xWaitOnBusy
sx126x_hal_read: command_length=4, data_length=1
spi tx: 1d 00 00 00 00 
spi rx: a2 a2 a2 a2 00 
TODO: SX126xWaitOnBusy
Регистр 0x00 = 0x00
TODO: SX126xWaitOnBusy
sx126x_hal_read: command_length=4, data_length=1
spi tx: 1d 00 01 00 00 
spi rx: a2 a2 a2 a2 00 
TODO: SX126xWaitOnBusy
Регистр 0x01 = 0x00
TODO: SX126xWaitOnBusy
sx126x_hal_read: command_length=4, data_length=1
spi tx: 1d 00 02 00 00 
spi rx: a2 a2 a2 a2 00 
TODO: SX126xWaitOnBusy
Регистр 0x02 = 0x00
TODO: SX126xWaitOnBusy
sx126x_hal_read: command_length=4, data_length=1
spi tx: 1d 00 03 00 00 
spi rx: a2 a2 a2 a2 00 
TODO: SX126xWaitOnBusy
Регистр 0x03 = 0x00
TODO: SX126xWaitOnBusy
sx126x_hal_read: command_length=4, data_length=1
spi tx: 1d 00 04 00 00 
spi rx: a2 a2 a2 a2 00 
TODO: SX126xWaitOnBusy
Регистр 0x04 = 0x00
TODO: SX126xWaitOnBusy
sx126x_hal_read: command_length=4, data_length=1
spi tx: 1d 00 05 00 00 
spi rx: a2 a2 a2 a2 00 
TODO: SX126xWaitOnBusy
Регистр 0x05 = 0x00
TODO: SX126xWaitOnBusy
sx126x_hal_read: command_length=4, data_length=1
spi tx: 1d 00 06 00 00 
spi rx: a2 a2 a2 a2 00 
TODO: SX126xWaitOnBusy
Регистр 0x06 = 0x00
TODO: SX126xWaitOnBusy
sx126x_hal_read: command_length=4, data_length=1
spi tx: 1d 00 07 00 00 
spi rx: a2 a2 a2 a2 00 
TODO: SX126xWaitOnBusy
Регистр 0x07 = 0x00
TODO: SX126xWaitOnBusy
sx126x_hal_read: command_length=4, data_length=1
spi tx: 1d 00 08 00 00 
spi rx: a2 a2 a2 a2 80 
TODO: SX126xWaitOnBusy
Регистр 0x08 = 0x80
TODO: SX126xWaitOnBusy
sx126x_hal_read: command_length=4, data_length=1
spi tx: 1d 00 09 00 00 
spi rx: a2 a2 a2 a2 00 
TODO: SX126xWaitOnBusy
Регистр 0x09 = 0x00
TODO: SX126xWaitOnBusy
sx126x_hal_read: command_length=4, data_length=1
spi tx: 1d 00 0a 00 00 
spi rx: a2 a2 a2 a2 01 
TODO: SX126xWaitOnBusy
Регистр 0x0a = 0x01
TODO: SX126xWaitOnBusy
sx126x_hal_read: command_length=4, data_length=1
spi tx: 1d 00 0b 00 00 
spi rx: a2 a2 a2 a2 00 
TODO: SX126xWaitOnBusy
Регистр 0x0b = 0x00
TODO: SX126xWaitOnBusy
sx126x_hal_read: command_length=4, data_length=1
spi tx: 1d 00 0c 00 00 
spi rx: a2 a2 a2 a2 00 
TODO: SX126xWaitOnBusy
Регистр 0x0c = 0x00
TODO: SX126xWaitOnBusy
sx126x_hal_read: command_length=4, data_length=1
spi tx: 1d 00 0d 00 00 
spi rx: a2 a2 a2 a2 00 
TODO: SX126xWaitOnBusy
Регистр 0x0d = 0x00
TODO: SX126xWaitOnBusy
sx126x_hal_read: command_length=4, data_length=1
spi tx: 1d 00 0e 00 00 
spi rx: a2 a2 a2 a2 00 
TODO: SX126xWaitOnBusy
Регистр 0x0e = 0x00
Готово!

См. ниже журнал dmesg чтения регистров.

Отправка сообщения

Передача 29-байтового LoRa сообщения на PineDio USB:

ВНИМАНИЕ: отправка LoRa-сообщения на PineDio USB (не BL602) размером более 29 байт приведёт к повреждению сообщения!

gcc -o lora-sx1262 \
npl/linux/src/os_eventq.cc \
 \
src/main.o src/radio.o src/sx126x.o src/sx126x-linux.o npl/linux/src/os_callout.o npl/linux/src/os_sem.o npl/linux/src/os_task.o npl/linux/src/os_atomic.o npl/linux/src/os_time.o npl/linux/src/os_mutex.o \
-g -Wall -Wextra -Wno-unused-parameter -Wno-sign-compare -Wno-old-style-declaration -I include -I npl/linux/include -I npl/linux/include/nimble  \
-pthread -lrt -lstdc++  \

cc1plus: warning:
``` Команда-лайн опция «-Wno-old-style-declaration» действительна для C/ObjC, но не для C++.

create_task
init_driver
TODO: SX126xReset
SX126xIoInit
TODO: SX126X interrupt init
SX126xWakeup
sx126x_hal_write: command_length=1, data_length=1
spi tx: c0 00
spi rx: ac 2c
TODO: SX126xWaitOnBusy
TODO: SX126xWaitOnBusy
sx126x_hal_write: command_length=1, data_length=1
spi tx: 80 00
spi rx: ac ac
TODO: SX126xWaitOnBusy
TODO: SX126xWaitOnBusy
sx126x_hal_write: command_length=1, data_length=1
spi tx: 9d 01
spi rx: a2 a2
TODO: SX126xWaitOnBusy
TODO: SX126xWaitOnBusy
sx126x_hal_write: command_length=1, data_length=1
spi tx: 80 00
spi rx: a2 a2
TODO: SX126xWaitOnBusy
TODO: SX126xWaitOnBusy
sx126x_hal_write: command_length=1, data_length=1
spi tx: 96 01
spi rx: a2 a2
TODO: SX126xWaitOnBusy
TODO: SX126xWaitOnBusy
sx126x_hal_write: command_length=1, data_length=1
spi tx: 8f 00 00
spi rx: a2 a2 a2
TODO: SX126xWaitOnBusy
SX126xSetTxParams: power=22, rampTime=7
SX126xGetDeviceId: SX1262
TODO: SX126xWaitOnBusy
sx126x_hal_read: command_length=4, data_length=1
spi tx: 1d 08 d8 00 00
spi rx: a2 a2 a2 a2 fe
TODO: SX126xWaitOnBusy
TODO: SX126xWaitOnBusy
sx126x_hal_write: command_length=3, data_length=1
spi tx: 0d 08 d8 fe
spi rx: a2 a2 a2 a2
TODO: SX126xWaitOnBusy
SX126xSetPaConfig: paDutyCycle=4, hpMax=7, deviceSel=0, paLut=1
TODO: SX126xWaitOnBusy
sx126x_hal_write: command_length=1, data_length=4
spi tx: 95 04 07 00 01
spi rx: a2 a2 a2 a2 a2
TODO: SX126xWaitOnBusy
TODO: SX126xWaitOnBusy
sx126x_hal_write: command_length=3, data_length=1
spi tx: 0d 08 e7 38
spi rx: a2 a2 a2 a2
TODO: SX126xWaitOnBusy
TODO: SX126xWaitOnBusy
sx126x_hal_write: command_length=1, data_length=2
spi tx: 8e 16 07
spi rx: a2 a2 a2
TODO: SX126xWaitOnBusy
TODO: SX126xWaitOnBusy
sx126x_hal_write: command_length=1, data_length=8
spi tx: 08 ff ff ff ff 00 00 00 00
spi rx: a2 a2 a2 a2 a2 a2 a2 a2 a2
TODO: SX126xWaitOnBusy
TODO: SX126xWaitOnBusy
sx126x_hal_read: command_length=4, data_length=9
spi tx: 1d 02 9f 00 00 00 00 00 00 00 00 00 
spi rx: a2 a2 a2 a2 02 08 ac 08 89 3a a1 65 9a
TODO: SX126xWaitOnBusy
TimerInit
TimerInit
RadioSetChannel: freq=923000000
TODO: SX126xWaitOnBusy
sx126x_hal_write: command_length=1, data_length=2
spi tx: 98 e1 e9
spi rx: a2 a2 a2
TODO: SX126xWaitOnBusy
TODO: SX126xWaitOnBusy
sx126x_hal_write: command_length=1, data_length=4
spi tx: 86 39 b0 00 00
spi rx: a2 a2 a2 a2 a2
TODO: SX126xWaitOnBusy
RadioSetTxConfig: modem=1, power=14, fdev=0, bandwidth=0, datarate=7, coderate=1, preambleLen=8, fixLen=0, crcOn=1, freqHopOn=0, hopPeriod=0, iqInverted=0, timeout=3000
RadioStandby
TODO: SX126xWaitOnBusy
sx126x_hal_write: command_length=1, data_length=1
spi tx: 80 00
spi rx: a2 a2
TODO: SX126xWaitOnBusy
RadioSetModem
TODO: SX126xWaitOnBusy
sx126x_hal_write: command_length=1, data_length=1
spi tx: 8a 01
spi rx: a2 a2
TODO: SX126xWaitOnBusy
TODO: SX126xWaitOnBusy
sx126x_hal_write: command_length=1, data_length=4
spi tx: 8b 07 04 01 00
spi rx: a2 a2 a2 a2 a2
TODO: SX126xWaitOnBusy
TODO: SX126xWaitOnBusy
sx126x_hal_write: command_length=1, data_length=6
spi tx: 8c 00 08 00 ff 01 00
spi rx: a2 a2 a2 a2 a2 a2 a2
TODO: SX126xWaitOnBusy
TODO: SX126xWaitOnBusy
sx126x_hal_read: command_length=4, data_length=1
spi tx: 1d 08 89 00 00
spi rx: a2 a2 a2 a2 04
TODO: SX126xWaitOnBusy
TODO: SX126xWaitOnBusy
sx126x_hal_write: command_length=3, data_length=1
spi tx: 0d 08 89 04
spi rx: a2 a2 a2 a2
TODO: SX126xWaitOnBusy
SX126xSetRfTxPower
SX126xSetTxParams: power=14, rampTime=7
SX126xGetDeviceId: SX1262
TODO: SX126xWaitOnBusy
sx126x_hal_read: command_length=4, data_length=1
spi tx: 1d 08 d8 00 00
spi rx: a2 a2 a2 a2 fe
TODO: SX126xWaitOnBusy
TODO: SX126xWaitOnBusy ```
create_task
init_driver
TODO: SX126xReset
SX126xIoInit
TODO: SX126X interrupt init
SX126xWakeup
sx126x_hal_write: command_length=1, data_length=1
spi tx:

Основной язык текста запроса — язык Nim. c0 00

spi rx: d4 54

TODO: SX126xWaitOnBusy TODO: SX126xWaitOnBusy sx126x_hal_write: command_length=1, data_length=1 spi tx: 80 00 spi rx: d4 d4

TODO: SX126xWaitOnBusy TODO: SX126xWaitOnBusy sx126x_hal_write: command_length=1, data_length=1 spi tx: 9d 01 spi rx: a2 a2

TODO: SX126xWaitOnBusy TODO: SX126xWaitOnBusy sx126x_hal_write: command_length=1, data_length=1 spi tx: 80 00 spi rx: a2 a2

TODO: SX126xWaitOnBusy TODO: SX126xWaitOnBusy sx126x_hal_write: command_length=1, data_length=1 spi tx: 96 01 spi rx: a2 a2

TODO: SX126xWaitOnBusy TODO: SX126xWaitOnBusy sx126x_hal_write: command_length=1, data_length=2 spi tx: 8f 00 00 spi rx: a2 a2 a2

TODO: SX126xWaitOnBusy SX126xSetTxParams: power=22, rampTime=7 SX126xGetDeviceId: SX1262 TODO: SX126xWaitOnBusy sx126x_hal_read: command_length=4, data_length=1 spi tx: 1d 08 d8 00 00 spi rx: a2 a2 a2 a2 fe

TODO: SX126xWaitOnBusy TODO: SX126xWaitOnBusy sx126x_hal_write: command_length=3, data_length=1 spi tx: 0d 08 d8 fe spi rx: a2 a2 a2 a2

TODO: SX126xWaitOnBusy SX126xSetPaConfig: paDutyCycle=4, hpMax=7, deviceSel=0, paLut=1 TODO: SX126xWaitOnBusy sx126x_hal_write: command_length=1, data_length=4 spi tx: 95 04 07 00 01 spi rx: a2 a2 a2 a2 a2

TODO: SX126xWaitOnBusy TODO: SX126xWaitOnBusy sx126x_hal_write: command_length=3, data_length=1 spi tx: 0d 08 e7 38 spi rx: a2 a2 a2 a2

TODO: SX126xWaitOnBusy TODO: SX126xWaitOnBusy sx126x_hal_write: command_length=1, data_length=2 spi tx: 8e 16 07 spi rx: a2 a2 a2

TODO: SX126xWaitOnBusy TODO: SX126xWaitOnBusy sx126x_hal_write: command_length=1, data_length=8 spi tx: 08 ff ff ff ff 00 00 00 00 spi rx: a2 a2 a2 a2 a2 a2 a2 a2 a2

TODO: SX126xWaitOnBusy TODO: SX126xWaitOnBusy sx126x_hal_read: command_length=4, data_length=9 spi tx: 1d 02 9f 00 00 00 00 00 00 00 00 00 00 spi rx: a2 a2 a2 a2 02 08 ac 08 89 aa a9 61 9b

TODO: SX126xWaitOnBusy TimerInit TimerInit RadioSetChannel: freq=923000000 TODO: SX126xWaitOnBusy sx126x_hal_write: command_length=1, data_length=2 spi tx: 98 e1 e9 spi rx: a2 a2 a2

TODO: SX126xWaitOnBusy TODO: SX126xWaitOnBusy sx126x_hal_write: command_length=1, data_length=4 spi tx: 86 39 b0 00 00 spi rx: a2 a2 a2 a2 a2

RadioSetTxConfig: modem=1, power=14, fdev=0, bandwidth=0, datarate=7, coderate=1, preambleLen=8, fixLen=0, crcOn=1, freqHopOn=0, hopPeriod=0, iqInverted=0, timeout=3000 RadioSetTxConfig: SpreadingFactor=7, Bandwidth=4, CodingRate=1, LowDatarateOptimize=0, PreambleLength=8, HeaderType=0, PayloadLength=255, CrcMode=1, InvertIQ=0 RadioStandby

TODO: SX126xWaitOnBusy sx126x_hal_write: command_length=1, data_length=1 spi tx: 80 00 spi rx: a2 a2

RadioSetModem

TODO: SX126xWaitOnBusy sx126x_hal_write: command_length=1, data_length=1 spi tx: 8a 01 spi rx: a2 a2

TODO: SX126xWaitOnBusy TODO: SX126xWaitOnBusy sx126x_hal_write: command_length=1, data_length=4 spi tx: 8b 07 04 01 00 spi rx: a2 a2 a2 a2 a2

TODO: SX126xWaitOnBusy TODO: SX126xWaitOnBusy sx126x_hal_write: command_length=1, data_length=6 spi tx: 8c 00 08 00 ff 01 00 spi rx: a2 a2 a2 a2 a2 a2 a2

TODO: SX126xWaitOnBusy TODO: SX126xWaitOnBusy sx126x_hal_read: command_length=4, data_length=1 spi tx: 1d 08 89 00 00 spi rx: a2 a2 a2 a2 04

TODO: SX126xWaitOnBusy TODO: SX126xWaitOnBusy sx126x_hal_write: command_length=3, data_length=1 spi tx: 0d 08 89 04 spi rx: a2 a2 a2 a2

SX126xSetRfTxPower SX126xSetTxParams: power=14, rampTime=7 SX126xGetDeviceId: SX1262

TODO: SX126xWaitOnBusy sx126x_hal_read: command_length=4, data_length=1 spi tx: 1d 08 d8 00 00 spi rx: a2 a2 a2 a2 fe

TODO: SX126xWaitOnBusy TODO: SX126xWaitOnBusy sx126x_hal_write: command_length=3, data_length=1 spi tx: 0d 08 d8 fe spi rx: a2 a2 a2 a2

SX126xSetPaConfig: paDutyCycle=4, hpMax=7, deviceSel=0, paLut=1

TODO: SX126xWaitOnBusy sx126x_hal_write: command_length=1, data_length=4 spi tx: 95 04 07 SX126xWaitOnBusy

sx126x_hal_write: command_length=3, data_length=1 spi tx: 0d 08 ac 94 spi rx: d2 d2 d2 d2 TODO: SX126xWaitOnBusy

TODO: SX126xWaitOnBusy

sx126x_hal_write: command_length=1, data_length=3 spi tx: 82 ff ff ff spi rx: d2 d2 d2 d2 TODO: SX126xWaitOnBusy RadioOnDioIrq RadioIrqProcess

SX126xReadCommand

command=0x12, size=2 TODO: SX126xWaitOnBusy sx126x_hal_read: command_length=2, data_length=2 spi tx: 12 00 00 00 spi rx: d2 d2 00 00 status=0xd2 TODO: SX126xWaitOnBusy TODO: SX126xWaitOnBusy

sx126x_hal_write

command_length=1, data_length=2 spi tx: 02 00 00 spi rx: d2 d2 d2 TODO: SX126xWaitOnBusy TODO: SX126xGetDio1PinState receive_message RadioRx

TODO: SX126xWaitOnBusy

sx126x_hal_write: command_length=1, data_length=8 spi tx: 08 ff ff ff ff 00 00 00 00 spi rx: d2 d2 d2 d2 d2 d2 d2 d2 d2

И так далее.

Примечание: в запросе присутствуют фрагменты кода, которые не удалось распознать и перевести. Перевод текста:

Отправить сообщение

Журнал dmesg при передаче PineDio USB 29-байтового пакета LoRa...

ВНИМАНИЕ: отправка сообщения LoRa на PineDio USB (не BL602) размером более 29 байт приведёт к повреждению сообщения!

audit: type=1105 audit(1634994194.295:1270): pid=72110 uid=1000 auid=1000 ses=4 subj==unconfined msg='op=PAM:session_open grantors=pam_limits,pam_unix,pam_permit acct="root" exe="/usr/bin/sudo" hostname=? addr=? terminal=/dev/pts/3 res=success'
spi-ch341-usb 3-1:1.0: ch341_spi_transfer_low: len=2, csChange=1, result=2
spi-ch341-usb 3-1:1.0: ch341_spi_transfer_low: len=2, csChange=1, result=2
spi-ch341-usb 3-1:1.0: ch341_spi_transfer_low: len=2, csChange=1, result=2
spi-ch341-usb 3-1:1.0: ch341_spi_transfer_low: len=2, csChange=1, result=2
spi-ch341-usb 3-1:1.0: ch341_spi_transfer_low: len=2, csChange=1, result=2
spi-ch341-usb 3-1:1.0: ch341_spi_transfer_low: len=3, csChange=1, result=3
spi-ch341-usb 3-1:1.0: ch341_spi_transfer_low: len=5, csChange=1, result=5
spi-ch341-usb 3-1:1.0: ch341_spi_transfer_low: len=4, csChange=1, result=4
spi-ch341-usb 3-1:1.0: ch341_spi_transfer_low: len=5, csChange=1, result=5
spi-ch341-usb 3-1:1.0: ch341_spi_transfer_low: len=4, csChange=1, result=4
spi-ch341-usb 3-1:1.0: ch341_spi_transfer_low: len=3, csChange=1, result=3
spi-ch341-usb 3-1:1.0: ch341_spi_transfer_low: len=9, csChange=1, result=9
spi-ch341-usb 3-1:1.0: ch341_spi_transfer_low: len=13, csChange=1, result=13
spi-ch341-usb 3-1:1.0: ch341_spi_transfer_low: len=13, csChange=1, result=13
spi-ch341-usb 3-1:1.0: ch341_spi_transfer_low: len=3, csChange=1, result=3
spi-ch341-usb 3-1:1.0: ch341_spi_transfer_low: len=5, csChange=1, result=5
spi-ch341-usb 3-1:1.0: ch341_spi_transfer_low: len=2, csChange=1, result=2
spi-ch341-usb 3-1:1.0: ch341_spi_transfer_low: len=2, csChange=1, result=2
spi-ch341-usb 3-1:1.0: ch341_spi_transfer_low: len=5, csChange=1, result=5
spi-ch341-usb 3-1:1.0: ch341_spi_transfer_low: len=7, csChange=1, result=7
spi-ch341-usb 3-1:1.0: ch341_spi_transfer_low: len=5, csChange=1, result=5
spi-ch341-usb 3-1:1.0: ch341_spi_transfer_low: len=4, csChange=1, result=4
spi-ch341-usb 3-1:1.0: ch341_spi_transfer_low: len=5, csChange=1, result=5
spi-ch341-usb 3-1:1.0: ch341_spi_transfer_low: len=4, csChange=1, result=4
spi-ch341-usb 3-1:1.0: ch341_spi_transfer_low: len=5, csChange=1, result=5
spi-ch341-usb 3-1:1.0: ch341_spi_transfer_low: len=4, csChange=1, result=4
spi-ch341-usb 3-1:1.0: ch341_spi_transfer_low: len=3, csChange=1, result=3
spi-ch341-usb 3-1:1.0: ch341_spi_transfer_low: len=2, csChange=1, result=2
spi-ch341-usb 3-1:1.0: ch341_spi_transfer_low: len=2, csChange=1, result=2
spi-ch341-usb 3-1:1.0: ch341_spi_transfer_low: len=2, csChange=1, result=2
spi-ch341-usb 3-1:1.0: ch341_spi_transfer_low: len=5, csChange=1, result=5
spi-ch341-usb 3-1:1.0: ch341_spi_transfer_low: len=7, csChange=1, result=7
spi-ch341-usb 3-1:1.0: ch341_spi_transfer_low: len=2, csChange=1, result=2
spi-ch341-usb 3-1:1.0: ch341_spi_transfer_low: len=5, csChange=1, result=5
spi-ch341-usb 3-1:1.0: ch341_spi_transfer_low: len=4, csChange=1, result=4
spi-ch341-usb 3-1:1.0: ch341_spi_transfer_low: len=9, csChange=1, result=9
spi-ch341-usb 3-1:1.0: ch341_spi_transfer_low: len=7, csChange=1, result=7
spi-ch341-usb 3-1:1.0: ch341_spi_transfer_low: len=31, csChange=1, result=31
spi-ch341-usb 3-1:1.0: ch341_spi_transfer_low: len=4, csChange=1, result=4
audit: type=1701

Основной язык текста запроса — технический. Текст запроса относится к сфере IT и содержит информацию о работе с устройствами и передаче данных. **audit(1634994203.075:1271):**

*auid=1000 uid=0 gid=0 ses=4 subj==unconfined pid=72111 comm="lora-sx1262" exe="/home/luppy/lora-sx1262/lora-sx1262" sig=6 res=1*

**Примечание:** если мы попытаемся передать 64-байтовый пакет, он не появится в журнале dmesg.

## Получение сообщения

Журнал dmesg при получении устройством PineDio USB пакета LoRa размером 28 байт...

**ВНИМАНИЕ:** получение на устройстве PineDio USB (не BL602) сообщения LoRa размером более 28 байтов приведёт к повреждению сообщения!

audit: type=1105 audit(1635046697.907:371): pid=29045 uid=1000 auid=1000 ses=7 subj==unconfined msg='op=PAM:session_open grantors=pam_limits,pam_unix,pam_permit acct="root" exe="/usr/bin/sudo" hostname=? addr=? terminal=/dev/pts/5 res=success' spi-ch341-usb 3-1:1.0: ch341_spi_transfer_low: len=2, csChange=1, result=2 spi-ch341-usb 3-1:1.0: ch341_spi_transfer_low: len=2, csChange=1, result=2 ... spi-ch341-usb 3-1:1.0: ch341_spi_transfer_low: len=31, csChange=1, result=31 spi-ch341-usb 3-1:1.0: ch341_spi_transfer_low: len=5, csChange=1, result=5 spi-ch341-usb 3-1:1.0: ch341_spi_transfer_low: len=2, csChange=1, result=2 spi-ch341-usb 3-1:1.0: ch341_spi_transfer_low: len=2, csChange=1, result=2 spi-ch341-usb

3-1:1.0: ch341_spi_transfer_low: len=4, csChange=1, result=4
3-1:1.0: ch341_spi_transfer_low: len=4, csChange=1, result=4
3-1:1.0: ch341_spi_transfer_low: len=4, csChange=1, result=4
3-1:1.0: ch341_spi_transfer_low: len=3, csChange=1, result=3
3-1:1.0: ch341_spi_transfer_low: len=9, csChange=1, result=9
3-1:1.0: ch341_spi_transfer_low: len=4, csChange=1, result=4
3-1:1.0: ch341_spi_transfer_low: len=4, csChange=1, result=4
3-1:1.0: ch341_spi_transfer_low: len=4, csChange=1, result=4
3-1:1.0: ch341_spi_transfer_low: len=3, csChange=1, result=3
3-1:1.0: ch341_spi_transfer_low: len=4, csChange=1, result=4
3-1:1.0: ch341_spi_transfer_low: len=31, csChange=1, result=31
3-1:1.0: ch341_spi_transfer_low: len=5, csChange=1, result=5
3-1:1.0: ch341_spi_transfer_low: len=2, csChange=1, result=2
3-1:1.0: ch341_spi_transfer_low: len=2, csChange=1, result=2
3-1:1.0: ch341_spi_transfer_low: len=9, csChange=1, result=9
3-1:1.0: ch341_spi_transfer_low: len=4, csChange=1, result=4
3-1:1.0: ch341_spi_transfer_low: len=4, csChange=1, result=4
3-1:1.0: ch341_spi_transfer_low: len=4, csChange=1, result=4
3-1:1.0: ch341_spi_transfer_low: len=3, csChange=1, result=3
3-1:1.0: ch341_spi_transfer_low: len=9, csChange=1, result=9
3-1:1.0: ch341_spi_transfer_low: len=4, csChange=1, result=4
3-1:1.0: ch341_spi_transfer_low: len=4, csChange=1, result=4
3-1:1.0: ch341_spi_transfer_low: len=4, csChange=1, result=4
3-1:1.0: ch341_spi_transfer_low: len=3, csChange=1, result=3 # Подключение BL602 к SX1262

Контакты определены здесь в файле [`include/sx126x-board.h`](include/sx126x-board.h).

Из файла [`include/sx126x-board.h`](include/sx126x-board.h):

```c
// Ниже приведены номера контактов для PineDio Stack BL604 с встроенным SX1262.
// TODO: Измените номера контактов для подключения вашего SX1262 к BL602 / BL604
#define SX126X_SPI_IDX           0  // Порт SPI 0
#define SX126X_SPI_SDI_PIN       0  // Контакт последовательных данных на входе (ранее MISO)
#define SX126X_SPI_SDO_PIN      17  // Контакт последовательных данных на выходе (ранее MOSI)
#define SX126X_SPI_CLK_PIN      11  // Контакт тактового сигнала
#define SX126X_SPI_CS_PIN       15  // Контакт выбора микросхемы
#define SX126X_SPI_CS_OLD        8  // Неиспользуемый контакт выбора микросхемы
#define SX126X_NRESET           18  // Контакт сброса
#define SX126X_DIO1             19  // DIO1
#define SX126X_BUSY_PIN         10  // Занятый контакт
#define SX126X_DEBUG_CS_PIN      5  // Контакт отладки выбора микросхемы, отражает высокое / низкое состояние контакта выбора микросхемы SX1262. Установите значение -1, если не требуется.
#define SX126X_TCXO_WAKEUP_TIME  5  // Время, необходимое TCXO для пробуждения (миллисекунды)
#define SX126X_SPI_BAUDRATE  (200 * 1000)  // Частота SPI (200 кГц)

Демонстрационная прошивка BL602

Для передачи и приёма пакетов LoRa с помощью драйвера запустите демонстрационную прошивку sdk_app_lora для BL602...

Вот пример журнала...

# create_task

# init_driver
SX126xReset
SX126xIoInit
SX126X interrupt init
SX126X register handler: GPIO 11
SX126xWakeup
SX126xGetDeviceId: SX1262
SX126xSetRfTxPower
SX126xGetDeviceId: SX1262

# send_message

RadioOnDioIrq
RadioIrqProcess
SX126xReadCommand
IRQ_TX_DONE
Tx done

# send_message
SX126xWakeup

RadioOnDioIrq
RadioIrqProcess
SX126xReadCommand
IRQ_TX_DONE
Tx done

# send_message
SX126xWakeup

RadioOnDioIrq
RadioIrqProcess
SX126xReadCommand
IRQ_TX_DONE
Tx done

# receive_message
SX126xWakeup

# RadioOnDioIrq
RadioIrqProcess
SX126xReadCommand
IRQ_PREAMBLE_DETECTED
RadioOnDioIrq
RadioIrqProcess
SX126xReadCommand
IRQ_HEADER_VALID
RadioOnDioIrq
RadioIrqProcess
SX126xReadCommand
IRQ_RX_DONE
SX126xReadCommand
SX126xReadCommand
Rx done: 
48 65 6c 6c 6f 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30 31 32 33 34 35 36 37 38 39 3a 

# receive_message
SX126xWakeup

# RadioOnDioIrq
RadioIrqProcess
SX126xReadCommand
IRQ_PREAMBLE_DETECTED
RadioOnDioIrq
RadioIrqProcess
SX126xReadCommand
IRQ_HEADER_VALID
RadioOnDioIrq
RadioIrqProcess
SX126xReadCommand
IRQ_RX_DONE
SX126xReadCommand
SX126xReadCommand
Rx done: 
48 65 6c 6c 6f 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30 31 32 33 34 35 36 37 38 39 3a 

# receive_message
SX126xWakeup

# RadioOnDioIrq
RadioIrqProcess
SX126xReadCommand
IRQ_PREAMBLE_DETECTED
RadioOnDioIrq
RadioIrqProcess
SX126xReadCommand
IRQ_HEADER_VALID
RadioOnDioIrq
RadioIrqProcess
SX126xReadCommand
IRQ_RX_DONE
SX126xReadCommand
SX126xReadCommand
Rx done: 
48 65 6c 6c 6f 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30 31 32 33 34 35 36 37 38 39 3a 

# receive_message
SX126xWakeup
RadioOnRxTimeoutIrq
Rx timeout

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

LoRa Driver для Semtech SX1262 на Linux (PineDio USB Adapter) и BL602 (PineDio Stack BL604). Развернуть Свернуть
BSD-3-Clause
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/lupyuen-lora-sx1262.git
git@api.gitlife.ru:oschina-mirror/lupyuen-lora-sx1262.git
oschina-mirror
lupyuen-lora-sx1262
lupyuen-lora-sx1262
master