diff --git a/Boards.h b/Boards.h index f93790f..e76e38b 100644 --- a/Boards.h +++ b/Boards.h @@ -65,9 +65,10 @@ #define MODEL_DB 0xDB // LilyGO T-Beam Supreme, 433 MHz #define MODEL_DC 0xDC // LilyGO T-Beam Supreme, 868 MHz - #define PRODUCT_SEEED_XIAO_ESP32S3 0xEB - #define BOARD_SEEED_XIAO_ESP32S3 0x3E - #define MODEL_DD 0xDD + #define PRODUCT_XIAO_S3 0xEB + #define BOARD_XIAO_S3 0x3E + #define MODEL_DE 0xDE // Xiao ESP32S3 with Wio-SX1262 module, 433 MHz + #define MODEL_DD 0xDD // Xiao ESP32S3 with Wio-SX1262 module, 868 MHz #define PRODUCT_T32_10 0xB2 #define BOARD_LORA32_V1_0 0x39 @@ -144,10 +145,6 @@ #endif #endif -// test build - KJB -#define BOARD_MODEL BOARD_SEEED_XIAO_ESP32S3 -//#define BOARD_MODEL BOARD_HELTEC32_V3 - #define HAS_DISPLAY false #define HAS_BLUETOOTH false #define HAS_BLE false @@ -602,19 +599,17 @@ #endif #endif - #elif BOARD_MODEL == BOARD_SEEED_XIAO_ESP32S3 + #elif BOARD_MODEL == BOARD_XIAO_S3 #define IS_ESP32S3 true #define MODEM SX1262 #define DIO2_AS_RF_SWITCH true #define HAS_BUSY true #define HAS_TCXO true -// #define OCP_TUNED 0x38 - #define HAS_DISPLAY true -// #define HAS_CONSOLE true + #define HAS_DISPLAY false + #define HAS_CONSOLE true #define HAS_BLUETOOTH false #define HAS_BLE true -// #define HAS_PMU true #define HAS_NP false #define HAS_SD false #define HAS_EEPROM true @@ -624,41 +619,23 @@ #define PIN_WAKEUP GPIO_NUM_21 #define WAKEUP_LEVEL 0 -// #define PMU_IRQ 40 -// #define I2C_SCL 41 -// #define I2C_SDA 42 - - // Wio-SX1262 button pulls down GPIO21 - // THis is shared with the Yellow LED - // on the ESP32S3 (also active Low) const int pin_btn_usr1 = 21; - - const int pin_cs = 41; //16; - const int pin_reset = 42; //14; - const int pin_sclk = 7; //11; - const int pin_mosi = 9; //15; - const int pin_miso = 8; //13; + const int pin_cs = 41; + const int pin_reset = 42; + const int pin_sclk = 7; + const int pin_mosi = 9; + const int pin_miso = 8; const int pin_tcxo_enable = -1; - const int pin_dio = 39; //21; - const int pin_busy = 40; //18; + const int pin_dio = 39; + const int pin_busy = 40; -// const int SD_MISO = 37; -// const int SD_MOSI = 35; -// const int SD_CLK = 36; -// const int SD_CS = 47; - -// const int IMU_CS = 34; - - // HAS LED/tx on Wio board - 48 Hi/ON - // LED 21 on ESP board - Lo/ON/Yellow - // shared with button input. #if HAS_NP == false #if defined(EXTERNAL_LEDS) - const int pin_led_rx = -1; - const int pin_led_tx = 48; //47; + const int pin_led_rx = 48; + const int pin_led_tx = 48; #else - const int pin_led_rx = -1; - const int pin_led_tx = 48; //47; + const int pin_led_rx = 48; + const int pin_led_tx = 48; #endif #endif diff --git a/Display.h b/Display.h index 7062e0d..c42283c 100644 --- a/Display.h +++ b/Display.h @@ -85,6 +85,12 @@ #define SCL_OLED 18 #define SDA_OLED 17 #define DISP_CUSTOM_ADDR false +#elif BOARD_MODEL == BOARD_XIAO_S3 + #define DISP_RST -1 + #define DISP_ADDR 0x3C + #define SCL_OLED 6 + #define SDA_OLED 5 + #define DISP_CUSTOM_ADDR true #else #define DISP_RST -1 #define DISP_ADDR 0x3C @@ -278,6 +284,8 @@ bool display_init() { #endif #elif BOARD_MODEL == BOARD_TBEAM_S_V1 Wire.begin(SDA_OLED, SCL_OLED); + #elif BOARD_MODEL == BOARD_XIAO_S3 + Wire.begin(SDA_OLED, SCL_OLED); #endif #if HAS_EEPROM diff --git a/Makefile b/Makefile index 13bd23b..8611107 100644 --- a/Makefile +++ b/Makefile @@ -143,6 +143,9 @@ firmware-heltec_t114: firmware-techo: arduino-cli compile --log --fqbn adafruit:nrf52:pca10056 -e --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0x44\"" +firmware-xiao_s3: + arduino-cli compile --log --fqbn "esp32:esp32:XIAO_ESP32S3" -e --build-property "build.partitions=no_ota" --build-property "upload.maximum_size=2097152" --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0x3E\"" + upload: arduino-cli upload -p /dev/ttyUSB0 --fqbn unsignedio:avr:rnode @@ -255,6 +258,13 @@ upload-techo: @sleep 6 rnodeconf /dev/ttyACM0 --firmware-hash $$(./partition_hashes from_device /dev/ttyACM0) +upload-xiao_s3: + arduino-cli upload -p /dev/ttyACM0 --fqbn esp32:esp32:XIAO_ESP32S3 + @sleep 1 + rnodeconf /dev/ttyACM0 --firmware-hash $$(./partition_hashes ./build/esp32.esp32.XIAO_ESP32S3/RNode_Firmware.ino.bin) +# @sleep 3 +# python ./Release/esptool/esptool.py --chip esp32s3 --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 + release: release-all release-all: console-site spiffs-image release-tbeam release-tbeam_sx1262 release-lora32_v10 release-lora32_v20 release-lora32_v21 release-lora32_v10_extled release-lora32_v20_extled release-lora32_v21_extled release-lora32_v21_tcxo release-featheresp32 release-genericesp32 release-heltec32_v2 release-heltec32_v3 release-heltec32_v2_extled release-heltec_t114 release-techo release-rnode_ng_20 release-rnode_ng_21 release-t3s3 release-t3s3_sx127x release-t3s3_sx1280_pa release-tdeck release-tbeam_supreme release-rak4631 release-hashes diff --git a/RNode_Firmware.ino b/RNode_Firmware.ino index 79bff2f..a116b3d 100644 --- a/RNode_Firmware.ino +++ b/RNode_Firmware.ino @@ -179,6 +179,13 @@ void setup() { #endif #endif + #if BOARD_MODEL == BOARD_XIAO_S3 + // Improve wakeup from sleep + delay(300); + LoRa->reset(); + delay(100); + #endif + // Check installed transceiver chip and // probe boot parameters. if (LoRa->preInit()) { @@ -1611,10 +1618,13 @@ void loop() { void sleep_now() { #if HAS_SLEEP == true + stopRadio(); // TODO: Check this on all platforms #if PLATFORM == PLATFORM_ESP32 - #if BOARD_MODEL == BOARD_T3S3 || BOARD_MODEL == BOARD_SEEED_XIAO_ESP32S3 - display_intensity = 0; - update_display(true); + #if BOARD_MODEL == BOARD_T3S3 || BOARD_MODEL == BOARD_XIAO_S3 + #if HAS_DISPLAY + display_intensity = 0; + update_display(true); + #endif #endif #if PIN_DISP_SLEEP >= 0 pinMode(PIN_DISP_SLEEP, OUTPUT); @@ -1626,7 +1636,6 @@ void sleep_now() { delay(100); } #endif - stopRadio(); esp_sleep_enable_ext0_wakeup(PIN_WAKEUP, WAKEUP_LEVEL); esp_deep_sleep_start(); #elif PLATFORM == PLATFORM_NRF52 diff --git a/Utilities.h b/Utilities.h index 7ec1941..3d46027 100644 --- a/Utilities.h +++ b/Utilities.h @@ -285,13 +285,9 @@ uint8_t boot_vector = 0x00; void led_tx_off() { digitalWrite(pin_led_tx, LOW); } void led_id_on() { } void led_id_off() { } - #elif BOARD_MODEL == BOARD_SEEED_XIAO_ESP32S3 - // tx pin is active high, rx pin is active low.... - // but shared with LED, choose button for now -// void led_rx_on() { pinMode(pin_led_rx, OUTPUT); digitalWrite(pin_led_rx, LOW); } -// void led_rx_off() { digitalWrite(pin_led_rx, HIGH); pinMode(pin_led_rx, INPUT); } - void led_rx_on() { } - void led_rx_off() { } + #elif BOARD_MODEL == BOARD_XIAO_S3 + void led_rx_on() { digitalWrite(pin_led_rx, LED_ON); } + void led_rx_off() { digitalWrite(pin_led_rx, LED_OFF); } void led_tx_on() { digitalWrite(pin_led_tx, LED_ON); } void led_tx_off() { digitalWrite(pin_led_tx, LED_OFF); } void led_id_on() { } @@ -1276,6 +1272,7 @@ void setTXPower() { if (model == MODEL_DC) LoRa->setTxPower(lora_txp, PA_OUTPUT_PA_BOOST_PIN); if (model == MODEL_DD) LoRa->setTxPower(lora_txp, PA_OUTPUT_PA_BOOST_PIN); + if (model == MODEL_DE) LoRa->setTxPower(lora_txp, PA_OUTPUT_PA_BOOST_PIN); if (model == MODEL_E4) LoRa->setTxPower(lora_txp, PA_OUTPUT_PA_BOOST_PIN); if (model == MODEL_E9) LoRa->setTxPower(lora_txp, PA_OUTPUT_PA_BOOST_PIN); @@ -1480,7 +1477,7 @@ bool eeprom_product_valid() { #if PLATFORM == PLATFORM_AVR if (rval == PRODUCT_RNODE || rval == PRODUCT_HMBRW) { #elif PLATFORM == PLATFORM_ESP32 - if (rval == PRODUCT_RNODE || rval == BOARD_RNODE_NG_20 || rval == BOARD_RNODE_NG_21 || rval == PRODUCT_HMBRW || rval == PRODUCT_TBEAM || rval == PRODUCT_T32_10 || rval == PRODUCT_T32_20 || rval == PRODUCT_T32_21 || rval == PRODUCT_H32_V2 || rval == PRODUCT_H32_V3 || rval == PRODUCT_TDECK_V1 || rval == PRODUCT_TBEAM_S_V1 || rval == PRODUCT_SEEED_XIAO_ESP32S3) { + if (rval == PRODUCT_RNODE || rval == BOARD_RNODE_NG_20 || rval == BOARD_RNODE_NG_21 || rval == PRODUCT_HMBRW || rval == PRODUCT_TBEAM || rval == PRODUCT_T32_10 || rval == PRODUCT_T32_20 || rval == PRODUCT_T32_21 || rval == PRODUCT_H32_V2 || rval == PRODUCT_H32_V3 || rval == PRODUCT_TDECK_V1 || rval == PRODUCT_TBEAM_S_V1 || rval == PRODUCT_XIAO_S3) { #elif PLATFORM == PLATFORM_NRF52 if (rval == PRODUCT_RAK4631 || rval == PRODUCT_HELTEC_T114 || rval == PRODUCT_TECHO || rval == PRODUCT_HMBRW) { #else @@ -1516,8 +1513,8 @@ bool eeprom_model_valid() { if (model == MODEL_16 || model == MODEL_17) { #elif BOARD_MODEL == BOARD_TBEAM_S_V1 if (model == MODEL_DB || model == MODEL_DC) { - #elif BOARD_MODEL == BOARD_SEEED_XIAO_ESP32S3 - if (model == MODEL_DD) { + #elif BOARD_MODEL == BOARD_XIAO_S3 + if (model == MODEL_DD || model == MODEL_DE) { #elif BOARD_MODEL == BOARD_LORA32_V1_0 if (model == MODEL_BA || model == MODEL_BB) { #elif BOARD_MODEL == BOARD_LORA32_V2_0 diff --git a/sx126x.cpp b/sx126x.cpp index 68bf7b1..30c22d9 100644 --- a/sx126x.cpp +++ b/sx126x.cpp @@ -122,17 +122,10 @@ sx126x::sx126x() : { setTimeout(0); } bool sx126x::preInit() { - #if BOARD_MODEL == BOARD_SEEED_XIAO_ESP32S3 - // Improve wakeup from sleep - delay(300); - reset(); - delay(100); - #endif - pinMode(_ss, OUTPUT); digitalWrite(_ss, HIGH); - #if BOARD_MODEL == BOARD_T3S3 || BOARD_MODEL == BOARD_HELTEC32_V3 || BOARD_MODEL == BOARD_TDECK + #if BOARD_MODEL == BOARD_T3S3 || BOARD_MODEL == BOARD_HELTEC32_V3 || BOARD_MODEL == BOARD_TDECK || BOARD_MODEL == BOARD_XIAO_S3 SPI.begin(pin_sclk, pin_miso, pin_mosi, pin_cs); #elif BOARD_MODEL == BOARD_TECHO SPI.setPins(pin_miso, pin_sclk, pin_mosi); @@ -153,7 +146,6 @@ bool sx126x::preInit() { break; } delay(100); - Serial.println( uint16_t(syncmsb << 8 | synclsb) ); } if ( uint16_t(syncmsb << 8 | synclsb) != 0x1424 && uint16_t(syncmsb << 8 | synclsb) != 0x4434) { return false; @@ -578,7 +570,7 @@ void sx126x::sleep() { uint8_t byte = 0x00; executeOpcode(OP_SLEEP_6X, &byte, 1) void sx126x::enableTCXO() { #if HAS_TCXO - #if BOARD_MODEL == BOARD_RAK4631 || BOARD_MODEL == BOARD_HELTEC32_V3 || BOARD_MODEL == BOARD_SEEED_XIAO_ESP32S3 + #if BOARD_MODEL == BOARD_RAK4631 || BOARD_MODEL == BOARD_HELTEC32_V3 || BOARD_MODEL == BOARD_XIAO_S3 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}; diff --git a/sx126x.h b/sx126x.h index 1703a8f..068a1bb 100644 --- a/sx126x.h +++ b/sx126x.h @@ -56,6 +56,7 @@ public: void receive(int size = 0); void standby(); void sleep(); + void reset(void); bool preInit(); uint8_t getTxPower(); @@ -111,7 +112,6 @@ private: void handleLowDataRate(); void optimizeModemSensitivity(); - void reset(void); void calibrate(void); void calibrate_image(long frequency);