I've tried to flash it:
Did it stuck?
Ok, now there is no log output at all... and even after disconnecting boot pin from ground it still works with flasher.
I flashed back backup"
So no luck, it seems we need to try compiling samples from XR806 SDK
Czy wolisz polską wersję strony elektroda?
Nie, dziękuję Przekieruj mnie tamQuote:
AT+CWINIT: Initialize/Deinitialize Wi-Fi driver.
AT+CWMODE: Set the Wi-Fi mode (Station/SoftAP/Station+SoftAP).
AT+CWSTATE: Query the Wi-Fi state and Wi-Fi information.
AT+CWJAP: Connect to an AP.
AT+CWRECONNCFG: Query/Set the Wi-Fi reconnecting configuration.
AT+CWLAPOPT: Set the configuration for the command AT+CWLAP.
AT+CWLAP: List available APs.
AT+CWQAP: Disconnect from an AP.
AT+CWSAP: Query/Set the configuration of an ESP32 SoftAP.
AT+CWLIF: Obtain IP address of the station that connects to an ESP32 SoftAP.
AT+CWQIF: Disconnect stations from an ESP32 SoftAP.
AT+CWDHCP: Enable/disable DHCP.
AT+CWDHCPS: Query/Set the IPv4 addresses allocated by an ESP32 SoftAP DHCP server.
AT+CWAUTOCONN: Connect to an AP automatically when powered on.
AT+CWAPPROTO: Query/Set the 802.11 b/g/n protocol standard of SoftAP mode.
AT+CWSTAPROTO: Query/Set the 802.11 b/g/n protocol standard of station mode.
AT+CIPSTAMAC: Query/Set the MAC address of an ESP32 station.
AT+CIPAPMAC: Query/Set the MAC address of an ESP32 SoftAP.
AT+CIPSTA: Query/Set the IP address of an ESP32 station.
AT+CIPAP: Query/Set the IP address of an ESP32 SoftAP.
AT+CWSTARTSMART: Start SmartConfig.
AT+CWSTOPSMART: Stop SmartConfig.
AT+WPS: Enable the WPS function.
AT+CWJEAP: Connect to a WPA2 Enterprise AP.
AT+CWHOSTNAME: Query/Set the host name of an ESP32 station.
AT+CWCOUNTRY: Query/Set the Wi-Fi Country Code.
wlan scan success
en1: Associated with 28:87:ba:a0:f5:6d
en1: WPA: Key negotiation completed with 28:87:ba:a0:f5:6d [PTK=CCMP GTK=CCMP]
en1: CTRL-EVENT-CONNECTED - Connection to 28:87:ba:a0:f5:6d completed [id=0 id_s
tr=]
[net INF] msg <wlan connected>
[net INF] netif is link up
[net INF] start DHCP...
+EVT:2
msg:0
wlan connected
WAR drop=1135, fctl=0x00d0.
WAR drop=1135, fctl=0x00d0.
[net INF] netif (IPv4) is up
[net INF] address: 192.168.0.155
[net INF] gateway: 192.168.0.1
[net INF] netmask: 255.255.255.0
[net INF] msg <network up>
+EVT:4
msg:7
network up
OK
divadiow wrote:PB02/PB03 grounded✅✅
divadiow wrote:looks like only PB02 needs to be pulled low to get XR806 into download mode, as opposed to PB02 and PB03 on XR809
tester@DESKTOP-6SD9MUK:/mnt/w/GIT/OpenXR806$ make menuconfig
make[1]: Entering directory '/mnt/w/GIT/OpenXR806/tools/config'
HOSTLD build/mconf.o
/usr/bin/ld: build/confdata.o:confdata.c:(.text+0x48): undefined reference to `___chkstk_ms'
/usr/bin/ld: build/confdata.o:confdata.c:(.text+0x2e2): undefined reference to `__getreent'
/usr/bin/ld: build/confdata.o:confdata.c:(.text+0x302): undefined reference to `__getreent'
/usr/bin/ld: build/confdata.o:confdata.c:(.text+0x316): undefined reference to `__getreent'
/usr/bin/ld: build/confdata.o:confdata.c:(.text+0x496): undefined reference to `__getreent'
/usr/bin/ld: build/confdata.o:confdata.c:(.text+0x4fa): undefined reference to `___chkstk_ms'
/usr/bin/ld: build/confdata.o:confdata.c:(.text+0x669): undefined reference to `__getreent'
/usr/bin/ld: build/confdata.o:confdata.c:(.text+0xf8e): undefined reference to `__locale_ctype_ptr'
/usr/bin/ld: build/confdata.o:confdata.c:(.text+0xfe2): undefined reference to `__errno'
/usr/bin/ld: build/confdata.o:confdata.c:(.text+0x1382): undefined reference to `___chkstk_ms'
/usr/bin/ld: build/confdata.o:confdata.c:(.text+0x13cb): undefined reference to `__getreent'
/usr/bin/ld: build/confdata.o:confdata.c:(.text+0x1541): undefined reference to `__getreent'
/usr/bin/ld: build/confdata.o:confdata.c:(.text+0x209e): undefined reference to `__errno'
/usr/bin/ld: build/expr.o:expr.c:(.text+0x82): undefined reference to `__errno'
/usr/bin/ld: build/expr.o:expr.c:(.text+0x112): undefined reference to `__errno'
/usr/bin/ld: build/expr.o:expr.c:(.text+0x15a): undefined reference to `__errno'
/usr/bin/ld: build/expr.o:expr.c:(.text+0x18d): undefined reference to `__errno'
/usr/bin/ld: build/expr.o:expr.c:(.text+0x1c9): undefined reference to `__locale_ctype_ptr'
/usr/bin/ld: build/expr.o:expr.c:(.text+0x391): undefined reference to `__getreent'
/usr/bin/ld: build/expr.o:expr.c:(.text+0x3d2): undefined reference to `__assert_func'
/usr/bin/ld: build/expr.o:expr.c:(.text+0x619): undefined reference to `__getreent'
/usr/bin/ld: build/expr.o:expr.c:(.text+0x6f1): undefined reference to `__getreent'
/usr/bin/ld: build/lexer.lex.o:lexer.lex.c:(.text+0x9): undefined reference to `__getreent'
/usr/bin/ld: build/lexer.lex.o:lexer.lex.c:(.text+0x299): undefined reference to `___chkstk_ms'
/usr/bin/ld: build/lexer.lex.o:lexer.lex.c:(.text+0x4ae): undefined reference to `__errno'
/usr/bin/ld: build/lexer.lex.o:lexer.lex.c:(.text+0x4ef): undefined reference to `__errno'
/usr/bin/ld: build/lexer.lex.o:lexer.lex.c:(.text+0x771): undefined reference to `__errno'
/usr/bin/ld: build/lexer.lex.o:lexer.lex.c:(.text+0x799): undefined reference to `__errno'
/usr/bin/ld: build/lexer.lex.o:lexer.lex.c:(.text+0x7a7): undefined reference to `__errno'
/usr/bin/ld: build/lexer.lex.o:lexer.lex.c:(.text+0xf39): undefined reference to `__getreent'
/usr/bin/ld: build/lexer.lex.o:lexer.lex.c:(.text+0xf61): undefined reference to `__getreent'
/usr/bin/ld: build/lexer.lex.o:lexer.lex.c:(.text+0x10f4): undefined reference to `__getreent'
/usr/bin/ld: build/lexer.lex.o:lexer.lex.c:(.text+0x1375): undefined reference to `__getreent'
/usr/bin/ld: build/lexer.lex.o:lexer.lex.c:(.text+0x14b6): undefined reference to `__getreent'
/usr/bin/ld: build/lexer.lex.o:lexer.lex.c:(.text+0x20ac): more undefined references to `__getreent' follow
/usr/bin/ld: build/parser.tab.o:parser.tab.c:(.text+0xe98): undefined reference to `__locale_ctype_ptr'
/usr/bin/ld: build/parser.tab.o:parser.tab.c:(.text+0xf55): undefined reference to `__locale_ctype_ptr'
/usr/bin/ld: build/parser.tab.o:parser.tab.c:(.text+0x1319): undefined reference to `__getreent'
/usr/bin/ld: build/parser.tab.o:parser.tab.c:(.text+0x1352): undefined reference to `__getreent'
/usr/bin/ld: build/parser.tab.o:parser.tab.c:(.text+0x1674): undefined reference to `__getreent'
/usr/bin/ld: build/parser.tab.o:parser.tab.c:(.text+0x16c1): undefined reference to `__getreent'
/usr/bin/ld: build/parser.tab.o:parser.tab.c:(.text+0x1709): undefined reference to `__getreent'
/usr/bin/ld: build/parser.tab.o:parser.tab.c:(.text+0x172b): more undefined references to `__getreent' follow
/usr/bin/ld: build/preprocess.o:preprocess.c:(.text+0x278): undefined reference to `__locale_ctype_ptr'
/usr/bin/ld: build/symbol.o:symbol.c:(.text+0xc0a): undefined reference to `__getreent'
/usr/bin/ld: build/symbol.o:symbol.c:(.text+0x118a): undefined reference to `__locale_ctype_ptr'
/usr/bin/ld: build/symbol.o:symbol.c:(.text+0x11c1): undefined reference to `__locale_ctype_ptr'
/usr/bin/ld: build/symbol.o:symbol.c:(.text+0x122e): undefined reference to `__locale_ctype_ptr'
/usr/bin/ld: build/symbol.o:symbol.c:(.text+0x2282): undefined reference to `__getreent'
/usr/bin/ld: build/symbol.o:symbol.c:(.text+0x235a): undefined reference to `__getreent'
/usr/bin/ld: build/symbol.o:symbol.c:(.text+0x2394): undefined reference to `__getreent'
/usr/bin/ld: build/symbol.o:symbol.c:(.text+0x2493): undefined reference to `__getreent'
/usr/bin/ld: build/symbol.o:symbol.c:(.text+0x24d7): undefined reference to `__getreent'
/usr/bin/ld: build/symbol.o:symbol.c:(.text+0x2534): more undefined references to `__getreent' follow
/usr/bin/ld: build/util.o:util.c:(.text+0x22a): undefined reference to `___chkstk_ms'
/usr/bin/ld: build/util.o:util.c:(.text+0x2a4): undefined reference to `__getreent'
/usr/bin/ld: build/util.o:util.c:(.text+0x2e4): undefined reference to `__getreent'
/usr/bin/ld: build/util.o:util.c:(.text+0x344): undefined reference to `__getreent'
/usr/bin/ld: build/util.o:util.c:(.text+0x384): undefined reference to `__getreent'
collect2: error: ld returned 1 exit status
chmod: cannot access 'mconf': No such file or directory
make[1]: *** [Makefile:27: mconf] Error 1
make[1]: Leaving directory '/mnt/w/GIT/OpenXR806/tools/config'
/mnt/w/GIT/OpenXR806
tools/config/mconf ./Kconfig
make: tools/config/mconf: Command not found
make: *** [Makefile:124: menuconfig] Error 127
../../../include/xr_config.h:33:10: fatal error: generated/autoconf.h: No such file or directory
#include "generated/autoconf.h"
0. Introduction
As mentioned in the previous article, building Unbuntu in Windows is not very user-friendly for novices. So I have been looking for a solution and found a very interesting solution. I hope it will be helpful to you.
1. Environment Construction
The core of the solution is Alibaba Cloud.
The specific steps are as follows:
step 1: Register. Log in to the development platform of Jishu Community .
Setp2: Select a suitable cloud (free is the most important)
Setp3: Configure the cloud server. Just follow the instructions, it doesn't cost money~~
Pay attention to the system selection, choose Ubuntu 20 or 22
and follow the instructions. Log in to the control interface through remote connection.
Step 4: xr806 development configuration. When configuring, just follow the steps given by the boss:
https://aijishu.com/a/1060000000432870
SDK
wget https://bbs.aw-ol.com/assets/uploads/files/1693988430633-xr806_sdk.tar.gz
Unzip
tar -zxvf 1693988430633-xr806_sdk.tar.gz
Switch to tools and download toolchain
cd xr806_sdk/tools
wget https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-rm/8-2019q3/RC1.1/gcc-arm-none-eabi-8-2019-q3-update-linux.tar.bz2
Unzip
tar -xvf gcc-arm-none-eabi-8-2019-q3-update-linux.tar.bz2
Modify gcc.mk
View the file structure in the same way as the folder
##First copy the path of gcc
##Open gcc.mk and modify
2. Testing
Execute the following two commands in the xr806_sdk directory:
cp project/demo/hello\_demo/gcc/defconfig .config
make menuconfig
As expected, there is a problem and a patch is needed.
Install the plugin:
sudo apt-get update
sudo apt-get install libncurses5-dev
Then, rerun:
cp project/demo/hello\_demo/gcc/defconfig .config
make menuconfig
Great news! Finally succeeded!
##Click Save, then Exit. Then run:
make build_clean
make build -j$(nproc)
3. Start enjoying XR806.
Compiled results, can be downloaded and deleted.
#
# Common rules for GCC Makefile
#
# ----------------------------------------------------------------------------
# cross compiler
# ----------------------------------------------------------------------------
CC_DIR ?= /mnt/w/GIT/xr806_sdk/tools/gcc-arm-none-eabi-8-2019-q3-update/bin
CC_PREFIX := $(CC_DIR)/arm-none-eabi-
AS := $(CC_PREFIX)as
CC := $(CC_PREFIX)gcc
CPP := $(CC_PREFIX)g++
LD := $(CC_PREFIX)ld
NM := $(CC_PREFIX)nm
AR := $(CC_PREFIX)ar
ject/common/board/xr806_dig_ver -o ../main.o ../main.c
In file included from ../shared/src/new_common.h:231,
from ../shared/src/new_cfg.h:4,
from ../main.c:42:
../../../../include/net/lwip-2.1.2/lwip/sockets.h:690: error: "close" redefined [-Werror]
#define close(s) lwip_close(s)
In file included from ../shared/src/new_cfg.h:4,
from ../main.c:42:
../shared/src/new_common.h:120: note: this is the location of the previous definition
#define close lwip_close
../main.c: In function 'rtos_create_thread':
../main.c:59:24: error: passing argument 1 of 'OS_ThreadCreate' from incompatible pointer type [-Werror=incompatible-pointer-types]
err = OS_ThreadCreate(thread,
^~~~~~
In file included from ../../../../include/kernel/os/os.h:34,
from ../../../../project/common/framework/sys_ctrl/publisher.h:35,
from ../../../../project/common/framework/sys_ctrl/sys_ctrl.h:36,
from ../../../../project/common/framework/net_ctrl.h:39,
from ../main.c:40:
../../../../include/kernel/os/os_thread.h:92:40: note: expected 'OS_Thread_t *' {aka 'struct OS_Thread *'} but argument is of type 'void **'
OS_Status OS_ThreadCreate(OS_Thread_t *thread, const char *name,
~~~~~~~~~~~~~^~~~~~
../main.c: In function 'rtos_delete_thread':
../main.c:70:29: error: passing argument 1 of 'OS_ThreadDelete' from incompatible pointer type [-Werror=incompatible-pointer-types]
return OS_ThreadDelete( thread );
^~~~~~
In file included from ../../../../include/kernel/os/os.h:34,
from ../../../../project/common/framework/sys_ctrl/publisher.h:35,
from ../../../../project/common/framework/sys_ctrl/sys_ctrl.h:36,
from ../../../../project/common/framework/net_ctrl.h:39,
from ../main.c:40:
../../../../include/kernel/os/os_thread.h:108:40: note: expected 'OS_Thread_t *' {aka 'struct OS_Thread *'} but argument is of type 'void **'
OS_Status OS_ThreadDelete(OS_Thread_t *thread);
~~~~~~~~~~~~~^~~~~~
../main.c: In function 'main':
../main.c:130:6: error: unused variable 'res' [-Werror=unused-variable]
int res;
^~~
At top level:
../main.c:74:20: error: 'g_helloworld_thread' defined but not used [-Werror=unused-variable]
static OS_Thread_t g_helloworld_thread;
^~~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
make[1]: *** [../../../../gcc.mk:225: ../main.o] Error 1
make[1]: Leaving directory '/mnt/w/git/xr806_sdk/project/demo/sharedApp/gcc'
make: *** [../../../../project/project.mk:430: __all] Error 2
./shared/src/new_pins.c: In function 'PIN_SetPinRoleForPinIndex':
../shared/src/new_pins.c:977:8: error: variable 'channelValue' set but not used [-Werror=unused-but-set-variable]
int channelValue;
^~~~~~~~~~~~
cc1: all warnings being treated as errors
red/src/logging/logging.c
../shared/src/logging/logging.c:124:2: error: unknown type name 'SemaphoreHandle_t'
SemaphoreHandle_t mutex;
^~~~~~~~~~~~~~~~~
../shared/src/logging/logging.c: In function 'addLogAdv':
../shared/src/logging/logging.c:282:2: error: unknown type name 'BaseType_t'; did you mean 'logType_t'?
BaseType_t taken;
^~~~~~~~~~
logType_t
../shared/src/logging/logging.c:365:16: error: 'pdTRUE' undeclared (first use in this function)
if (taken == pdTRUE) {
^~~~~~
../shared/src/logging/logging.c:365:16: note: each undeclared identifier is reported only once for each function it appears in
../shared/src/logging/logging.c:413:23: error: 'portTICK_RATE_MS' undeclared (first use in this function)
timems = (((1000 / portTICK_RATE_MS) * len) / cps) + 2;
^~~~~~~~~~~~~~~~
../shared/src/logging/logging.c: In function 'getData':
../shared/src/logging/logging.c:423:2: error: unknown type name 'BaseType_t'; did you mean 'logType_t'?
BaseType_t taken;
^~~~~~~~~~
logType_t
../shared/src/logging/logging.c:448:15: error: 'pdTRUE' undeclared (first use in this function)
if (taken == pdTRUE) {
TL;DR: With 320 KB SRAM and a quoted breakthrough — "XR auth disabled" — this FAQ shows XR806/WXU thermostat modders how to open Tuya TRVs, dump firmware, build XR806 SDK demos, and understand why OpenBeken now boots and serves a web UI, while Wi‑Fi stability and TuyaMCU work still need fixes. [#21524634]
Why it matters: This thread turns a vague "WXU might be XR806" hunch into a repeatable path for teardown, flashing, SDK builds, and first-boot OpenBeken testing on real Tuya thermostats.
| Option | Result in thread | Main limitation |
|---|---|---|
| Stock Tuya WXU firmware on original device | Boots, exposes TuyaOS logs, Wi‑Fi + BLE seen | Closed firmware, no alternative control path proven |
| Dumped WXU image flashed onto XR809 | Did not boot | XR806/XR809 firmware mismatch |
| XR806 SDK demos | hello_demo and Wi‑Fi demos built and ran | menuconfig options needed |
| OpenBeken on XR806/WXU | Boots and later serves web UI | Wi‑Fi, config, MAC, and TuyaMCU issues remained during testing |
Key insight: The project stopped being blocked by flashing and basic booting. The real breakthroughs were proving that WXU is XR806-class hardware in practice, and then finding that the missing XR806 web GUI was caused by HTTP auth behavior, not a dead HTTP server.
make menuconfig, then make build or make image. This flow worked under WSL2 after GCC and ncurses were fixed. [#21432260]lwip/netif.h failure appeared while building at_demo, and enabling lwIP, WLAN, AP/STA options, and OTA made the build progress. The thread also called out CONFIG_WLAN_AP, CONFIG_WLAN_STA, CONFIG_WLAN_MONITOR, and PRJCONF_NET_EN as required for full WLAN command support. [#21430812]ERR_CONNECTION_TIMED_OUT or ERR_EMPTY_RESPONSE. That proved the failure was in request handling or response generation, not in AP mode or TCP accept itself. [#21524592]HTTP packet with auth fail messages. After changing the XR806 auth behavior, logs switched to XR auth disabled and postany: send ..., and the custom OpenBeken page finally loaded. That was the first confirmed custom HTTP page running on XR806 in the thread. [#21524634]upgrade command that could avoid manual boot-pin grounding. In practice, it was the main tool for dumping firmware, restoring backups, and verifying whether new XR806 builds booted. [#21430654]