It's not FW2, since firmware can't be switched without OTA.
Something else must be happening.
What is the log output when connecting power via type-c without VDD?
Czy wolisz polską wersję strony elektroda?
Nie, dziękuję Przekieruj mnie tam#[MODULE_BOOT-LEVEL_INFO]:IMG1 ENTER ROMSUB:2
[MODULE_BOOT-LEVEL_INFO]:OTA1 USE
[MODULE_BOOT-LEVEL_INFO]:IMG2 DATA[0xc014750:9328:0x83000]
[MODULE_BOOT-LEVEL_INFO]:IMG2 SIGN[RTKWin(8300c)]
[MODULE_BOOT-LEVEL_INFO]:IMG2 ENTRY[0x83000:0xc002835]
[MODULE_BOOT-LEVEL_INFO]:KM0 BOOT_IMG2 BOOT REASON: 0
Flash ID:20, 42, 16
read_mode:3
calibration_ok:[2:19:11]
FLASH CALIB[NEW OK]
RRAM: c0080 176B
[MODULE_BOOT-LEVEL_INFO]:IMG1 ENTER MSP:[1007fffc]
[MODULE_BOOT-LEVEL_INFO]:IMG2 DATA[0xe0990e0:102672:0x10005000]
[MODULE_BOOT-LEVEL_INFO]:IMG2 SIGN[RTKWin(1000500c)]
[MODULE_BOOT-LEVEL_INFO]:IMG2 ENTRY[0x10005000:0xe02b145]
[MODULE_BOOT-LEVEL_INFO]:Start NonSecure @ 0xe02b144 ...
[MODULE_BOOT-LEVEL_INFO]:KM4 BOOT REASON: 0
#interface 0 is initialized
interface 1 is initialized
#[MODULE_BOOT-LEVEL_INFO]:IMG1 ENTER ROMSUB:2
[MODULE_BOOT-LEVEL_INFO]:OTA1 USE
[MODULE_BOOT-LEVEL_INFO]:IMG2 DATA[0xc014750:9328:0x83000]
[MODULE_BOOT-LEVEL_INFO]:IMG2 SIGN[RTKWin(8300c)]
[MODULE_BOOT-LEVEL_INFO]:IMG2 ENTRY[0x83000:0xc002835]
[MODULE_BOOT-LEVEL_INFO]:KM0 BOOT_IMG2 BOOT REASON: 0
Flash ID:20, 42, 16
read_mode:3
calibration_ok:[2:19:11]
FLASH CALIB[NEW OK]
RRAM: c0080 176B
[MODULE_BOOT-LEVEL_INFO]:IMG1 ENTER MSP:[1007fffc]
[MODULE_BOOT-LEVEL_INFO]:IMG2 DATA[0xe0990e0:102672:0x10005000]
[MODULE_BOOT-LEVEL_INFO]:IMG2 SIGN[RTKWin(1000500c)]
[MODULE_BOOT-LEVEL_INFO]:IMG2 ENTRY[0x10005000:0xe02b145]
[MODULE_BOOT-LEVEL_INFO]:Start NonSecure @ 0xe02b144 ...
[MODULE_BOOT-LEVEL_INFO]:KM4 BOOT REASON: 0
#interface 0 is initialized
interface 1 is initialized
Initializing WIFI ...Entering initLog()...
Commands registered!
initLog() done!
Info:MAIN:Main_Init_Before_Delay
EasyFlash V4.1.0 is initialize success.
You can get the latest version on https://github.com/armink/EasyFlash .
WIFI initialized
Main_Init_Before_Delay doneheap 0x2c960
Main_Init_DeWarn:CFG:CFG_InitAndLoad: Correct config has been loaded with 7 changes count.
Error:CMD:no file early.bat err -2
Main_Init_Delay done
N_SetupPins pins have been set up.
Info:MAIN:Main_Init_Before_Delay done
Info:MAIN:Main_Init_Delay
Info:MAIN:Main_Init_Delay done
Info:MAIN:Main_Init_After_Delay
Info:MAIN:Using SSID [room]
Info:MAIN:Using Pass [xxxx]
Info:HTTP:TCP server listening
Info:MQTT:MQTT_RegisterCallback called for bT rtl8720dFF162F63/ subT rtl8720dFF162F63/+/set
Info:MQTT:MQTT_RegisterCallback called for bT obks/ subT obks/+/set
Info:MQTT:MQTT_RegisterCallback called for bT cmnd/rtl8720dFF162F63/ subT cmnd/rtl8720dFF162F63/+
Info:MQTT:MQTT_RegisterCallback called for bT cmnd/obks/ subT cmnd/obks/+
Info:MQTT:MQTT_RegisterCallback called for bT rtl8720dFF162F63/ subT rtl8720dFF162F63/+/get
Info:CMD:CMD_StartScript: started @startup at the beginning
Info:CMD:CMD_StartScript: started autoexec.bat at the beginning
Info:MAIN:Main_Init_After_Delay done
Info:MAIN:Started TuyaMCU.
Info:GEN:Channel 1 type changed to toggle
Info:GEN:Channel 111 type not set because string is not a known type
Info:GEN:Channel 40 type changed to toggle
Info:MAIN:Time 1, idle 0/s, free 163904, MQTT 0(0), bWifi 0, secondsWithNoPing -1, socks 2/16
#[MODULE_BOOT-LEVEL_INFO]:IMG1 ENTER ROMSUB:2
[MODULE_BOOT-LEVEL_INFO]:OTA1 USE
[MODULE_BOOT-LEVEL_INFO]:IMG2 DATA[0xc014750:9328:0x83000]
[MODULE_BOOT-LEVEL_INFO]:IMG2 SIGN[RTKWin(8300c)]
[MODULE_BOOT-LEVEL_INFO]:IMG2 ENTRY[0x83000:0xc002835]
[MODULE_BOOT-LEVEL_INFO]:KM0 BOOT_IMG2 BOOT REASON: 0
Flash ID:20, 42, 16
read_mode:3
calibration_ok:[2:19:11]
FLASH CALIB[NEW OK]
RRAM: c0080 176B
[MODULE_BOOT-LEVEL_INFO]:IMG1 ENTER MSP:[1007fffc]
[MODULE_BOOT-LEVEL_INFO]:IMG2 DATA[0xe0990e0:102672:0x10005000]
[MODULE_BOOT-LEVEL_INFO]:IMG2 SIGN[RTKWin(1000500c)]
[MODULE_BOOT-LEVEL_INFO]:IMG2 ENTRY[0x10005000:0xe02b145]
[MODULE_BOOT-LEVEL_INFO]:Start NonSecure @ 0xe02b144 ...
[MODULE_BOOT-LEVEL_INFO]:KM4 BOOT REASON: 0
#interface 0 is initialized
interface 1 is initialized
Initializing WIFI ...Entering initLog()...
Commands registered!
initLog() done!
Info:MAIN:Main_Init_Before_Delay
EasyFlash V4.1.0 is initialize success.
You can get the latest version on https://github.com/armink/EasyFlash .
WIFI initialized
Main_Init_Before_Delay doneheap 0x2c960
Main_Init_DeWarn:CFG:CFG_InitAndLoad: Correct config has been loaded with 7 changes count.
Error:CMD:no file early.bat err -2
Main_Init_Delay done
N_SetupPins pins have been set up.
Info:MAIN:Main_Init_Before_Delay done
Info:MAIN:Main_Init_Delay
Info:MAIN:Main_Init_Delay done
Info:MAIN:Main_Init_After_Delay
Info:MAIN:Using SSID [room]
Info:MAIN:Using Pass [xxx]
Info:HTTP:TCP server listening
Info:MQTT:MQTT_RegisterCallback called for bT rtl8720dFF162F63/ subT rtl8720dFF162F63/+/set
Info:MQTT:MQTT_RegisterCallback called for bT obks/ subT obks/+/set
Info:MQTT:MQTT_RegisterCallback called for bT cmnd/rtl8720dFF162F63/ subT cmnd/rtl8720dFF162F63/+
Info:MQTT:MQTT_RegisterCallback called for bT cmnd/obks/ subT cmnd/obks/+
Info:MQTT:MQTT_RegisterCallback called for bT rtl8720dFF162F63/ subT rtl8720dFF162F63/+/get
Info:CMD:CMD_StartScript: started @startup at the beginning
Info:CMD:CMD_StartScript: started autoexec.bat at the beginning
Info:MAIN:Main_Init_After_Delay done
Info:MAIN:Started TuyaMCU.
Info:GEN:Channel 1 type changed to toggle
Info:GEN:Channel 111 type not set because string is not a known type
Info:GEN:Channel 40 type changed to toggle
Info:MAIN:Time 1, idle 0/s, free 163904, MQTT 0(0), bWifi 0, secondsWithNoPing -1, socks 2/16
Info:MAIN:Time 2, idle 0/s, free 163904, MQTT 0(0), bWifi 0, secondsWithNoPing -1, socks 2/16
Info:MAIN:Time 3, idle 0/s, free 163904, MQTT 0(0), bWifi 0, secondsWithNoPing -1, socks 2/16
Info:MAIN:Time 4, idle 0/s, free 163904, MQTT 0(0), bWifi 0, secondsWithNoPing -1, socks 2/16
Info:MAIN:Time 5, idle 0/s, free 163904, MQTT 0(0), bWifi 0, secondsWithNoPing -1, socks 2/16
Info:MAIN:Registered for wifi changes
Info:MAIN:Connecting to SSID [room]
Info:MAIN:Time 6, idle 0/s, free 160640, MQTT 0(0), bWifi 0, secondsWithNoPing -1, socks 2/16
Info:MAIN:Boot complete time reached (5 seconds)
RTL8721D[Driver]: set ssid [room]
Info:MAIN:Main_OnWiFiStatusChange - WIFI_STA_CONNECTING - 1
Info:MAIN:Time 7, idle 0/s, free 160960, MQTT 0(0), bWifi 0, secondsWithNoPing -1, socks 2/16
RTL8721D[Driver]: rtw_set_wpa_ie[1182]: AuthKeyMgmt = 0x2
Info:MAIN:Time 8, idle 0/s, free 160800, MQTT 0(0), bWifi 0, secondsWithNoPing -1, socks 2/16
RTL8721D[Driver]: rtw_restruct_sec_ie[4294]: no pmksa cached
RTL8721D[Driver]: start auth to 6e:3b:6b:51:55:6c
RTL8721D[Driver]: auth alg = 2
Recv Auth with status_code=0
RTL8721D[Driver]:
OnAuthClient:algthm = 0, seq = 2, status = 0, sae_msg_len = 0
RTL8721D[Driver]: auth success, start assoc
RTL8721D[Driver]: association success(res=15)
wlan1: 1 DL RSVD page success! DLBcnCount:01, poll:00000001
RTL8721D[Driver]: ClientSendEAPOL[1728]: no use cache pmksa
RTL8721D[Driver]: set pairwise key to hw: alg:4(WEP40-1 WEP104-5 TKIP-2 AES-4)
RTL8721D[Driver]: set group key to hw: alg:4(WEP40-1 WEP104-5 TKIP-2 AES-4) keyid:2
Info:MAIN:Time 9, idle 0/s, free 155104, MQTT 0(0), bWifi 0, secondsWithNoPing -1, socks 2/16
[MODULE_BOOT-LEVEL_INFO]:IMG1 ENTER ROMSUB:2
[MODULE_BOOT-LEVEL_INFO]:OTA1 USE
[MODULE_BOOT-LEVEL_INFO]:IMG2 DATA[0xc014750:9328:0x83000]
[MODULE_BOOT-LEVEL_INFO]:IMG2 SIGN[RTKWin(8300c)]
[MODULE_BOOT-LEVEL_INFO]:IMG2 ENTRY[0x83000:0xc002835]
[MODULE_BOOT-LEVEL_INFO]:KM0 BOOT_IMG2 BOOT REASON: 0
Flash ID:20, 42, 16
read_mode:3
calibration_ok:[2:19:11]
FLASH CALIB[NEW OK]
RRAM: c0080 176B
[MODULE_BOOT-LEVEL_INFO]:IMG1 ENTER MSP:[1007fffc]
[MODULE_BOOT-LEVEL_INFO]:IMG2 DATA[0xe0990e0:102672:0x10005000]
[MODULE_BOOT-LEVEL_INFO]:IMG2 SIGN[RTKWin(1000500c)]
[MODULE_BOOT-LEVEL_INFO]:IMG2 ENTRY[0x10005000:0xe02b145]
[MODULE_BOOT-LEVEL_INFO]:Start NonSecure @ 0xe02b144 ...
[MODULE_BOOT-LEVEL_INFO]:KM4 BOOT REASON: 0
#interface 0 is initialized
interface 1 is initialized
Initializing WIFI ...Entering initLog()...
Commands registered!
initLog() done!
Info:MAIN:Main_Init_Before_Delay
#[MODULE_BOOT-LEVEL_INFO]:IMG1 ENTER ROMSUB:2
[MODULE_BOOT-LEVEL_INFO]:OTA1 USE
[MODULE_BOOT-LEVEL_INFO]:IMG2 DATA[0xc014750:9328:0x83000]
[MODULE_BOOT-LEVEL_INFO]:IMG2 SIGN[RTKWin(8300c)]
[MODULE_BOOT-LEVEL_INFO]:IMG2 ENTRY[0x83000:0xc002835]
[MODULE_BOOT-LEVEL_INFO]:KM0 BOOT_IMG2 BOOT REASON: 0
Flash ID:20, 42, 16
read_mode:3
calibration_ok:[2:19:11]
FLASH CALIB[NEW OK]
RRAM: c0080 176B
[MODULE_BOOT-LEVEL_INFO]:IMG1 ENTER MSP:[1007fffc]
[MODULE_BOOT-LEVEL_INFO]:IMG2 DATA[0xe0990e0:102672:0x10005000]
[MODULE_BOOT-LEVEL_INFO]:IMG2 SIGN[RTKWin(1000500c)]
[MODULE_BOOT-LEVEL_INFO]:IMG2 ENTRY[0x10005000:0xe02b145]
[MODULE_BOOT-LEVEL_INFO]:Start NonSecure @ 0xe02b144 ...
[MODULE_BOOT-LEVEL_INFO]:KM4 BOOT REASON: 0
#interface 0 is initialized
interface 1 is initialized
Initializing WIFI ...Entering initLog()...
Commands registered!
initLog() done!
Info:MAIN:Main_Init_Before_Delay
#[MODULE_BOOT-LEVEL_INFO]:IMG1 ENTER ROMSUB:2
[MODULE_BOOT-LEVEL_INFO]:OTA1 USE
[MODULE_BOOT-LEVEL_INFO]:IMG2 DATA[0xc014750:9328:0x83000]
[MODULE_BOOT-LEVEL_INFO]:IMG2 SIGN[RTKWin(8300c)]
[MODULE_BOOT-LEVEL_INFO]:IMG2 ENTRY[0x83000:0xc002835]
[MODULE_BOOT-LEVEL_INFO]:KM0 BOOT_IMG2 BOOT REASON: 0
Flash ID:20, 42, 16
read_mode:3
calibration_ok:[2:19:11]
FLASH CALIB[NEW OK]
RRAM: c0080 176B
[MODULE_BOOT-LEVEL_INFO]:IMG1 ENTER MSP:[1007fffc]
[MODULE_BOOT-LEVEL_INFO]:IMG2 DATA[0xe0990e0:102672:0x10005000]
[MODULE_BOOT-LEVEL_INFO]:IMG2 SIGN[RTKWin(1000500c)]
[MODULE_BOOT-LEVEL_INFO]:IMG2 ENTRY[0x10005000:0xe02b145]
[MODULE_BOOT-LEVEL_INFO]:Start NonSecure @ 0xe02b144 ...
[MODULE_BOOT-LEVEL_INFO]:KM4 BOOT REASON: 0
#interface 0 is initialized
interface 1 is initialized
Initializing WIFI ...Entering initLog()...
Commands registered!
initLog() done!
Info:MAIN:Main_Init_Before_Delay
EasyFlash V4.1.0 is initialize success.
You can get the latest version on https://github.com/armink/EasyFlash .
#[MODULE_BOOT-LEVEL_INFO]:IMG1 ENTER ROMSUB:2
[MODULE_BOOT-LEVEL_INFO]:OTA1 USE
[MODULE_BOOT-LEVEL_INFO]:IMG2 DATA[0xc014750:9328:0x83000]
[MODULE_BOOT-LEVEL_INFO]:IMG2 SIGN[RTKWin(8300c)]
[MODULE_BOOT-LEVEL_INFO]:IMG2 ENTRY[0x83000:0xc002835]
[MODULE_BOOT-LEVEL_INFO]:KM0 BOOT_IMG2 BOOT REASON: 0
Flash ID:20, 42, 16
read_mode:3
calibration_ok:[2:19:11]
FLASH CALIB[NEW OK]
RRAM: c0080 176B
[MODULE_BOOT-LEVEL_INFO]:IMG1 ENTER MSP:[1007fffc]
[MODULE_BOOT-LEVEL_INFO]:IMG2 DATA[0xe0990e0:102672:0x10005000]
[MODULE_BOOT-LEVEL_INFO]:IMG2 SIGN[RTKWin(1000500c)]
[MODULE_BOOT-LEVEL_INFO]:IMG2 ENTRY[0x10005000:0xe02b145]
[MODULE_BOOT-LEVEL_INFO]:Start NonSecure @ 0xe02b144 ...
[MODULE_BOOT-LEVEL_INFO]:KM4 BOOT REASON: 0
#interface 0 is initialized
interface 1 is initialized
Initializing WIFI ...Entering initLog()...
Commands registered!
initLog() done!
Info:MAIN:Main_Init_Before_Delay
EasyFlash V4.1.0 is initialize success.
You can get the latest version on https://github.com/armink/EasyFlash .
#[MODULE_BOOT-LEVEL_INFO]:IMG1 ENTER ROMSUB:2
[MODULE_BOOT-LEVEL_INFO]:OTA1 USE
[MODULE_BOOT-LEVEL_INFO]:IMG2 DATA[0xc014750:9328:0x83000]
[MODULE_BOOT-LEVEL_INFO]:IMG2 SIGN[RTKWin(8300c)]
[MODULE_BOOT-LEVEL_INFO]:IMG2 ENTRY[0x83000:0xc002835]
[MODULE_BOOT-LEVEL_INFO]:KM0 BOOT_IMG2 BOOT REASON: 0
Flash ID:20, 42, 16
read_mode:3
calibration_ok:[2:19:11]
FLASH CALIB[NEW OK]
RRAM: c0080 176B
[MODULE_BOOT-LEVEL_INFO]:IMG1 ENTER MSP:[1007fffc]
[MODULE_BOOT-LEVEL_INFO]:IMG2 DATA[0xe0990e0:102672:0x10005000]
[MODULE_BOOT-LEVEL_INFO]:IMG2 SIGN[RTKWin(1000500c)]
[MODULE_BOOT-LEVEL_INFO]:IMG2 ENTRY[0x10005000:0xe02b145]
[MODULE_BOOT-LEVEL_INFO]:Start NonSecure @ 0xe02b144 ...
[MODULE_BOOT-LEVEL_INFO]:KM4 BOOT REASON: 0
#interface 0 is initialized
interface 1 is initialized
Initializing WIFI ...Entering initLog()...
Commands registered!
initLog() done!
startDriver TuyaMCU
tuyaMcu_setBaudRate 115200
tuyaMcu_defWiFiState 4
setChannelType 1 Toggle
setChannelLabel 1 "l1"
linkTuyaMCUOutputToChannel 1 bool 1
setChannelLabel 2 "l2"
setChannelType 2 Toggle
linkTuyaMCUOutputToChannel 2 bool 2
setChannelLabel 3 "Temperature"
setChannelType 3 TextField
linkTuyaMCUOutputToChannel 24 val 3
Initializing WIFI ...
WIFI initialized
init_thread(58), Available heap 0x17f8b18:12:15 INFO tuya_iot_com_api.c:148: rst_reason is 0
OFFSET = 97d
GAIN_DIV = 2ad6
18:12:15 INFO tuya_module_demo.c:1227: thermostat_radiator:1.0.6
18:12:15 INFO tuya_module_demo.c:1228: firmware compiled at Jun 17 2023 12:06:23
18:12:15 INFO simple_flash.c:670: init succ
18:12:15 INFO mf_test.c:139: have actived over 15 min, not enter mf_init
18:12:15 INFO tuya_main.c:142: mf_init succ
18:12:15 INFO tuya_main.c:143: firmware compiled at Jun 17 2023 12:06:23
18:12:15 INFO tuya_module_demo.c:1056: product_info = {"p":"eaacu1av8nz9qdva","v":"2.0.11","c":1,"t":0}z
18:12:15 INFO tuya_module_demo.c:1307: pid = eaacu1av8nz9qdva, ver = 2.0.11, wifi_set_mode = 1
18:12:15 INFO tuya_iot_com_api.c:954: country_code =
18:12:15 INFO tuya_iot_com_api.c:958: MAC[1c-90-ff-16-2f-63]
wifi_set_lps_smartps:2
[tuya_module_demo.c:1157] sleep_time_ms = 1000
[tuya_module_demo.c:1169] wifi is not set for powersave, don't do everything
[tuya_module_demo.c:1157] sleep_time_ms = 30000
18:12:15 INFO tuya_iot.c:577: tuya_iot_init
18:12:15 ERROR tuya_endpoint.c:158: local_storage_get region fail:0xffffffff
18:12:15 INFO tuya_endpoint.c:234: endpoint_mgr.region:
18:12:15 INFO tuya_endpoint.c:235: endpoint_mgr.regist_key:
18:12:15 INFO tuya_endpoint.c:200: Environment:pro
18:12:15 INFO tuya_endpoint.c:210: Host region:AY
18:12:15 WARN tuya_iot.c:108: activate config not found:-1
02:00:00 INFO lpmgr.c:148: min_dtim = 0
product_id:total len = 16
65 61 61 63 75 31 61 76 38 6e 7a 39 71 64 76 61
uuid:total len = 16
66 38 64 63 65 63 32 38 38 38 36 64 61 63 39 64
auth_key:total len = 32
75 77 71 42 53 31 54 4d 41 53 37 57 73 42 6d 4a 42 6c 63 63 66 38 6e 63 54 61 4a 4a 66 45 69 5a
device id key ::total len = 16
74 9d f9 ea 60 3b 08 87 33 ec 29 f0 6e b1 c4 97
adv->data:total len = 28
02 01 06 03 02 01 a2 14 16 01 a2 00 65 61 61 63 75 31 61 76 38 6e 7a 39 71 64 76 61
scan_resp->data:total len = 30
03 09 54 59 19 ff d0 07 00 03 00 00 04 00 94 e9 6f 88 2b 9a 83 b8 b5 b7 82 2d 1b ba 4b 7b
groove6j wrote:I attached full dpid list in the first post
groove6j wrote:I don't know which is pin1, because the top of the chip is scraped.
groove6j wrote:
Tried multiple baud rates, can't get anything out of that UART, now even with stock firmware flashed. Any ideas?
divadiow wrote:Maybe Cmsemicon
p.kaczmarek2 wrote:Wrong pins?
p.kaczmarek2 wrote:try more reliable approach
groove6j wrote:That is BAT32G127GH 232101T.
TL;DR: This FAQ helps Home Assistant and OpenBeken users move an EZAIoT T9W thermostat to local control. The board has 4 MB flash, and one developer confirmed: "It can only be AmebaD chip" after a successful dump, flash, and boot workflow on the scraped-marking unit. [#21552848]
Why it matters: This thread shows that the thermostat is not a simple ESP-based Tuya device, so identifying the Realtek-family board and power behavior is the key to getting reliable local control.
| Option | Hardware path | What worked | Main limit |
|---|---|---|---|
| Stock Tuya cloud | Original firmware | Full thermostat operation | Cloud-only, slow/incomplete integration |
| LocalTuya | Existing HA integration | Did not control this model | Protocol version mismatch |
| OpenRTL8720D on AmebaD | Realtek-based board | Dumping, flashing, web UI, OTA in Chrome | MCU protocol still needed |
| Simple ESPHome replacement | Separate relay + room thermostat | Immediate local control fallback | Replaces original integrated unit |
Key insight: The older T9W board is an AmebaD-family Realtek design with external flash, but full local control still depends on understanding how the separate MCU and RF section communicate. Flashing OpenRTL8720D is only half the job. [#21552848]
rtltool.py at 1500000 baud with reads of 0x400000 and 0x800000 bytes. [#21442947]python3 rtltool.py -p COMx -b1500000 rf 0 0x400000 ff1.bin. 3. Repeat with 0x800000 to verify size and mirroring, then keep both dumps safe. This workflow was the thread’s confirmed pre-flash method. [#21442947]tmSensor. The maintainer explained that normal mains-powered designs keep the WiFi module powered directly, while v0 devices often gate power through a MOSFET and require a precise startup sequence. [#21556809]0x0024AD8 with movs r0,#0; bx lr, which turned the failure handler into an immediate return instead of a reboot loop. After that patch, the firmware advanced further, printed normal Tuya startup logs, and then appeared to wait for MCU communication. That shows the image itself was usable, but blocked by a platform-specific validation path. [#21847883]Get OTA header failed, then worked when the user retried from Chrome. After Chrome succeeded, the device reported the new OpenRTL environment correctly. That makes the safest practical conclusion simple: if OTA upload fails in Firefox on this device, retry the exact same image in Chrome before changing anything else. The thread did not provide a lower-level explanation beyond that verified workaround. [#21553289]tmSensor only when the MCU actually powers the WiFi module on demand. "tmSensor" is an OpenBeken/OpenRTL driver for battery-style Tuya devices that wake the WiFi SoC through switched power, then expect an immediate UART greeting sequence. The maintainer clarified that it fits devices where the MCU enables WiFi power through a MOSFET. If you are feeding the WiFi chip externally from a USB-UART adapter, tmSensor will not behave correctly because the expected wake-and-hello timing is lost. [#21556809]