Module: HLK-LD6004 (ADT6101P, 60 GHz)
Firmware reported by module: project 6, version 3.18.0
Interface: UART 115200 8N1, TinyFrame protocol (per "LD6004 Serial Communication Protocol")
Summary
On the UART/serial interface, the human-presence report 0x0A0A
(detection_state_area0..3) latches at "occupied" and never clears to all-zero
when the room becomes empty. The frame stream stays live (frame IDs keep
incrementing, header/data checksums valid), but area0 stays 1 indefinitely —
observed for 2.5+ minutes with the room verifiably empty.
Critically: the same module, at the same moment, reports presence correctly over
Bluetooth (BLE). Using your HLKRadarTool app over BLE, the occupancy flag clears to
"no person" within ~1 second of the person leaving, while the UART 0x0A0A flag on
the identical module is still reporting "occupied". So the internal presence
computation and the BLE report are correct — only the UART 0x0A0A path reports a
stale/latched value.
We confirmed this with simultaneous observation: person leaves the room → BLE app
shows "unoccupied" immediately → our UART reader still shows areaStates=[1,0,0,0],
present=1 continuously, frame IDs advancing the whole time.
What we already ruled out
- Not a checksum/framing error — header and data checksums validate; frame IDs advance.
- 0x0A04 target list is no help: it freezes on a static reflection at ~2.0 m
(identical x/y/z for minutes) whether the room is occupied or empty. - 0x0A08 point cloud is no help: it produces bursts of similar magnitude/density in
both occupied and empty rooms, so it cannot distinguish them. - We run in "inherit on-chip configuration" mode (we do not send config at boot);
the BLE app's view of the same chip is correct, so the on-chip config is fine.
Questions
- Is there a newer LD6004 firmware that fixes the UART 0x0A0A presence latch
(so UART presence matches the BLE presence)? If so, how do we obtain and flash it
(OTA over BLE, or over UART)? - Is there a command or register (e.g. via 0x0201 / 0x0202 / a reset/clear
command) that makes the UART 0x0A0A presence report track real occupancy the
way the BLE report does? - Is the UART 0x0A0A presence expected to behave identically to the BLE
presence? If they can differ, which one is authoritative?
Setup details (for reproduction)
- Mounting: side / wall mount (installation = side).
- Detection sensitivity: high. Hold/keep delay configured per protocol §6.
- We do not send periodic keep-alive or interference-clear during the issue.
- Read path: subscribe to the UART stream; parse 0x0A0A as 4×uint32 area flags.
Thank you — a firmware fix or a UART command that clears the latch would let us use
the serial interface; today we can only get correct presence over BLE.