mirror of
https://github.com/liberatedsystems/RNode_Firmware_CE.git
synced 2024-12-26 16:09:22 -05:00
Reworked board defines, fixed RSSI and waterfall bugs for SX1262.
This commit is contained in:
parent
cac58b318a
commit
6f62a5394b
392
Boards.h
392
Boards.h
@ -13,49 +13,373 @@
|
|||||||
// You should have received a copy of the GNU General Public License
|
// You should have received a copy of the GNU General Public License
|
||||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
#import "Modem.h"
|
#include "Modem.h"
|
||||||
|
|
||||||
#ifndef BOARDS_H
|
#ifndef BOARDS_H
|
||||||
#define BOARDS_H
|
#define BOARDS_H
|
||||||
|
|
||||||
#define PLATFORM_AVR 0x90
|
#define PLATFORM_AVR 0x90
|
||||||
#define PLATFORM_ESP32 0x80
|
#define PLATFORM_ESP32 0x80
|
||||||
#define PLATFORM_NRF52 0x70
|
#define PLATFORM_NRF52 0x70
|
||||||
|
|
||||||
#define MCU_1284P 0x91
|
#define MCU_1284P 0x91
|
||||||
#define MCU_2560 0x92
|
#define MCU_2560 0x92
|
||||||
#define MCU_ESP32 0x81
|
#define MCU_ESP32 0x81
|
||||||
#define MCU_NRF52 0x71
|
#define MCU_NRF52 0x71
|
||||||
|
|
||||||
#define BOARD_RNODE 0x31
|
#define BOARD_RNODE 0x31
|
||||||
#define BOARD_HMBRW 0x32
|
#define BOARD_HMBRW 0x32
|
||||||
#define BOARD_TBEAM 0x33
|
#define BOARD_TBEAM 0x33
|
||||||
#define BOARD_HUZZAH32 0x34
|
#define BOARD_HUZZAH32 0x34
|
||||||
#define BOARD_GENERIC_ESP32 0x35
|
#define BOARD_GENERIC_ESP32 0x35
|
||||||
#define BOARD_LORA32_V2_0 0x36
|
#define BOARD_LORA32_V2_0 0x36
|
||||||
#define BOARD_LORA32_V2_1 0x37
|
#define BOARD_LORA32_V2_1 0x37
|
||||||
#define BOARD_LORA32_V1_0 0x39
|
#define BOARD_LORA32_V1_0 0x39
|
||||||
#define BOARD_HELTEC32_V2 0x38
|
#define BOARD_HELTEC32_V2 0x38
|
||||||
#define BOARD_RNODE_NG_20 0x40
|
#define BOARD_RNODE_NG_20 0x40
|
||||||
#define BOARD_RNODE_NG_21 0x41
|
#define BOARD_RNODE_NG_21 0x41
|
||||||
#define BOARD_RNODE_NG_22 0x42
|
#define BOARD_RNODE_NG_22 0x42
|
||||||
#define BOARD_GENERIC_NRF52 0x50
|
#define BOARD_GENERIC_NRF52 0x50
|
||||||
#define BOARD_RAK4630 0x51
|
#define BOARD_RAK4630 0x51
|
||||||
|
|
||||||
#ifndef MODEM
|
#if defined(__AVR_ATmega1284P__)
|
||||||
#if BOARD_MODEL == BOARD_RAK4630
|
#define PLATFORM PLATFORM_AVR
|
||||||
#define MODEM SX1262
|
#define MCU_VARIANT MCU_1284P
|
||||||
#elif BOARD_MODEL == BOARD_RNODE_NG_22
|
#elif defined(__AVR_ATmega2560__)
|
||||||
#define MODEM SX1262
|
#define PLATFORM PLATFORM_AVR
|
||||||
const int pin_cs = 7;
|
#define MCU_VARIANT MCU_2560
|
||||||
const int pin_sclk = 5;
|
#elif defined(ESP32)
|
||||||
const int pin_mosi = 6;
|
#define PLATFORM PLATFORM_ESP32
|
||||||
const int pin_miso = 3;
|
#define MCU_VARIANT MCU_ESP32
|
||||||
#elif BOARD_MODEL == BOARD_GENERIC_NRF52
|
#elif defined(NRF52840_XXAA)
|
||||||
#define MODEM SX1262
|
#define PLATFORM PLATFORM_NRF52
|
||||||
|
#define MCU_VARIANT MCU_NRF52
|
||||||
|
#else
|
||||||
|
#error "The firmware cannot be compiled for the selected MCU variant"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef MODEM
|
||||||
|
#if BOARD_MODEL == BOARD_RAK4630
|
||||||
|
#define MODEM SX1262
|
||||||
|
#elif BOARD_MODEL == BOARD_GENERIC_NRF52
|
||||||
|
#define MODEM SX1262
|
||||||
|
#else
|
||||||
|
#define MODEM SX1276
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define HAS_DISPLAY false
|
||||||
|
#define HAS_BLUETOOTH false
|
||||||
|
#define HAS_TCXO false
|
||||||
|
#define HAS_PMU false
|
||||||
|
#define HAS_NP false
|
||||||
|
#define HAS_EEPROM false
|
||||||
|
|
||||||
|
#if defined(ENABLE_TCXO)
|
||||||
|
#define HAS_TCXO true
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if MCU_VARIANT == MCU_1284P
|
||||||
|
const int pin_cs = 4;
|
||||||
|
const int pin_reset = 3;
|
||||||
|
const int pin_dio = 2;
|
||||||
|
const int pin_led_rx = 12;
|
||||||
|
const int pin_led_tx = 13;
|
||||||
|
|
||||||
|
#define BOARD_MODEL BOARD_RNODE
|
||||||
|
#define HAS_EEPROM true
|
||||||
|
#define CONFIG_UART_BUFFER_SIZE 6144
|
||||||
|
#define CONFIG_QUEUE_SIZE 6144
|
||||||
|
#define CONFIG_QUEUE_MAX_LENGTH 200
|
||||||
|
#define EEPROM_SIZE 4096
|
||||||
|
#define EEPROM_OFFSET EEPROM_SIZE-EEPROM_RESERVED
|
||||||
|
|
||||||
|
#elif MCU_VARIANT == MCU_2560
|
||||||
|
const int pin_cs = 5;
|
||||||
|
const int pin_reset = 4;
|
||||||
|
const int pin_dio = 2;
|
||||||
|
const int pin_led_rx = 12;
|
||||||
|
const int pin_led_tx = 13;
|
||||||
|
|
||||||
|
#define BOARD_MODEL BOARD_HMBRW
|
||||||
|
#define HAS_EEPROM true
|
||||||
|
#define CONFIG_UART_BUFFER_SIZE 768
|
||||||
|
#define CONFIG_QUEUE_SIZE 5120
|
||||||
|
#define CONFIG_QUEUE_MAX_LENGTH 24
|
||||||
|
#define EEPROM_SIZE 4096
|
||||||
|
#define EEPROM_OFFSET EEPROM_SIZE-EEPROM_RESERVED
|
||||||
|
|
||||||
|
#elif MCU_VARIANT == MCU_ESP32
|
||||||
|
|
||||||
|
// Board models for ESP32 based builds are
|
||||||
|
// defined by the build target in the makefile.
|
||||||
|
// If you are not using make to compile this
|
||||||
|
// firmware, you can manually define model here.
|
||||||
|
//
|
||||||
|
// #define BOARD_MODEL BOARD_GENERIC_ESP32
|
||||||
|
#define CONFIG_UART_BUFFER_SIZE 6144
|
||||||
|
#define CONFIG_QUEUE_SIZE 6144
|
||||||
|
#define CONFIG_QUEUE_MAX_LENGTH 200
|
||||||
|
|
||||||
|
#define EEPROM_SIZE 1024
|
||||||
|
#define EEPROM_OFFSET EEPROM_SIZE-EEPROM_RESERVED
|
||||||
|
|
||||||
|
#define GPS_BAUD_RATE 9600
|
||||||
|
#define PIN_GPS_TX 12
|
||||||
|
#define PIN_GPS_RX 34
|
||||||
|
|
||||||
|
#if BOARD_MODEL == BOARD_GENERIC_ESP32
|
||||||
|
#define HAS_BLUETOOTH true
|
||||||
|
#define HAS_CONSOLE true
|
||||||
|
#define HAS_EEPROM true
|
||||||
|
const int pin_cs = 4;
|
||||||
|
const int pin_reset = 36;
|
||||||
|
const int pin_dio = 39;
|
||||||
|
const int pin_led_rx = 14;
|
||||||
|
const int pin_led_tx = 32;
|
||||||
|
|
||||||
|
#elif BOARD_MODEL == BOARD_TBEAM
|
||||||
|
#define HAS_DISPLAY true
|
||||||
|
#define HAS_PMU true
|
||||||
|
#define HAS_BLUETOOTH true
|
||||||
|
#define HAS_CONSOLE true
|
||||||
|
#define HAS_SD false
|
||||||
|
#define HAS_EEPROM true
|
||||||
|
#define I2C_SDA 21
|
||||||
|
#define I2C_SCL 22
|
||||||
|
#define PMU_IRQ 35
|
||||||
|
const int pin_cs = 18;
|
||||||
|
const int pin_reset = 23;
|
||||||
|
const int pin_led_rx = 2;
|
||||||
|
const int pin_led_tx = 4;
|
||||||
|
|
||||||
|
#if MODEM == SX1262
|
||||||
|
#define HAS_TCXO true
|
||||||
|
#define HAS_BUSY true
|
||||||
|
#define DIO2_AS_RF_SWITCH true
|
||||||
|
const int pin_busy = 32;
|
||||||
|
const int pin_dio = 33;
|
||||||
|
const int pin_tcxo_enable = -1;
|
||||||
#else
|
#else
|
||||||
#define MODEM SX1276
|
const int pin_dio = 26;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#elif BOARD_MODEL == BOARD_HUZZAH32
|
||||||
|
#define HAS_BLUETOOTH true
|
||||||
|
#define HAS_CONSOLE true
|
||||||
|
#define HAS_EEPROM true
|
||||||
|
const int pin_cs = 4;
|
||||||
|
const int pin_reset = 36;
|
||||||
|
const int pin_dio = 39;
|
||||||
|
const int pin_led_rx = 14;
|
||||||
|
const int pin_led_tx = 32;
|
||||||
|
|
||||||
|
#elif BOARD_MODEL == BOARD_LORA32_V1_0
|
||||||
|
#define HAS_DISPLAY true
|
||||||
|
#define HAS_BLUETOOTH true
|
||||||
|
#define HAS_CONSOLE true
|
||||||
|
#define HAS_EEPROM true
|
||||||
|
const int pin_cs = 18;
|
||||||
|
const int pin_reset = 14;
|
||||||
|
const int pin_dio = 26;
|
||||||
|
#if defined(EXTERNAL_LEDS)
|
||||||
|
const int pin_led_rx = 25;
|
||||||
|
const int pin_led_tx = 2;
|
||||||
|
#else
|
||||||
|
const int pin_led_rx = 2;
|
||||||
|
const int pin_led_tx = 2;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#elif BOARD_MODEL == BOARD_LORA32_V2_0
|
||||||
|
#define HAS_DISPLAY true
|
||||||
|
#define HAS_BLUETOOTH true
|
||||||
|
#define HAS_CONSOLE true
|
||||||
|
#define HAS_EEPROM true
|
||||||
|
const int pin_cs = 18;
|
||||||
|
const int pin_reset = 12;
|
||||||
|
const int pin_dio = 26;
|
||||||
|
#if defined(EXTERNAL_LEDS)
|
||||||
|
const int pin_led_rx = 2;
|
||||||
|
const int pin_led_tx = 0;
|
||||||
|
#else
|
||||||
|
const int pin_led_rx = 22;
|
||||||
|
const int pin_led_tx = 22;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#elif BOARD_MODEL == BOARD_LORA32_V2_1
|
||||||
|
#define HAS_DISPLAY true
|
||||||
|
#define HAS_BLUETOOTH true
|
||||||
|
#define HAS_PMU true
|
||||||
|
#define HAS_CONSOLE true
|
||||||
|
#define HAS_EEPROM true
|
||||||
|
const int pin_cs = 18;
|
||||||
|
const int pin_reset = 23;
|
||||||
|
const int pin_dio = 26;
|
||||||
|
#if HAS_TCXO == true
|
||||||
|
const int pin_tcxo_enable = 33;
|
||||||
|
#endif
|
||||||
|
#if defined(EXTERNAL_LEDS)
|
||||||
|
const int pin_led_rx = 15;
|
||||||
|
const int pin_led_tx = 4;
|
||||||
|
#else
|
||||||
|
const int pin_led_rx = 25;
|
||||||
|
const int pin_led_tx = 25;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#elif BOARD_MODEL == BOARD_HELTEC32_V2
|
||||||
|
#define HAS_DISPLAY true
|
||||||
|
#define HAS_BLUETOOTH true
|
||||||
|
#define HAS_CONSOLE true
|
||||||
|
#define HAS_EEPROM true
|
||||||
|
const int pin_cs = 18;
|
||||||
|
const int pin_reset = 23;
|
||||||
|
const int pin_dio = 26;
|
||||||
|
#if defined(EXTERNAL_LEDS)
|
||||||
|
const int pin_led_rx = 36;
|
||||||
|
const int pin_led_tx = 37;
|
||||||
|
#else
|
||||||
|
const int pin_led_rx = 25;
|
||||||
|
const int pin_led_tx = 25;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#elif BOARD_MODEL == BOARD_RNODE_NG_20
|
||||||
|
#define HAS_DISPLAY true
|
||||||
|
#define HAS_BLUETOOTH true
|
||||||
|
#define HAS_NP true
|
||||||
|
#define HAS_CONSOLE true
|
||||||
|
#define HAS_EEPROM true
|
||||||
|
const int pin_cs = 18;
|
||||||
|
const int pin_reset = 12;
|
||||||
|
const int pin_dio = 26;
|
||||||
|
const int pin_np = 4;
|
||||||
|
#if HAS_NP == false
|
||||||
|
#if defined(EXTERNAL_LEDS)
|
||||||
|
const int pin_led_rx = 2;
|
||||||
|
const int pin_led_tx = 0;
|
||||||
|
#else
|
||||||
|
const int pin_led_rx = 22;
|
||||||
|
const int pin_led_tx = 22;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#elif BOARD_MODEL == BOARD_RNODE_NG_21
|
||||||
|
#define HAS_DISPLAY true
|
||||||
|
#define HAS_BLUETOOTH true
|
||||||
|
#define HAS_CONSOLE true
|
||||||
|
#define HAS_PMU true
|
||||||
|
#define HAS_NP true
|
||||||
|
#define HAS_SD false
|
||||||
|
#define HAS_EEPROM true
|
||||||
|
const int pin_cs = 18;
|
||||||
|
const int pin_reset = 23;
|
||||||
|
const int pin_dio = 26;
|
||||||
|
const int pin_np = 12;
|
||||||
|
const int pin_dac = 25;
|
||||||
|
const int pin_adc = 34;
|
||||||
|
const int SD_MISO = 2;
|
||||||
|
const int SD_MOSI = 15;
|
||||||
|
const int SD_CLK = 14;
|
||||||
|
const int SD_CS = 13;
|
||||||
|
#if HAS_NP == false
|
||||||
|
#if defined(EXTERNAL_LEDS)
|
||||||
|
const int pin_led_rx = 12;
|
||||||
|
const int pin_led_tx = 4;
|
||||||
|
#else
|
||||||
|
const int pin_led_rx = 25;
|
||||||
|
const int pin_led_tx = 25;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#elif BOARD_MODEL == BOARD_RNODE_NG_22
|
||||||
|
#define IS_ESP32S3 true
|
||||||
|
#define MODEM SX1262
|
||||||
|
#define HAS_DISPLAY true
|
||||||
|
#define HAS_BLE true
|
||||||
|
#define HAS_BLUETOOTH false // TODO: Implement
|
||||||
|
#define HAS_CONSOLE false // TODO: Implement
|
||||||
|
#define HAS_PMU true
|
||||||
|
#define HAS_NP true
|
||||||
|
#define HAS_SD false
|
||||||
|
#define HAS_EEPROM true
|
||||||
|
#define HAS_RF_SWITCH_RX_TX true
|
||||||
|
#define HAS_BUSY true
|
||||||
|
const int pin_cs = 7;
|
||||||
|
const int pin_sclk = 5;
|
||||||
|
const int pin_mosi = 6;
|
||||||
|
const int pin_miso = 3;
|
||||||
|
const int pin_reset = 8;
|
||||||
|
const int pin_rxen = 21;
|
||||||
|
const int pin_dio = 33;
|
||||||
|
const int pin_busy = 34;
|
||||||
|
const int pin_np = 38;
|
||||||
|
const int pin_dac = 25;
|
||||||
|
const int pin_adc = 1;
|
||||||
|
const int SD_MISO = 2;
|
||||||
|
const int SD_MOSI = 11;
|
||||||
|
const int SD_CLK = 14;
|
||||||
|
const int SD_CS = 13;
|
||||||
|
#if HAS_NP == false
|
||||||
|
#if defined(EXTERNAL_LEDS)
|
||||||
|
const int pin_led_rx = 37;
|
||||||
|
const int pin_led_tx = 37;
|
||||||
|
#else
|
||||||
|
const int pin_led_rx = 37;
|
||||||
|
const int pin_led_tx = 37;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#else
|
||||||
|
#error An unsupported ESP32 board was selected. Cannot compile RNode firmware.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#elif MCU_VARIANT == MCU_NRF52
|
||||||
|
#if BOARD_MODEL == BOARD_RAK4630
|
||||||
|
#define HAS_EEPROM false
|
||||||
|
#define HAS_DISPLAY false // set for debugging
|
||||||
|
#define HAS_BLUETOOTH true
|
||||||
|
#define HAS_CONSOLE false
|
||||||
|
#define HAS_PMU false
|
||||||
|
#define HAS_NP false
|
||||||
|
#define HAS_SD false
|
||||||
|
#define HAS_TCXO true
|
||||||
|
#define HAS_RF_SWITCH_RX_TX true
|
||||||
|
#define HAS_BUSY true
|
||||||
|
#define CONFIG_UART_BUFFER_SIZE 6144
|
||||||
|
#define CONFIG_QUEUE_SIZE 6144
|
||||||
|
#define CONFIG_QUEUE_MAX_LENGTH 200
|
||||||
|
#define EEPROM_SIZE 200
|
||||||
|
#define EEPROM_OFFSET EEPROM_SIZE-EEPROM_RESERVED
|
||||||
|
|
||||||
|
// following pins are for the sx1262
|
||||||
|
const int pin_rxen = 37;
|
||||||
|
const int pin_reset = 38;
|
||||||
|
const int pin_cs = 42;
|
||||||
|
const int pin_sclk = 43;
|
||||||
|
const int pin_mosi = 44;
|
||||||
|
const int pin_miso = 45;
|
||||||
|
const int pin_busy = 46;
|
||||||
|
const int pin_dio = 47;
|
||||||
|
const int pin_led_rx = LED_BLUE;
|
||||||
|
const int pin_led_tx = LED_GREEN;
|
||||||
|
const int pin_tcxo_enable = -1;
|
||||||
|
|
||||||
|
#else
|
||||||
|
#error An unsupported nRF board was selected. Cannot compile RNode firmware.
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAS_RF_SWITCH_RX_TX
|
||||||
|
const int pin_rxen = -1;
|
||||||
|
const int pin_txen = -1;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAS_BUSY
|
||||||
|
const int pin_busy = -1;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef DIO2_AS_RF_SWITCH
|
||||||
|
#define DIO2_AS_RF_SWITCH false
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
318
Config.h
318
Config.h
@ -15,7 +15,6 @@
|
|||||||
|
|
||||||
#include "ROM.h"
|
#include "ROM.h"
|
||||||
#include "Boards.h"
|
#include "Boards.h"
|
||||||
#include "Modem.h"
|
|
||||||
|
|
||||||
#ifndef CONFIG_H
|
#ifndef CONFIG_H
|
||||||
#define CONFIG_H
|
#define CONFIG_H
|
||||||
@ -46,333 +45,16 @@
|
|||||||
bool console_active = false;
|
bool console_active = false;
|
||||||
bool modem_installed = false;
|
bool modem_installed = false;
|
||||||
|
|
||||||
#if defined(__AVR_ATmega1284P__)
|
|
||||||
#define PLATFORM PLATFORM_AVR
|
|
||||||
#define MCU_VARIANT MCU_1284P
|
|
||||||
#elif defined(__AVR_ATmega2560__)
|
|
||||||
#define PLATFORM PLATFORM_AVR
|
|
||||||
#define MCU_VARIANT MCU_2560
|
|
||||||
#elif defined(ESP32)
|
|
||||||
#define PLATFORM PLATFORM_ESP32
|
|
||||||
#define MCU_VARIANT MCU_ESP32
|
|
||||||
#elif defined(NRF52840_XXAA)
|
|
||||||
#define PLATFORM PLATFORM_NRF52
|
|
||||||
#define MCU_VARIANT MCU_NRF52
|
|
||||||
#else
|
|
||||||
#error "The firmware cannot be compiled for the selected MCU variant"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define MTU 508
|
#define MTU 508
|
||||||
#define SINGLE_MTU 255
|
#define SINGLE_MTU 255
|
||||||
#define HEADER_L 1
|
#define HEADER_L 1
|
||||||
#define MIN_L 1
|
#define MIN_L 1
|
||||||
|
|
||||||
#define CMD_L 64
|
#define CMD_L 64
|
||||||
|
|
||||||
// MCU dependent configuration parameters
|
|
||||||
|
|
||||||
#define HAS_DISPLAY false
|
|
||||||
#define HAS_BLUETOOTH false
|
|
||||||
#define HAS_TCXO false
|
|
||||||
#define HAS_PMU false
|
|
||||||
#define HAS_NP false
|
|
||||||
#define HAS_EEPROM false
|
|
||||||
|
|
||||||
#if defined(ENABLE_TCXO)
|
|
||||||
#define HAS_TCXO true
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if MCU_VARIANT == MCU_1284P
|
|
||||||
const int pin_cs = 4;
|
|
||||||
const int pin_reset = 3;
|
|
||||||
const int pin_dio = 2;
|
|
||||||
const int pin_led_rx = 12;
|
|
||||||
const int pin_led_tx = 13;
|
|
||||||
|
|
||||||
#define BOARD_MODEL BOARD_RNODE
|
|
||||||
|
|
||||||
#define HAS_EEPROM true
|
|
||||||
|
|
||||||
#define CONFIG_UART_BUFFER_SIZE 6144
|
|
||||||
#define CONFIG_QUEUE_SIZE 6144
|
|
||||||
#define CONFIG_QUEUE_MAX_LENGTH 200
|
|
||||||
|
|
||||||
#define EEPROM_SIZE 4096
|
|
||||||
#define EEPROM_OFFSET EEPROM_SIZE-EEPROM_RESERVED
|
|
||||||
|
|
||||||
#elif MCU_VARIANT == MCU_2560
|
|
||||||
const int pin_cs = 5;
|
|
||||||
const int pin_reset = 4;
|
|
||||||
const int pin_dio = 2;
|
|
||||||
const int pin_led_rx = 12;
|
|
||||||
const int pin_led_tx = 13;
|
|
||||||
|
|
||||||
#define BOARD_MODEL BOARD_HMBRW
|
|
||||||
|
|
||||||
#define HAS_EEPROM true
|
|
||||||
|
|
||||||
#define CONFIG_UART_BUFFER_SIZE 768
|
|
||||||
#define CONFIG_QUEUE_SIZE 5120
|
|
||||||
#define CONFIG_QUEUE_MAX_LENGTH 24
|
|
||||||
|
|
||||||
#define EEPROM_SIZE 4096
|
|
||||||
#define EEPROM_OFFSET EEPROM_SIZE-EEPROM_RESERVED
|
|
||||||
|
|
||||||
#elif MCU_VARIANT == MCU_ESP32
|
|
||||||
|
|
||||||
// Board models for ESP32 based builds are
|
|
||||||
// defined by the build target in the makefile.
|
|
||||||
// If you are not using make to compile this
|
|
||||||
// firmware, you can manually define model here.
|
|
||||||
//
|
|
||||||
// #define BOARD_MODEL BOARD_GENERIC_ESP32
|
|
||||||
#define CONFIG_UART_BUFFER_SIZE 6144
|
|
||||||
#define CONFIG_QUEUE_SIZE 6144
|
|
||||||
#define CONFIG_QUEUE_MAX_LENGTH 200
|
|
||||||
|
|
||||||
#define EEPROM_SIZE 1024
|
|
||||||
#define EEPROM_OFFSET EEPROM_SIZE-EEPROM_RESERVED
|
|
||||||
|
|
||||||
#define GPS_BAUD_RATE 9600
|
|
||||||
#define PIN_GPS_TX 12
|
|
||||||
#define PIN_GPS_RX 34
|
|
||||||
|
|
||||||
#if BOARD_MODEL == BOARD_GENERIC_ESP32
|
|
||||||
const int pin_cs = 4;
|
|
||||||
const int pin_reset = 36;
|
|
||||||
const int pin_dio = 39;
|
|
||||||
const int pin_led_rx = 14;
|
|
||||||
const int pin_led_tx = 32;
|
|
||||||
#define HAS_BLUETOOTH true
|
|
||||||
#define HAS_CONSOLE true
|
|
||||||
#define HAS_EEPROM true
|
|
||||||
#elif BOARD_MODEL == BOARD_TBEAM
|
|
||||||
const int pin_cs = 18;
|
|
||||||
const int pin_reset = 23;
|
|
||||||
const int pin_dio = 26;
|
|
||||||
const int pin_led_rx = 2;
|
|
||||||
const int pin_led_tx = 4;
|
|
||||||
#define HAS_DISPLAY true
|
|
||||||
#define HAS_PMU true
|
|
||||||
#define HAS_BLUETOOTH true
|
|
||||||
#define HAS_CONSOLE true
|
|
||||||
#define HAS_SD false
|
|
||||||
#define HAS_EEPROM true
|
|
||||||
#if MODEM == SX1262
|
|
||||||
// TODO: Figure out how on earth the SX1262 T-Beams are actually connected
|
|
||||||
// #define HAS_RF_SWITCH_RX_TX true
|
|
||||||
// const int pin_rxen = 32;
|
|
||||||
#define HAS_BUSY true
|
|
||||||
const int pin_busy = 32;
|
|
||||||
#endif
|
|
||||||
#elif BOARD_MODEL == BOARD_HUZZAH32
|
|
||||||
const int pin_cs = 4;
|
|
||||||
const int pin_reset = 36;
|
|
||||||
const int pin_dio = 39;
|
|
||||||
const int pin_led_rx = 14;
|
|
||||||
const int pin_led_tx = 32;
|
|
||||||
#define HAS_BLUETOOTH true
|
|
||||||
#define HAS_CONSOLE true
|
|
||||||
#define HAS_EEPROM true
|
|
||||||
#elif BOARD_MODEL == BOARD_LORA32_V1_0
|
|
||||||
const int pin_cs = 18;
|
|
||||||
const int pin_reset = 14;
|
|
||||||
const int pin_dio = 26;
|
|
||||||
#if defined(EXTERNAL_LEDS)
|
|
||||||
const int pin_led_rx = 25;
|
|
||||||
const int pin_led_tx = 2;
|
|
||||||
#else
|
|
||||||
const int pin_led_rx = 2;
|
|
||||||
const int pin_led_tx = 2;
|
|
||||||
#endif
|
|
||||||
#define HAS_DISPLAY true
|
|
||||||
#define HAS_BLUETOOTH true
|
|
||||||
#define HAS_CONSOLE true
|
|
||||||
#define HAS_EEPROM true
|
|
||||||
#elif BOARD_MODEL == BOARD_LORA32_V2_0
|
|
||||||
const int pin_cs = 18;
|
|
||||||
const int pin_reset = 12;
|
|
||||||
const int pin_dio = 26;
|
|
||||||
#if defined(EXTERNAL_LEDS)
|
|
||||||
const int pin_led_rx = 2;
|
|
||||||
const int pin_led_tx = 0;
|
|
||||||
#else
|
|
||||||
const int pin_led_rx = 22;
|
|
||||||
const int pin_led_tx = 22;
|
|
||||||
#endif
|
|
||||||
#define HAS_DISPLAY true
|
|
||||||
#define HAS_BLUETOOTH true
|
|
||||||
#define HAS_CONSOLE true
|
|
||||||
#define HAS_EEPROM true
|
|
||||||
#elif BOARD_MODEL == BOARD_LORA32_V2_1
|
|
||||||
const int pin_cs = 18;
|
|
||||||
const int pin_reset = 23;
|
|
||||||
const int pin_dio = 26;
|
|
||||||
#if HAS_TCXO == true
|
|
||||||
const int pin_tcxo_enable = 33;
|
|
||||||
#endif
|
|
||||||
#if defined(EXTERNAL_LEDS)
|
|
||||||
const int pin_led_rx = 15;
|
|
||||||
const int pin_led_tx = 4;
|
|
||||||
#else
|
|
||||||
const int pin_led_rx = 25;
|
|
||||||
const int pin_led_tx = 25;
|
|
||||||
#endif
|
|
||||||
#define HAS_DISPLAY true
|
|
||||||
#define HAS_BLUETOOTH true
|
|
||||||
#define HAS_PMU true
|
|
||||||
#define HAS_CONSOLE true
|
|
||||||
#define HAS_EEPROM true
|
|
||||||
#elif BOARD_MODEL == BOARD_HELTEC32_V2
|
|
||||||
const int pin_cs = 18;
|
|
||||||
const int pin_reset = 23;
|
|
||||||
const int pin_dio = 26;
|
|
||||||
#if defined(EXTERNAL_LEDS)
|
|
||||||
const int pin_led_rx = 36;
|
|
||||||
const int pin_led_tx = 37;
|
|
||||||
#else
|
|
||||||
const int pin_led_rx = 25;
|
|
||||||
const int pin_led_tx = 25;
|
|
||||||
#endif
|
|
||||||
#define HAS_DISPLAY true
|
|
||||||
#define HAS_BLUETOOTH true
|
|
||||||
#define HAS_CONSOLE true
|
|
||||||
#define HAS_EEPROM true
|
|
||||||
#elif BOARD_MODEL == BOARD_RNODE_NG_20
|
|
||||||
#define HAS_DISPLAY true
|
|
||||||
#define HAS_BLUETOOTH true
|
|
||||||
#define HAS_NP true
|
|
||||||
#define HAS_CONSOLE true
|
|
||||||
#define HAS_EEPROM true
|
|
||||||
const int pin_cs = 18;
|
|
||||||
const int pin_reset = 12;
|
|
||||||
const int pin_dio = 26;
|
|
||||||
const int pin_np = 4;
|
|
||||||
#if HAS_NP == false
|
|
||||||
#if defined(EXTERNAL_LEDS)
|
|
||||||
const int pin_led_rx = 2;
|
|
||||||
const int pin_led_tx = 0;
|
|
||||||
#else
|
|
||||||
const int pin_led_rx = 22;
|
|
||||||
const int pin_led_tx = 22;
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#elif BOARD_MODEL == BOARD_RNODE_NG_21
|
|
||||||
#define HAS_DISPLAY true
|
|
||||||
#define HAS_BLUETOOTH true
|
|
||||||
#define HAS_CONSOLE true
|
|
||||||
#define HAS_PMU true
|
|
||||||
#define HAS_NP true
|
|
||||||
#define HAS_SD false
|
|
||||||
#define HAS_EEPROM true
|
|
||||||
const int pin_cs = 18;
|
|
||||||
const int pin_reset = 23;
|
|
||||||
const int pin_dio = 26;
|
|
||||||
const int pin_np = 12;
|
|
||||||
const int pin_dac = 25;
|
|
||||||
const int pin_adc = 34;
|
|
||||||
const int SD_MISO = 2;
|
|
||||||
const int SD_MOSI = 15;
|
|
||||||
const int SD_CLK = 14;
|
|
||||||
const int SD_CS = 13;
|
|
||||||
#if HAS_NP == false
|
|
||||||
#if defined(EXTERNAL_LEDS)
|
|
||||||
const int pin_led_rx = 12;
|
|
||||||
const int pin_led_tx = 4;
|
|
||||||
#else
|
|
||||||
const int pin_led_rx = 25;
|
|
||||||
const int pin_led_tx = 25;
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#elif BOARD_MODEL == BOARD_RNODE_NG_22
|
|
||||||
#define IS_ESP32S3 true
|
|
||||||
#define HAS_DISPLAY true
|
|
||||||
#define HAS_BLE true
|
|
||||||
#define HAS_BLUETOOTH false // TODO: Implement
|
|
||||||
#define HAS_CONSOLE false // TODO: Implement
|
|
||||||
#define HAS_PMU true
|
|
||||||
#define HAS_NP true
|
|
||||||
#define HAS_SD false
|
|
||||||
#define HAS_EEPROM true
|
|
||||||
#define HAS_RF_SWITCH_RX_TX true
|
|
||||||
#define HAS_BUSY true
|
|
||||||
const int pin_reset = 8;
|
|
||||||
const int pin_rxen = 21;
|
|
||||||
const int pin_dio = 33;
|
|
||||||
const int pin_busy = 34;
|
|
||||||
|
|
||||||
const int pin_np = 38;
|
|
||||||
const int pin_dac = 25;
|
|
||||||
const int pin_adc = 1;
|
|
||||||
const int SD_MISO = 2;
|
|
||||||
const int SD_MOSI = 11;
|
|
||||||
const int SD_CLK = 14;
|
|
||||||
const int SD_CS = 13;
|
|
||||||
#if HAS_NP == false
|
|
||||||
#if defined(EXTERNAL_LEDS)
|
|
||||||
const int pin_led_rx = 37;
|
|
||||||
const int pin_led_tx = 37;
|
|
||||||
#else
|
|
||||||
const int pin_led_rx = 37;
|
|
||||||
const int pin_led_tx = 37;
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#elif PLATFORM == PLATFORM_NRF52
|
|
||||||
#if BOARD_MODEL == BOARD_RAK4630
|
|
||||||
#define HAS_EEPROM false
|
|
||||||
#define HAS_DISPLAY false // set for debugging
|
|
||||||
#define HAS_BLUETOOTH true
|
|
||||||
#define HAS_CONSOLE false
|
|
||||||
#define HAS_PMU false
|
|
||||||
#define HAS_NP false
|
|
||||||
#define HAS_SD false
|
|
||||||
#define HAS_TCXO true
|
|
||||||
#define HAS_RF_SWITCH_RX_TX true
|
|
||||||
#define HAS_BUSY true
|
|
||||||
#define CONFIG_UART_BUFFER_SIZE 6144
|
|
||||||
#define CONFIG_QUEUE_SIZE 6144
|
|
||||||
#define CONFIG_QUEUE_MAX_LENGTH 200
|
|
||||||
#define EEPROM_SIZE 200
|
|
||||||
//#define EEPROM_OFFSET EEPROM_SIZE+0xED000-EEPROM_RESERVED
|
|
||||||
#define EEPROM_OFFSET EEPROM_SIZE-EEPROM_RESERVED
|
|
||||||
|
|
||||||
// following pins are for the sx1262
|
|
||||||
const int pin_rxen = 37;
|
|
||||||
const int pin_reset = 38;
|
|
||||||
const int pin_cs = 42;
|
|
||||||
const int pin_sclk = 43;
|
|
||||||
const int pin_mosi = 44;
|
|
||||||
const int pin_miso = 45;
|
|
||||||
const int pin_busy = 46;
|
|
||||||
const int pin_dio = 47;
|
|
||||||
const int pin_led_rx = LED_BLUE;
|
|
||||||
const int pin_led_tx = LED_GREEN;
|
|
||||||
const int pin_tcxo_enable = -1;
|
|
||||||
#endif
|
|
||||||
#else
|
|
||||||
#error An unsupported board was selected. Cannot compile RNode firmware.
|
|
||||||
#endif
|
|
||||||
|
|
||||||
bool mw_radio_online = false;
|
bool mw_radio_online = false;
|
||||||
|
|
||||||
#if BOARD_MODEL == BOARD_TBEAM
|
|
||||||
#define I2C_SDA 21
|
|
||||||
#define I2C_SCL 22
|
|
||||||
#define PMU_IRQ 35
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define eeprom_addr(a) (a+EEPROM_OFFSET)
|
#define eeprom_addr(a) (a+EEPROM_OFFSET)
|
||||||
|
|
||||||
#ifndef HAS_RF_SWITCH_RX_TX
|
|
||||||
const int pin_rxen = -1;
|
|
||||||
const int pin_txen = -1;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef HAS_BUSY
|
|
||||||
const int pin_busy = -1;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if (MODEM == SX1262 || MODEM == SX1280) && defined(NRF52840_XXAA)
|
#if (MODEM == SX1262 || MODEM == SX1280) && defined(NRF52840_XXAA)
|
||||||
SPIClass spiModem(NRF_SPIM2, pin_miso, pin_sclk, pin_mosi);
|
SPIClass spiModem(NRF_SPIM2, pin_miso, pin_sclk, pin_mosi);
|
||||||
#endif
|
#endif
|
||||||
|
8
Makefile
8
Makefile
@ -115,11 +115,11 @@ upload-mega2560:
|
|||||||
arduino-cli upload -p /dev/ttyACM0 --fqbn arduino:avr:mega
|
arduino-cli upload -p /dev/ttyACM0 --fqbn arduino:avr:mega
|
||||||
|
|
||||||
upload-tbeam:
|
upload-tbeam:
|
||||||
arduino-cli upload -p /dev/ttyACM0 --fqbn esp32:esp32:t-beam
|
arduino-cli upload -p /dev/ttyACM1 --fqbn esp32:esp32:t-beam
|
||||||
@sleep 1
|
@sleep 1
|
||||||
rnodeconf /dev/ttyACM0 --firmware-hash $$(./partition_hashes ./build/esp32.esp32.t-beam/RNode_Firmware.ino.bin)
|
rnodeconf /dev/ttyACM1 --firmware-hash $$(./partition_hashes ./build/esp32.esp32.t-beam/RNode_Firmware.ino.bin)
|
||||||
@sleep 3
|
# @sleep 3
|
||||||
python ./Release/esptool/esptool.py --chip esp32 --port /dev/ttyACM0 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size 4MB 0x210000 ./Release/console_image.bin
|
# python ./Release/esptool/esptool.py --chip esp32 --port /dev/ttyACM0 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size 4MB 0x210000 ./Release/console_image.bin
|
||||||
|
|
||||||
upload-lora32_v10:
|
upload-lora32_v10:
|
||||||
arduino-cli upload -p /dev/ttyUSB0 --fqbn esp32:esp32:ttgo-lora32
|
arduino-cli upload -p /dev/ttyUSB0 --fqbn esp32:esp32:ttgo-lora32
|
||||||
|
1
ROM.h
1
ROM.h
@ -72,4 +72,5 @@
|
|||||||
#define BT_ENABLE_BYTE 0x73
|
#define BT_ENABLE_BYTE 0x73
|
||||||
|
|
||||||
#define EEPROM_RESERVED 200
|
#define EEPROM_RESERVED 200
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
158
sx126x.cpp
158
sx126x.cpp
@ -4,9 +4,11 @@
|
|||||||
// Modifications and additions copyright 2023 by Mark Qvist
|
// Modifications and additions copyright 2023 by Mark Qvist
|
||||||
// Obviously still under the MIT license.
|
// Obviously still under the MIT license.
|
||||||
|
|
||||||
#include "sx126x.h"
|
|
||||||
#include "Boards.h"
|
#include "Boards.h"
|
||||||
|
|
||||||
|
#if MODEM == SX1262
|
||||||
|
#include "sx126x.h"
|
||||||
|
|
||||||
#define MCU_1284P 0x91
|
#define MCU_1284P 0x91
|
||||||
#define MCU_2560 0x92
|
#define MCU_2560 0x92
|
||||||
#define MCU_ESP32 0x81
|
#define MCU_ESP32 0x81
|
||||||
@ -67,6 +69,7 @@
|
|||||||
#define IRQ_TX_DONE_MASK_6X 0x01
|
#define IRQ_TX_DONE_MASK_6X 0x01
|
||||||
#define IRQ_RX_DONE_MASK_6X 0x02
|
#define IRQ_RX_DONE_MASK_6X 0x02
|
||||||
#define IRQ_HEADER_DET_MASK_6X 0x10
|
#define IRQ_HEADER_DET_MASK_6X 0x10
|
||||||
|
#define IRQ_PREAMBLE_DET_MASK_6X 0x04
|
||||||
#define IRQ_PAYLOAD_CRC_ERROR_MASK_6X 0x40
|
#define IRQ_PAYLOAD_CRC_ERROR_MASK_6X 0x40
|
||||||
|
|
||||||
#define MODE_LONG_RANGE_MODE_6X 0x01
|
#define MODE_LONG_RANGE_MODE_6X 0x01
|
||||||
@ -81,8 +84,16 @@
|
|||||||
#define REG_RANDOM_GEN_6X 0x0819
|
#define REG_RANDOM_GEN_6X 0x0819
|
||||||
|
|
||||||
#define MODE_TCXO_3_3V_6X 0x07
|
#define MODE_TCXO_3_3V_6X 0x07
|
||||||
|
#define MODE_TCXO_3_0V_6X 0x06
|
||||||
|
#define MODE_TCXO_2_7V_6X 0x06
|
||||||
|
#define MODE_TCXO_2_4V_6X 0x06
|
||||||
|
#define MODE_TCXO_2_2V_6X 0x03
|
||||||
|
#define MODE_TCXO_1_8V_6X 0x02
|
||||||
|
#define MODE_TCXO_1_7V_6X 0x01
|
||||||
|
#define MODE_TCXO_1_6V_6X 0x00
|
||||||
|
|
||||||
|
#define SYNC_WORD_6X 0x1424
|
||||||
|
|
||||||
#define IRQ_PREAMBLE_DET_MASK_6X 0x04
|
|
||||||
#define XTAL_FREQ_6X (double)32000000
|
#define XTAL_FREQ_6X (double)32000000
|
||||||
#define FREQ_DIV_6X (double)pow(2.0, 25.0)
|
#define FREQ_DIV_6X (double)pow(2.0, 25.0)
|
||||||
#define FREQ_STEP_6X (double)(XTAL_FREQ_6X / FREQ_DIV_6X)
|
#define FREQ_STEP_6X (double)(XTAL_FREQ_6X / FREQ_DIV_6X)
|
||||||
@ -126,34 +137,28 @@ bool sx126x::preInit() {
|
|||||||
// set SS high
|
// set SS high
|
||||||
digitalWrite(_ss, HIGH);
|
digitalWrite(_ss, HIGH);
|
||||||
|
|
||||||
Serial.println("SPI INIT");
|
|
||||||
#if BOARD_MODEL == BOARD_RNODE_NG_22
|
#if BOARD_MODEL == BOARD_RNODE_NG_22
|
||||||
SPI.begin(pin_sclk, pin_miso, pin_mosi, pin_cs);
|
SPI.begin(pin_sclk, pin_miso, pin_mosi, pin_cs);
|
||||||
#else
|
#else
|
||||||
SPI.begin();
|
SPI.begin();
|
||||||
#endif
|
#endif
|
||||||
Serial.println("DONE");
|
|
||||||
|
|
||||||
// check version (retry for up to 2 seconds)
|
// check version (retry for up to 2 seconds)
|
||||||
long start = millis();
|
long start = millis();
|
||||||
uint8_t syncmsb;
|
uint8_t syncmsb;
|
||||||
uint8_t synclsb;
|
uint8_t synclsb;
|
||||||
Serial.println("TRYING REGISTER READ");
|
|
||||||
while (((millis() - start) < 2000) && (millis() >= start)) {
|
while (((millis() - start) < 2000) && (millis() >= start)) {
|
||||||
syncmsb = readRegister(REG_SYNC_WORD_MSB_6X);
|
syncmsb = readRegister(REG_SYNC_WORD_MSB_6X);
|
||||||
synclsb = readRegister(REG_SYNC_WORD_LSB_6X);
|
synclsb = readRegister(REG_SYNC_WORD_LSB_6X);
|
||||||
if ( uint16_t(syncmsb << 8 | synclsb) == 0x1424 || uint16_t(syncmsb << 8 | synclsb) == 0x4434) {
|
if ( uint16_t(syncmsb << 8 | synclsb) == 0x1424 || uint16_t(syncmsb << 8 | synclsb) == 0x4434) {
|
||||||
Serial.println("CORRECT VALUE RETURNED");
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
delay(100);
|
delay(100);
|
||||||
}
|
}
|
||||||
if ( uint16_t(syncmsb << 8 | synclsb) != 0x1424 && uint16_t(syncmsb << 8 | synclsb) != 0x4434) {
|
if ( uint16_t(syncmsb << 8 | synclsb) != 0x1424 && uint16_t(syncmsb << 8 | synclsb) != 0x4434) {
|
||||||
Serial.println("REG READ FAILED");
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Serial.println("MODEM PREINIT SUCCESS");
|
|
||||||
_preinit_done = true;
|
_preinit_done = true;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -193,10 +198,9 @@ uint8_t ISR_VECT sx126x::singleTransfer(uint8_t opcode, uint16_t address, uint8_
|
|||||||
|
|
||||||
void sx126x::rxAntEnable()
|
void sx126x::rxAntEnable()
|
||||||
{
|
{
|
||||||
uint8_t byte = 0x01;
|
if (_rxen != -1) {
|
||||||
// enable dio2 rf switch
|
digitalWrite(_rxen, HIGH);
|
||||||
executeOpcode(OP_DIO2_RF_CTRL_6X, &byte, 1);
|
}
|
||||||
digitalWrite(_rxen, HIGH);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void sx126x::loraMode() {
|
void sx126x::loraMode() {
|
||||||
@ -361,35 +365,48 @@ int sx126x::begin(long frequency)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//#if HAS_TCXO
|
loraMode();
|
||||||
// turn TCXO on
|
// cannot access registers in sleep mode on sx1262, set to idle instead
|
||||||
enableTCXO();
|
idle();
|
||||||
//#endif
|
|
||||||
loraMode();
|
|
||||||
idle();
|
|
||||||
// cannot access registers in sleep mode on sx1262, set to idle instead
|
|
||||||
if (_rxen != -1) {
|
|
||||||
pinMode(_rxen, OUTPUT);
|
|
||||||
rxAntEnable();
|
|
||||||
}
|
|
||||||
// calibrate RC64k, RC13M, PLL, ADC and image
|
|
||||||
uint8_t calibrate = 0x7F;
|
|
||||||
executeOpcode(OP_CALIBRATE_6X, &calibrate, 1);
|
|
||||||
|
|
||||||
setFrequency(frequency);
|
#if HAS_TCXO
|
||||||
|
enableTCXO();
|
||||||
|
#endif
|
||||||
|
|
||||||
// set output power to 2 dBm
|
if (_rxen != -1) {
|
||||||
setTxPower(2);
|
pinMode(_rxen, OUTPUT);
|
||||||
|
}
|
||||||
|
|
||||||
// set LNA boost
|
#if DIO2_AS_RF_SWITCH
|
||||||
writeRegister(REG_LNA_6X, 0x96);
|
// enable dio2 rf switch
|
||||||
|
uint8_t byte = 0x01;
|
||||||
|
executeOpcode(OP_DIO2_RF_CTRL_6X, &byte, 1);
|
||||||
|
#endif
|
||||||
|
|
||||||
// set base addresses
|
rxAntEnable();
|
||||||
uint8_t basebuf[2] = {0};
|
|
||||||
executeOpcode(OP_BUFFER_BASE_ADDR_6X, basebuf, 2);
|
|
||||||
|
|
||||||
setModulationParams(_sf, _bw, _cr, _ldro);
|
// Set sync word
|
||||||
setPacketParams(_preambleLength, _implicitHeaderMode, _payloadLength, _crcMode);
|
setSyncWord(SYNC_WORD_6X);
|
||||||
|
|
||||||
|
// calibrate RC64k, RC13M, PLL, ADC and image
|
||||||
|
uint8_t calibrate = 0x7F;
|
||||||
|
executeOpcode(OP_CALIBRATE_6X, &calibrate, 1);
|
||||||
|
|
||||||
|
setFrequency(frequency);
|
||||||
|
|
||||||
|
// set output power to 2 dBm
|
||||||
|
setTxPower(2);
|
||||||
|
enableCrc();
|
||||||
|
|
||||||
|
// set LNA boost
|
||||||
|
writeRegister(REG_LNA_6X, 0x96);
|
||||||
|
|
||||||
|
// set base addresses
|
||||||
|
uint8_t basebuf[2] = {0};
|
||||||
|
executeOpcode(OP_BUFFER_BASE_ADDR_6X, basebuf, 2);
|
||||||
|
|
||||||
|
setModulationParams(_sf, _bw, _cr, _ldro);
|
||||||
|
setPacketParams(_preambleLength, _implicitHeaderMode, _payloadLength, _crcMode);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -416,9 +433,9 @@ int sx126x::beginPacket(int implicitHeader)
|
|||||||
explicitHeaderMode();
|
explicitHeaderMode();
|
||||||
}
|
}
|
||||||
|
|
||||||
_payloadLength = 0;
|
_payloadLength = 0;
|
||||||
_fifo_tx_addr_ptr = 0;
|
_fifo_tx_addr_ptr = 0;
|
||||||
setPacketParams(_preambleLength, _implicitHeaderMode, _payloadLength, _crcMode);
|
setPacketParams(_preambleLength, _implicitHeaderMode, _payloadLength, _crcMode);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -459,23 +476,18 @@ uint8_t sx126x::modemStatus() {
|
|||||||
// imitate the register status from the sx1276 / 78
|
// imitate the register status from the sx1276 / 78
|
||||||
uint8_t buf[2] = {0};
|
uint8_t buf[2] = {0};
|
||||||
|
|
||||||
|
|
||||||
executeOpcodeRead(OP_GET_IRQ_STATUS_6X, buf, 2);
|
executeOpcodeRead(OP_GET_IRQ_STATUS_6X, buf, 2);
|
||||||
|
|
||||||
uint8_t clearbuf[2] = {0};
|
uint8_t clearbuf[2] = {0};
|
||||||
|
|
||||||
uint8_t byte = 0x00;
|
uint8_t byte = 0x00;
|
||||||
|
|
||||||
if (buf[1] & IRQ_PREAMBLE_DET_MASK_6X != 0) {
|
if ((buf[1] & IRQ_PREAMBLE_DET_MASK_6X) != 0) {
|
||||||
byte = byte | 0x01 | 0x04;
|
byte = byte | 0x01 | 0x04;
|
||||||
// clear register after reading
|
// clear register after reading
|
||||||
clearbuf[1] = IRQ_PREAMBLE_DET_MASK_6X;
|
clearbuf[1] = IRQ_PREAMBLE_DET_MASK_6X;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (buf[1] & IRQ_HEADER_DET_MASK_6X != 0) {
|
if ((buf[1] & IRQ_HEADER_DET_MASK_6X) != 0) {
|
||||||
byte = byte | 0x02 | 0x04;
|
byte = byte | 0x02 | 0x04;
|
||||||
// clear register after reading
|
|
||||||
clearbuf[1] = clearbuf[1] | IRQ_HEADER_DET_MASK_6X;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
executeOpcode(OP_CLEAR_IRQ_STATUS_6X, clearbuf, 2);
|
executeOpcode(OP_CLEAR_IRQ_STATUS_6X, clearbuf, 2);
|
||||||
@ -494,7 +506,7 @@ int ISR_VECT sx126x::currentRssi() {
|
|||||||
uint8_t byte = 0;
|
uint8_t byte = 0;
|
||||||
executeOpcodeRead(OP_CURRENT_RSSI_6X, &byte, 1);
|
executeOpcodeRead(OP_CURRENT_RSSI_6X, &byte, 1);
|
||||||
int rssi = -(int(byte)) / 2;
|
int rssi = -(int(byte)) / 2;
|
||||||
return rssi - RSSI_OFFSET;
|
return rssi;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t sx126x::packetRssiRaw() {
|
uint8_t sx126x::packetRssiRaw() {
|
||||||
@ -508,7 +520,7 @@ int ISR_VECT sx126x::packetRssi() {
|
|||||||
uint8_t buf[3] = {0};
|
uint8_t buf[3] = {0};
|
||||||
executeOpcodeRead(OP_PACKET_STATUS_6X, buf, 3);
|
executeOpcodeRead(OP_PACKET_STATUS_6X, buf, 3);
|
||||||
int pkt_rssi = -buf[0] / 2;
|
int pkt_rssi = -buf[0] / 2;
|
||||||
return pkt_rssi - RSSI_OFFSET;
|
return pkt_rssi;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t ISR_VECT sx126x::packetSnrRaw() {
|
uint8_t ISR_VECT sx126x::packetSnrRaw() {
|
||||||
@ -653,20 +665,18 @@ void sx126x::receive(int size)
|
|||||||
if (_rxen != -1) {
|
if (_rxen != -1) {
|
||||||
rxAntEnable();
|
rxAntEnable();
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t mode[3] = {0xFF, 0xFF, 0xFF}; // continuous mode
|
uint8_t mode[3] = {0xFF, 0xFF, 0xFF}; // continuous mode
|
||||||
executeOpcode(OP_RX_6X, mode, 3);
|
executeOpcode(OP_RX_6X, mode, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
void sx126x::idle()
|
void sx126x::idle()
|
||||||
{
|
{
|
||||||
//#if HAS_TCXO
|
// STDBY_XOSC
|
||||||
// STDBY_XOSC
|
uint8_t byte = 0x01;
|
||||||
uint8_t byte = 0x01;
|
// STDBY_RC
|
||||||
//#else
|
// uint8_t byte = 0x00;
|
||||||
// // STDBY_RC
|
executeOpcode(OP_STANDBY_6X, &byte, 1);
|
||||||
// uint8_t byte = 0x00;
|
|
||||||
//#endif
|
|
||||||
executeOpcode(OP_STANDBY_6X, &byte, 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void sx126x::sleep()
|
void sx126x::sleep()
|
||||||
@ -677,7 +687,12 @@ void sx126x::sleep()
|
|||||||
|
|
||||||
void sx126x::enableTCXO() {
|
void sx126x::enableTCXO() {
|
||||||
// only tested for RAK4630, voltage may be different on other platforms
|
// only tested for RAK4630, voltage may be different on other platforms
|
||||||
uint8_t buf[4] = {MODE_TCXO_3_3V_6X, 0x00, 0x00, 0xFF};
|
#if BOARD_MODEL == BOARD_RAK4630
|
||||||
|
uint8_t buf[4] = {MODE_TCXO_3_3V_6X, 0x00, 0x00, 0xFF};
|
||||||
|
#elif BOARD_MODEL == BOARD_TBEAM
|
||||||
|
uint8_t buf[4] = {MODE_TCXO_1_8V_6X, 0x00, 0x00, 0xFF};
|
||||||
|
#endif
|
||||||
|
|
||||||
executeOpcode(OP_DIO3_TCXO_CTRL_6X, buf, 4);
|
executeOpcode(OP_DIO3_TCXO_CTRL_6X, buf, 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -756,7 +771,7 @@ void sx126x::setSpreadingFactor(int sf)
|
|||||||
|
|
||||||
_sf = sf;
|
_sf = sf;
|
||||||
|
|
||||||
setModulationParams(sf, _bw, _cr, _ldro);
|
setModulationParams(sf, _bw, _cr, _ldro);
|
||||||
handleLowDataRate();
|
handleLowDataRate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -834,13 +849,17 @@ void sx126x::setCodingRate4(int denominator)
|
|||||||
|
|
||||||
void sx126x::setPreambleLength(long length)
|
void sx126x::setPreambleLength(long length)
|
||||||
{
|
{
|
||||||
setPacketParams(length, _implicitHeaderMode, _payloadLength, _crcMode);
|
_preambleLength = length;
|
||||||
|
setPacketParams(length, _implicitHeaderMode, _payloadLength, _crcMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
void sx126x::setSyncWord(int sw)
|
void sx126x::setSyncWord(uint16_t sw)
|
||||||
{
|
{
|
||||||
writeRegister(REG_SYNC_WORD_MSB_6X, sw & 0xFF00);
|
// TODO: Fix
|
||||||
writeRegister(REG_SYNC_WORD_LSB_6X, sw & 0x00FF);
|
// writeRegister(REG_SYNC_WORD_MSB_6X, (sw & 0xFF00) >> 8);
|
||||||
|
// writeRegister(REG_SYNC_WORD_LSB_6X, sw & 0x00FF);
|
||||||
|
writeRegister(REG_SYNC_WORD_MSB_6X, 0x14);
|
||||||
|
writeRegister(REG_SYNC_WORD_LSB_6X, 0x24);
|
||||||
}
|
}
|
||||||
|
|
||||||
void sx126x::enableCrc()
|
void sx126x::enableCrc()
|
||||||
@ -921,6 +940,11 @@ void ISR_VECT sx126x::handleDio0Rise()
|
|||||||
_onReceive(packetLength);
|
_onReceive(packetLength);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// else {
|
||||||
|
// Serial.println("CRCE");
|
||||||
|
// Serial.println(buf[0]);
|
||||||
|
// Serial.println(buf[1]);
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
void ISR_VECT sx126x::onDio0Rise()
|
void ISR_VECT sx126x::onDio0Rise()
|
||||||
@ -929,3 +953,5 @@ void ISR_VECT sx126x::onDio0Rise()
|
|||||||
}
|
}
|
||||||
|
|
||||||
sx126x sx126x_modem;
|
sx126x sx126x_modem;
|
||||||
|
|
||||||
|
#endif
|
2
sx126x.h
2
sx126x.h
@ -68,7 +68,7 @@ public:
|
|||||||
void setSignalBandwidth(long sbw);
|
void setSignalBandwidth(long sbw);
|
||||||
void setCodingRate4(int denominator);
|
void setCodingRate4(int denominator);
|
||||||
void setPreambleLength(long length);
|
void setPreambleLength(long length);
|
||||||
void setSyncWord(int sw);
|
void setSyncWord(uint16_t sw);
|
||||||
uint8_t modemStatus();
|
uint8_t modemStatus();
|
||||||
void enableCrc();
|
void enableCrc();
|
||||||
void disableCrc();
|
void disableCrc();
|
||||||
|
33
sx127x.cpp
33
sx127x.cpp
@ -4,30 +4,10 @@
|
|||||||
// Modifications and additions copyright 2023 by Mark Qvist
|
// Modifications and additions copyright 2023 by Mark Qvist
|
||||||
// Obviously still under the MIT license.
|
// Obviously still under the MIT license.
|
||||||
|
|
||||||
#include "sx127x.h"
|
|
||||||
#include "Boards.h"
|
#include "Boards.h"
|
||||||
|
|
||||||
#define MCU_1284P 0x91
|
#if MODEM == SX1276
|
||||||
#define MCU_2560 0x92
|
#include "sx127x.h"
|
||||||
#define MCU_ESP32 0x81
|
|
||||||
#define MCU_NRF52 0x71
|
|
||||||
#if defined(__AVR_ATmega1284P__)
|
|
||||||
#define PLATFORM PLATFORM_AVR
|
|
||||||
#define MCU_VARIANT MCU_1284P
|
|
||||||
#elif defined(__AVR_ATmega2560__)
|
|
||||||
#define PLATFORM PLATFORM_AVR
|
|
||||||
#define MCU_VARIANT MCU_2560
|
|
||||||
#elif defined(ESP32)
|
|
||||||
#define PLATFORM PLATFORM_ESP32
|
|
||||||
#define MCU_VARIANT MCU_ESP32
|
|
||||||
#elif defined(NRF52840_XXAA)
|
|
||||||
#define PLATFORM PLATFORM_NRF52
|
|
||||||
#define MCU_VARIANT MCU_NRF52
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef MCU_VARIANT
|
|
||||||
#error No MCU variant defined, cannot compile
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if MCU_VARIANT == MCU_ESP32
|
#if MCU_VARIANT == MCU_ESP32
|
||||||
#if MCU_VARIANT == MCU_ESP32 and !defined(CONFIG_IDF_TARGET_ESP32S3)
|
#if MCU_VARIANT == MCU_ESP32 and !defined(CONFIG_IDF_TARGET_ESP32S3)
|
||||||
@ -96,6 +76,7 @@
|
|||||||
extern SPIClass SPI;
|
extern SPIClass SPI;
|
||||||
|
|
||||||
#define MAX_PKT_LENGTH 255
|
#define MAX_PKT_LENGTH 255
|
||||||
|
#define SYNC_WORD_7X 0x12
|
||||||
|
|
||||||
sx127x::sx127x() :
|
sx127x::sx127x() :
|
||||||
_spiSettings(8E6, MSBFIRST, SPI_MODE0),
|
_spiSettings(8E6, MSBFIRST, SPI_MODE0),
|
||||||
@ -200,10 +181,10 @@ int sx127x::begin(long frequency)
|
|||||||
// set auto AGC
|
// set auto AGC
|
||||||
writeRegister(REG_MODEM_CONFIG_3_7X, 0x04);
|
writeRegister(REG_MODEM_CONFIG_3_7X, 0x04);
|
||||||
|
|
||||||
// set output power to 2 dBm
|
setSyncWord(SYNC_WORD_7X);
|
||||||
|
enableCrc();
|
||||||
setTxPower(2);
|
setTxPower(2);
|
||||||
|
|
||||||
// put in standby mode
|
|
||||||
idle();
|
idle();
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
@ -602,7 +583,7 @@ void sx127x::setPreambleLength(long length)
|
|||||||
writeRegister(REG_PREAMBLE_LSB_7X, (uint8_t)(length >> 0));
|
writeRegister(REG_PREAMBLE_LSB_7X, (uint8_t)(length >> 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
void sx127x::setSyncWord(int sw)
|
void sx127x::setSyncWord(uint8_t sw)
|
||||||
{
|
{
|
||||||
writeRegister(REG_SYNC_WORD_7X, sw);
|
writeRegister(REG_SYNC_WORD_7X, sw);
|
||||||
}
|
}
|
||||||
@ -692,3 +673,5 @@ void ISR_VECT sx127x::onDio0Rise()
|
|||||||
}
|
}
|
||||||
|
|
||||||
sx127x sx127x_modem;
|
sx127x sx127x_modem;
|
||||||
|
|
||||||
|
#endif
|
6
sx127x.h
6
sx127x.h
@ -66,17 +66,13 @@ public:
|
|||||||
void setSignalBandwidth(long sbw);
|
void setSignalBandwidth(long sbw);
|
||||||
void setCodingRate4(int denominator);
|
void setCodingRate4(int denominator);
|
||||||
void setPreambleLength(long length);
|
void setPreambleLength(long length);
|
||||||
void setSyncWord(int sw);
|
void setSyncWord(uint8_t sw);
|
||||||
uint8_t modemStatus();
|
uint8_t modemStatus();
|
||||||
void enableCrc();
|
void enableCrc();
|
||||||
void disableCrc();
|
void disableCrc();
|
||||||
void enableTCXO();
|
void enableTCXO();
|
||||||
void disableTCXO();
|
void disableTCXO();
|
||||||
|
|
||||||
// deprecated
|
|
||||||
void crc() { enableCrc(); }
|
|
||||||
void noCrc() { disableCrc(); }
|
|
||||||
|
|
||||||
byte random();
|
byte random();
|
||||||
|
|
||||||
void setPins(int ss = LORA_DEFAULT_SS_PIN, int reset = LORA_DEFAULT_RESET_PIN, int dio0 = LORA_DEFAULT_DIO0_PIN, int busy = LORA_DEFAULT_BUSY_PIN);
|
void setPins(int ss = LORA_DEFAULT_SS_PIN, int reset = LORA_DEFAULT_RESET_PIN, int dio0 = LORA_DEFAULT_DIO0_PIN, int busy = LORA_DEFAULT_BUSY_PIN);
|
||||||
|
Loading…
Reference in New Issue
Block a user