Curiosity
Il workhorse del bench Visla v2: u-blox M10 ultra-low-power (<25mW tracking, ~7.5mA @ 3.3V), connettore SMA per antenna esterna, Super-S technology per fix anche con antenne piccole/compresse. SparkFun breakout (GPS-18037) in bench: Qwiic + backup battery onboard per hot start 1s entro 5h dal power off. Per chi vuole controllo totale dell’antenna (vs SAM-M10Q tutto-in-uno).
Specs tecniche
| Parametro | Valore |
|---|
| Receiver | u-blox M10 standard precision GNSS — Professional grade |
| Doc reference | Datasheet UBX-20035208 R08 (30-Jan-2026) + Product Summary UBX-20017987 R19 |
| Type number | MAX-M10S-00B-01 (Mass Production) o MAX-M10S-00B1-01 (Initial Production newer) |
| FW version | ROM SPG 5.10 (NO Flash, no upgrade) |
| Grade | Standard · Professional · Automotive (AEC-Q104 subset) ⭐ |
| Quality | IATF 16949 certified production sites |
| Variant features | MAX-M10S = + LNA + SAW + TCXO (vs MAX-M10M-00B no LNA/SAW, MAX-M10N has Flash) |
| GNSS concurrent | GPS L1C/A + Galileo E1B/C + GLONASS L1OF + BeiDou B1I/B1C + QZSS L1C/A L1S L1Sb + SBAS L1 C/A |
| Sensitivity tracking | -167 dBm ⚡ |
| Sensitivity reacquisition | -160 dBm |
| Sensitivity cold start | -148 dBm |
| Sensitivity hot start | -159 dBm |
| Accuracy CEP horizontal | 1.5 m |
| TTFF cold | 28 s |
| TTFF aided (AssistNow) | 1 s |
| TTFF hot | 1 s |
| Update rate GPS+GAL default | 10 Hz |
| Update rate GPS+GAL HP | 20 Hz |
| Update rate GPS+GAL+BDS B1C default | 8 Hz |
| Update rate GPS+GAL+BDS B1C HP | 16 Hz |
| Update rate single GNSS HP | up to 25 Hz |
| Power tracking @ 3V (2 GNSS) | 51 mW (~17 mA) |
| Power tracking @ 3V (4 GNSS) | 68 mW (~23 mA) |
| Power tracking @ 1.8V (2 GNSS) | 24 mW (~13 mA) |
| Power tracking @ 1.8V (4 GNSS) | 31 mW |
| PSMCT @ 1.8V (2 GNSS) | ⚡ 14 mW (~8 mA) — Power Save Cyclic Tracking 1Hz |
| PSMCT description | Cyclic tracking riduce consumi ~50% vs continuous |
| Power supply VCC | 1.76 V - 3.6 V (compat MCU 1.8V) |
| Backup supply V_BCKP | 1.65 V - 3.6 V |
| EMC | 2014/53/EU RED + RoHS-3 |
| Operational limits | ≤4g dynamics · 80,000m altitude · 500 m/s velocity |
| Velocity accuracy | 0.05 m/s |
| Heading accuracy | 0.3 deg |
| Time pulse | 30 ns RMS / 60 ns 99% · 0.25 Hz - 10 MHz config |
| Interfaces | 1 UART + 1 DDC (I2C compliant) |
| Digital I/O | Configurable timepulse + 1 EXTINT input per wakeup |
| Raw data output | Code phase data (per RTK post-processing) |
| Protocols | NMEA 4.11 + UBX binary + RTCM 3.4 (per RTK input!) |
| Antenna | esterna via SMA (NO patch onboard come SAM-M10Q) — Active or Passive |
| Backup battery (SparkFun board) | MS621FE ricaricabile (trickle-charge): hot start 1s entro ~4h · ritenzione config + dati orbitali (BBR) fino a 2 settimane senza alimentazione |
| Tracking features | u-blox Super-S · Odometer (user profiles) · Data batching 10min RAM · Protection level 95% |
| Security signal | RF jamming detection + reporting · Spoofing detection + reporting |
| Security device | Receiver config lock by command |
| Secure interface | Signed UBX SHA-256 · JTAG disabled by default |
| Eval kit | EVK-M101 (u-blox official) + u-center 2 software |
| Services | AssistNow · CloudLocate |
| Package | 18-pin LCC (Leadless Chip Carrier) |
| Dimensions | 9.7 × 10.1 × 2.5 mm · 0.6 g · 500 pcs/reel |
| Operating temp | -40°C / +85°C |
| Storage temp | -40°C / +85°C |
| Pin-compatibility | drop-in MAX-M8 / MAX-M9 / MAX-F10S upgrade! |
| SparkFun board | GPS-18037 · $45.95 · 1.74” × 1.20” · 2× Qwiic + PTH |
🧪 Note dal bench Visla
- ✅ SparkFun GPS-18037 plug-and-play su ESP32-S3: cavo Qwiic, library SparkFun_u-blox_GNSS_v3 (usa UBX binary, no NMEA polling)
- ✅ Backup battery onboard: tieni RTC + orbital data vivi per 5h → wake successivi con hot start 1s, risparmi enormi su batteria sistema
- ✅ Super-S RF technology: lock affidabile in city canyon e sotto vegetazione anche con antenne SMA piccole (es. 3cm whip)
- ✅ I2C 0x42 software configurabile: per chain di 2 MAX-M10S su stesso bus usa Qwiic Mux (TCA9548A) oppure cambia indirizzo via UBX
- ✅ UBX-CFG-PMS: PowerSave 1Hz scende a ~6mA dai 7.5mA tracking standard
- ✅ Jumper MEAS per misura corrente: la board SparkFun ha un jumper
MEAS (chiuso di default) — tagliandolo e saldando ai PTH puoi inserire un amperometro inline e misurare il consumo reale del modulo senza banco esterno
- ✅ Pin EINT (wake da deep sleep): configurabile via u-center per svegliare il modulo dal backup o generare interrupt — utile per il duty-cycling del Tag (vedi RXM-PMREQ)
- ✅ Pin di controllo: PPS (1Hz su lock + LED), RST (reset pull-low), SAFE (safeboot per FW update, serigrafia sul retro), EINT (interrupt I/O)
- ⚠️ Antenna SMA esterna obbligatoria: vs SAM-M10Q (patch onboard) ti dà flessibilità ma serve gestire matching/cavo
- ⚠️ Antenna passiva sufficiente outdoor: antenna attiva (LNA esterno) solo per enclosure metallici o cavo >50cm
⚠️ Gotchas
- 3.3V only — NON 5V tolerant
- Senza backup battery, ogni wake costa 24s cold start (vs 1s con battery)
- I2C address 0x42 fisso senza Mux → max 1 modulo per bus a meno di sw-config
- Per 18Hz singola GNSS devi aumentare baud (default 9600 NMEA è troppo lento)
- Library SparkFun_u-blox_GNSS_v3 obbligatoria (v2 non supporta M10) — non confondere
- UART default SparkFun = 38400 baud (non 9600!); il default u-blox raw è 9600 — verifica il baud del tuo modulo prima di leggere NMEA (al bench Visla il nostro gira a 9600)
- I2C clock stretching: il MAX-M10S usa clock-stretching sul DDC → la libreria Qwiic Python su Raspberry Pi NON è supportata; anche level-shifter/bus deboli possono inchiodarsi (cfr. lockup I2C sul Thingy). Su UART nessun problema
- Jumper I2C pull-up (2.2kΩ) aperti di default: se il bus non ha pull-up altrove, vanno chiusi
📊 Consumi — ufficiali (chip) vs misurati Visla (modulo)
📄 Ufficiali u-blox (chip MAX-M10S, datasheet UBX-20035208, @3.0V, LNA low gain, segnale −130 dBm) — valori verificati Table 13/14, totale VCC+V_IO
| Stato (configurazione) | I_VCC | I_V_IO | Totale |
|---|
| Acquisizione (picco) | — | — | 25 mA |
| Acquisizione GPS-only | 6.5 | 2.2 | ~8.7 mA |
| Acquisizione GPS+GAL+BeiDou | 10.5 | 2.3 | ~12.8 mA |
| Tracking GPS-only | 6.0 | 2.2 | ~8.2 mA |
| Tracking GPS+GAL | 6.0 | 2.2 | ~8.2 mA |
| Tracking GPS+GAL+GLONASS | 7.0 | 2.3 | ~9.3 mA |
| Tracking GPS+GAL+BeiDou | 8.0 | 2.3 | ~10.3 mA |
| 💤 HW backup (solo V_BCKP) | — | — | 32 µA |
| 💤 HW standby (V_IO on) | — | — | 46 µA |
| 💤 SW standby (RXM-PMREQ) | — | — | TBD (datasheet) |
→ Il “<25mW” pubblicizzato = tracking GPS/GPS+GAL (8.2 mA × 3V = 24.6 mW). Confermato dal datasheet.
🧪 Misurati Visla (modulo SparkFun GPS-18037, DPS-150 @3.3V, 23/06/2026)
| Stato | Misurato |
|---|
| Tracking multi-GNSS | 17.9 mA |
| Tracking GPS-only | 14.4 mA |
| PSM cyclic | 11.5 mA |
| Backup (RXM-PMREQ) | ~8 mA |
⚠️ Chip vs modulo: ~2× di differenza. Il chip nudo fa ~8-10 mA (datasheet); il modulo SparkFun misurato fa 17.9 mA = chip + ~8-10 mA di overhead board (PWR LED sempre acceso + regolatore + LNA a gain pieno vs “low gain” del datasheet). 👉 Lezione per il PCB Visla: senza il PWR LED e con un regolatore efficiente, il GPS si avvicina agli ~8 mA del chip — non ai 17.9 del breakout. Anche il backup misurato (~8 mA) è quasi tutto overhead board (chip reale 32-46 µA). Dettaglio test →
📡 Set comandi completo (programmazione M10 SPG 5.00)
Il MAX-M10S si programma via 3 protocolli sulla stessa UART/I2C: NMEA (testo, output standard), UBX (binario, controllo completo), config interface (chiavi CFG via UBX-VALSET/VALGET). Totale: 79 UBX + 26 NMEA = 105 messaggi + ~28 gruppi config (centinaia di chiavi). Tutti elencati sotto con descrizione. Fonte: Interface Description M10-FW500 SPG 5.10 (verificato al bench Visla via pyubx2, 23/06/2026 — ACK/VALGET).
🛰️ UBX-NAV (0x01) — navigazione · 24 messaggi
| Msg | ID | Descrizione |
|---|
| NAV-PVT | 0x07 | Position + velocity + time (il principale, tutto in uno) |
| NAV-POSLLH | 0x02 | Posizione geodetica (lat/lon/alt) |
| NAV-POSECEF | 0x01 | Posizione in ECEF (X/Y/Z) |
| NAV-VELNED | 0x12 | Velocità in frame NED |
| NAV-VELECEF | 0x11 | Velocità in ECEF |
| NAV-STATUS | 0x03 | Stato navigazione (fix type, flags) |
| NAV-SAT | 0x35 | Info per satellite (CNR, elevazione, azimuth) |
| NAV-SIG | 0x43 | Info per segnale (qualità, correzioni) |
| NAV-DOP | 0x04 | Diluizione di precisione (HDOP/VDOP/PDOP) |
| NAV-COV | 0x36 | Matrici di covarianza (incertezza pos/vel) |
| NAV-ORB | 0x34 | Stato database orbite (effemeridi/almanacco/AOP) |
| NAV-SBAS | 0x32 | Stato correzioni SBAS |
| NAV-SLAS | 0x42 | Stato QZSS L1S SLAS |
| NAV-ODO | 0x09 | Odometro (distanza percorsa) |
| NAV-RESETODO | 0x10 | Reset odometro |
| NAV-CLOCK | 0x22 | Soluzione di clock del ricevitore |
| NAV-EOE | 0x61 | End of epoch (marca fine epoca) |
| NAV-TIMEGPS | 0x20 | Tempo GPS |
| NAV-TIMEGAL | 0x25 | Tempo Galileo |
| NAV-TIMEGLO | 0x23 | Tempo GLONASS |
| NAV-TIMEBDS | 0x24 | Tempo BeiDou |
| NAV-TIMEQZSS | 0x27 | Tempo QZSS |
| NAV-TIMEUTC | 0x21 | Tempo UTC |
| NAV-TIMELS | 0x26 | Info evento leap-second |
⚙️ UBX-CFG (0x06) — configurazione · 18 messaggi
| Msg | ID | Descrizione |
|---|
| CFG-VALSET | 0x8a | Scrive chiavi di config (RAM/BBR/Flash) |
| CFG-VALGET | 0x8b | Legge chiavi di config |
| CFG-VALDEL | 0x8c | Cancella chiavi di config |
| CFG-CFG | 0x09 | Clear / save / load configurazione |
| CFG-RST | 0x04 | Reset ricevitore + clear backup (cold/warm/hot) |
| CFG-PRT | 0x00 | Config porte I/O (UART/I2C/SPI, baud) |
| CFG-MSG | 0x01 | Rate di output per singolo messaggio |
| CFG-RATE | 0x08 | Rate di navigazione/misura (1Hz, 10Hz…) |
| CFG-NAV5 | 0x24 | Motore di navigazione (dynamic model, soglie) |
| CFG-NAVX5 | 0x23 | Motore di navigazione expert |
| CFG-GNSS | 0x3e | Selezione costellazioni (GPS/Gal/GLO/BDS) |
| CFG-NMEA | 0x17 | Configurazione estesa protocollo NMEA |
| CFG-INF | 0x02 | Quali messaggi INF emettere per protocollo |
| CFG-ANT | 0x13 | Controllo antenna (supervisor, alimentazione) |
| CFG-ITFM | 0x39 | Monitor jamming/interferenze |
| CFG-ODO | 0x1e | Odometro + filtro COG a bassa velocità |
| CFG-DAT | 0x06 | Datum geodetico (custom) |
| CFG-BATCH | 0x93 | Configurazione data batching |
📶 UBX-MGA (0x13) — A-GNSS / AssistNow · 9 messaggi
| Msg | ID | Descrizione |
|---|
| MGA-GPS | 0x00 | Assistenza GPS (effemeridi/almanacco/health/UTC/iono) |
| MGA-GAL | 0x02 | Assistenza Galileo |
| MGA-GLO | 0x06 | Assistenza GLONASS |
| MGA-BDS | 0x03 | Assistenza BeiDou |
| MGA-QZSS | 0x05 | Assistenza QZSS |
| MGA-ANO | 0x20 | AssistNow Offline (orbite a lunga validità) |
| MGA-INI | 0x40 | Aiding iniziale (posizione/tempo/clock/frequenza) |
| MGA-DBD | 0x80 | Dump/restore navigation database |
| MGA-ACK | 0x60 | Acknowledge dei messaggi di assistenza |
🔋 UBX-RXM (0x02) · 🩺 UBX-MON (0x0a) · 🔐 UBX-SEC (0x27)
| Msg | ID | Descrizione |
|---|
| RXM-PMREQ | 0x41 | Power management request (backup/standby → 46µA) |
| RXM-MEASX | 0x14 | Misure satellitari (locationing/RRLP) |
| RXM-SFRBX | 0x13 | Subframe di navigazione broadcast (raw) |
| RXM-RLM | 0x59 | Galileo SAR return-link message |
| MON-VER | 0x04 | Versione firmware/hardware |
| MON-HW | 0x09 | Stato hardware |
| MON-HW3 | 0x37 | Stato pin I/O |
| MON-RF | 0x38 | Info catena RF (jamming, AGC, noise) |
| MON-COMMS | 0x36 | Statistiche porte di comunicazione |
| MON-SPAN | 0x31 | Spettro del segnale (analisi banda) |
| MON-GNSS | 0x28 | Selezione GNSS major attiva |
| MON-RXR | 0x21 | Stato ricevitore (sveglio/dorme) |
| MON-PATCH | 0x27 | Patch firmware installate |
| MON-BATCH | 0x32 | Stato buffer data batching |
| SEC-UNIQID | 0x03 | ID univoco del chip |
📋 UBX-LOG (0x21) · UBX-INF (0x04) · UBX-ACK (0x05) · UBX-TIM (0x0d) · UBX-UPD (0x09)
| Msg | ID | Descrizione |
|---|
| LOG-BATCH | 0x11 | Dati batched (posizioni registrate) |
| LOG-RETRIEVEBATCH | 0x10 | Richiede i dati batched |
| INF-DEBUG/ERROR/NOTICE/TEST/WARNING | 0x04/00/02/03/01 | Output informativo ASCII (5 livelli) |
| ACK-ACK / ACK-NAK | 0x01 / 0x00 | Conferma / rifiuto di un comando |
| TIM-TM2 | 0x03 | Time mark (timestamp evento esterno) |
| TIM-TP | 0x01 | Time pulse time data |
| TIM-VRFY | 0x06 | Verifica del tempo sorgente |
| UPD-SOS | 0x14 | Save-on-shutdown (backup stato in flash) |
📜 NMEA standard (21) + PUBX proprietari (5)
| Msg | Descrizione |
|---|
| GGA | Fix data (posizione, n. satelliti, HDOP, quota) — il più usato |
| RMC | Recommended Minimum (pos, velocità, data, status) |
| GLL | Lat/long + tempo + status |
| GNS | GNSS fix data (multi-costellazione) |
| GSA | DOP + satelliti attivi |
| GSV | Satelliti in vista (CNR per satellite) |
| VTG | Course over ground + velocità |
| ZDA | Data e ora |
| GST | Statistiche errore pseudorange |
| GRS | Residui di range |
| GBS | Satellite fault detection |
| GAQ/GBQ/GLQ/GNQ/GPQ/GQQ | Poll di un messaggio standard (6 query) |
| DTM | Datum reference |
| VLW | Distanza ground/water |
| TXT | Trasmissione testo |
| RLM | Return link message (Galileo SAR) |
| PUBX,00 (POSITION) | Posizione lat/long proprietaria |
| PUBX,03 (SVSTATUS) | Stato satelliti |
| PUBX,04 (TIME) | Ora del giorno + clock |
| PUBX,40 (RATE) | Set rate di output NMEA |
| PUBX,41 (CONFIG) | Set protocolli e baud rate |
🗂️ Gruppi config (CFG-* via VALSET, ~30 → centinaia di chiavi)
CFG-PM (power), CFG-SIGNAL, CFG-RATE, CFG-NAVSPG, CFG-MSGOUT, CFG-ANA (AssistNow), CFG-MOT, CFG-ITFM, CFG-ODO, CFG-SBAS, CFG-QZSS, CFG-TP, CFG-SEC, CFG-TXREADY, CFG-NMEA, CFG-INFMSG, CFG-RINV, CFG-HW, CFG-BATCH, CFG-UART1/I2C/SPI (+INPROT/OUTPROT).
🆚 I 3 GPS u-blox a confronto (bench Visla)
| MAX-M10S | SAM-M10Q | DAN-F10N |
|---|
| Chip / bande | M10 · L1 | M10 · L1 | F10 · L1+L5 dual-band |
| Accuracy CEP | ~1.5 m | ~1.5 m | ~1 m (multipath dual-band) |
| Antenna | esterna (SMA) | patch 15×15 integrata | patch 20×20 integrata + switch esterna |
| Design RF | serve | zero | zero |
| Posiz. antenna | libera (lontano dal modem) | fissa | fissa o esterna |
| Tracking (VCC datasheet) | ~7.5 mA (GPS) | 10 mA (multi) | 21 mA (multi) |
| Backup | ~32–46 µA | ~32–46 µA | ~31 µA |
| Firmware | M10 SPG 5.10 (ROM) | M10 SPG 5.10 (ROM) | F10 SPG 6.00 (flash, aggiornabile) |
| Comandi | M10 (identici a SAM) | M10 (identici a MAX) | F10: +NavIC, +NAV-PL, +SEC-SIG, no CFG legacy |
| NavIC | ❌ | ❌ | ✅ |
| Prezzo breakout | ~$46 | ~$51 | ~$70 |
| Quando | low-power + antenna remota | proto rapido / zero RF | accuracy urbano / premium |
Verdetto Tag Visla: MAX-M10S = il low-power con antenna piazzabile lontano dal modem LTE (~7.5mA, ma progetti tu l’RF). SAM-M10Q = proto rapido (antenna fissa, ~10mA). DAN-F10N = max precisione dual-band ma 2× consumo (21mA) + costo + GPS L5 ancora pre-operational → overkill per Tag base, senso per fleet/automotive.
🔗 Risorse