]> git.tnoah.ca Git - lora-radio.git/commitdiff
Add XIAO ESP32S3 support (with Wio-SX1262 and Expansion Base support)
authorjacob.eva <x00010@disroot.org>
Wed, 19 Mar 2025 18:16:41 +0000 (18:16 +0000)
committerjacob.eva <x00010@disroot.org>
Wed, 19 Mar 2025 18:16:41 +0000 (18:16 +0000)
Boards.h
Makefile
RNode_Firmware_CE.ino
Radio.cpp
Utilities.h

index c23fff2ed1067d371e9cda83c847f5683f5f0c60..a6e9e6127c338335188798024ce759fda85cde34 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_XIAO_ESP32S3  0xEB // Xiao ESP32S3 - sold by Seeed Studio
+  #define BOARD_XIAO_ESP32S3    0x3E
+  #define MODEL_DD            0xDD // Xiao ESP32S3, 868 MHz
+
   #define PRODUCT_T32_10      0xB2 // T3 v1.0 - sold by LilyGO
   #define BOARD_LORA32_V1_0   0x39
   #define MODEL_BA            0xBA // LilyGO T3 v1.0, 433 MHz
@@ -90,7 +94,7 @@
   #define MODEL_CA            0xCA // Heltec Lora32 v3, 868 MHz
   
   #define PRODUCT_H_W_PAPER   0xC3
-  #define BOARD_H_W_PAPER     0x3E
+  #define BOARD_H_W_PAPER     0x3F
   #define MODEL_C8            0xC8
 
   #define PRODUCT_RAK4631     0x10 // RAK4631 - sold by RAKWireless
               -1  // pin_tcxo_enable
           }
       };
+ #elif BOARD_MODEL == BOARD_XIAO_ESP32S3
+      #define IS_ESP32S3 true
+
+      #define HAS_DISPLAY true
+      #define DISPLAY OLED
+      //#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 HAS_INPUT true
+      #define HAS_SLEEP true
+      #define PIN_WAKEUP GPIO_NUM_21
+      #define WAKEUP_LEVEL 0
+
+      #define INTERFACE_COUNT 1
+
+//      #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 uint8_t interfaces[INTERFACE_COUNT] = {SX1262};
+      const bool interface_cfg[INTERFACE_COUNT][3] = { 
+                    // SX1262
+          {
+              true, // DEFAULT_SPI
+              true, // HAS_TCXO
+              true  // DIO2_AS_RF_SWITCH
+          }, 
+      };
+      const int8_t interface_pins[INTERFACE_COUNT][10] = { 
+                  // SX1262
+          {
+              41, // pin_ss
+              7, // pin_sclk
+              9, // pin_mosi
+              8, // pin_miso
+              40, // pin_busy
+              39, // pin_dio
+              42, // pin_reset
+              -1, // pin_txen
+              -1, // pin_rxen
+              -1  // pin_tcxo_enable
+          }
+      };
+
+//      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;
+        #else
+          const int pin_led_rx = -1;
+          const int pin_led_tx = 48; //47;
+        #endif
+      #endif
     #else
       #error An unsupported ESP32 board was selected. Cannot compile RNode firmware.
     #endif
index 7a2634f322d917577f07071848a34e1bc615de05..5d0f28f6e18dc5e38c56eb3bd53c76e3f112552e 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -128,6 +128,9 @@ firmware-heltec32_v3:
 firmware-heltec_w_paper:
        arduino-cli compile --fqbn esp32:esp32:heltec_wifi_lora_32_V3 $(COMMON_BUILD_FLAGS) --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0x3E\""
 
+firmware-xiao_esp32s3:
+       arduino-cli compile --fqbn esp32:esp32:XIAO_ESP32S3 $(COMMON_BUILD_FLAGS) --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0x3E\""
+
 firmware-rnode_ng_20: check_bt_buffers
        arduino-cli compile --fqbn esp32:esp32:ttgo-lora32 $(COMMON_BUILD_FLAGS) --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0x40\""
 
@@ -246,6 +249,13 @@ upload-featheresp32:
        @sleep 3
        python ./Release/esptool/esptool.py --port $(or $(port), /dev/ttyUSB0) $(COMMON_UPLOAD_FLAGS) ./Release/console_image.bin
 
