Curiosity
Il beacon “ultra-sottile” col chip più piccolo della famiglia nRF54L: il nRF54L05. Stesso Cortex-M33 del nRF54L15 del Tag, ma meno memoria — il taglio economico. Tondo, con pulsante, accelerometro e (dal dump) driver SHT40. Serigrafia PCB: HOLYIOT-25054-V1.0, chip N54L05 QFAAB0 2524AA.
⭐ Al banco (17/07/2026): SWD aperto, firmware dumpato, board custom Zephyr creata, firmware Visla compilato e girante — ma la radio BLE non parte ancora (config da adattare, vedi sotto).
🛒 AliExpress — BLE 6.2 ultra-sottile con pulsante · €14.09
Specs
| SoC | Nordic nRF54L05 (N54L05 QFAAB0) — Cortex-M33 + TrustZone |
| Flash / RAM | 500 KB / 96 KB (L15: 1.5M/256K · 52810: 192K/24K) |
| BLE | 6.0 / 6.2 |
| Accelerometro | LIS2DH (dal dump) |
| Pulsante | ✅ (visibile sul PCB) |
| Alimentazione | CR2032 |
| Board Zephyr | ❌ nessuna ufficiale · SoC nrf54l05 sì supportato |
🔍 I pad SWD: trovati col MULTIMETRO (non serigrafati)
Su questo “ultra-sottile” i pad non hanno etichette. Trovati per misura:
| Pad | Come | Lettura |
|---|---|---|
| GND | continuità (🔔) col negativo della pila | ~0 Ω |
| VDD | DC volt, pila inserita, nero su GND | ~3 V |
| DIO / CLK | i due che restano | qualche kΩ verso VDD (pull-up interni) |
DIO/CLK non serve distinguerli: se non connette, si scambiano (non danneggia nulla).
device nRF54L05_M33 ← ⚠️ NON nRF54L15! Col device sbagliato: VTref buono ma "no Core found"
Found SW-DP with ID 0x6BA02477 ← Cortex-M33
AP[0]: Core found ← APPROTECT non attivo
💾 Backup — backup/holyiot_25054_nrf54l05_stock.bin
512 KB letti · 219 KB non vuoti (42%)
reset: SP=0x20007DF0 PC=0x00002DF5
stringhe: 'clock@10e000' (Zephyr) · 'LIS2DH_Device_ID' · 'SHT4x Serial Number'
⭐ Stesse stringhe di TUTTI gli altri (dal 52810 al L05) → conferma definitiva: Holyiot usa UN firmware unico per l’intera famiglia, coi driver di ogni sensore compilati dentro e attivati a runtime. Backup su GitHub.
⚙️ Firmware Visla — compila e gira, radio DA FINIRE
Zephyr non ha la board holyiot_25054, ma il SoC nrf54l05 è supportato. Ho creato una board custom clonando holyiot_25008 e cambiando SoC L15→L05:
# board custom in boards/holyiot/holyiot_25054/ (SoC nrf54l05)
west build -p -b holyiot_25054/nrf54l05/cpuapp visla-beacon
FLASH: 124.344 B / 500 KB = 24% RAM: 21.576 B / 96 KB = 22%
Esito: il firmware boota e gira senza errori — ma la radio resta muta.
Diagnosi al banco:
IPSR = 000 (NoException) ← NON è in un fault handler
PC cambia tra le letture ← il core AVANZA (non bloccato)
CycleCnt sale ← esegue codice normale
Non è un crash. Il firmware arriva in fondo, ma l’advertising non parte.
🔬 Prova decisiva: fallisce anche compilando per la board UFFICIALE Nordic nrf54l15dk/nrf54l05 → NON è la mia board clonata, è hardware-specifico di questo beacon.
🚧 Causa più probabile: l’HFXO (oscillatore ad alta frequenza) non parte — i condensatori di carico nel devicetree non corrispondono al cristallo montato da Holyiot. La CPU gira su un altro clock (quindi nessun fault), ma la radio senza HFXO non trasmette. Stessa classe del GND condiviso: codice giusto, accordatura RF della board sbagliata.
→ Serve il valore dei cap del cristallo (load-capacitance-femtofarad sul nodo hfxo) — bring-up RF della board, non un fix a tavolino.
📚 Ricerca: L15/L10/L05 differiscono solo per RAM e RRAM → il codice è portabile, il collo di bottiglia è la config RF della board.
🗂️ La famiglia beacon Holyiot — 5 modelli testati
| Modello | Chip | Flash/RAM | Pulsante | Buzzer | Firmware Visla |
|---|---|---|---|---|---|
| 25008 | nRF54L15 | 1.5M/256K | ✅ | ❌ | ✅ campanello |
| 25027 | nRF54L15 | 1.5M/256K | ❌ | ✅ P1.06 | ✅ trova-tag |
| 21011 | nRF52810 | 192K/24K | ✅ | ❌ | ✅ |
| 21014-B | nRF52810 | 192K/24K | ✅ | ❌ | ✅ (board Zephyr) |
| 25054 | nRF54L05 | 500K/96K | ✅ | ❌ | ⚠️ boota, HFXO da accordare |
Cinque modelli, tre-quattro chip diversi, un solo sorgente firmware. Di fabbrica: tutti cloni (UUID FDA50693-..., Major 10011).
📖 Conferma dalla doc UFFICIALE Holyiot (app NexBeacon Pro)
Le immagini ufficiali del venditore confermano tutto il reverse engineering di oggi:
- App =
NexBeacon Pro(è il nome che i beacon trasmettono → li identifica) - UUID
FDA50693-A4E2-4FB1-AFCF-C6EB07647825/ Major10011/ Minor19641sono i DEFAULT dell’app → ecco perché tutti i 5 beacon erano cloni - Fino a 8 “slot” advertising, ognuno con frame type, ADV interval (step 100ms), RSSI@1m, trigger + durata
- Frame type “Supported by Default”: Beacon, iBeacon, Eddystone (UID/URL/TLM/EID). “Requires hardware support”: Button, Temperature, T&H, Accelerometer, Barometer, RPM → conferma il “firmware unico, feature per-hardware”
- ⭐ Trigger
ButtonconDouble Press → broadcast 12s then stops: il firmware di serie sa già fare “premi → trasmetti”, via app. È esattamente ciò che facevamo noi in Zephyr — ma l’app non può ricevere (“trova il mio tag”), il nostro firmware sì. - Nell’advertising può mettere temp/umidità/accel X-Y-Z oltre a MAC+batteria.
→ Alternativa senza SWD: per molti casi d’uso l’app NexBeacon Pro basta (è in cinese, senza doc). Il nostro firmware serve per: UUID univoco anti-clone, ricezione (find-my-tag), e controllo totale.
🎯 Note per Visla
- ⚠️ Non è il chip del Tag: il Tag di produzione è il nRF54L15** (1.5M flash). Questo è il L05, il taglio piccolo — buono per un beacon, non per il tracker.
- 🔬 Da finire: accordare l’HFXO della board (cap del cristallo) → poi trasmette come gli altri quattro. Il firmware è già giusto (boota senza fault).
- ✅ Lezione riusabile: i pad SWD non documentati si trovano col multimetro (GND per continuità, VDD per tensione). Metodo verificato su questa board.
🔗 Risorse
- 💻 firmware Visla beacon · backup 25054
- 🛒 AliExpress
- Fratelli: 25008 · 25027 buzzer · 21011 · 21014-B