]> git.tnoah.ca Git - lora-radio.git/commitdiff
Support for XIAO ESP32S3
authorMark Qvist <mark@unsigned.io>
Sat, 12 Apr 2025 22:11:21 +0000 (00:11 +0200)
committerMark Qvist <mark@unsigned.io>
Sat, 12 Apr 2025 22:11:21 +0000 (00:11 +0200)
Boards.h
Display.h
Makefile
RNode_Firmware.ino
Utilities.h
sx126x.cpp
sx126x.h

index f93790f178a0df404e0b305ea6596b23d472b99c..e76e38b90f58bd5de45cb097706902e8f68d1466 100644 (file)
--- a/Boards.h
+++ b/Boards.h
   #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
     #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
         #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
       #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
 
index 7062e0d14c78e5d3ae56917195d13ab701300d91..c42283ca360f558ad0e1825502f9bce46b4eb48b 100644 (file)
--- a/Display.h
+++ b/Display.h
   #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
index 13bd23b77e20e23026c5799efae3a42b267d7140..8611107a3640567853e5fd8aafdc6bd0e30b55a1 100644 (file)
--- 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
index 79bff2fe28a628968ebcd0fca1b091be0e717deb..a116b3d83ad1d9d7948a29ee8441cde246599a39 100644 (file)
@@ -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
index 7ec1941c86e8f46118446eb26e1d1e88b2a779e9..3d46027b39d6dfd3d01853aca60c3ff5c4ec66c4 100644 (file)
@@ -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
index 68bf7b15424192681c8f04c03c68475cce73e7fe..30c22d92f11f73726933e4b84e556e5d3d75fb60 100644 (file)
@@ -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};
index 1703a8fb08f1e263c6f72560207edd26b01c1048..068a1bb60f954dd1f1dd80cac45ef39c71a6912f 100644 (file)
--- 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);