https://github.com/maxrt101/linux-sx1278
RA02 Driver for Linux using spidev.h
https://github.com/maxrt101/linux-sx1278
Last synced: about 1 month ago
JSON representation
RA02 Driver for Linux using spidev.h
- Host: GitHub
- URL: https://github.com/maxrt101/linux-sx1278
- Owner: maxrt101
- Created: 2025-05-20T22:22:31.000Z (about 1 year ago)
- Default Branch: master
- Last Pushed: 2025-11-08T02:29:58.000Z (8 months ago)
- Last Synced: 2025-11-08T04:14:47.487Z (8 months ago)
- Language: C
- Size: 102 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# SX1278 (RA01/RA-02) Driver for Linux
SX1278 (RA01/RA-02) driver for Linux that uses linux spidev API.
Provides C & Python APIs to send/receive data & configure the module.
### Usage
#### C API
```C
spi_t spi;
spi_cfg_t spi_cfg;
spi_cfg_default(&spi_cfg);
spi_init(&spi, &spi_cfg, "/dev/spidev0.0");
sx1278_t trx;
sx1278_cfg_t trx_cfg = {.spi = &spi};
sx1278_init(&trx, &trx_cfg);
// Send some bytes
uint8_t tx_data[] = {1, 2, 3, 4, 5};
sx1278_send(&sx1278, tx_data, sizeof(tx_data));
// Run receive for 5s
TIMEOUT_CREATE(timeout, 5000);
uint8_t rx_data[RA02_MAX_PACKET_SIZE] = {0};
size_t size = sizeof(rx_data);
sx1278_recv(sx1278, rx_data, &size, &timeout);
sx1278_deinit(&sx1278);
spi_deinit(&spi);
```
#### Python bindings
```python
import sx1278
ra02.__init__('./liblinux-sx1278.so')
spi = ra02.Spi('/dev/spidev0.0')
trx = ra02.Sx1278(spi)
# Send some bytes
trx.send([1, 2, 3, 4, 5])
# Run receive for 5s
trx.recv(sx1278.Timeout(5000))
```
### How to build
#### Prerequisites
- CMake (at least 3.27)
- Aarch64 linux gnu toolchain (`aarch64-unknown-linux-gnu`/`aarch64-linux-gnu-gcc`)
#### Steps
- `cmake -B cmake-build-directory -S . -G "Unix Makefiles"`
- `cmake --build cmake-build-directory`
### How to run
Warning: tested only on Raspberry PI, but theoretically work on any linux machine that has spidev interface.
#### For Raspberry PI:
| Name | Pin # | Pin name |
|:------:|:-------:|:--------:|
| MOSI | 19 | GPIO12 |
| MISO | 21 | GPIO13 |
| SCK | 23 | GPIO14 |
| NSS | 24 | GPIO11 |
| GND | Any | GND |
| 3.3V | 1 | 3V3 |
After connecting add `dtoverlay=spi0-hw-cs` at the end of `/boot/firmware/config.txt`.
Reboot the device.
To send a packet run `./linux_ra02.so /dev/spidev0.0 send 1 2 3 4 5`.
Where `1 2 3 4 5` are individual bytes of packet payload (in decimal).
To receive a packet run `./linux_ra02.so /dev/spidev0.0 recv 5000`.
Where `5000` is receiver timeout in milliseconds.