+upload-xiao_esp32s3:
+       arduino-cli upload -p $(or $(port), /dev/ttyACM0) --fqbn esp32:esp32:XIAO_ESP32S3
+       @sleep 1
+       rnodeconf $(or $(port), /dev/ttyACM0) --firmware-hash $$(./partition_hashes ./build/esp32.esp32.XIAO_ESP32S3/RNode_Firmware_CE.ino.bin)
+       @sleep 3
+       python ./Release/esptool/esptool.py --port $(or $(port), /dev/ttyACM0) --chip esp32-s3 --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-opencom-xl upload-rak4631:
        arduino-cli upload -p $(or $(port), /dev/ttyACM0) --fqbn rakwireless:nrf52:WisCoreRAK4631Board
        unzip -o build/rakwireless.nrf52.WisCoreRAK4631Board/RNode_Firmware_CE.ino.zip -d build/rakwireless.nrf52.WisCoreRAK4631Board
index b80b9309002c95aa0e235e22a717b584e6a99460..7db1c8fd1084fa340db2f2b9c818204eb6963448 100644 (file)
@@ -1623,7 +1623,7 @@ void process_serial() {
 void sleep_now() {
   #if HAS_SLEEP == true
     #if PLATFORM == PLATFORM_ESP32
-      #if BOARD_MODEL == BOARD_T3S3
+      #if BOARD_MODEL == BOARD_T3S3 || BOARD_MODEL == BOARD_XIAO_ESP32C3
         display_intensity = 0;
         update_display(true);
       #endif
index 3af22e4c633726146100aa0d6e7460b6ef1abec8..5a9ef699d21e62bd45336917927d084eee825649 100644 (file)
--- a/Radio.cpp
+++ b/Radio.cpp
@@ -697,7 +697,7 @@ void sx126x::sleep()
 
 void sx126x::enableTCXO() {
   if (_tcxo) {
-    #if BOARD_MODEL == BOARD_RAK4631 || BOARD_MODEL == BOARD_OPENCOM_XL || BOARD_MODEL == BOARD_HELTEC32_V3
+    #if BOARD_MODEL == BOARD_RAK4631 || BOARD_MODEL == BOARD_OPENCOM_XL || BOARD_MODEL == BOARD_HELTEC32_V3 || BOARD_MODEL == BOARD_XIAO_ESP32S3
       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 738e265c9e3710e03a640d360f58cbb15343ec3d..edaea768e65933626cc34668634c9901ad2cacae 100644 (file)
@@ -286,6 +286,13 @@ 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_XIAO_ESP32S3
+        void led_rx_on() {}
+        void led_rx_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() {}
+        void led_id_off() {}
        #elif BOARD_MODEL == BOARD_GENERIC_ESP32
                void led_rx_on()  { digitalWrite(pin_led_rx, HIGH); }
                void led_rx_off() {     digitalWrite(pin_led_rx, LOW); }
@@ -1243,6 +1250,8 @@ void setTXPower(RadioInterface* radio, int txp) {
     if (model == MODEL_DB) radio->setTxPower(txp, PA_OUTPUT_PA_BOOST_PIN);
     if (model == MODEL_DC) radio->setTxPower(txp, PA_OUTPUT_PA_BOOST_PIN);
 
+    if (model == MODEL_DD) radio->setTxPower(txp, PA_OUTPUT_PA_BOOST_PIN);
+
     if (model == MODEL_E4) radio->setTxPower(txp, PA_OUTPUT_PA_BOOST_PIN);
     if (model == MODEL_E9) radio->setTxPower(txp, PA_OUTPUT_PA_BOOST_PIN);
     if (model == MODEL_E3) radio->setTxPower(txp, PA_OUTPUT_PA_BOOST_PIN);
@@ -1472,7 +1481,7 @@ bool eeprom_product_valid() {
   #endif
 
        #if 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_H_W_PAPER) {
+       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_H_W_PAPER || rval == PRODUCT_XIAO_ESP32S3) {
        #elif PLATFORM == PLATFORM_NRF52
        if (rval == PRODUCT_RAK4631 || rval == PRODUCT_HELTEC_T114 || rval == PRODUCT_OPENCOM_XL || rval == PRODUCT_TECHO || rval == PRODUCT_HMBRW) {
        #else
@@ -1508,6 +1517,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_XIAO_ESP32S3
+       if (model == MODEL_DD) {
        #elif BOARD_MODEL == BOARD_LORA32_V1_0
        if (model == MODEL_BA || model == MODEL_BB) {
        #elif BOARD_MODEL == BOARD_LORA32_V2_0