sitio: reorganización por tareas, búsqueda, estilo Helgen, todo en español, procedimientos KISS

This commit is contained in:
Leopoldo Rodríguez 2026-09-28 20:05:32 -06:00
parent 6c1a4c2a8d
commit 7b8fb4f9d1
77 changed files with 7692 additions and 3389 deletions

View File

@ -54,7 +54,7 @@ El backend la deduce sola de `ACTAS_DIR`; si prefieres fijarla, agrega a
Environment=ADJUNTOS_DIR=/srv/projects/drogheda/adjuntos
Environment=ADJUNTO_MAX_MB=8
Environment=ARCHIVO_MAX_MB=20
Environment=ACTAS_REPETIBLES=diagnostico-campo,diagnostico-banco,instalacion-campo,reflasheo,dano,envio,recepcion,prueba-bateria-modem
Environment=ACTAS_REPETIBLES=diagnostico-campo,diagnostico-banco,instalacion-campo,reflasheo,dano,envio,recepcion,prueba-bateria-modem,prueba-ethernet-serie
```
### 4 · nginx — subida de fotos e identidad del técnico (una sola vez)

View File

@ -10,7 +10,7 @@ Environment=ACTAS_DIR=/srv/projects/drogheda/actas
Environment=ADJUNTOS_DIR=/srv/projects/drogheda/adjuntos
Environment=ADJUNTO_MAX_MB=8
Environment=ARCHIVO_MAX_MB=20
Environment=ACTAS_REPETIBLES=diagnostico-campo,diagnostico-banco,instalacion-campo,reflasheo,dano,envio,recepcion,prueba-bateria-modem
Environment=ACTAS_REPETIBLES=diagnostico-campo,diagnostico-banco,instalacion-campo,reflasheo,dano,envio,recepcion,prueba-bateria-modem,prueba-ethernet-serie
Environment=ACTAS_ADMINS=leo
Environment=HTPASSWD_FILE=/etc/nginx/hbox-docs.htpasswd
Environment=PASS_MIN=8

View File

@ -36,7 +36,7 @@ ADMINS = {u.strip().lower() for u in os.environ.get("ACTAS_ADMINS", "leo").split
TIPOS_UNICOS = {"ensamble"} # tipos en los que un componente solo puede usarse en un acta real
# Tipos REPETIBLES: una misma serie puede tener varias actas (cada visita a campo es un evento nuevo).
TIPOS_REPETIBLES = {t.strip() for t in os.environ.get(
"ACTAS_REPETIBLES", "diagnostico-campo,diagnostico-banco,instalacion-campo,reflasheo,dano,envio,recepcion,prueba-bateria-modem").split(",") if t.strip()}
"ACTAS_REPETIBLES", "diagnostico-campo,diagnostico-banco,instalacion-campo,reflasheo,dano,envio,recepcion,prueba-bateria-modem,prueba-ethernet-serie").split(",") if t.strip()}
# Subida de fotos
MAX_MB = int(os.environ.get("ADJUNTO_MAX_MB", "8"))

View File

@ -1,8 +1,14 @@
# Actas y control de calidad
---
title: "Actas — índice y uso"
tags: [project-drogheda, hbox, actas, formularios, qc]
date: 2026-09-19
project: Project Drogheda
author: Helgen Technologies
---
Formularios que el técnico llena **en pantalla mientras prueba o ensambla**. Al terminar se
firman (nombre + conformidad) y se envían al servidor, donde quedan registrados por número de
serie. Un acta real se envía **una sola vez** por serie; para rehacerla, Leo la borra.
# Actas — índice y uso
Formularios que se llenan en pantalla mientras pruebas o ensamblas. Al terminar se firman y se envían al servidor, donde quedan por número de serie. Un acta se envía una sola vez por serie; para rehacerla, Leo la borra. Excepción: diagnóstico en campo (una por visita).
## Flujo de una unidad HBOX v5
@ -14,62 +20,38 @@ ArduSimple ARD-NNN ────► Acta módulo ArduSimple ─┤
└──────────────────────────────────────────────────┘
```
El acta de ensamble **no deja seleccionar** un módulo que no esté aprobado, que no tenga su
integración, o que ya esté montado en otra unidad. El número de la unidad se calcula solo a partir
de los tres módulos elegidos: `HBOX5-E07-A010-R0006` = EinarBoard V5-07 + ArduSimple ARD-010 + módem 4G RTK-0006.
El acta de ensamble no deja elegir un módulo sin aprobar, sin integración o ya montado en otra unidad. El número de unidad se calcula de los tres módulos: `HBOX5-E07-A010-R0006` = V5-07 + ARD-010 + RTK-0006.
## Formularios
## Producción y taller
**[▶ Acta de prueba — EinarBoard V5](../formularios/v5.html)**
Lote de 15 tarjetas (V5-01 … V5-15; 30 seleccionables). Procedimiento: [Prueba y flasheo v5](../procedimientos/v5-prueba-y-flasheo.md).
**[▶ Acta de módulo — simpleRTK2B Pro / ArduSimple (ARD-001 … ARD-030)](../formularios/ardusimple.html)**
Un acta por receptor: visual, fix GNSS, configuración Helgen. Procedimiento: [Módulos e integración §2](../procedimientos/v5-modulos-integracion.md).
**[▶ Acta de módem — 4G NTRIP Master (RTK-0001 … RTK-0030)](../formularios/modem4g.html)**
Un acta por módem: IMEI/ICCID, configuración, registro en red. Procedimiento: [Módulos e integración §3](../procedimientos/v5-modulos-integracion.md).
**[▶ Acta de integración — ArduSimple + 4G](../formularios/integracion.html)**
La pareja que irá junta: RTK FIX con correcciones NTRIP. Procedimiento: [Módulos e integración §4](../procedimientos/v5-modulos-integracion.md).
**[▶ Acta de ensamble — unidad HBOX v5](../formularios/ensamble.html)**
Selecciona los tres módulos aprobados → número de unidad automático → armado, energizado desde 24 V,
batería y respaldo. Procedimiento: [Ensamble de la unidad](../procedimientos/v5-ensamble.md).
**[▶ Acta de prueba — EinarBoard V4 con firmware 0.5.6](../formularios/v4.html)**
Una por tarjeta (V4-01 … V4-15): puente de reset del módem, flasheo y pruebas con 24 V, en batería y regreso de 24 V.
Procedimiento: [V4 — preparación y prueba con 0.5.6](../procedimientos/v4-prueba-fw-0.5.6.md).
---
| Acta | Qué registra | Procedimiento |
|---|---|---|
| [Tarjeta V5](../formularios/v5.html) | Lote de 15 (V5-01 … V5-15; 30 seleccionables) | [Prueba y flasheo](../procedimientos/v5-prueba-y-flasheo.md) |
| [ArduSimple](../formularios/ardusimple.html) | Un receptor ARD-001 … ARD-030: visual, fix, configuración | [Módulos §1](../procedimientos/v5-modulos-integracion.md#1-simplertk2b-pro-acta-ardusimple) |
| [Módem 4G](../formularios/modem4g.html) | Un módem RTK-0001 … RTK-0030: IMEI/ICCID, configuración, registro | [Módulos §2](../procedimientos/v5-modulos-integracion.md#2-modem-4g-ntrip-master-acta-modem-4g) |
| [Integración](../formularios/integracion.html) | La pareja: RTK FIX con NTRIP | [Módulos §3](../procedimientos/v5-modulos-integracion.md#3-integracion-ardusimple-4g-acta-de-integracion) |
| [Ensamble](../formularios/ensamble.html) | Tres módulos aprobados → número de unidad → armado, 24 V, batería y respaldo | [Ensamble](../procedimientos/v5-ensamble.md) |
| [Prueba V4](../formularios/v4.html) | V4-01 … V4-15: puente de reset del módem, flasheo, 24 V, batería y regreso de 24 V | [Preparación y prueba V4](../procedimientos/v4-prueba-fw-0.5.6.md) |
| [Módem en batería](../formularios/prueba-bateria.html) | Cargador, aceptación y corridas en batería | [Módem 4G en batería](../procedimientos/prueba-bateria-modem.md) |
| [Ethernet y serie](../formularios/ethernet-serie.html) | W5500, P15, P16 | [Ethernet y puertos serie](../procedimientos/v5-prueba-ethernet-serie.md) |
| [Reflasheo](../formularios/reflasheo.html) | Firmware antes/después, capturas | [Reflasheo](../procedimientos/reflasheo-unidades.md) |
| [Diagnóstico en banco](../formularios/banco.html) | Inspección, continuidad, rieles, capturas | [Diagnóstico en banco](../procedimientos/diagnostico-banco.md) |
## Campo
**[▶ Acta de diagnóstico en campo — unidades instaladas](../formularios/diagnostico.html)**
Para revisar una unidad que falló en la máquina. A diferencia de las actas de banco, **esta se
puede llenar varias veces por unidad**: cada visita es un registro nuevo y el técnico ve las
visitas anteriores antes de empezar. Permite **subir fotos** desde el teléfono.
Procedimiento: [Diagnóstico en campo](../diagnostico/procedimiento-diagnostico-campo.md) ·
Seguimiento: [Tablero de campo](../diagnostico/tablero-campo.html).
| Acta | Qué registra | Procedimiento |
|---|---|---|
| [Diagnóstico en campo](../formularios/diagnostico.html) | Una por visita; muestra las visitas anteriores y admite fotos desde el teléfono | [Diagnóstico en campo](../diagnostico/procedimiento-diagnostico-campo.md) · [Tablero de campo](../diagnostico/tablero-campo.html) |
| [Envío](../formularios/envio.html) · [Recepción](../formularios/recepcion.html) | El tramo entre el banco y el puerto | [Ciclo de vida](../procedimientos/ciclo-de-vida.md) |
| [Daño o incidente](../formularios/dano.html) | Cualquier serie; la marca en todos los formularios. «Reparada» la levanta, «Baja» la hace permanente | [Ciclo de vida](../procedimientos/ciclo-de-vida.md#dano-o-incidente) |
**[▶ Acta de daño o incidente](../formularios/dano.html)** — cualquier serie. **Marca** la serie: todos los
formularios avisan al elegirla. Se levanta con «Reparada»; «Baja» la hace permanente.
## Cómo se llenan
**[▶ Acta de envío](../formularios/envio.html)** · **[▶ Acta de recepción](../formularios/recepcion.html)** — el
tramo entre el banco y el puerto. Mapa completo: [Ciclo de vida](../procedimientos/ciclo-de-vida.md).
1. Abre el formulario y elige la serie (o los módulos, en integración y ensamble).
2. Llena cada sección conforme avanzas. Se guarda solo en el navegador: al reabrir con la misma serie recuperas lo escrito.
3. Marca el resultado (Aprobada / Falla), escribe tu nombre y confirma que seguiste el procedimiento.
4. Pulsa Enviar acta firmada. Queda en el servidor y en el [tablero](../tablero.html).
## Cómo se usan
La serie PRUEBA sirve para practicar: no cuenta y se puede reenviar.
1. Abre el formulario y **elige el número de serie** (o los módulos, en integración y ensamble).
2. Ve llenando cada sección conforme avanzas. El formulario **se guarda solo** en el navegador: si se
cierra, al reabrir con la misma serie recuperas lo escrito.
3. Al final marca el **resultado** (Aprobada / Falla), escribe tu **nombre** y confirma que seguiste
el procedimiento.
4. Pulsa **Enviar acta firmada**. Queda registrada en el servidor y aparece en el
[tablero de estado](../tablero.html).
La serie **PRUEBA** sirve para practicar: no cuenta y se puede reenviar.
!!! note "Para ingeniería"
Los envíos se guardan en el servidor por tipo y número de serie (`…/actas/<tipo>/`). Las actas de
integración y ensamble llevan `componentes` con los módulos elegidos. Listado completo en
[`/api/actas`](/api/actas){:target="_blank"}.
Para ingeniería: los envíos se guardan por tipo y serie (`…/actas/<tipo>/`); integración y ensamble llevan `componentes` con los módulos elegidos. Listado en [`/api/actas`](/api/actas){:target="_blank"}.

20
docs/campo/index.md Normal file
View File

@ -0,0 +1,20 @@
---
title: "Campo"
---
# Campo
Unidad en la máquina, envíos y recepciones. Regla: no reinicies ni desconectes nada antes de capturar la evidencia ([por qué](../diagnostico/procedimiento-diagnostico-campo.md)).
| Situación | Procedimiento | Acta |
|---|---|---|
| Falla en la máquina | [Diagnóstico en campo](../diagnostico/procedimiento-diagnostico-campo.md) | [Diagnóstico en campo](../formularios/diagnostico.html) |
| Instalar en el puerto | [Checklist de puesta en marcha](../procedimientos/v5-checklist-puesta-en-marcha.md) | Impreso, al expediente |
| Sale una unidad | [Ciclo de vida §6](../procedimientos/ciclo-de-vida.md#6-envio) | [Envío](../formularios/envio.html) |
| Llega una unidad | [Ciclo de vida §7](../procedimientos/ciclo-de-vida.md#7-recepcion-e-inspeccion) | [Recepción e inspección](../formularios/recepcion.html) |
| Algo se dañó | [Ciclo de vida: daño](../procedimientos/ciclo-de-vida.md#dano-o-incidente) | [Daño o incidente](../formularios/dano.html) |
- [Expediente de una unidad](../unidad.html): cada acta, foto y log por serie.
- [Tablero de campo](../diagnostico/tablero-campo.html): todas las visitas.
- [Índice de actas](../actas/index.md)
- Para el cliente: [manual del cliente](../manuales/manual-cliente.md) · [PDF](../manuales/Drogheda-Manual-Instalacion-Operacion_v2.0.pdf)

View File

@ -42,7 +42,7 @@
<label for="nueva">Contraseña nueva</label>
<input type="password" id="nueva" autocomplete="new-password">
<div class="fuerza"><i id="barra"></i></div>
<div class="pista" id="pista">Mientras más larga, mejor. Una frase con espacios funciona y se recuerda.</div>
<div class="pista" id="pista">Mientras más larga, mejor; una frase con espacios sirve.</div>
</div>
<div class="campo">
<label for="confirma">Repite la contraseña nueva</label>
@ -72,7 +72,6 @@
<h2>Si olvidaste tu contraseña</h2>
<p class="sub" style="margin:0">
No hay recuperación por correo: pídele a Leo que te la restablezca desde esta misma página.
Es cosa de un minuto.
</p>
</section>
</div>

View File

@ -1,10 +1,18 @@
---
title: "README del firmware hbox_v5_bringup (inglés)"
tags: [project-drogheda, firmware, hbox_v5_bringup, readme, en]
date: 2026-09-27
---
# hbox_v5_bringup — EinarBoard v5 first-flash bring-up firmware
> **Nota (sitio de documentación):** este es el README del código fuente del firmware `hbox_v5_bringup`, en inglés, para quien compila. La tabla de binarios vigentes y sus SHA-256 es la de [Descargas](index.md); la tabla «Release» de abajo se quedó en 0.5.1 y solo documenta cómo se nombran los archivos.
Bench-proves a newly assembled v5 board over USB-C **J11** only. Never powers the RTK stack.
0.5.0: Modo B in-band $PHLG (server Salud column) on top of the 0.4.0 field-minimum: AUTO by default (stack self-powers with 5 V on P2, kept on through 5 V loss), watchdog, fan, link recovery, LEDs; charge OFF. Bench mode: `P`+`Y` stack ON/OFF, `n` NMEA monitor (fix 4 = RTK FIX). Console (0.2.1): CR+LF lines, `EVT` on every state change, named `STAT` every 5 s, `$PHLG` every 10 s in the fleet v3.x layout (server-parseable).
Checks: HSE 25 MHz + USB CDC · LSE Y4 · I2C: PCF8574 0x20 / SHT40 0x44 / TMP102 0x48 /
0.5.0: Modo B in-band $PHLG (server Salud column) on top of the 0.4.0 field-minimum: AUTO by default (stack self-powers with 5 V on P2, kept on through 5 V loss), watchdog, fan, link recovery, LEDs; charge OFF. Bench mode: `P`+`Y` stack ON/OFF, `n` NMEA monitor (fix 4 = RTK FIX). Console (0.2.1): CR+LF lines, `EVT` on every state change, named `STAT` every 5 s, `$PHLG` every 10 s in the fleet v3.x layout (server-parseable).
Checks: HSE 25 MHz + USB CDC · LSE Y4 · I2C: PCF8574 0x20 / SHT40 0x44 / TMP102 0x48 /
SC16IS752 0x4D · gauge + RGB LED walk · ADC · digital inputs. Prints PASS/FAIL, then a
`STAT` line every 2 s. Console commands: `r` rerun · `g` gauge walk · `i` I2C scan · `h` help.
`STAT` line every 2 s. Console commands: `r` rerun · `g` gauge walk · `i` I2C scan · `h` help.
Procedure for technicians (ES): `06-Testing-Validation/2026-09-15_Drogheda_EinarBoard-v5_Procedimiento-Prueba-y-Flasheo_ES_v1.0.md`
@ -17,10 +25,9 @@ arduino-cli compile \
--output-dir out hbox_v5_bringup
```
`rtlib=nanofp` is required — the default newlib-nano build prints nothing for `%f`, so every voltage
and temperature line would be blank. `SystemClock_Config()` is overridden in the sketch (HSE 25 MHz → 96 MHz, USB 48 MHz) because the
and temperature line would be blank. `SystemClock_Config()` is overridden in the sketch (HSE 25 MHz → 96 MHz, USB 48 MHz) because the
generic variant defaults to HSI, which is not accurate enough for USB.
### EinarBoard v4 (socketed Blackpill) — same sketch, `board_v4.h`
The v4 board is this design on a Blackpill (verified pad-by-pad against `hbox-watchdog-v4.kicad_pcb`); only
`ETH_INT` moves to **PB2**. Build with the Blackpill variant and the board switch:
@ -43,7 +50,7 @@ arduino-cli compile --fqbn "$FQBN_V5" \
--output-dir out-v5-eth hbox_v5_bringup
# V4: --fqbn "$FQBN_V4" --build-property "build.extra_flags=-DHBOX_BOARD_V4 -DENABLE_ETH=1" --output-dir out-v4-eth
```
Sin PoE (J10 solo datos). Con 5 V presente el W5500 sale del reset, pide DHCP o cae a `192.168.7.2/24` y abre un
Sin PoE (J10 solo datos). Con 5 V presente el W5500 sale del reset, pide DHCP o cae a `192.168.7.2/24` y abre un
TCP a `192.168.7.1:5010` (portátil con `nc -lk 5010`), por donde salen en espejo NMEA + `$PHLG` + `$PHEV` + `$PHID`.
Cable directo al portátil (Auto-MDIX) o cualquier switch. Overrides: `-DETH_IP=a,b,c,d -DETH_SERVER_IP=a,b,c,d
-DETH_SERVER_PORT=n -DETH_DHCP=0`. Tecla `E` = on/off. Ver CHANGELOG 0.6.0-eth.
@ -58,7 +65,7 @@ U13 pin 12 (P7) ──|<── SW4G1 pad 1 (MODEM_RST) diodo Schottky B
cátodo ánodo
```
- Verificar con `M` en consola (etapa ON): `SW4G1` pad 1 debe caer a < 0.4 V durante 0.5 s y el módem reinicia
- Verificar con `M` en consola (etapa ON): `SW4G1` pad 1 debe caer a < 0.4 V durante 0.5 s y el módem reinicia
(LEDs del módulo apagan y vuelven). `STAT` cuenta los pulsos en `mrst=`.
- Sin el puente, el firmware es idéntico salvo que el pulso no llega a nada.
@ -76,22 +83,22 @@ or STM32CubeProgrammer → USB → Connect → Download `release/hbox-v5-bringup
| `release/superseded/hbox-v5-bringup_0.5.0.bin` | 0.5.0 — superseded (24-field $PHLG, no $PHEV) | `98656ddcc4e209e2` | 77 312 B |
| `release/superseded/hbox-v5-bringup_0.4.0.bin` | 0.4.0 — superseded (no in-band telemetry) | `a8de74b3d7768e9d` | 75 524 B |
| `release/superseded/hbox-v5-bringup_0.3.0.bin` | 0.3.0 — superseded (AUTO opt-in, no watchdog/fan/recovery) | `d4608c739cef2661` | 72 860 B |
| `release/superseded/hbox-v5-bringup_0.2.1.bin` | 0.2.1 — superseded (no AUTO mode; stack OFF on 5 V loss) | `78b34f4603550c05` | 70 084 B |
| `release/superseded/hbox-v5-bringup_0.2.1.bin` | 0.2.1 — superseded (no AUTO mode; stack OFF on 5 V loss) | `78b34f4603550c05` | 70 084 B |
| `release/superseded/hbox-v5-bringup_0.2.0.bin` | 0.2.0 — superseded (LF-only console, no EVT/$PHLG) | `8491625d494f9ee1` | 64 780 B |
| `release/hbox-v5-bringup_0.1.1.bin` | 0.1.1 — superseded (no bench mode) | `91ca6f87a86686be` | 55 104 B |
| `release/hbox-v5-bringup_0.1.0.bin` | 0.1.0 — SUPERSEDED (no float printf, ETH_CS driven) | `1a9a77ae479c8f86` | 41 040 B |
## Changelog
- **0.5.1** (2026-09-18) — **diagnostics in band.** `$PHLG` gains 5 append-only fields (25..29): `up_s`, `pwr` (VEH|BATT),
`v5min`, `vbat_min` (lowest single-shot ADC reading in the 30 s window, sampled every loop iteration — catches the ms-scale
`v5min`, `vbat_min` (lowest single-shot ADC reading in the 30 s window, sampled every loop iteration — catches the ms-scale
LTE-burst sags that trip the LTC4040 PFI), `bkp_n`. New `$PHEV,<up_s>,<CODE>,<detail>*CS` event sentence on every state change
(STACK_ON/OFF+reason, BACKUP_START/END, RECOVERY, LIMP/LIMP_END, TEMP_CUT/REARM, V5_LOW/LOST/OK, IGN_ON/OFF, SLEEP/SLEEP_END,
MODOB_ON/OFF, BOOT), queued (6 deep) and sent in idle gaps ahead of `$PHLG`; STACK_OFF/MODOB_OFF are flushed synchronously
(≤ 120 ms) before K1 releases. `STAT` adds `v5min= vbatmin= bkp=`. Server side: `02-Architecture-Software/htracker-patches/`
(≤ 120 ms) before K1 releases. `STAT` adds `v5min= vbatmin= bkp=`. Server side: `02-Architecture-Software/htracker-patches/`
(retranslator: 29-field parser, `$PHEV` store + `events` in status JSON, 5 diagnostic rules) — old parsers ignore the extras.
- **0.5.0** (2026-09-18) — **Modo B: `$PHLG` in band.** Once the stack is on and the F9P has been talking for 10 s, USART1
- **0.5.0** (2026-09-18) — **Modo B: `$PHLG` in band.** Once the stack is on and the F9P has been talking for 10 s, USART1
(PA10 tap / PA9) is started **before** K1 (PB5) is energised; the F9P TX2 stream then flows F9P → PA10 → MCU → PA9 → K1 NO → modem DIN
byte for byte, and a `$PHLG` (same 24 fields) is injected every 30 s only after > 8 ms of line idle (a GGA is never split).
byte for byte, and a `$PHLG` (same 24 fields) is injected every 30 s only after > 8 ms of line idle (a GGA is never split).
Corrections modem → F9P stay on their direct wire. Fail-safe is hardware: PB5 low (reset, IWDG, any stack-off) = K1 NC = direct path.
Prerequisites shipped with it: **256-byte UART rings** (`build_opt.h`, `static_assert`ed at compile), **non-blocking SHT40**
(two-phase kick/poll), console STAT/`$PHLG` deferred to line-idle gaps, K1 released before `EEPROM.write` (flash erase stalls the core)
@ -99,29 +106,29 @@ or STM32CubeProgrammer → USB → Connect → Download `release/hbox-v5-bringup
Server: no change needed — `retranslator._parse_phlg` already accepts the sentence; units get the **Salud** column.
- **0.4.0** (2026-09-17) — **field-minimum ("-fm")**: what a unit needs to be left on a machine for days **without the production
charge governor**. **AUTO is now the default** (only the flash byte `0x5A` means MANUAL; a virgin board powers the stack by itself).
IWDG 16 s watchdog · fan policy = v3.0.3 (vehicle 5 V+ign → 100 %; battery → thermostat 48/45 C on the hottest sensor) ·
link recovery (no valid NMEA 60 s after a 90 s grace → 5 s stack cycle, max 1/5 min; RTK lost 15 min after having it → one cycle,
IWDG 16 s watchdog · fan policy = v3.0.3 (vehicle 5 V+ign → 100 %; battery → thermostat 48/45 C on the hottest sensor) ·
link recovery (no valid NMEA 60 s after a 90 s grace → 5 s stack cycle, max 1/5 min; RTK lost 15 min after having it → one cycle,
max 1/30 min; 3 NMEA-loss cycles → LIMP, stack stays ON) · gauge DB1-4 (3.60/3.75/3.90/3.97 V, −0.10 hyst) + RGB state via PCF8574
(green RTK · blue on/no RTK · magenta on/no NMEA · yellow battery · red off) · thermal cut tbat/tntc ≥ 60 C, re-arm < 55 C, warning 50 C ·
low battery cut 3.40 V, re-arm 3.70 V or 5 V return · `$PHLG` now carries `recoveries`, `limp`, `fan_pwm`, `state` PWRCYC/SLEEP, `link` LIMP
low battery cut 3.40 V, re-arm 3.70 V or 5 V return · `$PHLG` now carries `recoveries`, `limp`, `fan_pwm`, `state` PWRCYC/SLEEP, `link` LIMP
(verified against `retranslator._parse_phlg` + web_monitor badges). **CHARGE STAYS OFF — the pack is one-shot until the production port.**
- **0.3.0** (2026-09-17): **AUTO mode** (`A` toggles, persisted in flash via STM32duino EEPROM emulation — survives reset and
power loss; factory default = MANUAL). In AUTO the stack powers itself 3 s after 5 V is present on P2, no console needed.
**Battery-backup test:** in AUTO, losing the 5 V input keeps the stack ON from the pack and logs `EVT BACKUP inicio` /
power loss; factory default = MANUAL). In AUTO the stack powers itself 3 s after 5 V is present on P2, no console needed.
**Battery-backup test:** in AUTO, losing the 5 V input keeps the stack ON from the pack and logs `EVT BACKUP inicio` /
`BACKUP fin dur= nmea_durante= vbat=` (NMEA continuity through the dropout = LTC4040 backup proven); stack dropped at
vbat < 3.40 V or tbat/tntc > 50 C (`AUTO(pausa)` until 5 V is re-plugged). MANUAL keeps 0.2.x behaviour (stack OFF on 5 V loss).
vbat < 3.40 V or tbat/tntc > 50 C (`AUTO(pausa)` until 5 V is re-plugged). MANUAL keeps 0.2.x behaviour (stack OFF on 5 V loss).
`STAT` adds `modo=` and `backup=`. Charge stays OFF in every mode. RAM +8 KB (EEPROM sector buffer).
- **0.2.1** (2026-09-17): console made monitorable — every line ends CR+LF (no more PuTTY staircase); `EVT up=…` line on every
state change (stack ON/OFF with reason and the expected voltages, ignition edge, 5 V present/lost, charger status/fault edges,
first NMEA frame / NMEA lost >5 s, GGA fix-quality change, stack refused/cancelled); `STAT` every 5 s with named values
(`ign=ON`, `chrg=idle`, `flt=none`, `tntc=n/c`, `i2cerr=`, `t_on=`, `nmea=`/`bad=`); `$PHLG` every 10 s + after each stack change,
state change (stack ON/OFF with reason and the expected voltages, ignition edge, 5 V present/lost, charger status/fault edges,
first NMEA frame / NMEA lost >5 s, GGA fix-quality change, stack refused/cancelled); `STAT` every 5 s with named values
(`ign=ON`, `chrg=idle`, `flt=none`, `tntc=n/c`, `i2cerr=`, `t_on=`, `nmea=`/`bad=`); `$PHLG` every 10 s + after each stack change,
**same 24-field layout + XOR checksum as fleet fw v3.x** (verified against `htracker/retranslator.py::_parse_phlg`; `fw=0.2.1-bu`,
`state=BENCH|RUN`, `link=SRCH|DEGR|OK`); NMEA checksum verified (bad frames counted as `rxbad`); `P` arms non-blocking (10 s window),
`state=BENCH|RUN`, `link=SRCH|DEGR|OK`); NMEA checksum verified (bad frames counted as `rxbad`); `P` arms non-blocking (10 s window),
`Y` confirms; new commands `t` ($PHLG now), `l` (field legend), `v` (multimeter checkpoints for the stack gate: SYS5V/PWR_CTRL/GATE_LS/SW_5V);
stack auto-OFF if 5 V is lost; `v5=…(BAJO)` + EVT when VEH5V drops under 4.6 V (LTC4040 PFI zone: PFI divider R51 270k/R52 100k
→ 4.44 V falling, backup VSYS 4.79 V via R53 499k/R54 100k) — the 24-Jul modem-hiccup mechanism, now visible in the log. Build: no-op ctags + explicit definition order (arduino/ctags unreachable from the build host).
- **0.2.0** (2026-09-17): bench mode for the assembled unit — `P`+`Y` powers the RTK stack (only with 5 V on P2),
`P` again turns it off; `n` streams `$GxGGA` from the simpleRTK2B UART1 (PA3, 115200) for 20 s with fix/sats/HDOP;
stack auto-OFF if 5 V is lost; `v5=…(BAJO)` + EVT when VEH5V drops under 4.6 V (LTC4040 PFI zone: PFI divider R51 270k/R52 100k
→ 4.44 V falling, backup VSYS 4.79 V via R53 499k/R54 100k) — the 24-Jul modem-hiccup mechanism, now visible in the log. Build: no-op ctags + explicit definition order (arduino/ctags unreachable from the build host).
- **0.2.0** (2026-09-17): bench mode for the assembled unit — `P`+`Y` powers the RTK stack (only with 5 V on P2),
`P` again turns it off; `n` streams `$GxGGA` from the simpleRTK2B UART1 (PA3, 115200) for 20 s with fix/sats/HDOP;
`STAT` shows `stack=` and the last GGA. Charge stays disabled, K1 released. Uses the core's `Serial2` (USART2).
- **0.1.1** (2026-09-16, audit): build with `rtlib=nanofp` (floats printed blank in 0.1.0); `ETH_CS` now
`INPUT_PULLUP` instead of driving HIGH into the unpowered W5500; reset cause reports `PIN` only when

View File

@ -1,322 +1,167 @@
---
title: "Descargas"
tags: [project-drogheda, hbox, descargas, firmware, v3, v4, v5, modem, zed-f9p]
date: 2026-09-27
project: Project Drogheda
author: Helgen Technologies
version: "1.9"
---
# Descargas
Archivos que el técnico necesita en el banco. Verificar el SHA-256 antes de flashear
(`shasum -a 256 archivo` en macOS, `sha256sum archivo` en Linux, `certutil -hashfile archivo SHA256` en Windows).
## Qué archivo va a qué cosa
Una unidad HBOX tiene **tres cerebros distintos** y cada uno se carga por su propio camino. Antes de
descargar nada, ubica cuál vas a tocar:
| Qué | Qué se le carga | Cómo | Dónde está |
| Qué | Qué se le carga | Cómo | Sección |
|---|---|---|---|
| **Tarjeta HBOX** (Blackpill / EinarBoard) | Firmware `.bin` | DFU por USB | [§ Firmware del HBOX](#firmware-del-hbox-que-binario-va-en-que-tarjeta) |
| **Módem 4G NTRIP Master** | Archivo de **parámetros** `$$$AS+…` | Terminal serie por el USB *XBEE* | [§ Módem 4G](#parametros-del-modem-4g-ntrip-master) |
| **simpleRTK2B Pro (ZED-F9P)** | Configuración u-center **y** firmware u-blox | u-center por el USB *POWER+GPS* | [§ ZED-F9P](#firmware-y-configuracion-del-simplertk2b-pro-zed-f9p) |
| Tarjeta HBOX (Blackpill / EinarBoard) | Firmware `.bin` | DFU por USB | [Firmware](#firmware-del-hbox-que-binario-va-en-que-tarjeta) |
| Módem 4G NTRIP Master | Parámetros `$$$AS+…` | Terminal serie por el USB XBEE | [Módem 4G](#parametros-del-modem-4g-ntrip-master) |
| simpleRTK2B Pro (ZED-F9P) | Configuración u-center y firmware u-blox | u-center por el USB POWER+GPS | [ZED-F9P](#firmware-y-configuracion-del-simplertk2b-pro-zed-f9p) |
Cada carga se registra en el **[acta de reflasheo](../formularios/reflasheo.html)**, y queda en el
[expediente de esa unidad](../unidad.html) junto con las capturas de antes y después.
Cada carga se registra en el [acta de reflasheo](../formularios/reflasheo.html) y queda en el [expediente](../unidad.html) con las capturas de antes y después.
!!! warning "Verifica el SHA-256 antes de flashear"
Un binario incompleto o de otra generación puede dejar la tarjeta inservible.
`shasum -a 256 archivo` (macOS) · `sha256sum archivo` (Linux) · `certutil -hashfile archivo SHA256` (Windows).
## Verifica el SHA-256
Antes de flashear. Un binario incompleto o de otra tarjeta puede dejarla inservible.
```bash
shasum -a 256 archivo.bin # macOS / Linux (o sha256sum)
certutil -hashfile archivo.bin SHA256 # Windows (cmd)
Get-FileHash .\archivo.bin -Algorithm SHA256 # Windows (PowerShell)
```
Debe coincidir carácter por carácter con [`SHA256SUMS.txt`](SHA256SUMS.txt). Si no coincide, descarga otra vez; si sigue sin coincidir, no lo uses y avisa.
## Firmware del HBOX — qué binario va en qué tarjeta
**Regla: un binario por tarjeta.** La versión del firmware no dice nada de la tarjeta (`0.4.0` no es
"para V4": es una versión vieja del firmware de V5). El binario lleva la tarjeta en el nombre y eso es lo que manda.
Un binario por tarjeta. El nombre lleva la tarjeta y eso manda; el número de versión no dice nada de la tarjeta (`0.4.0` no es "para V4": es una versión vieja del firmware de V5).
| Tarjeta | MCU | Código fuente | **Binario vigente** | Estado |
| Tarjeta | MCU | Código fuente | Binario vigente | Estado |
|---|---|---|---|---|
| **V3** — EinarBoard 1.0, las 3 unidades en campo | Blackpill en zócalo (F411CE) | `blackpillrtkcode_v4` (4.0.0) | [`hbox-tarjetaV3_4.0.0.bin`](hbox-tarjetaV3_4.0.0.bin) | ⚠ compilado, **sin prueba de banco** |
| **V4** — `hbox-watchdog-v4` | Blackpill en zócalo + PCF8574 · W5500 · SC16IS752 | `hbox_v5_bringup` + `board_v4.h` | [`hbox-tarjetaV4_0.6.0.bin`](hbox-tarjetaV4_0.6.0.bin) | ⚠ compilado 27-sep, **sin prueba de banco**. **0.6.0 CAMPO: 0.5.9 + gobernador de carga (la batería por fin se recarga en la unidad)**; puente U13-P7 → SW4G1 opcional — [preparación y prueba V4](../procedimientos/v4-prueba-fw-0.5.6.md) |
| **V5** — `hbox-watchdog-v5`, lote de 15 | STM32F411RET6 soldado | `hbox_v5_bringup` (0.6.0) | [`hbox-v5-bringup_0.6.0.bin`](hbox-v5-bringup_0.6.0.bin) | ⚠ **vigente desde 27-sep (0.6.0 CAMPO)** — **cargador con gobernador** (hasta 0.5.9 estaba apagado: paquete de un solo uso); en batería la etapa y el módem **siguen encendidos y reportando igual que en 24 V** (sin ciclo de 10 min ni ahorro: la V5.5 no arranca el módem en frío sobre el boost); **ningún ciclo de etapa en batería**; corte a 3.40 V; **reset del MCU al volver el 5 V tras ≥ 10 s de respaldo, siempre**; vigilancia del módem solo diagnóstica (`modem=` en STAT); 0.5.1 fue la última en campo |
| V3 — EinarBoard 1.0, 3 unidades en campo ([manual](../manuales/manual-tarjeta-V3.md)) | Blackpill en zócalo (F411CE) | `blackpillrtkcode_v4` (4.0.0) | [`hbox-tarjetaV3_4.0.0.bin`](hbox-tarjetaV3_4.0.0.bin) · 64 352 B · `a68a87ff…` | Compilado 19-sep, sin prueba de banco |
| V4 — `hbox-watchdog-v4` ([manual](../manuales/manual-tarjeta-V4.md)) | Blackpill + PCF8574 · W5500 · SC16IS752 | `hbox_v5_bringup` + `board_v4.h` (`-DHBOX_BOARD_V4`) | [`hbox-tarjetaV4_0.6.0.bin`](hbox-tarjetaV4_0.6.0.bin) · 88 556 B · `1458470bbdd95b49…` | Compilado 27-sep, sin prueba de banco. DFU solo con USB; puente U13-P7 → SW4G1 opcional ([procedimiento V4](../procedimientos/v4-prueba-fw-0.5.6.md)) |
| V5 — `hbox-watchdog-v5`, lote de 15 ([manual](../manuales/manual-tarjeta-V5.md)) | STM32F411RET6 soldado | `hbox_v5_bringup` (0.6.0) | [`hbox-v5-bringup_0.6.0.bin`](hbox-v5-bringup_0.6.0.bin) · `8a0ee4839763eae8…` | Vigente desde 27-sep, sin prueba de banco. Uso: [prueba y flasheo §5](../procedimientos/v5-prueba-y-flasheo.md) y [ensamble §5](../procedimientos/v5-ensamble.md) |
Los tres reportan al servidor **la misma trama**: `$PHLG` de 29 campos cada 30 s y un `$PHEV` por cada
cambio de estado, en banda por el módem (Modo B). Es exactamente lo que el monitor desplegado parsea hoy
(`retranslator.py`: 20 campos base + 4 de v3 + 5 de 0.5.1, y `$PHEV`), así que las tres tarjetas se ven
igual en la columna *Salud*.
0.6.0 CAMPO (V4 y V5): cargador con gobernador (hasta 0.5.9 estaba apagado, paquete de un solo uso); en batería la etapa y el módem siguen encendidos y reportando igual que en 24 V (la V5.5 no arranca el módem en frío sobre el boost, ver [módem en batería](../procedimientos/prueba-bateria-modem.md#3-hallazgos-2527-sep)); ningún ciclo de etapa en batería; corte a 3.40 V; reset del MCU al volver el 5 V tras ≥ 10 s de respaldo; vigilancia del módem solo diagnóstica (`modem=` en `STAT`); teclas `C`/`M`/`R`. 0.5.1 fue la última embarcada antes de 0.6.0.
!!! warning "0.5.x (V4 y V5) cambia cómo se ve la unidad en el monitor cuando está en batería"
Desde 0.5.2 la unidad **apaga el módem entre reportes** mientras está en batería: enciende ~120–180 s cada
10 min, manda posición y `$PHLG` con `pwr=BATT`, avisa `DUTY_SLEEP next=<s>` y se calla. Para que ese
silencio **no aparezca como desconexión** (ni dispare el correo del notifier, ni cuente como caída), el
`retranslator.py` del servidor debe llevar el soporte `DUTY` (24-sep). **Desplegar primero el servidor,
después flashear.** Con la V3 (4.0.0) no cambia nada: sigue reportando continuo en batería.
!!! warning "No se cruzan"
- `hbox-v5-bringup_…` (F411RE soldado) en una V3 o V4: otro MCU y otro mapa de pines. La V4 usa `hbox-tarjetaV4_…`.
- `hbox-tarjetaV3_…` o `blackpillrtkcode_v3` en una V4 o V5: manejan los LEDs de carga en PB12–PB15, que ahí son el SPI del W5500.
- Nada de `superseded/`: se guarda solo por trazabilidad.
- Nada que no esté publicado aquí con su SHA-256. Los `.bin` de V3 y V4 no viven en el repositorio; se compilan, se prueban en banco y se publican ([reflasheo §5](../procedimientos/reflasheo-unidades.md#5-para-ingenieria-generar-y-publicar-un-binario)).
**0.5.9 CAMPO** no apaga el módem ni calla en batería: reporta continuo con `pwr=BATT`, igual que 0.5.1 (el monitor muestra ⚡
sin badge de silencio). El soporte `DUTY` sigue haciendo falta para las versiones de banco con ciclo o ahorro.
Las tres tarjetas mandan la misma trama: `$PHLG` de 29 campos cada 30 s y un `$PHEV` por cambio de estado, en banda por el módem (Modo B). El monitor la parsea igual (`retranslator.py`: 20 campos base + 4 de v3 + 5 de 0.5.1, y `$PHEV`) y las tres se ven igual en Salud.
!!! success "0.6.0 — el cargador por fin: gobernador de carga (port de flota v3.0.1)"
Hasta 0.5.9 el cargador estaba **apagado por firmware** («paquete de un solo uso»): tras la primera noche en batería el paquete
quedaba gastado y la unidad ya no tenía respaldo (H0008 amaneció a 3.50 V y en 24 V seguía «sin cargar»). No se puede encender sin
más: en V5.5/V4 `RS1` 8 mΩ → límite de entrada del LTC4040 ≈ 3.1 A, por encima de los 3 A del SD-15B, y `R50` 825 Ω → 2.4 A de
carga; paquete vacío + etapa + ráfaga LTE hunden el riel al PFI 4.60 V y la unidad entra en bucle (incidente de flota 10-ago).
**El gobernador** carga solo con etapa ON en 24 V, nunca en los primeros 120 s tras boot o STACK ON, arranca tras 30 s de riel
≥ 5.05 V, **corta al instante bajo 4.90 V** con enfriamiento 60 s → 30 min, inhibe con celda ≥ 45 °C y rearma el safety timer del
LTC4040. En fuente débil la carga es por ciclos: más lenta, pero el módem nunca paga por ella. Eventos `CHG_ON/CHG_SHED/CHG_OFF/
CHG_HOT/CHG_COOL/CHG_PULSE`, `STAT` → `carga=FASE … ltc=CARGANDO|no cortes=`, tecla `C` = veto. El monitor muestra **🔌 CARGANDO**
(columna *Energía* y detalle) solo cuando el LTC4040 carga de verdad (`chg=1` en `$PHLG`). `PHLG_FW` = `0.6.0` (sin «-fm»).
!!! warning "V3 4.0.0: todavía no en unidades de campo"
Compila y pasa el simulador, pero no ha corrido en una EinarBoard 1.0 real. Solo en la mesa de ingeniería hasta que se pruebe en banco (RTK-003 o RTK-006) y se quite este aviso. 4.0.0 activa Modo B por omisión (el MCU queda en línea con el enlace de correcciones), así que la primera prueba es en par: el binario publicado y uno sin Modo B sobre la misma unidad. Si el fix RTK cae al energizar K1, o `v5min` se hunde en ese instante, sospecha de la bobina de K1 llevando el riel al PFI del LTC4040.
**Prueba de banco** (unidad con paquete bajo, consola abierta, 24 V): a los ~120 s `carga=PROVING n/30s` → `EVT CARGA ON` →
`ltc=CARGANDO` y 🔌 en el monitor. Multímetro en P2 durante una ráfaga LTE: si baja de 4.90 V debe verse `CARGA cortada …
enfriamiento 60 s` y reintento. Anotar `cortes=` por hora y si `vbat` sube. Si corta sin parar (enfriamiento en 30 min), la fuente
no puede con 2.4 A + etapa: V5.6 (`RS1` 10 mΩ, `R50` 1.5 kΩ) o fuente de 4 A.
!!! danger "0.5.9 — la noche con 0.5.8: el recovery en batería mató al módem; sin ciclos de etapa en batería y reset al volver el 5 V siempre"
Noche 26/27-sep con 0.5.8 (V5.5 toda la noche en batería): amaneció con `vbat` 3.50 V, F9P vivo, **módem oscuro**, los 4 LEDs de
carga apagados (correcto: DB1 enciende a 3.60 V). Al volver los 24 V el módem siguió oscuro; solo un reset (SW1/P10) o `SW4G1` lo levantó.
Causa más probable: el recovery de enlace seguía armado en batería — el silencio del ahorro dejó al caster sin GGA → sin correcciones →
«RTK perdido 15 min» → `RECOVERY rtk_lost` → etapa OFF/ON **en batería** → el módem no arranca (brown-out del boost, abajo) → oscuro
hasta los 24 V; y 0.5.8 no reseteaba al volver el 5 V si la etapa venía encendida desde 24 V (regla falsa: el estado del módem no se
puede saber en V4/V5). **0.5.9:** ningún ciclo de etapa en batería (un ciclo en curso al perder el 5 V se aborta con la etapa apagada,
`RECOVERY_ABORT`); reset del MCU al volver el 5 V tras cualquier respaldo ≥ 10 s (`NRST` solo llega al MCU: es el botón P10);
**ahorro fuera del build de campo** hasta medirlo en banco (continuo como 0.5.1, ~10–13 h); y **vigilancia del módem solo
diagnóstica**: `STAT` añade `rtcm_age= sta= rtcm_last= sag5= sagb= flat= modem=vivo|SOSPECHOSO|?` (correcciones RTCM vistas por el
F9P + caída del riel por ráfagas LTE), eventos `MODEM_DARK` / `MODEM_BACK` / `MODEM_WATCH`. Con esos números se calibra 0.5.10.
!!! danger "0.5.8 — diagnóstico cerrado: la V5.5/V4 NO arranca el módem en frío sobre la batería; por eso el build de campo no lo apaga"
Banco 26-sep (0.5.7): en batería **ningún** encendido de etapa arranca el módem (ni `P`, ni el despertar, ni un reset del MCU con
`R` o P10); **con 24 V cualquiera lo arranca**; y en batería **`SW4G1`** pulsado con la etapa ya encendida sí lo arranca. Causa: al
encender la etapa, simpleRTK2B y módem arrancan a la vez sobre el boost del LTC4040 (4.6 V en `SW_IN` solo con el F9P); la ráfaga
de arranque del módem (~2 A) hunde el riel, el buck de `3V3_MODEM` (MP1584, mínimo 4.5 V) cae y el PMIC del módem aborta y **no
reintenta** (todos los LEDs apagados). `SW4G1` lo reinicia solo, sobre un riel ya estable. No tiene arreglo por firmware en V4/V5;
se corrige en **V5.6** (buck del módem alimentado antes de Q1, reset y enable del módem en el MCU).
**Por eso 0.5.8 CAMPO nunca apaga el módem en batería:** un módem que ya está encendido sí aguanta el paso de 24 V a batería.
La etapa sigue encendida hasta el corte de 3.40 V y el MCU (Modo B) recorta el tráfico: ráfaga de posición de ~8 s cada 10 min y
`$PHLG` cada 3 min (`SAVER_ON`, `DUTY_SLEEP`/`DUTY_WAKE`; `STAT` → `ahorro=`). Autonomía estimada ~30–35 h. Al volver el 5 V solo
hay reset del MCU si la etapa estaba apagada o arrancó en batería (el módem puede estar oscuro); si venía encendida desde 24 V, no se
toca. Reset por SW1/P10 en batería: la etapa **no** se reenciende hasta que vuelva el 5 V. Sigue disponible el puente (0.5.6+, ahora
el pulso va 5 s después de STACK ON):
```
U13 pin 12 (P7) ──|<── SW4G1 pad 1 (MODEM_RST) diodo Schottky de señal BAT54 (o BAT85/BAT43/1N5711) — no 1N5819
cátodo ánodo
```
Verificar con la tecla **`M`** en consola (etapa ON): `SW4G1` pad 1 cae a < 0.4 V durante 0.5 s y los LEDs del módem
apagan y vuelven. Sin el puente el pulso `MODEM_RST` no llega a nada. Anotar el puente en el acta de la unidad. Detalle en el [procedimiento de batería](../procedimientos/prueba-bateria-modem.md).
!!! note "V4 = la V5 en un Blackpill"
Cotejada pad por pad en `hbox-watchdog-v4.kicad_pcb` contra `board_v5.h`: mismas redes, mismos pines
del MCU, mismas direcciones I2C (PCF8574 `0x20`, SHT40 `0x44`, TMP102 `0x48`, SC16IS752 `0x4D`), mismo
W5500 en SPI2 y misma K1 en `PB5`. **Una sola diferencia:** `ETH_INT` es `PB2` (J1.16) en vez de `PC0`.
Por eso la V4 no necesita firmware propio: es `hbox_v5_bringup` compilado para Blackpill con
`board_v4.h`. La V4 **se flashea por DFU solo con USB** (sin 24 V y con la batería desconectada). Ojo: en la V4
ese USB también alimenta el riel de 5 V de la tarjeta y, con él, al W5500, cuya `INTn` llega a `PB2` = `BOOT1`.
Si no aparece *STM32 BOOTLOADER*, se flashea la Blackpill fuera del zócalo
([procedimiento V4](../procedimientos/v4-prueba-fw-0.5.6.md)).
!!! danger "Lo que NO se puede cruzar"
- `hbox-v5-bringup_0.5.x.bin` (compilado para el F411RE soldado) en una **V3 o V4**: otro MCU y otro
mapa de pines. La V4 usa **su propio binario** `hbox-tarjetaV4_…`, compilado para Blackpill.
- `hbox-tarjetaV3_…` en una **V4**: maneja los LEDs de carga en PB12–PB15, que en la V4 son el SPI del W5500.
- Cualquier binario de la carpeta `superseded/`: se conservan solo por trazabilidad.
### Versiones superadas
No se flashean. Están para identificar lo que una tarjeta vieja pueda traer y para volver atrás si una prueba de banco lo pide.
| Archivo | Por qué se retiró |
|---|---|
| [`superseded/hbox-tarjetaV3_3.0.4.bin`](superseded/hbox-tarjetaV3_3.0.4.bin) | Misma lógica que las unidades en campo (3.0.3) pero **sin telemetría en banda**: el monitor no ve nada en *Salud*. Sustituida por 4.0.0. |
| [`superseded/hbox-v5-bringup_0.5.9.bin`](superseded/hbox-v5-bringup_0.5.9.bin) · [`superseded/hbox-tarjetaV4_0.5.9.bin`](superseded/hbox-tarjetaV4_0.5.9.bin) | Correcta pero **sin cargador** (paquete de un solo uso). Sustituida por 0.6.0, que añade el gobernador de carga y no cambia nada más. |
| [`superseded/hbox-v5-bringup_0.5.8.bin`](superseded/hbox-v5-bringup_0.5.8.bin) · [`superseded/hbox-tarjetaV4_0.5.8.bin`](superseded/hbox-tarjetaV4_0.5.8.bin) | **No usar.** El recovery de enlace seguía activo en batería: el silencio del ahorro provocaba «RTK perdido» y un ciclo de etapa en batería que dejaba el módem oscuro hasta un reset manual (noche 26/27-sep). Sustituida por 0.5.9. |
| [`superseded/hbox-v5-bringup_0.5.7.bin`](superseded/hbox-v5-bringup_0.5.7.bin) · [`superseded/hbox-tarjetaV4_0.5.7.bin`](superseded/hbox-tarjetaV4_0.5.7.bin) | Despertar de batería por reset del MCU: en banco **no** enciende el módem en batería (brown-out del boost al encender la etapa); solo servía al volver el 5 V. Sustituida por 0.5.8 CAMPO (respaldo continuo con ahorro; conserva el reset al volver el 5 V cuando hace falta). |
| [`superseded/hbox-v5-bringup_0.5.6.bin`](superseded/hbox-v5-bringup_0.5.6.bin) · [`superseded/hbox-tarjetaV4_0.5.6.bin`](superseded/hbox-tarjetaV4_0.5.6.bin) | Pulso `MODEM_RST` por U13-P7 (solo con puente); sin puente el módem seguía sin encender en las ventanas, y un reset en batería dejaba la etapa apagada. Sustituida por 0.5.7 (despertar por reset del MCU; conserva el pulso). |
| [`superseded/hbox-v5-bringup_0.5.5.bin`](superseded/hbox-v5-bringup_0.5.5.bin) · [`superseded/hbox-tarjetaV4_0.5.5.bin`](superseded/hbox-tarjetaV4_0.5.5.bin) | **No usar.** Poner el UART del GNSS en alta impedancia no bastó: en reposo `3V3_MODEM` sigue en ~1 V y el módem no rearranca. Sustituida por 0.5.6, que resetea el módem desde el MCU (puente U13-P7 → SW4G1). |
| [`superseded/hbox-v5-bringup_0.5.4.bin`](superseded/hbox-v5-bringup_0.5.4.bin) · [`superseded/hbox-tarjetaV4_0.5.4.bin`](superseded/hbox-tarjetaV4_0.5.4.bin) | **No usar.** Su ciclo de etapa al volver el 5 V no apagaba de verdad al módem: el UART del GNSS seguía sosteniendo su riel, así que el módem no rearrancaba ni en batería ni al volver el vehículo (solo con reset). Sustituida por 0.5.5. |
| [`superseded/hbox-v5-bringup_0.5.3.bin`](superseded/hbox-v5-bringup_0.5.3.bin) · [`superseded/hbox-tarjetaV4_0.5.3.bin`](superseded/hbox-tarjetaV4_0.5.3.bin) | Ventana de 2 min, pero al volver el 5 V tras batería el módem podía quedarse en *latch* (oscuro hasta un reset). Sustituida por 0.5.4, que cicla la etapa al volver el 5 V. |
| [`superseded/hbox-v5-bringup_0.5.2.bin`](superseded/hbox-v5-bringup_0.5.2.bin) · [`superseded/hbox-tarjetaV4_0.5.2.bin`](superseded/hbox-tarjetaV4_0.5.2.bin) | Primera versión con reporte cada 10 min en batería, ventana mínima de 90 s: **insuficiente para que el módem entregara la posición**. Sustituida por 0.5.3 (120 s). |
| [`superseded/hbox-v5-bringup_0.5.1.bin`](superseded/hbox-v5-bringup_0.5.1.bin) · [`superseded/hbox-tarjetaV4_0.5.1.bin`](superseded/hbox-tarjetaV4_0.5.1.bin) | Última versión de campo antes del reporte cada 10 min en batería (en batería dejaba la etapa encendida hasta vaciar el paquete). Sirve para volver atrás si 0.5.3 da problemas en banco. |
| [`superseded/hbox-v5-bringup_0.4.0.bin`](superseded/hbox-v5-bringup_0.4.0.bin) | Versión de V5 sin `$PHLG` en banda. Sustituida por 0.5.1. |
### Firmware de bring-up — EinarBoard v5
| Archivo | Versión | SHA-256 | Uso |
|---|---|---|---|
| [**hbox-v5-bringup_0.6.0.bin**](hbox-v5-bringup_0.6.0.bin) | **0.6.0 CAMPO** (2026-09-27) — **0.5.9 + gobernador de carga (riel ≥ 5.05 V / corte < 4.90 V / celda < 45 °C); Modo B; respaldo continuo en batería; sin ciclos de etapa en batería; reset del MCU al volver el 5 V; vigilancia del módem; teclas `C`/`M`/`R`** — ⚠ sin prueba de banco | `8a0ee4839763eae8…` | Sección 5 del [procedimiento de prueba y flasheo v5](../procedimientos/v5-prueba-y-flasheo.md) y sección 5 del [ensamble](../procedimientos/v5-ensamble.md) (modo de banco `P` / `n`) |
Flasheo por DFU en **J11** (mantener **SW2**, pulsar y soltar **SW1**, soltar SW2):
```bash
dfu-util -a 0 -s 0x08000000:leave -D hbox-v5-bringup_0.6.0.bin
```
o con **STM32CubeProgrammer** → USB → Connect → Download del `.bin` en `0x08000000`.
!!! success "A/B 0.4.0 vs 0.5.1 — cerrado el 19-sep"
El 18-sep por la tarde se reportó que con 0.5.1 la etapa RTK no encendía. **Resuelto:** 0.5.1 ensambla,
enciende y reporta telemetría completa en el monitor desplegado. **Se embarcó con 0.5.1; desde el 27-sep la vigente es 0.6.0.** `0.4.0`
queda en `superseded/` solo como referencia.
!!! note "Tarjetas ya flasheadas con cualquier versión anterior"
Re-flashear con **0.6.0** por el mismo procedimiento DFU. **La primera línea de la consola tras reset dice la versión**
(`hbox-v5-bringup 0.6.0 built …`): si la línea `STAT` no termina en `stack=…`, la tarjeta sigue con 0.1.1.
!!! tip "Consola 0.5.x"
Líneas `EVT` en cada cambio (stack, ignición, 5 V, cargador, NMEA, fix), `STAT` con nombres cada 5 s y `$PHLG` cada 10 s
(misma trama de salud que lee el servidor). Teclear `l` para la leyenda y `v` para los puntos de medición de la etapa RTK.
Para encender la etapa RTK: `P` y luego `Y` (requiere 5 V en P2).
!!! warning "0.5.x = firmware de campo mínimo + telemetría y eventos en banda — AUTO de fábrica"
Desde 0.4.0 el modo AUTO es el **de fábrica**: la etapa RTK se enciende sola 3 s después de ver 5 V en P2 — no hace falta consola
ni teclear `A`. Incluye watchdog 16 s, ventilador (política v3.0.3), recuperación de enlace (ciclo de etapa si el F9P deja de
hablar 60 s; LIMP tras 3 ciclos), LEDs de carga y color de estado, corte térmico 60 °C y corte de batería 3.40 V.
**Cargador: apagado hasta 0.5.9 (paquete de un solo uso); desde 0.6.0 carga con gobernador** (ver la caja verde). Anotar la versión en el acta.
**0.6.0 CAMPO:** gobernador de carga: carga solo con etapa ON en 24 V tras 120 s, riel ≥ 5.05 V por 30 s, corte < 4.90 V con enfriamiento
60 s → 30 min, celda < 45 °C, pulso de rearranque del LTC4040. `STAT` → `carga=`; tecla `C`. Lo demás igual que 0.5.9.
**0.5.9 CAMPO:** sin ciclo de 10 min ni ahorro en batería (`ENABLE_DUTY 0`, `ENABLE_BATT_SAVER 0`): la etapa y el módem siguen
encendidos y reportando hasta el corte de 3.40 V; **ningún ciclo de etapa en batería** (`RECOVERY_ABORT` si uno estaba en curso);
reset del MCU al volver el 5 V tras ≥ 10 s de respaldo. Un reset en batería deja la etapa apagada hasta que vuelva el 5 V.
Vigilancia del módem solo diagnóstica (`modem=` en `STAT`, `MODEM_DARK`/`MODEM_BACK`/`MODEM_WATCH` en banda).
**0.5.8 CAMPO (retirada):** igual pero con ahorro (ráfaga cada 10 min) y con el recovery aún activo en batería — ver la caja roja.
**0.5.7:** cada despertar de batería (≥ 10 min tras la última ventana) y cada regreso del 5 V tras batería es un **reset del
MCU** (`NVIC_SystemReset`, lo mismo que el botón P10): arranca en ~4 s; sin 5 V la ventana abre de inmediato, con 5 V AUTO
enciende la etapa a los 3 s. Se pierden uptime y contadores. Tecla `R` = ese reset ahora. Un reset por SW1/P10 en batería
abre ventana en 60 s (antes dejaba la etapa apagada hasta que volviera el 5 V) y `P` se acepta en batería con vbat ≥ 3.60 V.
**0.5.6:** 3 s después de cada encendido de etapa el MCU pulsa el reset del módem 500 ms por `U13` P7 (evento `MODEM_RST`,
contador `mrst=` en `STAT`, tecla `M` = pulso manual). Con la etapa apagada PA9/PA10 quedan en alta impedancia sin pull-up.
**0.5.5:** con la etapa apagada el UART del GNSS queda en alta impedancia (antes PA2 sostenía el riel del simpleRTK2B y, a través de él, el del módem: el módem
nunca veía un power-on reset y quedaba oscuro hasta un reset de la tarjeta). Al volver el 5 V tras batería la etapa se cicla 10 s (`PWR_RETURN_CYCLE`).
**0.5.2–0.5.7 — batería (ciclo retirado en 0.5.8 para V5.5/V4; queda con `-DENABLE_DUTY=1`):** con 5 V perdidos la etapa ya no queda encendida hasta vaciar el paquete: ventana de reporte de 120–180 s
cada 10 min (`DUTY_WAKE` / `DUTY_SLEEP next=<s>` / `DUTY_SKIP` / `DUTY_END`), ventilador y LEDs apagados en reposo, protecciones
de batería (< 3.40 V) y temperatura (≥ 60 °C) por encima del ciclo. El MCU sigue despierto: el ahorro es la etapa (~2.3 W).
**0.5.1 — diagnóstico:** `$PHLG` lleva además `up_s`, `pwr` (VEH/BATT), `v5min`/`vbat_min` (mínimos de la ventana de 30 s)
y `bkp_n`; cada cambio de estado sale como `$PHEV,<up_s>,<CODIGO>,<detalle>` al servidor (misma línea de tiempo que los `EVT`).
**0.5.0 — Modo B:** 10 s después de que el F9P empieza a hablar, el MCU conmuta K1 y la trama `$PHLG` viaja al servidor
cada 30 s junto con el NMEA (columna **Salud** del monitor). En consola: `STAT … modoB=ON relay=… phlg_aire=…` (debe subir de
1 en 1 cada 30 s). Si el MCU falla, K1 regresa solo al paso directo F9P→módem. `B` lo bloquea/permite para pruebas. Si se pierde el 5 V, la etapa **sigue encendida desde la batería**
y la consola registra `EVT BACKUP inicio` / `BACKUP fin` con duración y tramas NMEA: esa es la prueba de respaldo.
Se apaga sola si vbat < 3.40 V o temperatura > 50 °C. `A` de nuevo regresa a MANUAL. El cargador (0.6.0) solo carga en AUTO/MANUAL con la etapa ON y 24 V, según el gobernador.
!!! warning "Solo para la tarjeta v5"
Este firmware **no** es el de producción: solo prueba la tarjeta (reloj, USB, cristales, I²C,
LEDs, ADC) sin encender la etapa RTK ni el cargador. **Nunca flashear `blackpillrtkcode_v3`
(v3.0.3) en una v5.**
**Novedades de 0.5.x:** el `$PHLG` gana 5 campos nuevos (`up_s`, `pwr`, `v5min`, `vbat_min`, `bkp_n` — `vbat_min` caza los hundimientos de 50-200 ms de las ráfagas LTE que una foto cada 30 s nunca ve) y aparece `$PHEV`, una trama por cada cambio de estado. Los analizadores viejos ignoran los campos extra.
Notas de compilación y cambios: [README del firmware de bring-up](hbox-v5-bringup-README.md).
### Firmware de campo — tarjeta V3 (detalle)
!!! danger "Estos binarios todavía NO se flashean en una unidad de campo"
Compilaron limpio el 19-sep y pasan el simulador, pero **ninguno ha corrido sobre una
EinarBoard 1.0 real**. Hasta que ingeniería los pruebe en banco (RTK-003 o RTK-006) y quite
este aviso, solo se usan en la mesa de ingeniería. Esto aplica sobre todo al **4.0.0**, que pone
el MCU en línea con el enlace que lleva las correcciones RTK.
!!! tip "Prueba de banco del 4.0.0: en par"
El 4.0.0 activa el Modo B por omisión. Aunque el A/B de V5 ya cerró bien, la primera prueba en
una V3 real se hace **en par**: el binario publicado y uno compilado con `-DENABLE_MODOB=0`,
sobre la misma unidad. Si el fix RTK cae al energizar K1, o `v5min` se hunde en ese instante,
el sospechoso es la bobina de K1 llevando el riel al PFI del LTC4040.
```bash
arduino-cli compile --fqbn "$FQBN" --build-property "compiler.cpp.extra_flags=-DENABLE_MODOB=0" \
--output-dir build/v4-sinB blackpillrtkcode_v4
```
Es el firmware que gobierna la unidad en la máquina, distinto del de bring-up del v5. Se usa en el
[reflasheo en taller](../procedimientos/reflasheo-unidades.md).
### Gobernador de carga (0.6.0)
| Tarjeta | Archivo | Estado |
|---|---|---|
| **V3** — flota desplegada | [`hbox-tarjetaV3_4.0.0.bin`](hbox-tarjetaV3_4.0.0.bin) · 64 352 B · `a68a87ff…` | ⚠ compilado 19-sep, falta prueba de banco. El «4» es la versión del firmware, **no** la tarjeta |
| **V4** | [`hbox-tarjetaV4_0.6.0.bin`](hbox-tarjetaV4_0.6.0.bin) · 88 556 B · `1458470bbdd95b49…` | ⚠ compilado 27-sep, falta prueba de banco. Es 0.6.0 CAMPO (con cargador) para Blackpill (`-DHBOX_BOARD_V4`), DFU **solo con USB**; puente U13-P7 → SW4G1 opcional (respaldo) — [procedimiento V4](../procedimientos/v4-prueba-fw-0.5.6.md) |
No se podía encender el cargador sin más: en V5.5/V4 `RS1` 8 mΩ → límite de entrada del LTC4040 ≈ 3.1 A (más que los 3 A del SD-15B) y `R50` 825 Ω → 2.4 A de carga; paquete vacío + etapa + ráfaga LTE hunden el riel al PFI 4.60 V y la unidad entra en bucle (incidente de flota 10-ago). H0008 amaneció a 3.50 V tras una noche en batería y seguía "sin cargar" en 24 V.
!!! danger "Mientras diga «pendiente», no hay binario aprobado"
No flashees una unidad V3 o V4 con un archivo que no esté publicado aquí con su SHA-256. Los
binarios de estas generaciones **no viven en el repositorio** (están en `.gitignore`): tienen que
compilarse, probarse en banco y publicarse. El procedimiento de generación está en el
[reflasheo §6](../procedimientos/reflasheo-unidades.md).
El gobernador carga solo con etapa ON en 24 V; nunca en los primeros 120 s tras boot o STACK ON; arranca tras 30 s de riel ≥ 5.05 V; corta al instante bajo 4.90 V con enfriamiento de 60 s a 30 min; inhibe con celda ≥ 45 °C; rearma el safety timer del LTC4040. En fuente débil carga por ciclos: más lento, pero el módem nunca paga. Eventos `CHG_ON/CHG_SHED/CHG_OFF/CHG_HOT/CHG_COOL/CHG_PULSE`; `STAT` → `carga=FASE … ltc=CARGANDO|no cortes=`; tecla `C` = veto. El monitor muestra 🔌 CARGANDO (columna Energía) solo con `chg=1` en `$PHLG`. `PHLG_FW` = `0.6.0` (sin "-fm"). Prueba de banco: [módem en batería §1](../procedimientos/prueba-bateria-modem.md#1-cargador-060). Si corta sin parar: V5.6 (`RS1` 10 mΩ, `R50` 1.5 kΩ) o fuente de 4 A.
!!! warning "Un binario no sirve para otra generación"
La polaridad del control de carga está **invertida** entre la tarjeta de producción y la de
protoboard. Flashear el binario equivocado puede dejar la batería cargando justo cuando el
firmware cree estarla protegiendo por temperatura — la falla #1 del RCA de junio.
### Monitor con builds de ciclo
Builds con ciclo o ahorro en batería (0.5.2–0.5.8, o compilados con `-DENABLE_DUTY=1`) apagan el módem entre reportes: ~120–180 s cada 10 min con `pwr=BATT` y `DUTY_SLEEP next=<s>`. Para que ese silencio no cuente como caída ni dispare el correo del notifier, `retranslator.py` debe llevar el soporte `DUTY` (24-sep): despliega primero el servidor, después flashea. 0.5.9+ y la V3 4.0.0 reportan continuo en batería (el monitor muestra ⚡ sin badge de silencio).
### V4 = V5 en un Blackpill
Cotejada pad por pad (`hbox-watchdog-v4.kicad_pcb` contra `board_v5.h`): mismas redes, pines, direcciones I²C (PCF8574 `0x20`, SHT40 `0x44`, TMP102 `0x48`, SC16IS752 `0x4D`), W5500 en SPI2 y K1 en `PB5`. Única diferencia: `ETH_INT` en `PB2` (J1.16) en vez de `PC0`. Se flashea por DFU solo con USB (sin 24 V, batería desconectada); ese USB alimenta el 5 V y el W5500, cuya `INTn` llega a `PB2` = `BOOT1`. Sin `STM32 BOOTLOADER`, se flashea la Blackpill fuera del zócalo ([procedimiento V4](../procedimientos/v4-prueba-fw-0.5.6.md)).
### Flasheo y consola (V5)
DFU por J11 (mantén SW2, pulsa y suelta SW1, suelta SW2):
```bash
dfu-util -a 0 -s 0x08000000:leave -D hbox-v5-bringup_0.6.0.bin
```
o STM32CubeProgrammer → USB → Connect → Download en `0x08000000`. Tarjetas con cualquier versión anterior se reflashean igual. La primera línea tras reset dice la versión (`hbox-v5-bringup 0.6.0 built …`); si `STAT` no termina en `stack=…`, la tarjeta sigue con 0.1.1.
Consola: `EVT` en cada cambio (etapa, ignición, 5 V, cargador, NMEA, fix), `STAT` cada 5 s y `$PHLG` cada 10 s. `l` = leyenda, `v` = puntos de medición de la etapa RTK, `P` y luego `Y` = encender la etapa (requiere 5 V en P2).
El nombre "bring-up" viene de 0.1.x, que solo probaba la tarjeta; desde 0.4.0 es el firmware de campo de la V5. Compilación y cambios: [README del firmware](hbox-v5-bringup-README.md).
### Versiones superadas
No se flashean. Sirven para identificar lo que trae una tarjeta vieja o para volver atrás si una prueba de banco lo pide.
| Archivo | Por qué se retiró |
|---|---|
| [`superseded/hbox-tarjetaV3_3.0.4.bin`](superseded/hbox-tarjetaV3_3.0.4.bin) | Lógica de campo (3.0.3) sin telemetría en banda: el monitor no ve Salud. Sustituida por 4.0.0. |
| [`superseded/hbox-v5-bringup_0.5.9.bin`](superseded/hbox-v5-bringup_0.5.9.bin) · [`superseded/hbox-tarjetaV4_0.5.9.bin`](superseded/hbox-tarjetaV4_0.5.9.bin) | Sin cargador (paquete de un solo uso). 0.6.0 añade el gobernador y nada más. |
| [`superseded/hbox-v5-bringup_0.5.8.bin`](superseded/hbox-v5-bringup_0.5.8.bin) · [`superseded/hbox-tarjetaV4_0.5.8.bin`](superseded/hbox-tarjetaV4_0.5.8.bin) | No usar. Recovery activo en batería: el silencio del ahorro provocaba "RTK perdido" y un ciclo de etapa que dejaba el módem oscuro hasta un reset (noche 26/27-sep). |
| [`superseded/hbox-v5-bringup_0.5.7.bin`](superseded/hbox-v5-bringup_0.5.7.bin) · [`superseded/hbox-tarjetaV4_0.5.7.bin`](superseded/hbox-tarjetaV4_0.5.7.bin) | Despertar de batería por reset del MCU: en banco no enciende el módem en batería (brown-out del boost); solo servía al volver el 5 V. |
| [`superseded/hbox-v5-bringup_0.5.6.bin`](superseded/hbox-v5-bringup_0.5.6.bin) · [`superseded/hbox-tarjetaV4_0.5.6.bin`](superseded/hbox-tarjetaV4_0.5.6.bin) | Pulso `MODEM_RST` por U13-P7 (solo con puente); sin puente el módem no encendía en las ventanas y un reset en batería dejaba la etapa apagada. |
| [`superseded/hbox-v5-bringup_0.5.5.bin`](superseded/hbox-v5-bringup_0.5.5.bin) · [`superseded/hbox-tarjetaV4_0.5.5.bin`](superseded/hbox-tarjetaV4_0.5.5.bin) | No usar. UART del GNSS en alta impedancia no bastó: `3V3_MODEM` queda en ~1 V y el módem no rearranca. |
| [`superseded/hbox-v5-bringup_0.5.4.bin`](superseded/hbox-v5-bringup_0.5.4.bin) · [`superseded/hbox-tarjetaV4_0.5.4.bin`](superseded/hbox-tarjetaV4_0.5.4.bin) | No usar. El ciclo de etapa al volver el 5 V no apagaba el módem (el UART del GNSS sostenía su riel): no rearrancaba sin reset. |
| [`superseded/hbox-v5-bringup_0.5.3.bin`](superseded/hbox-v5-bringup_0.5.3.bin) · [`superseded/hbox-tarjetaV4_0.5.3.bin`](superseded/hbox-tarjetaV4_0.5.3.bin) | Ventana de 2 min; al volver el 5 V el módem podía quedar en latch hasta un reset. |
| [`superseded/hbox-v5-bringup_0.5.2.bin`](superseded/hbox-v5-bringup_0.5.2.bin) · [`superseded/hbox-tarjetaV4_0.5.2.bin`](superseded/hbox-tarjetaV4_0.5.2.bin) | Primer reporte cada 10 min en batería; ventana de 90 s insuficiente para entregar la posición. |
| [`superseded/hbox-v5-bringup_0.5.1.bin`](superseded/hbox-v5-bringup_0.5.1.bin) · [`superseded/hbox-tarjetaV4_0.5.1.bin`](superseded/hbox-tarjetaV4_0.5.1.bin) | Última de campo antes del ciclo de 10 min (en batería dejaba la etapa encendida hasta vaciar el paquete). |
| [`superseded/hbox-v5-bringup_0.4.0.bin`](superseded/hbox-v5-bringup_0.4.0.bin) | Sin `$PHLG` en banda. Sustituida por 0.5.1. |
??? note "Historial por versión, 0.4.0 → 0.6.0"
- Desde 0.4.0: AUTO de fábrica (la etapa RTK enciende sola 3 s después de ver 5 V en P2); watchdog 16 s; ventilador (política v3.0.3); recuperación de enlace (ciclo de etapa si el F9P calla 60 s; LIMP tras 3 ciclos); LEDs de carga y color de estado; corte térmico 60 °C; corte de batería 3.40 V. Anota la versión en el acta.
- 0.6.0 CAMPO: 0.5.9 + gobernador de carga (arriba).
- 0.5.9 CAMPO: sin ciclo ni ahorro en batería (`ENABLE_DUTY 0`, `ENABLE_BATT_SAVER 0`); ningún ciclo de etapa en batería (`RECOVERY_ABORT`); reset del MCU al volver el 5 V tras ≥ 10 s; un reset en batería deja la etapa apagada hasta que vuelva el 5 V; vigilancia del módem: `STAT` con `rtcm_age= sta= rtcm_last= sag5= sagb= flat= modem=vivo|SOSPECHOSO|?`, eventos `MODEM_DARK`/`MODEM_BACK`/`MODEM_WATCH`. Con esos números se calibra 0.5.10.
- 0.5.8 CAMPO (retirada): nunca apaga el módem en batería (un módem ya encendido aguanta el paso de 24 V a batería); ráfaga de posición de ~8 s cada 10 min y `$PHLG` cada 3 min (`SAVER_ON`, `DUTY_SLEEP`/`DUTY_WAKE`, `ahorro=`); autonomía estimada ~30–35 h; recovery aún activo en batería.
- 0.5.7: cada despertar de batería (≥ 10 min tras la última ventana) y cada regreso del 5 V es un reset del MCU (`NVIC_SystemReset`, igual que P10): arranque en ~4 s; se pierden uptime y contadores. Tecla `R`. Un reset por SW1/P10 en batería abre ventana en 60 s y `P` se acepta en batería con vbat ≥ 3.60 V.
- 0.5.6: 3 s tras cada encendido de etapa, pulso de 500 ms al reset del módem por U13 P7 (`MODEM_RST`, `mrst=`, tecla `M`); requiere el puente U13 pin 12 → diodo BAT54 → SW4G1 pad 1. Con la etapa apagada PA9/PA10 en alta impedancia sin pull-up.
- 0.5.5: con la etapa apagada el UART del GNSS queda en alta impedancia (PA2 sostenía el riel del simpleRTK2B y, por él, el del módem); al volver el 5 V la etapa se cicla 10 s (`PWR_RETURN_CYCLE`).
- 0.5.2–0.5.7: en batería, ventana de reporte de 120–180 s cada 10 min (`DUTY_WAKE` / `DUTY_SLEEP next=<s>` / `DUTY_SKIP` / `DUTY_END`), ventilador y LEDs apagados en reposo; protecciones de batería (< 3.40 V) y temperatura (≥ 60 °C) por encima del ciclo. El MCU sigue despierto; el ahorro es la etapa (~2.3 W). Retirado en 0.5.8 para V5.5/V4; queda con `-DENABLE_DUTY=1`.
- 0.5.1: `$PHLG` suma `up_s`, `pwr` (VEH/BATT), `v5min`/`vbat_min` (mínimos de la ventana de 30 s; cazan hundimientos LTE de 50–200 ms) y `bkp_n`; cada cambio de estado sale como `$PHEV,<up_s>,<CODIGO>,<detalle>`. Los analizadores viejos ignoran los campos extra. El 18-sep se reportó que la etapa no encendía; resuelto el 19-sep: 0.5.1 ensambla, enciende y reporta completo.
- 0.5.0: Modo B. 10 s después de que habla el F9P, el MCU conmuta K1 y `$PHLG` viaja cada 30 s con el NMEA (`STAT … modoB=ON relay=… phlg_aire=…`, sube 1 cada 30 s). Si el MCU falla, K1 vuelve al paso directo. `B` lo bloquea para pruebas. Sin 5 V la etapa sigue desde la batería (`EVT BACKUP inicio` / `BACKUP fin` con duración y tramas); se apaga con vbat < 3.40 V o > 50 °C. `A` regresa a MANUAL.
## Parámetros del módem 4G NTRIP Master
La configuración se envía por el puerto USB **XBEE** del simpleRTK2B Pro a 115200 baudios, línea por
línea (solo las que empiezan con `$$$AS+`). Cada una debe contestar `OK`.
Se envían por el USB XBEE del simpleRTK2B a 115200, línea por línea (solo las que empiezan con `$$$AS+`); cada una contesta `OK`.
| Archivo | Qué es |
|---|---|
| [**4G_NTRIP_HelgenSRV-NMEA.example.txt**](4G_NTRIP_HelgenSRV-NMEA.example.txt) | **Plantilla** con todos los parámetros y sus nombres, con los valores sensibles en blanco |
[`4G_NTRIP_HelgenSRV-NMEA.example.txt`](4G_NTRIP_HelgenSRV-NMEA.example.txt): plantilla con todas las claves y los valores sensibles en blanco.
!!! danger "El archivo con los valores reales no está aquí, y es a propósito"
El archivo lleno contiene **usuario y contraseña del caster NTRIP y de la APN**. Publicarlo en el
sitio sería ponerlo al alcance de cualquiera que tenga una cuenta de técnico, y meterlo al
repositorio rompe un invariante del proyecto (*sin secretos en el repo, nunca*).
| Clave | Configura | En la plantilla |
|---|---|---|
| `AS+I=1111` | Entra a modo configuración | Fijo |
| `AS+A` · `AS+Q` · `AS+q` | APN: host, usuario, contraseña | `<APN_HOST>` `<APN_USER>` `<APN_PASS>` |
| `AS+S` · `AS+P` | Caster NTRIP: host y puerto | `<NTRIP_CASTER_HOST>` `<NTRIP_CASTER_PORT>` |
| `AS+U` · `AS+M` | Caster: `usuario:contraseña` y mountpoint | `<NTRIP_USER>:<NTRIP_PASS>` `<NTRIP_MOUNTPOINT>` |
| `AS+B=115200` | Velocidad hacia el F9P | Fijo |
| `AS+r` · `AS+h` · `AS+k=2` | Servidor secundario (monitor Helgen): IP, puerto, modo | `<SECONDARY_SERVER_IP>` `<SECONDARY_SERVER_PORT>` |
| `AS+K` | ID de estación = `H00xx` de la unidad; se anota en el acta | `<STATION_ID>` |
**Cómo se obtiene:** pídelo a ingeniería para la unidad que vas a configurar. Llega por un canal
directo, se usa y no se guarda en el equipo ni se reenvía.
Referencia rápida de los parámetros que más se consultan:
| Comando | Qué configura |
|---|---|
| `AS+I=1111` | Entra a modo configuración |
| `AS+A` · `AS+Q` · `AS+q` | APN: host, usuario, contraseña |
| `AS+S` · `AS+P` | Caster NTRIP: host y puerto |
| `AS+U` · `AS+M` | Caster: `usuario:contraseña` y mountpoint |
| `AS+B` | Velocidad del puerto (115200) |
| `AS+K` | **ID de estación** del módulo — se anota en el acta |
| `AS+r` · `AS+h` | Servidor secundario: IP y puerto |
!!! warning "Credenciales"
El archivo con los valores reales (usuario y contraseña del caster y de la APN) no está en el sitio ni en el repositorio: sin secretos en el repo, nunca. Pídelo a ingeniería para la unidad que vas a configurar; llega por canal directo, se usa y no se guarda ni se reenvía. Nunca lo escribas en un acta.
## Firmware y configuración del simpleRTK2B Pro (ZED-F9P)
Aquí hay que separar dos cosas que se confunden:
| Qué | De dónde sale | Estado |
| Qué | Origen | Estado |
|---|---|---|
| **Firmware del ZED-F9P** | **Estándar de u-blox**, no es nuestro: [u-blox → ZED-F9P → Documentation & resources → Firmware Update](https://www.u-blox.com/en/product/zed-f9p-module). Serie **HPG**. Se carga con **u-center** (solo Windows) a 115200 | ✅ disponible en el sitio de u-blox |
| **Configuración de Helgen** (`.txt` de u-center) | **Nuestra.** Define UART1 a 115200 (que es lo que lee la tarjeta), UART2 a la velocidad del módem y qué mensajes NMEA salen | ⬜ **pendiente de publicar — este es el que de verdad falta** |
| Firmware del ZED-F9P | Estándar de u-blox, serie HPG: [u-blox → ZED-F9P → Documentation & resources → Firmware Update](https://www.u-blox.com/en/product/zed-f9p-module). Se carga con u-center (solo Windows) a 115200 | Disponible en u-blox |
| Configuración Helgen (`.txt` de u-center) | Nuestra: UART1 a 115200 (lo que lee la tarjeta), UART2 a la velocidad del módem, mensajes NMEA | Pendiente de publicar |
!!! warning "No actualices el firmware del F9P sin una razón concreta"
El firmware de u-blox **no tiene nada que ver con nuestras fallas**: las correcciones llegan por
el módem 4G, no por el GNSS, y en las capturas de junio los receptores estaban sanos. Actualizarlo
es un proceso solo-Windows que puede dejar el receptor a medias, y **borra o invalida la
configuración**, que es justo la parte que sí importa.
!!! warning "No actualices el firmware del F9P sin razón concreta"
Las correcciones llegan por el módem, no por el GNSS, y en las capturas de junio los receptores estaban sanos. Actualizar es solo-Windows, puede dejar el receptor a medias y borra la configuración. Anota la versión (u-center → View → Messages → UBX-MON-VER) y déjala. Solo se actualiza por un arreglo de u-blox a un problema que estemos viendo, en banco, nunca en una unidad instalada.
Primero anota qué versión trae (**u-center → View → Messages → UBX-MON-VER**) y déjala así.
Solo se actualiza si u-blox publica un arreglo para un problema que estemos viendo, y siempre en
banco, nunca en una unidad instalada.
Leer o cargar la configuración: u-center → Tools → Receiver Configuration. Después, guarda en FLASH y reconecta para confirmar que sobrevive al reinicio; una configuración solo en RAM se pierde al primer corte (así se perdió tiempo en junio).
Para leer o cargar la configuración: u-center → *Tools → Receiver Configuration*. Después de cargar,
**guardar en FLASH** y reconectar para confirmar que sobrevive al reinicio — una configuración que
solo quedó en RAM se pierde al primer corte de energía, y así perdimos tiempo en junio.
## Publicar un firmware nuevo
## Cómo se publica un firmware nuevo
Para que un archivo pueda aparecer en esta página tiene que pasar por aquí. No es burocracia: un
binario mal compilado deja unidades muertas en el patio.
- [ ] Compilado con el `TARGET_` correcto para esa generación de tarjeta.
- [ ] **Probado en banco sobre hardware real**, no solo compilado sin errores.
- [ ] Verificada la polaridad del control de carga sobre la tarjeta.
- [ ] Nombre con **tarjeta y versión**: `hbox-tarjetaV3_X.Y.Z.bin`. La versión del firmware nunca se infiere de la tarjeta ni al revés.
- [ ] Su línea en `SHA256SUMS.txt`.
- [ ] Anotado en el `CHANGELOG.md` del repositorio de firmware, con fecha y quién lo probó.
- [ ] Actualizada la tabla de esta página.
Los archivos viven en `docs/descargas/` del repositorio `hbox-docs` y se publican con
`./scripts/deploy.sh`. Los `.bin` de firmware de campo están en `.gitignore` por tamaño y por
control de versiones: se copian a mano a esa carpeta antes de publicar.
Lista y comandos: [reflasheo §5](../procedimientos/reflasheo-unidades.md#5-para-ingenieria-generar-y-publicar-un-binario).
## Herramientas
- **STM32CubeProgrammer** (Windows/macOS/Linux): https://www.st.com/en/development-tools/stm32cubeprog.html
- **dfu-util** (macOS: `brew install dfu-util`; Linux: `apt install dfu-util`)
- Terminal serie: CoolTerm, `screen /dev/tty.usbmodem* 115200`, o el monitor serie de Arduino IDE
- STM32CubeProgrammer (Windows/macOS/Linux): https://www.st.com/en/development-tools/stm32cubeprog.html
- dfu-util (macOS: `brew install dfu-util`; Linux: `apt install dfu-util`)
- Terminal serie: CoolTerm, `screen /dev/tty.usbmodem* 115200` o el monitor serie de Arduino IDE
## Historial de revisiones
| Versión | Fecha | Cambios |
|---|---|---|
| 1.x | 2026-09-19 → 2026-09-27 | Cada binario nuevo (0.4.0 → 0.6.0) añadió su nota. |
| 1.8 | 2026-09-29 | Historial por versión en cajas plegables; enlaces a manuales. |
| 1.9 | 2026-09-29 | Edición breve. Una sola tabla de binarios vigentes; verificación SHA-256 con encabezado propio; tabla de parámetros del módem completa (antes en la configuración de la unidad); lista de publicación → reflasheo §5. |
Versiones anteriores en git.

View File

@ -1,74 +1,55 @@
# Diagnóstico de unidades HBOX en campo — procedimiento
**Para:** técnicos de campo (Alan, Daniel) · **Versión:** 1.0 · 18-sep-2026 · **Responsable:** Leo Rodríguez
El acta se llena en el teléfono, en la máquina:
**[▶ Abrir el acta de diagnóstico en campo](../formularios/diagnostico.html)**
---
title: "Diagnóstico de unidades HBOX en campo"
tags: [project-drogheda, hbox, procedimiento, diagnostico, campo, v3, icave]
date: 2026-09-18
project: Project Drogheda
author: Helgen Technologies
version: 1.2
---
## 1. Qué se espera de ti (y qué no)
# Diagnóstico de unidades HBOX en campo
**No** se espera que encuentres la causa de la falla. Eso se determina en el banco de
Querétaro, con instrumentos que no existen en el patio.
!!! abstract "Para quién · Cuándo · Tiempo · Necesitas"
- Para quién: técnicos de campo (Alan y Daniel).
- Cuándo: una unidad V3 instalada (EinarBoard 1.0 con Blackpill, ICAVE) dejó de reportar; antes de desmontarla.
- Tiempo: 2–3 h con permiso, acceso a la máquina y captura de 3 min.
- Necesitas: teléfono con cámara y datos, multímetro, laptop con cable micro-USB (muy recomendada), desarmadores o llave del gabinete, etiquetas y plumón, bolsa antiestática, termómetro infrarrojo (deseable, mide la hipótesis térmica) y el [acta de diagnóstico en campo](../formularios/diagnostico.html), que se llena en el teléfono en la máquina.
Lo que sí depende de ti, y que nadie más puede hacer, es **traer la evidencia completa del
estado en que estaba la unidad**. Esa es toda tu misión, y es más valiosa de lo que parece:
No se espera que encuentres la causa; eso se hace en el banco de Querétaro. Tu trabajo es traer la evidencia completa del estado en que estaba la unidad.
!!! danger "La regla que más se rompe y más caro sale"
**Una unidad reiniciada antes de leerla ya no se puede diagnosticar.**
El HBOX guarda en su memoria la **temperatura máxima** que ha alcanzado, **cuántas veces
se ha tenido que recuperar** y **por qué arrancó la última vez**. Todo eso se borra al
cortarle la corriente. Si llegas y lo primero que haces es desconectarlo "a ver si así
revive", destruiste el único dato que explicaba la falla — y la unidad vuelve a fallar
dentro de un mes sin que sepamos por qué.
!!! warning "No cortes la energía antes del paso 5"
El HBOX guarda en RAM la temperatura máxima, cuántas veces se recuperó y por qué arrancó la última vez. Cortar la energía lo borra. Una unidad reiniciada antes de leerla ya no se puede diagnosticar y vuelve a fallar sin que sepamos por qué.
Por eso el procedimiento dice: **no cortes la energía hasta terminar el paso 5.**
## 1. Antes de ir
## 2. Antes de ir — permiso de acceso y de qué máquina hablamos
### Máquina
Dos cosas tienen que estar resueltas **antes** de salir. Sin ellas la visita no se hace.
En ICAVE el equipo se conoce por la máquina (`FL-JUN-060`, `RT-ZPMC-20`, `HS-WES-62`), no por el HBOX. El permiso, el operador y el acta van por máquina.
### 2.1 De qué máquina estamos hablando
En ICAVE nadie conoce el equipo por el número del HBOX: lo conocen por la **máquina**
(`FL-JUN-060`, `RT-ZPMC-20`, `HS-WES-62`). El permiso se pide por máquina, el operador te
lleva a una máquina y el acta se cruza por máquina.
Las tres unidades v3 desplegadas y en qué máquina va cada una:
| Máquina (como la nombra ICAVE) | Equipo | Unidad HBOX | Estado hoy |
| Máquina (ICAVE) | Equipo | Unidad | Estado |
|---|---|---|---|
| `FL-JUN-060` | Montacargas | **RTK-014** | **Instalada.** Dejó de reportar el 17-sep. Nadie la ha tocado — evidencia intacta |
| `RT-ZPMC-20` | RTG | **RTK-003** | Desmontada, en el escritorio del taller |
| `HS-WES-62` | Tractoplana | **RTK-006** | Desmontada, en el escritorio del taller |
| `FL-JUN-060` | Montacargas | RTK-014 | Instalada. Dejó de reportar el 17-sep; nadie la ha tocado |
| `RT-ZPMC-20` | RTG | RTK-003 | Desmontada, en el taller |
| `HS-WES-62` | Tractoplana | RTK-006 | Desmontada, en el taller |
Solo `FL-JUN-060` necesita permiso de acceso: las otras dos ya están en el taller y se revisan en banco.
Solo `FL-JUN-060` necesita permiso; las otras dos se revisan en [banco](../procedimientos/diagnostico-banco.md). Estas unidades son `RTK-006` (tres dígitos); los módems 4G del HBOX v5 son `RTK-0006` (cuatro) y van en otra acta.
!!! warning "No confundir los números"
Estas unidades de campo son **`RTK-006`** (tres dígitos). Los módems 4G del HBOX v5 son
**`RTK-0006`** (cuatro dígitos) y viven en otra acta. Son cosas distintas.
Confirma en qué máquina está la unidad antes de pedir acceso; si hay duda, pregúntalo a ICAVE en el mismo correo. Si al llegar está en otra máquina, anótalo en el acta: el registro estaba mal.
Por eso, antes de pedir el acceso hay que **saber en qué máquina está montada la unidad** que
queremos revisar. Si el registro no lo dice o hay duda, se confirma con ICAVE en el mismo correo.
Y si al llegar la unidad resulta estar en **otra** máquina de la que dice la lista, eso se anota
en el acta: el registro estaba mal y hay que corregirlo.
### Correo de acceso
### 2.2 El correo de solicitud de acceso
Lo manda Operaciones (Adriana) al contacto de ICAVE, con copia a Agustín Alfonseca, Leon David Piña, Leo y los técnicos. Una máquina por correo; solo cambian la unidad y, si aplica, los técnicos.
Lo manda **Operaciones (Adriana)** al contacto de ICAVE, con copia a Agustín Alfonseca,
Leon David Piña, Leo y los técnicos que van a subir. Modelo:
> **Asunto:** Solicitud de acceso a la unidad `FL-JUN-060` — revisión de equipo HBOX
> Asunto: Solicitud de acceso a la unidad `FL-JUN-060` — revisión de equipo HBOX
>
> Estimado **[nombre]**:
> Estimado [nombre]:
>
> Buen día.
>
> Por medio del presente, solicito de tu apoyo para que se nos proporcione acceso a la unidad
> **`FL-JUN-060`**, con la finalidad de realizar una revisión del equipo HBOX instalado en dicha unidad.
>
> La actividad será llevada a cabo por los técnicos **Alán Basurto y Daniel Martínez**, quienes
> La actividad será llevada a cabo por los técnicos Alán Basurto y Daniel Martínez, quienes
> realizarán las verificaciones correspondientes para asegurar el correcto funcionamiento del sistema.
>
> Quedamos atentos a tus comentarios y al apoyo para coordinar el acceso en el horario que mejor
@ -76,147 +57,114 @@ Leon David Piña, Leo y los técnicos que van a subir. Modelo:
>
> Muchas gracias. Saludos cordiales.
Lo único que cambia entre visitas es **el número de la unidad** y, si aplica, **los nombres de
los técnicos**. Una máquina por correo: mezclar dos en el mismo correo enreda la autorización.
### 2.3 La regla
| Situación | ¿Se sube a la máquina? |
| Situación | Se sube a la máquina |
|---|---|
| Correo contestado y horario acordado | **Sí**, con la máquina detenida y bloqueada (LOTO) |
| Autorización de palabra del supervisor en sitio | Sí, pero se anota quién autorizó y a qué hora |
| Sin respuesta al correo | **No.** Se revisa desde el piso lo que se alcance y se reagenda |
| La unidad ya está desmontada, en el taller | No aplica: no hay máquina de por medio |
| Correo contestado y horario acordado | Sí, con la máquina detenida y bloqueada (LOTO) |
| Autorización de palabra del supervisor en sitio | Sí; anota quién y a qué hora |
| Sin respuesta | No. Revisa desde el piso lo que alcances y reagenda |
Una revisión incompleta se repite la semana que entra. Un accidente en un patio de maniobras, no.
## 2. Seguridad
## 3. Qué llevar
1. Nunca trabajes sobre un RTG o equipo energizado sin permiso y LOTO. Si está operando, no subas; agenda con el supervisor de ICAVE.
2. Batería de litio hinchada, caliente o con olor: deja de desarmar, no la perfores, sepárala de la electrónica, foto y aviso el mismo día. Una batería hinchada no viaja en avión.
3. No abras el gabinete bajo lluvia ni mojado por fuera.
4. El gabinete tiene 24 V: un corto quema la tarjeta. Mide con la máquina apagada siempre que puedas.
| Herramienta | Para qué | ¿Obligatoria? |
## 3. Pasos
| Paso | Acción | Para qué |
|---|---|---|
| Teléfono con cámara y datos | El acta y las fotos | **Sí** |
| Multímetro | Decidir si la falla es del gabinete o del HBOX | **Sí** |
| Laptop + cable USB (micro-USB) | La captura serial: el dato más valioso de la visita | Muy recomendada |
| Desarmadores / llave del gabinete | Abrir | Sí |
| Etiquetas y plumón | Marcar la unidad que se desmonta | Sí |
| Bolsa antiestática | Transportar la unidad desmontada | Sí |
| Termómetro infrarrojo | Medir la temperatura interior del gabinete | Deseable — cuesta poco y mide la hipótesis térmica |
| 0 | Permiso de acceso y máquina confirmada | Sin permiso no hay visita |
| 1 | Anota por qué vienes y qué dijo el operador | La hora en que dejó de reportar acota la causa |
| 2 | Fotos con el gabinete cerrado: máquina, gabinete, antenas | Sol, altura, antena floja o robada |
| 3 | Cuenta los destellos del LED en 10 s (§4) | Diagnóstico inmediato |
| 4 | Abre, huele, toca, revisa la batería | Calor y agua dejan rastro |
| 5 | Captura por USB a 115200, 3 min (§6) | Saca la memoria antes de perderla |
| 6 | Ahora sí: corta la energía y mide (§5) | La evidencia ya está guardada |
| 7 | Clasifica (§7), decide cómo queda y firma | Una visita comparable |
## 4. Seguridad
## 4. LED
1. **Nunca** trabajes sobre un RTG o equipo energizado sin el permiso y el bloqueo (LOTO) del
terminal. Si el equipo está operando, **no subas**: agenda con el supervisor de ICAVE.
2. **Batería de litio.** Hinchada, caliente o con olor: no sigas desarmando, no la perfores,
sepárala de la electrónica, foto y aviso el mismo día. **Una batería hinchada no viaja en avión.**
3. **No abras el gabinete bajo lluvia** ni si está mojado por fuera.
4. El gabinete puede tener **24 V**: no es peligroso para la vida, pero un corto sí puede
quemar la tarjeta. Mide con la máquina apagada siempre que puedas.
Cuenta con reloj durante 10 s; 5 y 10 destellos significan cosas opuestas.
## 5. Los pasos, en orden
| Paso | Qué haces | Por qué importa |
|---|---|---|
| **0** | **Permiso de acceso a la máquina** y confirmar en cuál está montada | Sin autorización no hay visita; sin máquina no hay permiso |
| 1 | Anotas **por qué vienes** y qué dijo el operador | La hora en que dejó de reportar acota la causa |
| 2 | Fotos con el gabinete **cerrado**: máquina, gabinete, antenas | Sol, altura, antena floja o robada se ven aquí |
| 3 | **Cuentas los destellos del LED** en 10 segundos | Es el diagnóstico gratis que la unidad te está dando |
| 4 | Abres, hueles, tocas, revisas la batería | Calor y agua dejan rastro visible |
| 5 | **Captura por USB** a 115200 baudios, 3 minutos | Saca la memoria de la unidad antes de perderla |
| 6 | *Ahora sí* puedes cortar la energía y probar | Ya está toda la evidencia guardada |
| 7 | Clasificas, decides cómo queda y firmas | Convierte tu visita en un dato comparable |
## 6. Tabla del LED — qué te está diciendo la unidad
Mira el LED **10 segundos con el reloj** y **cuenta cuántas veces prende**. No lo estimes:
5 destellos y 10 destellos en 10 segundos significan cosas **opuestas**.
| Lo que ves | Destellos en 10 s | Estado interno | Qué significa |
| Se ve | Destellos en 10 s | Estado | Significa |
|---|---|---|---|
| **Apagado**, nunca prende | 0 | sin energía o MCU muerto | No le llega corriente, **o** el HBOX ya no enciende. El multímetro decide cuál. |
| **Fijo encendido** | — | `RUN` + vehículo + enlace OK | La unidad está sana. Si no la ves en el sistema, el problema está en el servidor. |
| Destello **muy cortito** cada 4 s | ~2, muy breves | `SLEEP` | Se durmió por batería baja. Lleva tiempo sin corriente de la máquina. |
| Prende 1 s / apaga 1 s (**latido**) | **5** | `RUN` **sin energía de vehículo** | El HBOX vive pero está en su batería: la máquina no le da 24 V. La falla está aguas arriba. |
| Parpadeo parejo 1 por segundo | **10** | `RUN` + enlace degradado | Las correcciones llegan a ratos. Antenas, señal, SIM. |
| **Dos destellos** juntos y pausa | ~7 | `RUN` + enlace en las últimas | Prácticamente sin correcciones. |
| Parpadeo **rápido continuo** | no se cuentan | arrancando o reiniciándose | Puede estar reiniciándose en bucle. **Solo la captura USB lo confirma.** |
| Apagado | 0 | Sin energía o MCU muerto | El multímetro decide cuál |
| Fijo | — | `RUN` + vehículo + enlace OK | Unidad sana; si no aparece en el sistema, es el servidor |
| Destello muy corto cada 4 s | ~2 | `SLEEP` | Dormida por batería baja; lleva tiempo sin corriente de la máquina |
| 1 s encendido / 1 s apagado | 5 | `RUN` sin vehículo | Vive en batería; la máquina no le da 24 V |
| Parejo, 1 por segundo | 10 | `RUN` + enlace degradado | Correcciones a ratos: antenas, señal, SIM |
| Doble destello y pausa | ~7 | `RUN` + enlace casi perdido | Prácticamente sin correcciones |
| Rápido continuo | — | Arrancando o reiniciando | Posible bucle; solo la captura USB lo confirma |
## 7. Medidas esperadas
## 5. Medidas
Con la punta negra en el chasis/negativo del gabinete:
Punta negra en el chasis/negativo del gabinete.
| Dónde mides | Esperado | Si sale mal |
| Punto | Esperado | Si sale mal |
|---|---|---|
| Entrada de la máquina al gabinete | 12 V o 24 V según el equipo | La máquina no está alimentando el gabinete |
| Salida de la fuente Mean Well | **23 – 26 V** | Fuente muerta o entrada ausente |
| **GX16 pines 1-2** (lo que le llega al HBOX) | **23 – 26 V** | *Esta es la medida clave — ver abajo* |
| GX16 pin 3 (ignición), máquina encendida | 12 – 24 V | Señal de ignición perdida |
| Entrada de la máquina al gabinete | 12 o 24 V según el equipo | La máquina no alimenta el gabinete |
| Salida de la Mean Well | 23–26 V | Fuente muerta o sin entrada |
| GX16 pines 1-2 (lo que llega al HBOX) | 23–26 V | Medida clave, abajo |
| GX16 pin 3 (ignición), máquina encendida | 12–24 V | Ignición perdida |
!!! tip "La medida que parte el diagnóstico en dos"
**Hay 24 V en el GX16 y el LED sigue apagado** → la falla es **del HBOX** → se desmonta y se envía.
**No hay 24 V en el GX16** → la falla es **del gabinete o de la máquina** (breaker, fusible,
fuente, cable) → el HBOX probablemente está sano; no lo desmontes.
24 V en el GX16 y LED apagado: falla del HBOX; se desmonta y se envía. Sin 24 V en el GX16: falla del gabinete o la máquina (breaker, fusible, fuente, cable); el HBOX probablemente está sano, no lo desmontes.
## 8. La captura por USB
## 6. Captura por USB
Es el paso que más nos sirve y el que más se salta. Vale la pena cargar la laptop.
```
1. Conecta el USB del Blackpill a la laptop.
2. Abre el puerto serie nuevo a 115200 baudios (PuTTY, TeraTerm o el monitor de Arduino).
3. Activa "guardar a archivo" (log to file).
4. Déjalo correr 3 minutos.
5. Presiona RESET y graba también el arranque.
6. Guarda el archivo con el nombre de la unidad.
```
Verás líneas así:
1. USB del Blackpill a la laptop.
2. Puerto serie a 115200 (PuTTY, TeraTerm o monitor de Arduino), guardando a archivo.
3. Graba 3 min.
4. Pulsa RESET y graba también el arranque.
5. Guarda con el nombre de la unidad.
```
BOOT,1240,fw=3.0.3,reset=WDG
TLM,182000,RUN,DEGR,1,11,4210,1HZ,3.92,5.02,1,1,58,81,0,3,1,900,44,38,57,…
```
Los cuatro campos que debes anotar aunque no puedas copiar la línea completa:
Si no puedes copiar la línea, anota al menos:
| Campo | Qué es | Por qué importa |
| Campo | Qué es | Sirve para |
|---|---|---|
| `tmax` | La **temperatura máxima** que ha visto la unidad | Confirma o descarta la hipótesis térmica de un plumazo |
| `rec` | Cuántas veces se ha tenido que **recuperar** sola | Un número alto = falla intermitente, no muerte súbita |
| `vbat` | Voltaje de la batería | Diferencia "batería agotada" de "batería dañada" |
| `veh` | 1 = le llega corriente de la máquina, 0 = no | Resuelve solo la mitad de los casos |
| `tmax` | Temperatura máxima vista | Confirma o descarta la hipótesis térmica |
| `rec` | Recuperaciones | Alto = falla intermitente, no muerte súbita |
| `vbat` | Voltaje de batería | Agotada vs dañada |
| `veh` | 1 = le llega corriente de la máquina | Resuelve la mitad de los casos |
| `reset=` (línea `BOOT`) | Por qué arrancó la última vez (corte, watchdog, brownout) | La causa escrita por la unidad |
Y de la línea `BOOT`, el campo `reset=` dice **por qué arrancó la última vez**
(corte de energía, watchdog, brownout). Es la causa de muerte escrita por la propia unidad.
## 7. Clasificación
## 9. Catálogo de clasificaciones
Elige lo que observaste, no lo que supones. "No está claro" es una respuesta válida.
Elige lo que **observaste**, no lo que supones. *No está claro* es una respuesta válida y útil;
inventar una causa nos hace perder semanas.
| Clasificación | Qué la sustenta | Qué pasa después |
| Clasificación | Evidencia | Después |
|---|---|---|
| Sin corriente desde la máquina o el gabinete | 0 V en el GX16 | Se corrige en sitio (breaker, fusible, cable) |
| El HBOX no enciende aunque le llega 24 V | 24 V en el GX16 + LED apagado | Desmontar y enviar a QRO |
| Enlace 4G: no hay datos ni correcciones | LED 1 Hz o doble destello | Se revisa SIM, antenas y servidor antes de tocar hardware |
| El HBOX no enciende con 24 V | 24 V en GX16 + LED apagado | Desmontar y enviar a QRO |
| Enlace 4G sin datos ni correcciones | LED 1 Hz o doble destello | SIM, antenas y servidor antes de tocar hardware |
| Antena suelta, rota o faltante | Foto del conector | Se corrige en sitio |
| Batería dañada | Hinchada, caliente o con fuga | Aislar hoy; **no** enviar por avión |
| Daño por calor | Quemado, derretido, decolorado | Evidencia directa para el rediseño térmico |
| Agua adentro del gabinete | Encharcado o empañado | Se revisa sellado y prensaestopas |
| Daño mecánico o golpe | Foto | Se revisa el montaje |
| La unidad se ve sana — parece el servidor | LED fijo y captura sana | **No desmontar.** Ingeniería revisa el backend |
| No está claro — se necesita banco | Todo lo demás | Desmontar y enviar |
| Batería dañada | Hinchada, caliente o con fuga | Aislar hoy; no enviar por avión |
| Daño por calor | Quemado, derretido, decolorado | Evidencia para el rediseño térmico |
| Agua en el gabinete | Encharcado o empañado | Sellado y prensaestopas |
| Golpe o daño mecánico | Foto | Revisar el montaje |
| Parece el servidor | LED fijo y captura sana | No desmontar; ingeniería revisa el backend |
| No está claro | Todo lo demás | Desmontar y enviar |
## 10. Qué pasa cuando envías el acta
## 8. Después de enviar el acta
1. Queda guardada en el servidor con tu nombre, la hora y las fotos.
2. Aparece en el **[tablero de campo](tablero-campo.html)**, que ingeniería revisa en Querétaro.
3. La siguiente persona que abra el acta de esa unidad **verá tu visita** antes de empezar.
- Queda en el servidor con tu nombre, hora y fotos, y aparece en el [tablero de campo](tablero-campo.html).
- Quien abra el acta de esa unidad verá tu visita antes de empezar.
- Sin señal, el acta se guarda sola en el teléfono; fotos y envío necesitan datos. Si falla, reintenta desde el mismo formulario.
- Unidad desmontada: sigue en [diagnóstico en banco](../procedimientos/diagnostico-banco.md). Tarjeta: [manual V3](../manuales/manual-tarjeta-V3.md).
Puedes llenar el acta **sin señal**: se guarda sola en el teléfono. Las fotos y el envío
necesitan datos — si falla, vuelve a intentar desde el mismo formulario cuando tengas señal,
no vuelvas a empezar.
Para ingeniería: cada visita es un registro independiente (`ACTAS_REPETIBLES`). Fotos en `/srv/projects/drogheda/adjuntos/diagnostico-campo/<serie>/`; índice en `/srv/projects/drogheda/actas/diagnostico-campo/_indice.csv`.
!!! note "Para ingeniería"
Cada visita es un registro independiente (`ACTAS_REPETIBLES`), no se bloquea por serie.
Las fotos se guardan en `/srv/projects/drogheda/adjuntos/diagnostico-campo/<serie>/`.
El índice por tipo está en `/srv/projects/drogheda/actas/diagnostico-campo/_indice.csv`.
## Historial de revisiones
| Versión | Fecha | Cambios |
|---|---|---|
| 1.0 | 2026-09-18 | Primera versión. |
| 1.1 | 2026-09-29 | Encabezado uniforme; enlaces al banco y al manual V3. |
| 1.2 | 2026-09-29 | Edición breve; material dentro del encabezado. |
Versiones anteriores en git.

View File

@ -1,180 +1,142 @@
# Remote Diagnostic Protocol — Pulled HBOX Units
**Date:** 2026-06-19 · **Owner:** Leo Rodriguez
**Situation:** all HBOX units were **removed from the machines**. We have **4 units
in hand: 3 not working, 1 working-ish.** They are **physically in Veracruz**; the
team is in **Querétaro** → debugging is **remote** until they're shipped or someone
on-site acts as our hands.
**Firmware on these units = v1** (no MCU thermal log) → thermal evidence must come
from **physical inspection + a bench power test**, not from the firmware.
> The single working-ish unit is the **control**. Every measurement below should be
> taken on it too, so "bad" readings on the dead units have a baseline to compare
> against.
---
title: "Protocolo de diagnóstico remoto — unidades HBOX retiradas"
tags: [project-drogheda, hbox, diagnostico, remoto, v1, veracruz, historico, procedimiento]
date: 2026-06-19
project: Project Drogheda
author: Helgen Technologies
status: HISTÓRICO — jun-2026, unidades con firmware v1 retiradas de las máquinas en Veracruz
---
## 0. Decision gate (make this call first)
# Protocolo de diagnóstico remoto — unidades HBOX retiradas
**Recommendation: ship all 4 units to Querétaro.** They are small, and remote-
debugging *dead* electronics is slow and rarely conclusive — a 1–2 day courier buys
full bench access (PSU with current limit, scope, u-center, reflash, thermal soak,
teardown). Bring the working-ish unit too; it's the reference.
Tarjeta: unidades de la primera generación con firmware **v1** (Blackpill + PowerBoost, jun-2026). El orden de trabajo sigue valiendo para cualquier unidad desmontada.
Choose remote-hands **only if** shipping is blocked (client chain-of-custody, the
units must stay on-site, or courier delay is unacceptable). Confirm with ICAVE who
**owns** the units and whether they may leave the terminal.
!!! abstract "Para quién · Cuándo · Tiempo · Necesitas"
- Para quién: ingeniería en Querétaro y un técnico «manos remotas» en Veracruz
- Cuándo: unidades retiradas de las máquinas que no pueden llegar al banco de inmediato. Hoy el procedimiento vigente es [diagnóstico en campo](procedimiento-diagnostico-campo.md) → [diagnóstico en banco](../procedimientos/diagnostico-banco.md)
- Tiempo: nivel 0: 20 min por unidad; nivel 1: +10 min; nivel 2: 1 h por unidad
- Necesitas: fuente de banco con límite de corriente, teléfono con cámara, cable USB y laptop (nivel 1), escritorio remoto (nivel 2)
| Path | When | Cost |
Traducido del original en inglés (19-jun-2026).
Fecha: 2026-06-19 · Responsable: Leo Rodríguez
Situación: todas las unidades HBOX fueron retiradas de las máquinas. Hay **4 unidades en mano: 3 no funcionan, 1 funciona a medias.** Están físicamente en Veracruz; el equipo está en Querétaro → la depuración es remota hasta que se envíen o alguien en sitio actúe como nuestras manos.
**Firmware en estas unidades = v1** (sin registro térmico del MCU) → la evidencia térmica tiene que salir de la inspección física + una prueba de energizado en banco, no del firmware.
!!! note "La unidad de control"
La única unidad que funciona a medias es el control. Cada medición de abajo debe tomarse también en ella, para que las lecturas «malas» de las unidades muertas tengan una línea base contra la cual comparar.
## 0. Compuerta de decisión (tomar esta decisión primero)
**Recomendación: enviar las 4 unidades a Querétaro.** Son pequeñas, y depurar a distancia electrónica *muerta* es lento y rara vez concluyente — una mensajería de 1–2 días compra acceso completo al banco (fuente con límite de corriente, osciloscopio, u-center, reflasheo, prueba térmica prolongada, desarmado). Traer también la unidad que funciona a medias; es la referencia.
Elegir manos remotas **solo si** el envío está bloqueado (cadena de custodia del cliente, las unidades deben quedarse en sitio, o el retraso de la mensajería es inaceptable). Confirmar con ICAVE quién es dueño de las unidades y si pueden salir de la terminal.
| Camino | Cuándo | Costo |
|---|---|---|
| **Ship to QRO** *(recommended)* | units may leave Veracruz | courier + 1–2 days |
| **Remote-hands in Veracruz** | units must stay; cooperative on-site tech exists | needs the protocol below + their time |
| Enviar a QRO *(recomendado)* | las unidades pueden salir de Veracruz | mensajería + 1–2 días |
| Manos remotas en Veracruz | las unidades deben quedarse; hay un técnico cooperativo en sitio | necesita el protocolo de abajo + su tiempo |
Either way, **start §2 (backend analysis) now from Querétaro** — it needs no units.
De cualquier forma, **empezar §2 (análisis del backend) ahora desde Querétaro** — no necesita unidades.
---
## 1. Qué se puede y qué no se puede saber a distancia
## 1. What we can / cannot learn remotely
| Question | Remote-hands? | How |
| Pregunta | ¿Manos remotas? | Cómo |
|---|---|---|
| Is the LiPo swollen / burnt / leaking? | ✅ | photo checklist (§3 Tier 0) |
| Connectors/SMA loose, solder cracked? | ✅ | photos + wiggle test |
| Does it draw current / boot on power? | ✅ | bench PSU **current reading** (§3) |
| LED state on power-up? | ✅ | film the LED, decode (§4) |
| Battery V, fix quality, state, packets | ✅ (Tier 1) | USB dashboard capture |
| Does the 4G modem attach / get a fix? | ✅ (Tier 1–2) | dashboard / u-center / remote desktop |
| Does it reach our gateway when powered? | ✅ | watch htracker for that unit's `cell_id` |
| Exact failed component / thermal soak | ❌ (needs bench) | **ship to QRO** |
| ¿La LiPo está inflada / quemada / con fuga? | ✅ | checklist de fotos (§3 nivel 0) |
| ¿Conectores/SMA flojos, soldadura agrietada? | ✅ | fotos + prueba de meneo |
| ¿Consume corriente / arranca al energizar? | ✅ | lectura de corriente de la fuente de banco (§3) |
| ¿Estado del LED al encender? | ✅ | grabar el LED, decodificar (§4) |
| V de batería, calidad de fix, estado, paquetes | ✅ (nivel 1) | captura del tablero por USB |
| ¿El módem 4G se registra / obtiene fix? | ✅ (niveles 1–2) | tablero / u-center / escritorio remoto |
| ¿Llega a nuestro gateway cuando está energizada? | ✅ | observar htracker para el `cell_id` de esa unidad |
| Componente exacto fallado / prueba térmica prolongada | ❌ (necesita banco) | enviar a QRO |
So ~80% of triage is remotely achievable; only component-level confirmation and
thermal reproduction strictly require the units in QRO.
Así que ~80 % del triaje se puede hacer a distancia; solo la confirmación a nivel de componente y la reproducción térmica requieren estrictamente las unidades en QRO.
---
## 2. Hacer esto ahora desde Querétaro (sin unidades)
## 2. Do this NOW from Querétaro (no units needed)
El backend está en nuestro propio servidor — totalmente depurable desde QRO, y según `02-Architecture-Software/backend-review.md` puede sacar de Wialon unidades sanas por sí solo.
The backend is on our own server — fully debuggable from QRO, and per
`02-Architecture-Software/backend-review.md` it can take healthy units off Wialon by itself.
1. Separación histórica online/offline. Para los días antes del retiro, comparar el registro de cada unidad en htracker (online al recibir UDP) contra Wialon (online por posiciones recibidas). Una unidad que estaba online en htracker pero offline en Wialon fue una víctima del backend (bloqueo anti-salto / atasco HOL), *no* hardware muerto — eso replantea cuáles unidades «muertas» son en realidad fallas de hardware.
2. Logs del gateway alrededor de la ventana de muerte: buscar el aviso anti-salto (`¡Filtro Anti-Salto Activado!`) repitiéndose para un `cell_id` (→ bloqueo), y caídas del buffer de recepción UDP con `netstat -su` (→ atasco HOL).
3. Reproducir en banco con la unidad que funciona a medias una vez energizada (en VER por manos remotas, o en QRO): apuntarla al gateway y observar si el retranslator la reenvía limpiamente o dispara el filtro.
4. Disponibilidad del caster (HelgenSRV) + saldo de datos / suspensión por SIM en la ventana.
1. **Historical online-vs-offline split.** For the days before removal, compare each
unit's **htracker** record (online on UDP receipt) against **Wialon** (online on
positions received). A unit that was **online in htracker but offline in Wialon**
was a **backend victim** (anti-jump lock-out / HOL stall), *not* dead hardware —
that reframes which "dead" units are actually hardware failures.
2. **Gateway logs around the death window:** look for the anti-jump warning
(`¡Filtro Anti-Salto Activado!`) spamming one `cell_id` (→ lock-out), and for
`netstat -su` UDP receive-buffer drops (→ HOL stall).
3. **Bench-reproduce with the working-ish unit** once it's powered (in VER via
remote-hands, or in QRO): point it at the gateway and watch whether the
retranslator forwards it cleanly or trips the filter.
4. Caster (HelgenSRV) uptime + **per-SIM data balance/suspension** for the window.
Este es el trabajo de mayor apalancamiento que se puede hacer hoy y no necesita a nadie en Veracruz.
This is the highest-leverage work we can do today and it needs nobody in Veracruz.
## 3. Protocolo de manos remotas (por niveles según lo que tenga la persona en sitio)
---
Darle al técnico en sitio el nivel que le corresponda. Las instrucciones listas para enviar están en §6b.
## 3. Remote-hands protocol (tiered by what the on-site person has)
### Nivel 0 — energía + cámara de teléfono (mínimo)
Give the on-site tech the matching tier. A ready-to-send Spanish version is in §6.
Para cada unidad, antes de energizar:
### Tier 0 — power + a phone camera (minimum)
For **each** unit, before powering:
1. **Photograph**: the whole inside, then close-ups of the **LiPo** (any swelling,
bulging, brown/black marks, leaks?), the **PowerBoost**, every **connector/Dupont**,
the **SMA antenna** joints, and any **discoloured/burnt** components.
2. **Wiggle test** (gently): do any Dupont/terminal/SMA connectors move or fall off?
3. **Bench power-on with a current-limited PSU** at the unit's normal voltage
(12 V or 24 V), current limit ~2 A:
- Read **inrush** then **steady current**. Record the number.
- **0 mA / trips at 0:** open circuit / dead input stage / blown fuse.
- **Hits the current limit / very hot:** short → **power off immediately**.
- **~50–150 mA steady, nothing else:** MCU only, stack not powering (load switch
/ boost / modem).
- **Normal-ish draw + LED activity:** boots — go to Tier 1.
- Compare every reading to the **working-ish unit**.
4. **Film the LED** for ~60 s from power-up (decode in §4).
1. Fotografiar: todo el interior, después acercamientos de la LiPo (¿inflada, abombada, marcas cafés/negras, fugas?), del PowerBoost, de cada conector/Dupont, de las uniones de las antenas SMA y de cualquier componente decolorado/quemado.
2. Prueba de meneo (suave): ¿algún conector Dupont/terminal/SMA se mueve o se cae?
3. Energizado en banco con fuente con límite de corriente al voltaje normal de la unidad (12 V o 24 V), límite de corriente ~2 A:
- Leer la corriente de arranque y después la estable. Anotar el número.
- **0 mA / se dispara en 0:** circuito abierto / etapa de entrada muerta / fusible fundido.
- Llega al límite de corriente / muy caliente: corto → apagar de inmediato.
- **~50–150 mA estables, nada más:** solo el MCU, la etapa no se energiza (interruptor de carga / boost / módem).
- Consumo más o menos normal + actividad del LED: arranca — pasar al nivel 1.
- Comparar cada lectura con la unidad que funciona a medias.
4. Grabar el LED ~60 s desde el encendido (decodificar en §4).
### Tier 1 — Tier 0 + USB cable + a laptop
5. Plug the Blackpill **USB** into the laptop; open **PuTTY/TeraTerm at 115200**.
The v1 watchdog prints a live dashboard. **Capture 3–5 min** (log to file) and
send it. Read off: **BATTERY V**, **SYSTEM STATE**, **RTK FIX**, **PACKETS TX'd**,
PWR/IGN inputs. (No MCU-temp line — these are v1.)
6. Note whether **PACKETS TX'd increments** (GNSS+serial alive) and whether **RTK
FIX** ever reaches 4/5 (corrections arriving = 4G/NTRIP working).
### Nivel 1 — nivel 0 + cable USB + laptop
### Tier 2 — Tier 1 + remote-desktop (AnyDesk/TeamViewer) into the laptop
7. We drive from QRO: read the live dashboard, run **u-center** on the ZED-F9P
(fix, sat levels, config), issue **AT commands** to the 4G modem (attach, signal),
and if useful **reflash v2** to gain thermal logging + better recovery.
5. Conectar el USB del Blackpill a la laptop; abrir **PuTTY/TeraTerm a 115200**. El watchdog v1 imprime un tablero en vivo. **Capturar 3–5 min** (grabar a archivo) y enviarlo. Leer: **BATTERY V**, **SYSTEM STATE**, **RTK FIX**, PACKETS TX'd, entradas PWR/IGN. (No hay línea de temperatura del MCU — son v1.)
6. Anotar si PACKETS TX'd incrementa (GNSS+serie vivos) y si **RTK FIX** llega alguna vez a 4/5 (correcciones llegando = 4G/NTRIP funcionando).
---
### Nivel 2 — nivel 1 + escritorio remoto (AnyDesk/TeamViewer) a la laptop
## 4. LED quick-decode (v1)
7. Se opera desde QRO: leer el tablero en vivo, correr u-center en el ZED-F9P (fix, niveles de satélites, configuración), enviar comandos AT al módem 4G (registro, señal) y, si es útil, **reflashear v2** para obtener registro térmico + mejor recuperación.
| LED | State | Read as |
## 4. Decodificación rápida del LED (v1)
| LED | Estado | Léelo como |
|---|---|---|
| Fast blink | BOOTING | powered, waiting for 4G/GNSS |
| Solid ON | RUNNING, vehicle power, RTK fixed | healthy |
| Heartbeat (1 s) | RUNNING on battery | on LiPo, 30 s rate |
| Slow blink | searching / no corrections | 4G/NTRIP not delivering |
| Off (with power applied) | SLEEP / dead | battery-critical logic **or** not booting |
| Parpadeo rápido | BOOTING | energizada, esperando 4G/GNSS |
| Fijo encendido | RUNNING, energía de vehículo, RTK fijo | sana |
| Latido (1 s) | RUNNING en batería | en LiPo, cadencia de 30 s |
| Parpadeo lento | buscando / sin correcciones | 4G/NTRIP no entrega |
| Apagado (con energía aplicada) | SLEEP / muerta | lógica de batería crítica o no arranca |
"Off while powered from a good bench supply" on a unit that should boot = a strong
**no-boot / power-stage** signal — correlate with the current reading.
«Apagado con energía de una buena fuente de banco» en una unidad que debería arrancar = señal fuerte de **no arranque / etapa de potencia** — correlacionar con la lectura de corriente.
---
## 5. Per-unit triage decision tree
## 5. Árbol de decisión de triaje por unidad
```
Power on bench PSU (current-limited)
├─ 0 mA ............................. dead input / blown fuse / open → ship to QRO
├─ hits limit / hot ................ SHORT (power off!) ............... → ship to QRO
└─ draws current
├─ no LED, no USB dashboard ...... MCU/boot dead .................... → ship to QRO
└─ boots (LED + dashboard)
├─ PACKETS not incrementing ... GNSS/serial dead ................ Tier 2 / ship
├─ FIX stuck 0/1 (never 4/5) .. 4G/NTRIP not delivering ......... check modem/SIM/antenna
└─ FIX 4/5 + packets OK ........ HARDWARE IS FINE ............... → backend victim (§2)
Energizar con fuente de banco (con límite de corriente)
├─ 0 mA ............................. entrada muerta / fusible fundido / abierto → enviar a QRO
├─ llega al límite / caliente ....... CORTO (¡apagar!) ......................... → enviar a QRO
└─ consume corriente
├─ sin LED, sin tablero USB ....... MCU/arranque muerto ...................... → enviar a QRO
└─ arranca (LED + tablero)
├─ PACKETS no incrementa ....... GNSS/serie muertos ....................... nivel 2 / enviar
├─ FIX atorado en 0/1 (nunca 4/5) 4G/NTRIP no entrega ..................... revisar módem/SIM/antena
└─ FIX 4/5 + paquetes OK ....... EL HARDWARE ESTÁ BIEN .................... → víctima del backend (§2)
```
The last branch is the important one: a pulled unit that **boots, fixes, and
transmits on the bench is not the failure** — its disappearance from Wialon is then
backend (§2), and re-installing it unchanged would just repeat the problem.
La última rama es la importante: una unidad retirada que **arranca, obtiene fix y transmite en el banco no es la falla** — su desaparición de Wialon es entonces del backend (§2), y reinstalarla sin cambios solo repetiría el problema.
---
## 6. Seguridad — LiPo dañada por calor (decírselo al técnico en sitio)
## 6. Safety — heat-damaged LiPo (tell the on-site tech)
!!! danger "Batería de litio"
Una LiPo inflada/abombada o caliente es un riesgo de incendio. **No** cargarla, no perforarla ni seguir energizando una unidad cuya batería esté visiblemente inflada. Desconectarla, ponerla en una bolsa LiPo-safe / ignífuga o un recipiente metálico, mantenerla lejos de cualquier cosa inflamable y ventilar. Fotografiar primero, después aislar. Si está caliente, venteada o huele: detenerse y aislar de inmediato.
A swollen/puffy or hot LiPo is a **fire risk**. Do **not** charge it, puncture it, or
keep powering a unit whose battery is visibly swollen. Disconnect it, place it in a
**LiPo-safe / fireproof bag or a metal container**, keep it away from anything
flammable, and ventilate. Photograph first, then isolate. If it's hot, vented, or
smells: stop and isolate immediately.
## 6b. Instrucciones para el técnico en sitio (niveles 0/1) — texto listo para enviar
---
> Para cada unidad: (1) Fotos del interior y de cerca de la batería LiPo (¿inflada, manchas cafés/negras, fuga?), del PowerBoost, de cada conector Dupont, de las antenas SMA, y de cualquier componente quemado/decolorado. (2) Prueba de movimiento suave: ¿algún conector se mueve o se cae? (3) Enciéndela con una fuente de banco a su voltaje normal (12 V/24 V), límite de corriente ~2 A, y anota la corriente (arranque y estable). Si llega al límite o se calienta, apágala de inmediato (corto). (4) Graba el LED ~60 s desde el encendido. (5) Si hay laptop: conecta el USB del Blackpill, abre **PuTTY/TeraTerm a 115200** y **graba 3–5 min** del tablero (BATERÍA V, ESTADO, RTK FIX, PAQUETES). Seguridad: una batería inflada o caliente es riesgo de incendio — no la cargues ni la perfores; aíslala en bolsa/recipiente seguro y ventila.
## 6b. Spanish — instrucciones para el técnico en sitio (Tier 0/1)
## 7. Qué enviar de regreso a Querétaro (checklist de captura)
> Para **cada** unidad: (1) **Fotos** del interior y de cerca de la **batería LiPo**
> (¿inflada, manchas cafés/negras, fuga?), del **PowerBoost**, de **cada conector
> Dupont**, de las **antenas SMA**, y de cualquier componente **quemado/decolorado**.
> (2) Prueba de **movimiento** suave: ¿algún conector se mueve o se cae? (3) Enciéndela
> con una **fuente de banco** a su voltaje normal (12 V/24 V), límite de corriente ~2 A,
> y anota la **corriente** (arranque y estable). Si llega al límite o se calienta,
> **apágala de inmediato** (corto). (4) **Graba el LED** ~60 s desde el encendido.
> (5) Si hay laptop: conecta el **USB** del Blackpill, abre **PuTTY/TeraTerm a 115200**
> y **graba 3–5 min** del tablero (BATERÍA V, ESTADO, RTK FIX, PAQUETES). **Seguridad:**
> una batería **inflada o caliente** es riesgo de incendio — no la cargues ni la
> perfores; aíslala en bolsa/recipiente seguro y ventila.
Por unidad, etiquetado con su `cell_id`/máquina: las fotos, la lectura de corriente (arranque + estable), el video del LED, la **captura del tablero USB de 3–5 min** y una nota de una línea (¿arranca? ¿fix? ¿paquetes?). Con eso se pueden clasificar las 4 unidades contra el árbol de §5 y la evidencia del backend de §2 — y decidir cuáles de verdad necesitan desarmado en QRO.
---
## Historial de revisiones
## 7. What to send back to Querétaro (capture checklist)
Per unit, labeled with its `cell_id`/machine: the **photos**, the **current reading**
(inrush + steady), the **LED video**, the **3–5 min USB dashboard capture**, and a
one-line note (boots? fix? packets?). With that, we can classify all 4 units against
the tree in §5 and the backend evidence in §2 — and decide which truly need teardown
in QRO.
| Versión | Fecha | Cambios |
|---|---|---|
| 1.0 | 2026-06-19 | Protocolo original (inglés). |
| 1.1 | 2026-09-29 | Traducción al español, encabezado uniforme y enlaces a los procedimientos vigentes. Sin cambios técnicos. |

View File

@ -13,37 +13,37 @@
Acta.render({
tipo: 'modulo-ard',
prefijo: 'ARD', desde: 1, series: 30, pad: 3, // ARD-001 … ARD-030
etiquetaSerie: 'Número de serie del módulo (etiqueta ARD-NNN)',
etiquetaSerie: 'Módulo (ARD-NNN)',
titulo: 'Acta de módulo — simpleRTK2B Pro (ZED-F9P)',
subtitulo: 'Un acta por receptor. Procedimiento: "Módulos e integración" §2. Sin EinarBoard.',
subtitulo: 'Un acta por receptor, sin EinarBoard. Procedimiento: Módulos e integración §1.',
secciones: [
{ titulo: '2a · Inspección visual (sin energía)',
{ titulo: '1a · Inspección (sin energía)',
items: [
{ tipo:'medida', txt:'Etiqueta de fábrica ArduSimple (código impreso en el módulo)', modo:'text', ph:'p.ej. SRTK2B-…' },
{ tipo:'check', txt:'Etiqueta <b>ARD-NNN</b> puesta y legible, sin tapar SMA ni zócalo XBee.' },
{ tipo:'medida', txt:'Etiqueta de fábrica ArduSimple', modo:'text', ph:'p.ej. SRTK2B-…' },
{ tipo:'check', txt:'Etiqueta <b>ARD-NNN</b> legible, sin tapar SMA ni zócalo XBee.' },
{ tipo:'check', txt:'Pines del zócalo <b>XBee</b> (2 × 10) rectos; conector <b>SMA</b> firme.' },
{ tipo:'check', txt:'Tiras tipo Arduino (las que entran en MOD1) rectas y completas.' },
] },
{ titulo: '2b · Energizado y fix GNSS',
{ titulo: '1b · Fix GNSS',
sub: 'Antena GNSS al SMA con vista al cielo. USB-C en POWER+GPS. u-center conectado.',
items: [
{ tipo:'check', txt:'LED <b>POWER</b> encendido; la laptop ve un puerto serie u-blox.' },
{ tipo:'medida', txt:'Versión de firmware del ZED-F9P (UBX-MON-VER)', modo:'text', ph:'p.ej. HPG 1.32' },
{ tipo:'medida', txt:'Firmware ZED-F9P (UBX-MON-VER)', modo:'text', ph:'p.ej. HPG 1.32' },
{ tipo:'medida', txt:'Tiempo hasta fix 3D', esperado:'< 2 min a cielo abierto', u:'min' },
{ tipo:'medida', txt:'Satélites en uso con fix 3D', esperado:'≥ 10', u:'sat' },
{ tipo:'medida', txt:'Satélites en uso', esperado:'≥ 10', u:'sat' },
{ tipo:'check', txt:'LED <b>GPS FIX</b> parpadea con el fix.' },
] },
{ titulo: '2c · Configuración de Helgen',
{ titulo: '1c · Configuración Helgen',
sub: 'u-center → Tools → Receiver Configuration → Load → Transfer file → GNSS. Luego UBX-CFG-CFG → Save.',
items: [
{ tipo:'medida', txt:'Nombre del archivo de configuración cargado', modo:'text', ph:'p.ej. HBOX_F9P_115200_v1.txt' },
{ tipo:'check', txt:'Configuración transferida sin errores y <b>guardada</b> (CFG-CFG Save).' },
{ tipo:'check', txt:'Tras desconectar/reconectar USB, conecta a <b>115200</b> y sigue mostrando fix y <code>$GNGGA</code>.' },
{ tipo:'medida', txt:'Archivo de configuración cargado', modo:'text', ph:'p.ej. HBOX_F9P_115200_v1.txt' },
{ tipo:'check', txt:'Transferida sin errores y guardada (CFG-CFG Save).' },
{ tipo:'check', txt:'Tras reconectar el USB: 115200, fix y <code>$GNGGA</code>.' },
{ tipo:'texto', txt:'Observaciones', ph:'ninguna / describir' },
] },
{ titulo: 'Cierre',
items: [
{ tipo:'check', txt:'Módulo en bolsa antiestática con su etiqueta ARD-NNN.' },
{ tipo:'check', txt:'En bolsa antiestática con su etiqueta.' },
] },
]
});

View File

@ -23,73 +23,65 @@ Acta.render({
unidades: window.FLOTA,
etiquetaSerie: 'Unidad que estás revisando',
titulo: 'Acta de diagnóstico en banco — HBOX',
subtitulo: 'Helgen Technologies · unidad sobre la mesa, con fuente de banco y multímetro.',
subtitulo: 'Unidad sobre la mesa, con fuente de banco y multímetro.',
textoOK: 'QUEDA FUNCIONAL',
intro: '<b>Antes de empezar.</b> En una unidad ya desmontada se perdieron la temperatura máxima, '
+ 'la cuenta de recuperaciones y la causa del último arranque: el firmware v3 las guarda en '
+ 'memoria y se borraron al desconectarla. Aquí no vamos a poder probar la historia térmica con '
+ 'datos del equipo — solo con lo que se vea. Lo que sí sale de este banco: si hay corto, cuánto '
+ 'consume, si arranca, si el módem registra, si el GNSS ve cielo y en qué estado está la batería. '
+ 'Procedimiento completo: <a href="../procedimientos/diagnostico-banco/">Diagnóstico en banco</a>.',
intro: 'Al desmontar se perdieron temperatura máxima, recuperaciones y causa del último arranque (RAM del firmware v3). '
+ 'Procedimiento: <a href="../procedimientos/diagnostico-banco/">Diagnóstico en banco</a>.',
secciones: [
{ titulo: '0 · Identificación',
items: [
{ tipo:'fecha', clave:'fecha', req:true, guardaEn:'fecha', txt:'Fecha de la revisión' },
{ tipo:'fecha', clave:'fecha', req:true, guardaEn:'fecha', txt:'Fecha' },
{ tipo:'texto', clave:'maquina_id', rows:'1', guardaEn:'maquina_id',
txt:'¿De qué máquina venía esta unidad?', ph:'RT-ZPMC-20 · HS-WES-62 · FL-JUN-060' },
{ tipo:'radio', clave:'llego', txt:'¿Cómo llegó a la mesa?',
txt:'Máquina de origen', ph:'RT-ZPMC-20 · HS-WES-62 · FL-JUN-060' },
{ tipo:'radio', clave:'llego', txt:'Quién la desmontó',
opciones:['Desmontada por nosotros','Desmontada por personal de ICAVE','No sé quién la desmontó'] },
{ tipo:'texto', clave:'antecedente', rows:'2',
txt:'¿Qué se sabe de su falla?', ph:'Dejó de reportar a fines de agosto; se desmontó el 15-sep.' },
{ tipo:'nota', txt:'<div class="peligro"><b>Orden obligatorio:</b> inspección → continuidad → '
+ 'energizado. <b>Nunca energices antes de medir continuidad.</b> Si hay un corto, la fuente '
+ 'lo encuentra quemando algo.</div>' },
txt:'Antecedente de la falla', ph:'Dejó de reportar a fines de agosto; se desmontó el 15-sep.' },
{ tipo:'nota', txt:'<div class="peligro"><b>Orden:</b> inspección → continuidad → energizado. <b>Nunca energices antes de medir continuidad.</b></div>' },
] },
{ titulo: '1 · Inspección sin energía',
sub:'Con la unidad desconectada de todo y antes de mover cables.',
sub:'Desconectada de todo, antes de mover cables.',
items: [
{ tipo:'foto', clave:'f_ext', req:true, etiqueta:'exterior', txt:'Exterior de la caja (varios lados).' },
{ tipo:'foto', clave:'f_int', req:true, etiqueta:'interior', txt:'Interior completo, antes de tocar nada.' },
{ tipo:'radio', clave:'olor', req:true, txt:'¿Huele a quemado o hay partes oscurecidas o derretidas?',
{ tipo:'foto', clave:'f_ext', req:true, etiqueta:'exterior', txt:'Exterior, varios lados.' },
{ tipo:'foto', clave:'f_int', req:true, etiqueta:'interior', txt:'Interior completo, antes de tocar.' },
{ tipo:'radio', clave:'olor', req:true, txt:'Olor a quemado o daño por calor',
opciones:['No','Sí, leve','Sí, evidente'] },
{ tipo:'foto', clave:'f_dano', etiqueta:'dano', si:v=>String(v.olor||'').startsWith('Sí'), req:true,
txt:'Foto del daño por calor.' },
{ tipo:'radio', clave:'agua', req:true, txt:'¿Agua, marcas de agua, sarro o corrosión verde?',
txt:'Daño por calor.' },
{ tipo:'radio', clave:'agua', req:true, txt:'Agua, sarro o corrosión',
opciones:['No','Marcas o humedad','Corrosión evidente'] },
{ tipo:'radio', clave:'bateria_fisica', req:true, txt:'Estado físico de la batería',
{ tipo:'radio', clave:'bateria_fisica', req:true, txt:'Batería',
opciones:['Normal','Hinchada o abombada','Con manchas o fuga','Caliente','La unidad no trae batería'],
aviso:'Hinchada, con fuga o caliente: <b>desconéctala antes de energizar</b> y trabaja sin ella. No la cargues, no la perfores, no viaja en avión.' },
aviso:'Hinchada, con fuga o caliente: desconéctala antes de energizar y trabaja sin ella. No la cargues ni la perfores; no viaja en avión.' },
{ tipo:'foto', clave:'f_bat', etiqueta:'bateria',
si:v=>['Hinchada','Con manchas','Caliente'].some(t=>String(v.bateria_fisica||'').startsWith(t)), req:true,
txt:'Foto de la batería, dos ángulos.' },
{ tipo:'check', clave:'wiggle', txt:'Prueba de meneo en cada conector, Dupont y SMA. Anoto abajo lo que esté flojo.' },
{ tipo:'texto', clave:'nota_visual', rows:'2', txt:'¿Qué encontraste?' },
txt:'Batería, dos ángulos.' },
{ tipo:'check', clave:'wiggle', txt:'Meneo de conectores, Dupont y SMA (lo flojo, abajo).' },
{ tipo:'texto', clave:'nota_visual', rows:'2', txt:'Hallazgos' },
] },
{ titulo: '2 · Continuidad a tierra — antes de energizar',
sub:'Multímetro en ohms, punta negra en el negativo/chasis. La lectura sube despacio: es normal, espera a que se estabilice.',
{ titulo: '2 · Continuidad a tierra (sin energía)',
sub:'Multímetro en ohms, punta negra en el chasis. Espera a que la lectura se estabilice.',
items: [
{ tipo:'medida', clave:'r_24v', txt:'Entrada 24 V (GX16 pines 1-2)', esperado:'> 10 kΩ', u:'Ω' },
{ tipo:'medida', clave:'r_5v', txt:'Riel de 5 V (salida Mean Well)', esperado:'> 1 kΩ', u:'Ω' },
{ tipo:'medida', clave:'r_3v3', txt:'Riel de 3.3 V', esperado:'> 1 kΩ', u:'Ω' },
{ tipo:'medida', clave:'r_rtk', txt:'Alimentación del simpleRTK2B (riel conmutado)', esperado:'> 1 kΩ', u:'Ω' },
{ tipo:'medida', clave:'v_bat_vacio', txt:'Voltaje de la batería en vacío (desconectada)', esperado:'3.0 – 4.2 V', u:'V' },
{ tipo:'radio', clave:'continuidad', req:true, txt:'¿Alguna lectura se quedó fija entre 0 y 20 Ω?',
{ tipo:'medida', clave:'v_bat_vacio', txt:'Batería en vacío', esperado:'3.0 – 4.2 V', u:'V' },
{ tipo:'radio', clave:'continuidad', req:true, txt:'Lectura fija en 0–20 Ω',
opciones:['No, todas suben o están altas','Sí — hay un corto'] },
{ tipo:'nota', si:corto, txt:'<div class="peligro"><b>Hay un corto: no energices.</b> Fotografía la zona, '
+ 'marca la unidad, complétala como FALLA y déjala aparte para enviar a Querétaro. '
+ 'Energizar un corto convierte una reparación en una tarjeta perdida.</div>' },
{ tipo:'foto', clave:'f_corto', etiqueta:'corto', si:corto, req:true, txt:'Foto de la zona donde mediste el corto.' },
{ tipo:'nota', si:corto, txt:'<div class="peligro"><b>Corto: no energices.</b> Foto de la zona, marca la unidad, cierra como FALLA y apártala para Querétaro.</div>' },
{ tipo:'foto', clave:'f_corto', etiqueta:'corto', si:corto, req:true, txt:'Zona del corto.' },
] },
{ titulo: '3 · Energizado con rampa de corriente', si:v=>!corto(v),
sub:'Fuente a 24.0 V, límite de corriente 500 mA, sin antenas todavía. Mira el amperímetro los primeros 3 segundos.',
sub:'Fuente 24.0 V, límite 500 mA, sin antenas. Mira el amperímetro los primeros 3 s.',
items: [
{ tipo:'medida', clave:'i_pico', txt:'Corriente de arranque (pico)', u:'mA' },
{ tipo:'medida', clave:'i_estable', txt:'Corriente estable a los 60 segundos', esperado:'150 – 400 mA con la etapa RTK encendida', u:'mA' },
{ tipo:'radio', clave:'rampa', req:true, txt:'¿Qué hizo al energizar?',
{ tipo:'medida', clave:'i_estable', txt:'Corriente estable a 60 s', esperado:'150 – 400 mA con la etapa RTK encendida', u:'mA' },
{ tipo:'radio', clave:'rampa', req:true, txt:'Respuesta al energizar',
opciones:[
'A · 0 mA, la fuente no entrega nada',
'B · Se pega al límite y el voltaje se cae (corto)',
@ -97,77 +89,71 @@ Acta.render({
'D · 150–400 mA y el LED parpadea',
'E · Sube despacio y algo se calienta'] },
{ tipo:'nota', si:v=>/^[BE]/.test(String(v.rampa||'')),
txt:'<div class="peligro"><b>Apaga la fuente ahora.</b> Busca con el dorso de la mano qué componente '
+ 'se calienta, tómale foto y no vuelvas a energizar.</div>' },
txt:'<div class="peligro"><b>Apaga la fuente ahora.</b> Localiza con el dorso de la mano qué se calienta, foto, y no vuelvas a energizar.</div>' },
{ tipo:'foto', clave:'f_calor', etiqueta:'sobrecalentamiento', si:v=>String(v.rampa||'').startsWith('E'), req:true,
txt:'Foto del componente que se calienta.' },
txt:'Componente que se calienta.' },
] },
{ titulo: '4 · Rieles', si:enciende,
sub:'Con la unidad energizada y estable.',
sub:'Energizada y estable.',
items: [
{ tipo:'medida', clave:'v_24', txt:'Entrada 24 V', esperado:'23 – 26 V', u:'V' },
{ tipo:'medida', clave:'v_5', txt:'Riel 5 V (salida Mean Well)', esperado:'4.8 – 5.2 V', u:'V' },
{ tipo:'medida', clave:'v_3v3',txt:'Riel 3.3 V', esperado:'3.20 – 3.40 V', u:'V' },
{ tipo:'medida', clave:'v_rtk_arranque', txt:'Alimentación del simpleRTK2B al arrancar', esperado:'0 V (obligatorio)', u:'V',
aviso:'Si hay 5 V aquí en el instante de arrancar es un <b>defecto</b>: apagado es el estado seguro, la etapa RTK solo debe encender cuando el MCU lo pide.' },
{ tipo:'medida', clave:'v_bat_on', txt:'Batería con la unidad encendida', u:'V' },
{ tipo:'medida', clave:'v_rtk_arranque', txt:'simpleRTK2B al arrancar', esperado:'0 V (obligatorio)', u:'V',
aviso:'5 V aquí al arrancar es un <b>defecto</b>: la etapa RTK solo enciende cuando el MCU lo pide.' },
{ tipo:'medida', clave:'v_bat_on', txt:'Batería, unidad encendida', u:'V' },
] },
{ titulo: '5 · Captura del Blackpill (la principal)', si:enciende,
{ titulo: '5 · Captura del Blackpill', si:enciende,
sub:'USB del Blackpill · 115200 baudios · guardar a archivo · 3 minutos, luego RESET.',
items: [
{ tipo:'archivo', clave:'log_blackpill', etiqueta:'blackpill', req:true,
txt:'Sube el archivo de la captura del Blackpill',
ayuda:'Nómbralo <code>RTK-0NN_blackpill_AAAA-MM-DD.log</code>. Súbelo aunque no entiendas lo que dice.' },
{ tipo:'texto', clave:'linea_boot', rows:'2', txt:'Pega la línea BOOT (dice qué firmware trae)', ph:'BOOT,1240,fw=3.0.3,reset=PIN' },
{ tipo:'texto', clave:'linea_tlm', rows:'3', txt:'Pega una línea TLM ya estabilizada', ph:'TLM,182000,RUN,DEGR,1,11,…' },
{ tipo:'radio', clave:'estado_fw', txt:'¿A qué estado llegó después de 10 minutos con antenas?',
txt:'Captura del Blackpill',
ayuda:'Nombre: <code>RTK-0NN_blackpill_AAAA-MM-DD.log</code>.' },
{ tipo:'texto', clave:'linea_boot', rows:'2', txt:'Línea BOOT', ph:'BOOT,1240,fw=3.0.3,reset=PIN' },
{ tipo:'texto', clave:'linea_tlm', rows:'3', txt:'Línea TLM estable', ph:'TLM,182000,RUN,DEGR,1,11,…' },
{ tipo:'radio', clave:'estado_fw', txt:'Estado a 10 min con antenas',
opciones:['RUN con link OK','RUN pero link DEGR o LIMP','Se queda en BOOT','Se reinicia solo una y otra vez','SLEEP'] },
] },
{ titulo: '6 · Captura del módem 4G NTRIP Master', si:enciende,
sub:'Puerto USB "XBEE" del simpleRTK2B Pro · 115200 baudios · 3 minutos desde el arranque.',
{ titulo: '6 · Captura del módem 4G', si:enciende,
sub:'USB XBEE del simpleRTK2B · 115200 · 3 min desde el arranque.',
items: [
{ tipo:'nota', txt:'<b>Ojo con esta consola:</b> una unidad sana imprime casi lo mismo que una '
+ 'averiada. <b>No prueba</b> que las correcciones lleguen ni que los datos se envíen — eso solo lo '
+ 'dicen el <code>link</code> del Blackpill, un fix ≥4 en el ArduSimple o el tráfico en el servidor. '
+ 'Sirve para saber si el módem enciende, si registra en Telcel y con qué configuración quedó.' },
{ tipo:'archivo', clave:'log_4g', etiqueta:'modem4g', txt:'Sube la captura del módem 4G',
ayuda:'Nómbralo <code>RTK-0NN_modem4g_AAAA-MM-DD.log</code>.' },
{ tipo:'radio', clave:'led_4g', txt:'LED de red del módulo 4G',
{ tipo:'nota', txt:'Esta consola no prueba el enlace: un módem sano y uno averiado imprimen casi lo mismo. Las correcciones se confirman con el <code>link</code> del Blackpill, fix ≥ 4 o el servidor.' },
{ tipo:'archivo', clave:'log_4g', etiqueta:'modem4g', txt:'Captura del módem',
ayuda:'Nombre: <code>RTK-0NN_modem4g_AAAA-MM-DD.log</code>.' },
{ tipo:'radio', clave:'led_4g', txt:'LED de red del módem',
opciones:['Parpadeo lento o fijo (registrado)','Parpadeo rápido (buscando, no registra)','Apagado'] },
{ tipo:'texto', clave:'id_estacion', rows:'1', txt:'ID de estación (AS+K) y mountpoint, si pudiste leerlos' },
{ tipo:'texto', clave:'imei_iccid', rows:'1', txt:'IMEI del módem e ICCID de la SIM, si están a la vista' },
{ tipo:'texto', clave:'id_estacion', rows:'1', txt:'ID de estación (AS+K) y mountpoint' },
{ tipo:'texto', clave:'imei_iccid', rows:'1', txt:'IMEI del módem e ICCID de la SIM' },
] },
{ titulo: '7 · Captura del simpleRTK2B Pro (ArduSimple)', si:enciende,
sub:'USB POWER+GPS · 115200 baudios · antena GNSS CON VISTA AL CIELO (dentro del taller no habrá fix).',
{ titulo: '7 · Captura del simpleRTK2B', si:enciende,
sub:'USB POWER+GPS · 115200 · antena con cielo (dentro del taller no hay fix).',
items: [
{ tipo:'archivo', clave:'log_ard', etiqueta:'ardusimple', txt:'Sube la captura de NMEA o el log de u-center',
ayuda:'Nómbralo <code>RTK-0NN_ardusimple_AAAA-MM-DD.nmea</code>.' },
{ tipo:'archivo', clave:'log_ard', etiqueta:'ardusimple', txt:'NMEA o log de u-center',
ayuda:'Nombre: <code>RTK-0NN_ardusimple_AAAA-MM-DD.nmea</code>.' },
{ tipo:'medida', clave:'sats', txt:'Satélites vistos', esperado:'≥ 8 a cielo abierto' },
{ tipo:'radio', clave:'calidad', txt:'Calidad del fix (sexto campo de $GNGGA, o Fix Mode en u-center)',
{ tipo:'radio', clave:'calidad', txt:'Calidad de fix ($GNGGA campo 6)',
opciones:['0 — sin posición','1 — GPS solo, sin correcciones','2 — corregido básico','4 — RTK fijo','5 — RTK flotante'],
aviso:'Un receptor en <b>1</b> con buenos satélites <b>no está roto</b>: dice que las correcciones no le llegan. Eso apunta al módem o al servidor, no al GNSS.' },
{ tipo:'texto', clave:'fw_f9p', rows:'1', txt:'Versión de firmware del ZED-F9P (u-center → UBX-MON-VER)' },
aviso:'Calidad 1 con buenos satélites no es falla del GNSS: no llegan correcciones (módem o servidor).' },
{ tipo:'texto', clave:'fw_f9p', rows:'1', txt:'Firmware ZED-F9P (UBX-MON-VER)' },
] },
{ titulo: '8 · Reflasheo — solo si ya subiste la captura', si:enciende,
sub:'El flasheo borra la memoria del equipo y cambia el firmware que estaba fallando. Por eso va después de la evidencia, no antes.',
{ titulo: '8 · Reflasheo', si:enciende,
sub:'Solo después de subir la captura: el flasheo borra la memoria del equipo.',
items: [
{ tipo:'nota', si:v=>!listoParaFlashear(v),
txt:'<div class="peligro">⛔ <b>Todavía no puedes reflashear.</b> Sube primero la captura del '
+ 'Blackpill en el paso 5. Sin ella, reflashear destruye la única evidencia del estado en que '
+ 'estaba la unidad.</div>' },
{ tipo:'radio', clave:'reflash', si:listoParaFlashear, txt:'¿Reflasheaste la unidad?',
txt:'<div class="peligro"><b>Todavía no reflashees.</b> Sube primero la captura del Blackpill (paso 5).</div>' },
{ tipo:'radio', clave:'reflash', si:listoParaFlashear, txt:'Reflasheo',
opciones:['No','Sí, con el binario publicado en Descargas'] },
{ tipo:'texto', clave:'fw_nuevo', si:v=>String(v.reflash||'').startsWith('Sí'), rows:'1',
txt:'Versión que quedó (línea BOOT después del flasheo)', ph:'fw=3.0.3' },
txt:'Firmware después (línea BOOT)', ph:'fw=3.0.3' },
{ tipo:'archivo', clave:'log_post', etiqueta:'post-flasheo', si:v=>String(v.reflash||'').startsWith('Sí'),
txt:'Captura DESPUÉS del flasheo', ayuda:'Las dos capturas juntas son la prueba de si el firmware cambió algo.' },
txt:'Captura de después', ayuda:'Antes y después juntas dicen si el firmware cambió algo.' },
{ tipo:'radio', clave:'reflash_result', si:v=>String(v.reflash||'').startsWith('Sí'),
txt:'¿Cambió algo?', opciones:['Sí, ahora arranca y se estabiliza','No, repite la misma falla','Empeoró: ya no arranca'] },
txt:'Efecto del reflasheo', opciones:['Sí, ahora arranca y se estabiliza','No, repite la misma falla','Empeoró: ya no arranca'] },
] },
{ titulo: '9 · Veredicto',
@ -192,8 +178,8 @@ Acta.render({
'Se envía a Querétaro',
'Baja definitiva'] },
{ tipo:'texto', clave:'observaciones', rows:'4', req:true,
txt:'Cuenta qué viste y qué hiciste',
ph:'Escríbelo como se lo contarías a un compañero. Esto es lo que va a leer ingeniería.' },
txt:'Observaciones',
ph:'Qué viste y qué hiciste, como se lo contarías a un compañero.' },
] },
]
});

View File

@ -23,26 +23,22 @@ Acta.render({
unidades: window.SERIES,
etiquetaSerie: 'Tarjeta, módulo o unidad dañada',
titulo: 'Acta de daño o incidente',
subtitulo: 'Helgen Technologies · cualquier cosa con número de serie: tarjeta, módulo o unidad completa.',
intro: '<b>Para qué sirve.</b> Hoy una tarjeta con un corto puede acabar dentro de un ensamble sin que nadie '
+ 'lo sepa, porque no queda registro. Esta acta <b>marca</b> la serie: desde que se envía, cualquier '
+ 'formulario que la elija muestra el aviso, y su expediente cuenta qué pasó. La marca se levanta con '
+ 'otra acta de daño cuya disposición sea <b>«Reparada»</b>, o se vuelve permanente con <b>«Baja»</b>. '
+ 'No es para asignar culpas: es para que el daño no se pierda de vista.',
subtitulo: 'Cualquier cosa con número de serie. Procedimiento: Ciclo de vida, daño.',
intro: 'Esta acta marca la serie: todo formulario que la elija muestra el aviso. «Reparada» levanta la marca; «Baja» la hace permanente. No asigna culpas.',
secciones: [
{ titulo: '0 · Qué se dañó y dónde',
items: [
{ tipo:'fecha', clave:'fecha', req:true, guardaEn:'fecha', txt:'Fecha del daño (o de cuando se detectó)' },
{ tipo:'radio', clave:'que', req:true, txt:'¿Qué es?',
{ tipo:'fecha', clave:'fecha', req:true, guardaEn:'fecha', txt:'Fecha (daño o detección)' },
{ tipo:'radio', clave:'que', req:true, txt:'Pieza',
opciones:['Tarjeta EinarBoard','Módulo ArduSimple','Módem 4G','Unidad HBOX completa','Otro (cable, antena, gabinete…)'] },
{ tipo:'radio', clave:'donde', req:true, txt:'¿Dónde ocurrió?',
{ tipo:'radio', clave:'donde', req:true, txt:'Dónde ocurrió',
opciones:['En el banco (prueba o flasheo)','Durante el ensamble','En transporte o almacén','En campo, instalada','No se sabe — así se encontró'] },
{ tipo:'texto', clave:'quien_detecto', rows:'1', txt:'¿Quién lo detectó y cómo?', ph:'Daniel, al medir continuidad antes de energizar' },
{ tipo:'texto', clave:'quien_detecto', rows:'1', txt:'Quién lo detectó y cómo', ph:'Daniel, al medir continuidad antes de energizar' },
] },
{ titulo: '1 · Qué pasó',
sub:'Cuenta lo que viste, no lo que supones. "No se sabe" es una respuesta válida.',
sub:'Lo que viste, no lo que supones. "No se sabe" es válido.',
items: [
{ tipo:'radio', clave:'clasificacion', req:true, guardaEn:'clasificacion', txt:'Tipo de daño',
opciones:[
@ -55,13 +51,13 @@ Acta.render({
'Error de ensamble o soldadura',
'Falla sin causa aparente',
'Otro'] },
{ tipo:'radio', clave:'energizada', req:true, txt:'¿Estaba energizada cuando ocurrió?',
{ tipo:'radio', clave:'energizada', req:true, txt:'Energizada al ocurrir',
opciones:['Sí','No','No se sabe'] },
{ tipo:'texto', clave:'fuente', si:energizada, rows:'1', txt:'¿Con qué fuente y a cuánto?', ph:'Fuente de banco 24 V, límite 500 mA' },
{ tipo:'texto', clave:'haciendo', rows:'2', txt:'¿Qué se estaba haciendo en ese momento?',
{ tipo:'texto', clave:'fuente', si:energizada, rows:'1', txt:'Fuente y voltaje', ph:'Fuente de banco 24 V, límite 500 mA' },
{ tipo:'texto', clave:'haciendo', rows:'2', txt:'Qué se estaba haciendo',
ph:'Se conectaba el arnés del GX16 con la fuente encendida.' },
{ tipo:'texto', clave:'resumen', req:true, guardaEn:'resumen', rows:'2',
txt:'Resumen en una línea (es lo que verán los demás formularios como aviso)',
txt:'Resumen en una línea (aviso en otros formularios)',
ph:'Corto VEH5V a GND en la zona de Q10; no energizar.' },
{ tipo:'texto', clave:'descripcion', req:true, rows:'4', txt:'Descripción completa',
ph:'Qué se midió, qué se vio, qué se olió, en qué orden pasó.' },
@ -69,17 +65,17 @@ Acta.render({
{ titulo: '2 · Evidencia',
items: [
{ tipo:'foto', clave:'f_dano', req:true, etiqueta:'dano', txt:'El daño, de cerca.' },
{ tipo:'foto', clave:'f_general', etiqueta:'general', txt:'La pieza completa, para ubicar el daño.' },
{ tipo:'medida', clave:'r_corto', txt:'Si fue corto: resistencia medida a tierra', u:'Ω' },
{ tipo:'texto', clave:'componentes', rows:'2', txt:'Componentes afectados (designadores si los conoces)', ph:'Q10, D5, pista bajo U6' },
{ tipo:'archivo', clave:'log', etiqueta:'dano', txt:'Captura o log relacionado, si lo hay' },
{ tipo:'foto', clave:'f_dano', req:true, etiqueta:'dano', txt:'Daño de cerca.' },
{ tipo:'foto', clave:'f_general', etiqueta:'general', txt:'Pieza completa.' },
{ tipo:'medida', clave:'r_corto', txt:'Corto: resistencia a tierra', u:'Ω' },
{ tipo:'texto', clave:'componentes', rows:'2', txt:'Componentes afectados', ph:'Q10, D5, pista bajo U6' },
{ tipo:'archivo', clave:'log', etiqueta:'dano', txt:'Captura o log (si hay)' },
] },
{ titulo: '3 · Disposición — esto es lo que MARCA la serie',
sub:'Lo último que se registre aquí es lo que vale. Para levantar una marca, registra una nueva acta con «Reparada».',
{ titulo: '3 · Disposición (marca la serie)',
sub:'Vale la última registrada. Para levantar una marca, registra otra acta con «Reparada».',
items: [
{ tipo:'radio', clave:'accion', req:true, guardaEn:'accion', txt:'¿Cómo queda?',
{ tipo:'radio', clave:'accion', req:true, guardaEn:'accion', txt:'Disposición',
opciones:[
'Marcada como dañada — en espera de diagnóstico o reparación',
'Enviada a Querétaro para evaluación',
@ -88,11 +84,11 @@ Acta.render({
'Baja definitiva (marca permanente)'],
aviso:'<b>Reparada</b> quita el aviso de los formularios. <b>Baja</b> lo vuelve permanente y la serie no debe volver a usarse ni instalarse.' },
{ tipo:'texto', clave:'reparacion', si:v=>String(v.accion||'').startsWith('Reparada'), rows:'2', req:true,
txt:'¿Qué se reparó y quién lo verificó?' },
txt:'Qué se reparó y quién lo verificó' },
{ tipo:'texto', clave:'modulos_rescatados', si:v=>String(v.accion||'').startsWith('Canibalizada'), rows:'2',
txt:'¿Qué módulos se rescataron y a dónde fueron?', ph:'ARD-010 y RTK-0006 quedan libres para otro ensamble' },
{ tipo:'check', clave:'etiquetada', txt:'La pieza quedó <b>etiquetada físicamente</b> como dañada (cinta roja o marcador) y separada de las buenas.' },
{ tipo:'texto', clave:'leccion', rows:'2', txt:'¿Qué habría evitado esto?',
txt:'Módulos rescatados y destino', ph:'ARD-010 y RTK-0006 quedan libres para otro ensamble' },
{ tipo:'check', clave:'etiquetada', txt:'Pieza etiquetada como dañada (cinta roja) y separada.' },
{ tipo:'texto', clave:'leccion', rows:'2', txt:'Qué lo habría evitado',
ph:'Medir continuidad antes de energizar; la acta de banco ya lo pide en el paso 2.' },
] },
]

View File

@ -23,98 +23,87 @@ Acta.render({
unidades: window.FLOTA,
etiquetaSerie: 'Unidad que vas a revisar',
titulo: 'Acta de diagnóstico en campo — HBOX',
subtitulo: 'Helgen Technologies · llénala EN LA MÁQUINA, mientras revisas. No la llenes de memoria después.',
subtitulo: 'Se llena en la máquina, mientras revisas; no de memoria después.',
textoOK: 'QUEDA OPERATIVA',
intro: '<b>Para qué sirve esta acta.</b> Nadie espera que tú encuentres la causa de la falla: eso se '
+ 'determina en el banco de Querétaro. Lo que sí depende de ti es que la evidencia llegue completa. '
+ 'Una unidad mal diagnosticada se puede volver a revisar; una unidad que reiniciaste antes de mirarla '
+ '<b>ya no se puede diagnosticar nunca</b>, porque el estado en que la encontraste se borró.',
intro: 'La causa se encuentra en el banco de Querétaro; tu trabajo es traer la evidencia completa. '
+ 'Una unidad reiniciada antes de leerla ya no se puede diagnosticar.',
secciones: [
{ titulo: '⚠ Reglas de oro — léelas antes de tocar la unidad',
{ titulo: 'Reglas',
items: [
{ tipo:'nota', txt:'<div class="peligro"><b>1 · No reinicies, no desconectes, no abras nada hasta el paso 3.</b> '
+ 'El estado en que encontraste la unidad <b>es la evidencia</b>. Cortarle la energía borra la temperatura '
+ 'máxima, la cuenta de reinicios y la causa del último arranque — justo lo que necesitamos.</div>' },
{ tipo:'nota', txt:'<div class="peligro"><b>2 · Seguridad de la máquina primero.</b> No trabajes sobre un RTG o '
+ 'un equipo energizado sin el permiso y el bloqueo (LOTO) del terminal. Si el equipo está operando, '
+ '<b>no subas</b>: agenda con el supervisor de ICAVE y regresa.</div>' },
{ tipo:'nota', txt:'<div class="peligro"><b>3 · Batería.</b> Si ves la batería <b>hinchada</b>, si <b>quema</b> al '
+ 'tacto o si huele a quemado: no sigas desarmando, no la perfores, sepárala de la electrónica, tómale foto '
+ 'y avisa de inmediato. Una batería de litio hinchada <b>no viaja en avión</b>.</div>' },
{ tipo:'nota', txt:'<div class="peligro"><b>4 · Si está lloviendo o el gabinete está mojado, no lo abras.</b> '
+ 'Anótalo y regresa en seco.</div>' },
{ tipo:'check', clave:'reglas', req:true, txt:'<b>Leí las cuatro reglas</b> y voy a seguir el procedimiento en orden.' },
+ 'Cortar la energía borra la temperatura máxima, los reinicios y la causa del último arranque.</div>' },
{ tipo:'nota', txt:'<div class="peligro"><b>2 · Máquina.</b> Nada sobre un RTG o equipo energizado sin permiso y LOTO. '
+ 'Si está operando, no subas: agenda con el supervisor de ICAVE.</div>' },
{ tipo:'nota', txt:'<div class="peligro"><b>3 · Batería.</b> Hinchada, caliente o con olor a quemado: deja de desarmar, no la perfores, '
+ 'sepárala de la electrónica, foto y aviso inmediato. Hinchada no viaja en avión.</div>' },
{ tipo:'nota', txt:'<div class="peligro"><b>4 · Lluvia o gabinete mojado: no lo abras.</b> Anótalo y regresa en seco.</div>' },
{ tipo:'check', clave:'reglas', req:true, txt:'Leí las cuatro reglas y sigo el procedimiento en orden.' },
] },
{ titulo: '0 · Permiso de acceso y máquina — antes de subirte a nada',
sub:'En ICAVE el equipo no se identifica por el HBOX sino por la MÁQUINA, y no se sube a una máquina sin autorización por escrito.',
{ titulo: '0 · Permiso y máquina',
sub:'En ICAVE el equipo se identifica por la máquina, y no se sube sin autorización por escrito.',
items: [
{ tipo:'nota', txt:'<b>Cómo funciona.</b> Operaciones (Adriana) manda a ICAVE un correo pidiendo acceso a la '
+ '<b>máquina</b> por su número, nombrando a los técnicos que van a subir. Hasta que ICAVE contesta y se acuerda '
+ 'el horario, no hay visita. Si llegaste sin ese correo contestado, <b>no subas</b>: avisa y reagenda.' },
{ tipo:'fecha', clave:'fecha', req:true, guardaEn:'fecha', txt:'Fecha de la revisión',
ayuda:'Arranca con la de hoy. Cámbiala si estás capturando una visita de otro día.' },
{ tipo:'nota', txt:'Operaciones (Adriana) pide a ICAVE acceso a la máquina por correo, con los técnicos que suben. '
+ 'Sin correo contestado y horario acordado, no subas: avisa y reagenda.' },
{ tipo:'fecha', clave:'fecha', req:true, guardaEn:'fecha', txt:'Fecha',
ayuda:'Hoy por omisión; cámbiala si capturas una visita de otro día.' },
{ tipo:'texto', clave:'maquina_id', req:true, guardaEn:'maquina_id', rows:'1',
txt:'Número de la máquina donde está instalado el HBOX, tal como lo nombra ICAVE',
txt:'Máquina (como la nombra ICAVE)',
ph:'FL-JUN-060 · RT-ZPMC-20 · HS-WES-62' },
{ tipo:'radio', clave:'coincide', req:true, txt:'¿Coincide con la máquina que aparece arriba, junto a la unidad que elegiste?',
{ tipo:'radio', clave:'coincide', req:true, txt:'Coincide con la máquina de arriba',
opciones:['Sí, es la misma','No — la unidad está en otra máquina (explícalo abajo)','La lista no dice la máquina'],
aviso:'Si NO coincide, avisa a ingeniería: el registro de qué unidad está en qué máquina quedó mal y hay que corregirlo.' },
aviso:'Si no coincide, avisa a ingeniería: el registro está mal.' },
{ tipo:'radio', clave:'permiso', req:true, guardaEn:'permiso',
txt:'¿Hay autorización de acceso a esa máquina?',
txt:'Autorización de acceso',
opciones:['Sí, autorizada por correo','Sí, autorizada en sitio por el supervisor','No — solo la reviso desde afuera, sin subir','No aplica — la unidad ya está en el taller'] },
{ tipo:'texto', clave:'permiso_quien', si:v=>String(v.permiso||'').startsWith('Sí'), rows:'1',
txt:'¿Quién autorizó y a qué hora?', ph:'Abraham (ICAVE) — correo del 18-sep, acceso 09:40' },
txt:'Quién autorizó y hora', ph:'Abraham (ICAVE) — correo del 18-sep, acceso 09:40' },
{ tipo:'check', clave:'loto', si:v=>String(v.permiso||'').startsWith('Sí'),
txt:'La máquina está <b>detenida y bloqueada (LOTO)</b>, o el supervisor confirmó que es seguro trabajar en ella.' },
txt:'Máquina detenida y bloqueada (LOTO), o el supervisor confirmó que es seguro.' },
{ tipo:'nota', si:v=>String(v.permiso||'').startsWith('No —'),
txt:'<div class="peligro"><b>Sin autorización no te subas al equipo.</b> Haz lo que se pueda desde el piso '
+ '(fotos de lejos, patrón del LED si se alcanza a ver) y déjalo anotado. Una revisión incompleta '
+ 'es aceptable; un accidente no.</div>' },
{ tipo:'texto', clave:'operador', rows:'1', txt:'¿Quién te acompañó o te dio acceso? (operador o supervisor)' },
txt:'<div class="peligro"><b>Sin autorización no subas.</b> Haz lo posible desde el piso (fotos, LED si se ve) y anótalo.</div>' },
{ tipo:'texto', clave:'operador', rows:'1', txt:'Acompañante (operador o supervisor)' },
] },
{ titulo: '1 · Por qué vienes a esta unidad',
sub:'Contesta con lo que te dijeron, aunque suene vago. La versión del operador vale.',
{ titulo: '1 · Motivo',
sub:'Lo que te dijeron, aunque suene vago.',
items: [
{ tipo:'radio', clave:'motivo', req:true, guardaEn:'motivo', txt:'Motivo de la visita',
{ tipo:'radio', clave:'motivo', req:true, guardaEn:'motivo', txt:'Motivo',
opciones:['Dejó de reportar','Reporta pero con posición mala o saltos','Nunca ha reportado desde que se instaló',
'La máquina se quedó sin la unidad / se desmontó','Revisión preventiva','Otro (explícalo abajo)'] },
{ tipo:'texto', clave:'reporte', rows:'2', txt:'¿Quién avisó y qué dijo exactamente?',
{ tipo:'texto', clave:'reporte', rows:'2', txt:'Quién avisó y qué dijo',
ph:'Ej.: el operador del montacargas dice que ayer en la tarde dejó de verse en el sistema.' },
{ tipo:'texto', clave:'ultima_vez', txt:'¿Cuándo se vio reportando por última vez? (fecha y hora aproximadas)',
{ tipo:'texto', clave:'ultima_vez', txt:'Último reporte (fecha y hora aprox.)',
ph:'17-sep, como a las 3 de la tarde' },
{ tipo:'radio', clave:'estado_maquina', txt:'¿Cómo está la máquina ahora?',
{ tipo:'radio', clave:'estado_maquina', txt:'Estado de la máquina',
opciones:['Trabajando normal','Encendida pero parada','Apagada','En taller / fuera de servicio','No sé'] },
] },
{ titulo: '2 · Antes de abrir nada — cómo la encontraste',
sub:'Todo este paso se hace con el gabinete CERRADO y sin cortar la energía.',
{ titulo: '2 · Cómo la encontraste',
sub:'Gabinete cerrado, sin cortar la energía.',
items: [
{ tipo:'foto', clave:'f_maquina', req:true, etiqueta:'maquina',
txt:'La máquina completa, de lejos, donde se vea dónde está montado el gabinete.',
ayuda:'Sirve para saber qué sol le pega y a qué altura está. Una sola foto basta.' },
txt:'Máquina completa con el gabinete a la vista.',
ayuda:'Para ver sol y altura. Una foto basta.' },
{ tipo:'foto', clave:'f_gabinete', req:true, etiqueta:'gabinete-cerrado',
txt:'El gabinete cerrado, de cerca, tal como lo encontraste.' },
txt:'Gabinete cerrado, de cerca.' },
{ tipo:'foto', clave:'f_antenas', req:true, etiqueta:'antenas',
txt:'Las antenas (la de GPS y las dos de celular) con su cable.',
ayuda:'Acércate al conector: buscamos cables pellizcados, conectores flojos, antenas rotas o faltantes.' },
{ tipo:'check', clave:'ext_golpes', txt:'Revisé el exterior: <b>golpes, tapas flojas, tornillos faltantes, prensaestopas sueltos</b>.' },
{ tipo:'radio', clave:'ext_estado', txt:'¿El gabinete por fuera está…?',
txt:'Antenas (GPS y dos de celular) con su cable.',
ayuda:'De cerca al conector: cables pellizcados, conectores flojos, antenas rotas o faltantes.' },
{ tipo:'check', clave:'ext_golpes', txt:'Exterior revisado: golpes, tapa, tornillos, prensaestopas.' },
{ tipo:'radio', clave:'ext_estado', txt:'Gabinete por fuera',
opciones:['Bien, sin daños','Golpeado','Con agua o marcas de agua','Con la tapa mal cerrada','Falta alguna antena'] },
{ tipo:'radio', clave:'sol', txt:'¿Le pega el sol directo a esa hora?', opciones:['Sí, de lleno','Parcial','No, está en sombra'] },
{ tipo:'medida', clave:'hora_revision', txt:'Hora a la que estás haciendo esta revisión', ph:'14:30', modo:'text' },
{ tipo:'radio', clave:'sol', txt:'Sol directo a esta hora', opciones:['Sí, de lleno','Parcial','No, está en sombra'] },
{ tipo:'medida', clave:'hora_revision', txt:'Hora de la revisión', ph:'14:30', modo:'text' },
] },
{ titulo: '3 · El LED de estado — el dato más importante de toda la visita',
sub:'La unidad te está diciendo qué le pasa con el parpadeo del LED. Todavía SIN cortarle la energía.',
{ titulo: '3 · LED de estado',
sub:'Todavía sin cortar la energía.',
items: [
{ tipo:'nota', txt:'<b>Cómo se hace bien:</b> mira el LED <b>10 segundos completos</b> con el reloj y '
+ '<b>cuenta cuántas veces prende</b>. No lo adivines: 5 veces en 10 s y 10 veces en 10 s significan '
+ 'cosas <b>opuestas</b> (una es que la máquina no le da corriente, la otra es que no tiene enlace).' },
{ tipo:'medida', clave:'destellos', txt:'¿Cuántas veces prendió el LED en 10 segundos?', ph:'5', u:'destellos' },
{ tipo:'radio', clave:'led', req:true, txt:'¿Cuál de estos patrones es? (elige el que más se parezca)',
{ tipo:'nota', txt:'Cuenta los destellos durante 10 s con reloj. 5 y 10 destellos significan cosas opuestas (sin corriente de la máquina vs sin enlace).' },
{ tipo:'medida', clave:'destellos', txt:'Destellos en 10 s', ph:'5', u:'destellos' },
{ tipo:'radio', clave:'led', req:true, txt:'Patrón del LED',
opciones:[
'A · Apagado — no prende ni una vez en 30 segundos',
'B · Fijo encendido, sin parpadear',
@ -124,130 +113,125 @@ Acta.render({
'F · Dos destellos juntos, pausa, y se repite',
'G · Parpadeo rápido continuo, no alcanzo a contarlo',
'H · No puedo ver el LED desde afuera' ] },
{ tipo:'foto', clave:'f_led', etiqueta:'led', txt:'Opcional pero muy útil: foto del LED encendido.' },
{ tipo:'foto', clave:'f_led', etiqueta:'led', txt:'LED encendido (opcional).' },
] },
{ titulo: '🔴 Lectura A — la unidad está muerta o sin corriente', si:v=>led(v).startsWith('A'),
sub:'El LED apagado significa una de dos: no le llega energía, o el HBOX ya no enciende. El multímetro lo decide.',
{ titulo: 'Lectura A — sin energía o muerta', si:v=>led(v).startsWith('A'),
sub:'No le llega energía o el HBOX no enciende; el multímetro decide.',
items: [
{ tipo:'nota', txt:'Abre el gabinete (máquina apagada) y mide <b>en este orden</b>. Si en algún punto ya no hay voltaje, ahí está el corte.' },
{ tipo:'medida', clave:'v_maquina', txt:'1) Voltaje que entrega la máquina al gabinete', esperado:'12 V o 24 V según el equipo', u:'V' },
{ tipo:'nota', txt:'Máquina apagada, gabinete abierto. Mide en orden; donde deje de haber voltaje está el corte.' },
{ tipo:'medida', clave:'v_maquina', txt:'1) Máquina → gabinete', esperado:'12 V o 24 V según el equipo', u:'V' },
{ tipo:'radio', clave:'breaker', txt:'2) Breaker / fusible del gabinete', opciones:['Cerrado y con continuidad','Botado (disparado)','Fusible abierto (quemado)','No pude revisarlo'] },
{ tipo:'radio', clave:'meanwell_led', txt:'3) LED verde de la fuente Mean Well', opciones:['Encendido','Apagado','No tiene / no se ve'] },
{ tipo:'medida', clave:'v_meanwell', txt:'4) Salida de la fuente Mean Well', esperado:'23 – 26 V', u:'V' },
{ tipo:'medida', clave:'v_gx16', txt:'5) En el conector GX16 del HBOX, pines 1-2', esperado:'23 – 26 V', u:'V',
aviso:'Esta es la medida que parte el diagnóstico en dos: <b>con 24 V aquí y el LED apagado, la falla es del HBOX</b>. Sin 24 V aquí, la falla es del gabinete o de la máquina.' },
{ tipo:'medida', clave:'v_ign', txt:'6) GX16 pin 3 (ignición), con la máquina encendida', esperado:'12 – 24 V con ignición', u:'V' },
{ tipo:'foto', clave:'f_interior_a', req:true, etiqueta:'interior', txt:'Interior del gabinete completo, antes de mover cables.' },
{ tipo:'radio', clave:'meanwell_led', txt:'3) LED verde de la Mean Well', opciones:['Encendido','Apagado','No tiene / no se ve'] },
{ tipo:'medida', clave:'v_meanwell', txt:'4) Salida de la Mean Well', esperado:'23 – 26 V', u:'V' },
{ tipo:'medida', clave:'v_gx16', txt:'5) GX16 del HBOX, pines 1-2', esperado:'23 – 26 V', u:'V',
aviso:'Con 24 V aquí y LED apagado: falla del HBOX. Sin 24 V: gabinete o máquina.' },
{ tipo:'medida', clave:'v_ign', txt:'6) GX16 pin 3 (ignición), máquina encendida', esperado:'12 – 24 V con ignición', u:'V' },
{ tipo:'foto', clave:'f_interior_a', req:true, etiqueta:'interior', txt:'Interior del gabinete, antes de mover cables.' },
] },
{ titulo: '🟡 Lectura D — el HBOX vive, pero la máquina no le está dando corriente', si:v=>led(v).startsWith('D'),
sub:'Latido lento = el equipo está funcionando con su propia batería. Aguanta poco: por eso "dejó de reportar".',
{ titulo: 'Lectura D — vive en batería, sin corriente de la máquina', si:v=>led(v).startsWith('D'),
sub:'Latido lento = funciona con su batería, que aguanta poco.',
items: [
{ tipo:'nota', txt:'La falla <b>no está en el HBOX</b>, está aguas arriba: breaker, fusible, fuente, cable o ignición.' },
{ tipo:'medida', clave:'v_maquina_d', txt:'Voltaje que entrega la máquina al gabinete', esperado:'12 V o 24 V', u:'V' },
{ tipo:'nota', txt:'La falla está aguas arriba del HBOX: breaker, fusible, fuente, cable o ignición.' },
{ tipo:'medida', clave:'v_maquina_d', txt:'Máquina → gabinete', esperado:'12 V o 24 V', u:'V' },
{ tipo:'radio', clave:'breaker_d', txt:'Breaker / fusible del gabinete', opciones:['Cerrado y con continuidad','Botado (disparado)','Fusible abierto (quemado)','No pude revisarlo'] },
{ tipo:'medida', clave:'v_gx16_d', txt:'GX16 pines 1-2 (lo que llega al HBOX)', esperado:'23 – 26 V', u:'V' },
{ tipo:'texto', clave:'nota_d', txt:'¿Encontraste el punto donde se corta?', ph:'Ej.: hay 24 V a la salida de la fuente pero 0 V en el GX16 → cable o conector.' },
{ tipo:'texto', clave:'nota_d', txt:'Punto donde se corta', ph:'Ej.: hay 24 V a la salida de la fuente pero 0 V en el GX16 → cable o conector.' },
{ tipo:'foto', clave:'f_interior_d', req:true, etiqueta:'interior', txt:'Interior del gabinete y el punto donde se corta el voltaje.' },
] },
{ titulo: '🟠 Lectura E / F / G — el HBOX vive pero no tiene enlace', si:v=>/^[EFG]/.test(led(v)),
sub:'Parpadeo de 1 por segundo, doble destello o parpadeo rápido continuo = está buscando o perdiendo el enlace de datos.',
{ titulo: 'Lectura E / F / G — vive, sin enlace', si:v=>/^[EFG]/.test(led(v)),
sub:'Buscando o perdiendo el enlace de datos.',
items: [
{ tipo:'nota', txt:'Las correcciones y los datos viajan por el <b>módem 4G</b>, no por el GPS. Revisa la cadena del celular.' },
{ tipo:'check', clave:'ant_lte', txt:'Las <b>dos antenas de celular</b> están atornilladas y firmes (no flojas, no rotas).' },
{ tipo:'check', clave:'ant_gnss', txt:'La antena de <b>GPS</b> está firme, con vista al cielo y el cable sin aplastar.' },
{ tipo:'radio', clave:'senal_tel', txt:'Con tu teléfono, parado junto a la máquina, ¿cuánta señal Telcel hay?',
{ tipo:'nota', txt:'Correcciones y datos viajan por el módem 4G, no por el GPS: revisa la cadena celular.' },
{ tipo:'check', clave:'ant_lte', txt:'Dos antenas de celular firmes y sanas.' },
{ tipo:'check', clave:'ant_gnss', txt:'Antena GPS firme, con cielo, cable sin aplastar.' },
{ tipo:'radio', clave:'senal_tel', txt:'Señal Telcel en tu teléfono junto a la máquina',
opciones:['Llena','Media','Una rayita','Nada'] },
{ tipo:'texto', clave:'nota_efg', txt:'¿Algo cambió cerca? (estructura metálica nueva, contenedores apilados, el gabinete se movió)' },
{ tipo:'foto', clave:'f_ant_cerca', req:true, etiqueta:'antenas-detalle', txt:'Detalle de los conectores de antena, bien de cerca.' },
{ tipo:'nota', txt:'Si el parpadeo era <b>rápido y continuo</b> (patrón G), puede ser que la unidad se esté '
+ 'reiniciando sola una y otra vez. Eso <b>solo</b> se confirma con la captura por USB del paso 5: hazla sí o sí.' },
{ tipo:'texto', clave:'nota_efg', txt:'Cambios cerca (estructuras, contenedores, gabinete movido)' },
{ tipo:'foto', clave:'f_ant_cerca', req:true, etiqueta:'antenas-detalle', txt:'Conectores de antena de cerca.' },
{ tipo:'nota', txt:'Patrón G (rápido continuo): posible bucle de reinicio. Solo la captura USB del paso 5 lo confirma; hazla.' },
] },
{ titulo: '🔵 Lectura B — la unidad se ve sana', si:v=>led(v).startsWith('B'),
sub:'LED fijo = está trabajando, con corriente de la máquina y con enlace. Entonces el problema no está aquí.',
{ titulo: 'Lectura B — se ve sana', si:v=>led(v).startsWith('B'),
sub:'LED fijo = trabajando, con corriente y enlace.',
items: [
{ tipo:'nota', txt:'<b>No la desmontes.</b> Si el sistema no la ve pero el equipo está sano, lo más probable es que el '
+ 'problema esté en el servidor, en la SIM o en la plataforma. Haz la captura por USB del paso 5 y avisa a ingeniería.' },
{ tipo:'nota', txt:'<b>No la desmontes.</b> Probablemente es el servidor, la SIM o la plataforma. Haz la captura USB del paso 5 y avisa a ingeniería.' },
{ tipo:'check', clave:'b_aviso', txt:'Entendido: la dejo instalada y reporto a ingeniería.' },
] },
{ titulo: '🟣 Lectura C — la unidad está dormida por batería agotada', si:v=>led(v).startsWith('C'),
sub:'Destello cortito cada 4 s = se durmió para no dañar la batería. Casi siempre es consecuencia, no causa: lleva tiempo sin corriente de la máquina.',
{ titulo: 'Lectura C — dormida por batería agotada', si:v=>led(v).startsWith('C'),
sub:'Destello corto cada 4 s. Casi siempre es consecuencia: lleva tiempo sin corriente de la máquina.',
items: [
{ tipo:'medida', clave:'v_gx16_c', txt:'GX16 pines 1-2 (lo que llega al HBOX)', esperado:'23 – 26 V', u:'V' },
{ tipo:'medida', clave:'v_ign_c', txt:'GX16 pin 3 (ignición), máquina encendida', esperado:'12 – 24 V', u:'V' },
{ tipo:'foto', clave:'f_interior_c', req:true, etiqueta:'interior', txt:'Interior del gabinete.' },
] },
{ titulo: '⚪ No se ve el LED', si:v=>led(v).startsWith('H'),
{ titulo: 'LED no visible', si:v=>led(v).startsWith('H'),
items: [
{ tipo:'nota', txt:'Sin el LED no hay atajo: el paso 5 (captura por USB con la laptop) pasa de recomendado a <b>obligatorio</b>.' },
{ tipo:'nota', txt:'Sin LED, la captura USB del paso 5 es obligatoria.' },
] },
{ titulo: '4 · Por dentro — temperatura, olor y batería',
sub:'Solo si ya abriste el gabinete y la máquina está apagada.',
{ titulo: '4 · Por dentro',
sub:'Gabinete abierto y máquina apagada.',
items: [
{ tipo:'radio', clave:'abrir', req:true, txt:'¿Abriste el gabinete?', opciones:['Sí','No — no fue posible (explica al final)'] },
{ tipo:'radio', clave:'tacto', si:abrio, txt:'Con el <b>dorso</b> de la mano, la caja del HBOX se siente…',
{ tipo:'radio', clave:'abrir', req:true, txt:'Gabinete abierto', opciones:['Sí','No — no fue posible (explica al final)'] },
{ tipo:'radio', clave:'tacto', si:abrio, txt:'Caja del HBOX al tacto (dorso de la mano)',
opciones:['Fría o al tiempo','Tibia','Caliente pero se aguanta','Quema — no se puede tocar'] },
{ tipo:'medida', clave:'t_ir', si:abrio, txt:'Si traes termómetro infrarrojo: temperatura dentro del gabinete', esperado:'anota también la del aire afuera', u:'°C' },
{ tipo:'medida', clave:'t_ir', si:abrio, txt:'Temperatura dentro del gabinete (IR)', esperado:'anota también la del aire afuera', u:'°C' },
{ tipo:'medida', clave:'t_amb', si:abrio, txt:'Temperatura ambiente a la sombra', u:'°C' },
{ tipo:'radio', clave:'olor', si:abrio, req:true, txt:'¿Huele a quemado o a plástico derretido?', opciones:['No','Sí, leve','Sí, fuerte'] },
{ tipo:'radio', clave:'agua', si:abrio, txt:'¿Hay agua, humedad o condensación adentro?', opciones:['No','Gotas o empañado','Encharcado'] },
{ tipo:'radio', clave:'bateria', si:abrio, req:true, txt:'La batería se ve…',
{ tipo:'radio', clave:'olor', si:abrio, req:true, txt:'Olor a quemado', opciones:['No','Sí, leve','Sí, fuerte'] },
{ tipo:'radio', clave:'agua', si:abrio, txt:'Agua o condensación', opciones:['No','Gotas o empañado','Encharcado'] },
{ tipo:'radio', clave:'bateria', si:abrio, req:true, txt:'Batería',
opciones:['Normal','Hinchada o abombada','Con manchas cafés o negras','Con líquido o fuga','Caliente','No tiene batería / no la vi'],
aviso:'Si marcaste hinchada, con fuga o caliente: <b>deja de desarmar</b>, sepárala de la electrónica, no la perfores y avisa hoy mismo.' },
aviso:'Hinchada, con fuga o caliente: deja de desarmar, sepárala, no la perfores y avisa hoy.' },
{ tipo:'foto', clave:'f_bateria', etiqueta:'bateria',
si:v=>['Hinchada','Con manchas','Con líquido','Caliente'].some(t=>String(v.bateria||'').startsWith(t)),
req:true, txt:'Foto de la batería desde dos ángulos.' },
req:true, txt:'Batería, dos ángulos.' },
{ tipo:'foto', clave:'f_quemado', etiqueta:'dano', si:v=>String(v.olor||'').startsWith('Sí'),
req:true, txt:'Foto de lo que se ve quemado, oscurecido o derretido.' },
{ tipo:'check', clave:'wiggle', si:abrio, txt:'Prueba de meneo: moví <b>suavemente</b> cada conector y cable. Anoto abajo si alguno estaba flojo.' },
{ tipo:'texto', clave:'nota_interior', si:abrio, rows:'2', txt:'¿Qué encontraste flojo, quemado, mojado o fuera de lugar?' },
req:true, txt:'Lo quemado, oscurecido o derretido.' },
{ tipo:'check', clave:'wiggle', si:abrio, txt:'Meneo suave de conectores y cables (lo flojo, abajo).' },
{ tipo:'texto', clave:'nota_interior', si:abrio, rows:'2', txt:'Hallazgos' },
] },
{ titulo: '5 · Captura por USB — lo que la unidad tiene guardado',
sub:'Este paso vale más que todos los demás juntos: la unidad guarda su temperatura máxima, cuántas veces se reinició y por qué arrancó la última vez. Eso se pierde al cortarle la corriente.',
{ titulo: '5 · Captura por USB',
sub:'Temperatura máxima, reinicios y causa del último arranque; se pierden al cortar la corriente.',
items: [
{ tipo:'nota', txt:'<b>Cómo:</b> conecta el cable USB del Blackpill a la laptop → abre el puerto serie nuevo a '
+ '<b>115200</b> baudios → <b>guarda a archivo</b> → déjalo correr <b>3 minutos</b> → después presiona RESET y '
+ 'graba también el arranque. Al final guarda el archivo y pega abajo las dos últimas líneas.' },
{ tipo:'radio', clave:'usb', req:true, txt:'¿Pudiste hacer la captura?',
{ tipo:'nota', txt:'USB del Blackpill → puerto serie a 115200 guardando a archivo → 3 min → RESET y graba el arranque. Pega abajo las líneas BOOT y TLM.' },
{ tipo:'radio', clave:'usb', req:true, txt:'Captura',
opciones:['Sí, con archivo guardado','Sí, pero solo pude ver la pantalla','No traía laptop','No, la unidad no enciende','No, no hay acceso físico al USB'] },
{ tipo:'texto', clave:'linea_boot', si:conUsb, rows:'2',
txt:'Pega la línea que empieza con BOOT,', ph:'BOOT,1234,fw=3.0.3,reset=…' },
txt:'Línea BOOT', ph:'BOOT,1234,fw=3.0.3,reset=…' },
{ tipo:'texto', clave:'linea_tlm', si:conUsb, rows:'3',
txt:'Pega la última línea que empieza con TLM,', ph:'TLM,…,RUN,OK,4,14,…' },
txt:'Última línea TLM', ph:'TLM,…,RUN,OK,4,14,…' },
{ tipo:'nota', si:conUsb,
txt:'Si no puedes copiar y pegar, no importa: llena a mano los cuatro datos de abajo, que son los que más nos dicen.' },
{ tipo:'medida', clave:'tlm_tmax', si:conUsb, txt:'Campo <code>tmax</code> (temperatura máxima que ha visto)', u:'°C' },
{ tipo:'medida', clave:'tlm_rec', si:conUsb, txt:'Campo <code>rec</code> (veces que se ha tenido que recuperar)' },
{ tipo:'medida', clave:'tlm_vbat', si:conUsb, txt:'Campo <code>vbat</code> (voltaje de la batería)', u:'V' },
{ tipo:'medida', clave:'tlm_veh', si:conUsb, txt:'Campo <code>veh</code> (1 = le llega corriente de la máquina, 0 = no)' },
txt:'Si no puedes pegar, llena a mano los cuatro campos de abajo.' },
{ tipo:'medida', clave:'tlm_tmax', si:conUsb, txt:'<code>tmax</code> (temperatura máxima)', u:'°C' },
{ tipo:'medida', clave:'tlm_rec', si:conUsb, txt:'<code>rec</code> (recuperaciones)' },
{ tipo:'medida', clave:'tlm_vbat', si:conUsb, txt:'<code>vbat</code> (batería)', u:'V' },
{ tipo:'medida', clave:'tlm_veh', si:conUsb, txt:'<code>veh</code> (1 = hay corriente de la máquina)' },
{ tipo:'archivo', clave:'log_blackpill', etiqueta:'captura-blackpill',
si:v=>String(v.usb||'').startsWith('Sí, con archivo'), req:true,
txt:'Sube aquí el archivo de la captura del Blackpill',
ayuda:'El .txt o .log que guardó PuTTY / TeraTerm. Es el registro más valioso de la visita: '
+ 'súbelo aunque no hayas entendido lo que dice.' },
txt:'Captura del Blackpill',
ayuda:'El .txt o .log de PuTTY / TeraTerm.' },
{ tipo:'foto', clave:'f_pantalla', etiqueta:'captura-usb', si:conUsb,
txt:'Foto de la pantalla de la laptop con las líneas visibles (respaldo por si falla el copiado).' },
txt:'Pantalla de la laptop con las líneas (respaldo).' },
] },
{ titulo: '6 · Reinicio controlado — hasta ahora sí puedes cortar la energía',
sub:'Solo cuando ya terminaste los pasos 2 al 5. Antes no.',
{ titulo: '6 · Reinicio controlado',
sub:'Solo después de los pasos 2 a 5.',
items: [
{ tipo:'check', clave:'evidencia_lista', req:true, txt:'Ya tomé las fotos y (si se pudo) la captura por USB. <b>La evidencia está completa.</b>' },
{ tipo:'radio', clave:'reinicio', txt:'Corté la energía 30 segundos, la volví a dar y esperé 2 minutos. ¿Qué pasó?',
{ tipo:'check', clave:'evidencia_lista', req:true, txt:'Fotos y captura USB (si se pudo) tomadas: evidencia completa.' },
{ tipo:'radio', clave:'reinicio', txt:'Energía cortada 30 s y devuelta; resultado a 2 min',
opciones:['Revivió y quedó con LED fijo','Revivió pero volvió a fallar','Sigue igual','No lo intenté'] },
] },
{ titulo: '7 · Cómo la dejas y qué crees que tiene',
sub:'Elige lo que observaste, no lo que supones. "No está claro" es una respuesta válida y útil.',
{ titulo: '7 · Clasificación y resultado',
sub:'Lo que observaste, no lo que supones. "No está claro" es válido.',
items: [
{ tipo:'radio', clave:'clasificacion', req:true, guardaEn:'clasificacion', txt:'Clasificación de la falla',
{ tipo:'radio', clave:'clasificacion', req:true, guardaEn:'clasificacion', txt:'Clasificación',
opciones:[
'Sin corriente desde la máquina o el gabinete',
'El HBOX no enciende aunque le llega 24 V',
@ -259,7 +243,7 @@ Acta.render({
'Daño mecánico o golpe',
'La unidad se ve sana — el problema parece ser del servidor',
'No está claro — se necesita banco' ] },
{ tipo:'radio', clave:'accion', req:true, guardaEn:'accion', txt:'¿Cómo queda la unidad al terminar tu visita?',
{ tipo:'radio', clave:'accion', req:true, guardaEn:'accion', txt:'Resultado',
opciones:[
'Instalada y reportando',
'Instalada, pero sin resolver — pendiente de ingeniería',
@ -267,11 +251,11 @@ Acta.render({
'Desmontada y enviada a Querétaro',
'Reemplazada por otra unidad (anota cuál abajo)' ] },
{ tipo:'texto', clave:'unidad_repuesto', si:v=>String(v.accion||'').startsWith('Reemplazada'),
txt:'Número de serie de la unidad que quedó instalada' },
txt:'Serie de la unidad instalada' },
{ tipo:'texto', clave:'observaciones', rows:'4', req:true,
txt:'Cuenta con tus palabras qué viste y qué hiciste',
ph:'Escribe como se lo contarías a un compañero. Lo que aquí escribas es lo que va a leer ingeniería.' },
{ tipo:'foto', clave:'f_final', etiqueta:'final', txt:'Foto de cómo quedó al terminar (instalada o empacada).' },
txt:'Observaciones',
ph:'Qué viste y qué hiciste, como se lo contarías a un compañero.' },
{ tipo:'foto', clave:'f_final', etiqueta:'final', txt:'Cómo quedó (instalada o empacada).' },
] },
]
});

View File

@ -13,8 +13,8 @@
Acta.render({
tipo: 'ensamble',
titulo: 'Acta de ensamble — unidad HBOX v5',
subtitulo: 'Una unidad a la vez. Procedimiento: "Ensamble de la unidad y energizado final".',
intro: '<b>Primero el acta, luego el desarmador.</b> Selecciona los tres módulos: el sitio verifica que cada uno esté <b>aprobado</b>, que la pareja ArduSimple+4G tenga su <b>integración</b> y que ninguno esté ya en otra unidad. El número de serie de la unidad se calcula solo.',
subtitulo: 'Una unidad a la vez. Procedimiento: Ensamble de la unidad y energizado.',
intro: 'Primero el acta, luego el desarmador. Elige los tres módulos: el sitio verifica que estén aprobados, que la pareja tenga integración y que ninguno esté en otra unidad. El número de unidad se calcula solo.',
componentes: [
{ clave:'einar', etiqueta:'EinarBoard v5', prefijo:'V5', desde:1, hasta:30, pad:2, tipoActa:'prueba-v5' },
{ clave:'ard', etiqueta:'simpleRTK2B Pro (ArduSimple)', prefijo:'ARD', desde:1, hasta:30, pad:3, tipoActa:'modulo-ard' },
@ -31,56 +31,56 @@ Acta.render({
secciones: [
{ titulo: '2 · Preparación de la tarjeta (sin energía)',
items: [
{ tipo:'check', txt:'La EinarBoard física es la seleccionada arriba (etiqueta cerca de MH4).' },
{ tipo:'check', txt:'La EinarBoard física es la elegida arriba (etiqueta cerca de MH4).' },
{ tipo:'radio', txt:'JP2 (F2)', opciones:['1 = Li-ion','0 = LiFePO4'] },
{ tipo:'radio', txt:'JP3 (F1)', opciones:['0','1'] },
{ tipo:'radio', txt:'JP4 (F0)', opciones:['1','0'] },
{ tipo:'check', txt:'Posición esperada para el pack Li-ion 4.00 V: <b>JP2 = 1 · JP3 = 0 · JP4 = 1</b>. JP1 (0R) presente.' },
{ tipo:'check', txt:'P11 sin jumper (el interruptor de panel va ahí). Tarjeta fijada con separadores, sin flexión.' },
{ tipo:'check', txt:'JP2 = química del paquete (V5.5 Li-ion = 1, V5.6 LFP = 0) · JP3 = 0 · JP4 = 1. JP1 (0R) presente.' },
{ tipo:'check', txt:'P11 sin jumper (ahí va el interruptor). Tarjeta fija sin flexión.' },
] },
{ titulo: '3 · Módulos enchufables (sin energía)',
items: [
{ tipo:'check', txt:'simpleRTK2B Pro en <b>MOD1</b>: pin "5V" alineado, cuatro tiras a fondo, ninguna clavija fuera.' },
{ tipo:'check', txt:'4G NTRIP Master en <b>J7/J8</b> de la EinarBoard (no en el simpleRTK2B), silueta coincide con la serigrafía.' },
{ tipo:'check', txt:'simpleRTK2B en <b>MOD1</b>: pin "5V" alineado, tiras a fondo, ninguna clavija fuera.' },
{ tipo:'check', txt:'Módem en <b>J7/J8</b> de la EinarBoard, silueta sobre la serigrafía.' },
{ tipo:'check', txt:'SIM presente. Nada roza la tapa ni componentes altos (K1, C10, L6).' },
] },
{ titulo: '4 · Panel y arnés interno (sin energía)',
items: [
{ tipo:'check', txt:'<b>P1</b> ← GX16: 1 = +24 V, 2 = GND, 3 = ignición, 4 = GND. Polaridad verificada con multímetro.' },
{ tipo:'medida', txt:'Salida de la SD-15B-05 ajustada en banco', esperado:'5.00 V', u:'V' },
{ tipo:'check', txt:'<b>P2</b> ← SD-15B (pin 1 = +5 V). Entrada de la SD-15B al +24 V/GND del GX16.' },
{ tipo:'check', txt:'<b>P1</b> ← GX16: 1 = +24 V, 2 = GND, 3 = ignición, 4 = GND. Polaridad medida.' },
{ tipo:'medida', txt:'Salida SD-15B-05 ajustada', esperado:'5.00 V', u:'V' },
{ tipo:'check', txt:'<b>P2</b> ← SD-15B (pin 1 = +5 V); entrada de la SD-15B al GX16.' },
{ tipo:'check', txt:'<b>P6</b> ventilador (flujo hacia afuera) · <b>P8</b> LED panel · <b>P10</b> reset · <b>P11</b> interruptor de corte · <b>P12</b> NTC punto caliente.' },
{ tipo:'check', txt:'Antena GNSS: bulkhead SMA → SMA del simpleRTK2B, con fijador de rosca.' },
{ tipo:'check', txt:'2 antenas LTE: bulkheads SMA → u.FL del módulo 4G (clic), sin dobleces cerrados.' },
{ tipo:'check', txt:'2 antenas LTE: bulkheads SMA → u.FL del módem (clic), sin dobleces cerrados.' },
{ tipo:'check', txt:'<b>P4</b> (batería) todavía <b>NO</b> conectado. Cables sujetos; nada expuesto cerca de 24 V.' },
] },
{ titulo: '5 · Energizado desde 24 V (sin batería)',
sub: 'Fuente 24.0 V, límite 1.0 A al GX16. Interruptor de corte ON. USB en J11, terminal 115200.',
items: [
{ tipo:'medida', txt:'Corriente con la etapa RTK apagada', esperado:'< 150 mA', u:'mA' },
{ tipo:'medida', txt:'Corriente, etapa RTK apagada', esperado:'< 150 mA', u:'mA' },
{ tipo:'check', txt:'D18 verde encendido · D17 azul y LED de panel parpadean · ventilador gira.' },
{ tipo:'check', txt:'Consola: encabezado <code>hbox-v5-bringup</code> con <b>12 PASS</b>.' },
{ tipo:'medida', txt:'STAT v5', esperado:'4.8 – 5.1 V', u:'V' },
{ tipo:'medida', txt:'STAT tmp102 / sht40', modo:'text', ph:'p.ej. 31.2 / 30.8 °C' },
{ tipo:'check', txt:'Comando <b>P</b> + <b>Y</b> → <code>STACK ON</code>. simpleRTK2B POWER encendido; 4G se registra (< 2 min).' },
{ tipo:'medida', txt:'Corriente con la etapa RTK encendida', esperado:'250 – 600 mA', u:'mA' },
{ tipo:'medida', txt:'Comando <b>n</b>: tiempo hasta <code>fix=4</code> (RTK FIX)', esperado:'< 10 min con antena al cielo', u:'min' },
{ tipo:'medida', txt:'Satélites reportados en <code>n</code>', esperado:'≥ 10', u:'sat' },
{ tipo:'check', txt:'Comando <b>P</b> de nuevo → <code>STACK OFF</code>; corriente vuelve a < 150 mA.' },
{ tipo:'check', txt:'<b>P</b> + <b>Y</b> → <code>STACK ON</code>; POWER del simpleRTK2B encendido; módem registra en < 2 min.' },
{ tipo:'medida', txt:'Corriente, etapa RTK encendida', esperado:'250 – 600 mA', u:'mA' },
{ tipo:'medida', txt:'<b>n</b>: tiempo hasta <code>fix=4</code>', esperado:'< 10 min con antena al cielo', u:'min' },
{ tipo:'medida', txt:'Satélites en <code>n</code>', esperado:'≥ 10', u:'sat' },
{ tipo:'check', txt:'<b>P</b> → <code>STACK OFF</code>; corriente < 150 mA.' },
] },
{ titulo: '6 · Batería y respaldo',
sub: 'Etapa RTK apagada. Pack en P4 (1 = BAT+, 2 = GND, 3 = NTC).',
sub: 'Etapa RTK apagada. Paquete en P4 (1 = BAT+, 2 = GND, 3 = NTC).',
items: [
{ tipo:'medida', txt:'Voltaje del pack antes de conectar (BAT+ a GND)', esperado:'3.0 – 4.2 V', u:'V' },
{ tipo:'medida', txt:'STAT vbat con el pack conectado', esperado:'≈ voltaje del pack', u:'V' },
{ tipo:'check', txt:'<b>Respaldo:</b> al cortar 24 V la consola y los LEDs <b>siguen vivos</b>, sin reinicio (el encabezado no se reimprime). STAT v5 = 0.0.' },
{ tipo:'medida', txt:'Paquete en vacío (BAT+ a GND)', esperado:'Li-ion 3.0 – 4.2 V · LFP 2.8 – 3.6 V', u:'V' },
{ tipo:'medida', txt:'STAT vbat, paquete conectado', esperado:'≈ voltaje del paquete', u:'V' },
{ tipo:'check', txt:'Respaldo: al cortar 24 V la consola y los LEDs siguen vivos, sin reinicio. STAT v5 = 0.0.' },
{ tipo:'check', txt:'Al regresar 24 V, STAT v5 ≈ 5.0 sin reinicio.' },
{ tipo:'texto', txt:'Observaciones (reinicios, calentamiento, corriente fuera de rango)', ph:'ninguna / describir' },
{ tipo:'texto', txt:'Observaciones', ph:'reinicios, calentamiento, corriente fuera de rango…' },
] },
{ titulo: '7 · Cierre y etiquetado',
items: [
{ tipo:'check', txt:'Etiqueta <b>exterior</b> con el número de la unidad junto al GX16; etiqueta <b>interior</b> en la tapa.' },
{ tipo:'check', txt:'Interruptor de corte en <b>OFF</b> para almacenar. Tapa cerrada con sello, tornillos en cruz, prensaestopas apretados.' },
{ tipo:'check', txt:'Etiqueta exterior junto al GX16 e interior en la tapa.' },
{ tipo:'check', txt:'Corte en OFF para almacenar. Tapa con sello, tornillos en cruz, prensaestopas apretados.' },
] },
]
});

View File

@ -23,56 +23,54 @@ Acta.render({
unidades: window.SERIES,
etiquetaSerie: 'Unidad que se envía',
titulo: 'Acta de envío',
subtitulo: 'Helgen Technologies · se llena al cerrar la caja, no después.',
intro: '<b>Para qué sirve.</b> Fija el estado exacto en que salió la unidad: qué firmware traía, qué SIM, '
+ 'qué iba en la caja y cómo se veía. Cuando llegue, el acta de <b>recepción</b> se compara contra '
+ 'esta. Si algo falta o llegó golpeado, se sabe en qué tramo pasó.',
subtitulo: 'Se llena al cerrar la caja. Procedimiento: Ciclo de vida §6.',
intro: 'Fija cómo salió la unidad (firmware, SIM, contenido, fotos). La recepción se compara contra esta acta.',
secciones: [
{ titulo: '0 · Qué se manda y a dónde',
items: [
{ tipo:'fecha', clave:'fecha', req:true, guardaEn:'fecha', txt:'Fecha de envío' },
{ tipo:'fecha', clave:'fecha', req:true, guardaEn:'fecha', txt:'Fecha' },
{ tipo:'radio', clave:'destino', req:true, guardaEn:'clasificacion', txt:'Destino',
opciones:['ICAVE (Veracruz)','TIMSA','EIT','LCT','Taller Veracruz','Querétaro (regreso)','Otro'] },
{ tipo:'texto', clave:'maquina_destino', rows:'1', guardaEn:'maquina_id', txt:'Máquina a la que va, si ya se sabe', ph:'FL-JUN-060' },
{ tipo:'radio', clave:'medio', req:true, txt:'¿Cómo viaja?',
{ tipo:'texto', clave:'maquina_destino', rows:'1', guardaEn:'maquina_id', txt:'Máquina destino (si se sabe)', ph:'FL-JUN-060' },
{ tipo:'radio', clave:'medio', req:true, txt:'Medio de envío',
opciones:['Paquetería (guía abajo)','La lleva alguien de Helgen','La recoge el cliente'] },
{ tipo:'texto', clave:'guia', rows:'1', txt:'Número de guía o quién la lleva' },
{ tipo:'texto', clave:'guia', rows:'1', txt:'Guía o quién la lleva' },
] },
{ titulo: '1 · Antes de cerrar la caja — requisitos',
sub:'Si alguno de estos no se cumple, la unidad NO se envía.',
{ titulo: '1 · Requisitos',
sub:'Si alguno no se cumple, la unidad no se envía.',
items: [
{ tipo:'check', clave:'prueba_final', req:true, txt:'Tiene <b>acta de prueba final aprobada</b> en el sitio (no vale "ya la probé").' },
{ tipo:'check', clave:'sin_marca', req:true, txt:'Al elegir la serie arriba <b>no apareció aviso de daño</b>.' },
{ tipo:'texto', clave:'fw', rows:'1', req:true, txt:'Firmware que trae (línea BOOT o banner de consola)', ph:'fw=4.0.0' },
{ tipo:'texto', clave:'iccid', rows:'1', req:true, txt:'ICCID de la SIM instalada' },
{ tipo:'check', clave:'prueba_final', req:true, txt:'Prueba final aprobada en el sitio.' },
{ tipo:'check', clave:'sin_marca', req:true, txt:'Sin aviso de daño al elegir la serie.' },
{ tipo:'texto', clave:'fw', rows:'1', req:true, txt:'Firmware (línea BOOT o banner)', ph:'fw=4.0.0' },
{ tipo:'texto', clave:'iccid', rows:'1', req:true, txt:'ICCID de la SIM' },
{ tipo:'texto', clave:'imei', rows:'1', txt:'IMEI del módem' },
{ tipo:'texto', clave:'id_estacion', rows:'1', txt:'ID de estación del módem (AS+K)' },
{ tipo:'check', clave:'config_flash', txt:'Configuración del ZED-F9P guardada en <b>FLASH</b> (no solo RAM).' },
{ tipo:'texto', clave:'id_estacion', rows:'1', txt:'ID de estación (AS+K)' },
{ tipo:'check', clave:'config_flash', txt:'Configuración ZED-F9P guardada en FLASH.' },
] },
{ titulo: '2 · Lo que va en la caja',
{ titulo: '2 · Contenido de la caja',
items: [
{ tipo:'check', clave:'c_unidad', req:true, txt:'Unidad HBOX cerrada y etiquetada con su serie.' },
{ tipo:'check', clave:'c_unidad', req:true, txt:'Unidad cerrada y etiquetada.' },
{ tipo:'check', clave:'c_ant_gnss', txt:'Antena GNSS con su cable.' },
{ tipo:'check', clave:'c_ant_lte', txt:'2 antenas LTE.' },
{ tipo:'check', clave:'c_gx16', txt:'Arnés GX16 hacia el gabinete.' },
{ tipo:'check', clave:'c_fuente', txt:'Fuente Mean Well y material de gabinete (si aplica).' },
{ tipo:'check', clave:'c_docs', txt:'Hoja impresa con serie, máquina destino y contacto de Helgen.' },
{ tipo:'texto', clave:'extras', rows:'2', txt:'Otras cosas que van (tornillería, cinchos, repuestos…)' },
{ tipo:'radio', clave:'bateria', req:true, txt:'¿Viaja con batería instalada?',
{ tipo:'check', clave:'c_docs', txt:'Hoja con serie, máquina y contacto.' },
{ tipo:'texto', clave:'extras', rows:'2', txt:'Otros (tornillería, cinchos, repuestos…)' },
{ tipo:'radio', clave:'bateria', req:true, txt:'Batería instalada',
opciones:['Sí','No — se retiró','No tiene batería'],
aviso:'Una batería de litio <b>no viaja en avión</b> como carga normal. Si va por paquetería, confirma con ellos que va por tierra.' },
{ tipo:'medida', clave:'v_bat', si:conBateria, txt:'Voltaje de la batería al empacar', esperado:'3.6 – 4.0 V', u:'V' },
aviso:'La batería de litio <b>no viaja en avión</b> como carga normal. Por paquetería, confirma envío terrestre.' },
{ tipo:'medida', clave:'v_bat', si:conBateria, txt:'Batería al empacar', esperado:'3.6 – 4.0 V', u:'V' },
] },
{ titulo: '3 · Evidencia',
items: [
{ tipo:'foto', clave:'f_abierta', req:true, etiqueta:'caja-abierta', txt:'La caja abierta con todo adentro, antes de cerrar.' },
{ tipo:'foto', clave:'f_unidad', req:true, etiqueta:'unidad', txt:'La unidad con su etiqueta legible.' },
{ tipo:'foto', clave:'f_cerrada', etiqueta:'caja-cerrada', txt:'La caja cerrada y rotulada.' },
{ tipo:'radio', clave:'accion', req:true, guardaEn:'accion', txt:'Estado',
{ tipo:'foto', clave:'f_abierta', req:true, etiqueta:'caja-abierta', txt:'Caja abierta con todo adentro.' },
{ tipo:'foto', clave:'f_unidad', req:true, etiqueta:'unidad', txt:'Unidad con etiqueta legible.' },
{ tipo:'foto', clave:'f_cerrada', etiqueta:'caja-cerrada', txt:'Caja cerrada y rotulada.' },
{ tipo:'radio', clave:'accion', req:true, guardaEn:'accion', txt:'Resultado',
opciones:['Enviada','Lista pero detenida (explica abajo)'] },
{ tipo:'texto', clave:'observaciones', rows:'3', txt:'Observaciones' },
] },

View File

@ -0,0 +1,102 @@
<!doctype html>
<html lang="es">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Prueba de banco — Ethernet y puertos serie (V5)</title>
<link rel="stylesheet" href="acta.css">
</head>
<body>
<div id="acta"></div>
<script src="flota.js"></script>
<script src="series.js"></script>
<script src="acta.js"></script>
<script>
const ethSi = v => String(v.eth_aplica || '').startsWith('Sí');
const serSi = v => String(v.ser_aplica || '').startsWith('Sí');
const fw061 = v => serSi(v) && String(v.ser_fw || '').startsWith('0.6.1');
Acta.render({
tipo: 'prueba-ethernet-serie',
repetible: true,
tecnicoDesdeUsuario: true,
nombres: { alan: 'Alán Basurto', daniel: 'Daniel Martínez', leo: 'Leo Rodríguez' },
unidades: window.SERIES,
etiquetaSerie: 'Unidad o tarjeta bajo prueba',
titulo: 'Acta: Ethernet y puertos serie',
subtitulo: 'V5.5 / V5.6. Procedimiento: Taller → Ethernet y puertos serie.',
textoOK: 'PRUEBA COMPLETA',
intro: 'W5500 (J10) y SC16IS752 con RS-485 (P15) y RS-232 (P16). Ethernet solo con <code>0.6.0-eth</code>; eco serie solo con <code>0.6.1</code>. '
+ '<b>Reglas:</b> nunca Ethernet en batería o solo por USB · 5 V ≥ 5.2 V · al terminar, de vuelta a <code>0.6.0</code> de campo. '
+ 'Laptop en 192.168.7.1/24 con <code>nc -lk 5010</code>; consola HBOX (J11, 115200) grabando a archivo; teclas <code>s</code> STAT · <code>E</code> Ethernet on/off.',
secciones: [
{ titulo: '0 · Configuración',
items: [
{ tipo:'fecha', clave:'fecha', req:true, guardaEn:'fecha', txt:'Fecha' },
{ tipo:'radio', clave:'tarjeta', req:true, guardaEn:'clasificacion', txt:'Tarjeta', opciones:['V5.5','V5.6'] },
{ tipo:'texto', clave:'h00', rows:'1', txt:'Unidad en el monitor (H00xx)', ph:'H0012' },
{ tipo:'texto', clave:'fw', rows:'1', req:true, txt:'Firmware (línea BOOT o banner)', ph:'hbox-v5-bringup 0.6.0-eth built …' },
{ tipo:'radio', clave:'alim', req:true, txt:'Alimentación', opciones:['24 V al GX16 (SD-15B interno)','Fuente 5.3 V en P2 (sin batería)'] },
{ tipo:'medida', clave:'v5', req:true, txt:'STAT v5, etapa ON', esperado:'5.2 – 5.4 V (ok)', u:'V' },
{ tipo:'check', clave:'monitor', txt:'Monitor abierto con la unidad (para ver que el 4G no se afecta).' },
] },
{ titulo: 'A · Ethernet',
sub:'Cable directo J10 ↔ laptop (192.168.7.1/24); <code>nc -lk 5010</code> escuchando antes de energizar.',
items: [
{ tipo:'radio', clave:'eth_aplica', req:true, txt:'Ethernet probado', opciones:['Sí','No — sin build -eth disponible','No — el panel no lleva RJ45'] },
{ tipo:'radio', clave:'eth_hw', si:ethSi, req:true, txt:'Consola al energizar', opciones:['ETH W5500 OK en SPI2','ETH W5500 NO responde (ETH_HW fail)','No apareció ninguna línea ETH'] },
{ tipo:'radio', clave:'eth_link', si:ethSi, req:true, txt:'LED de enlace de J10', opciones:['Encendido','Apagado','Parpadea sin quedarse fijo'] },
{ tipo:'radio', clave:'eth_ip_modo', si:ethSi, req:true, txt:'Dirección obtenida', opciones:['Estática 192.168.7.2 (sin DHCP en 4 s)','DHCP','Nunca llegó a «enlace ARRIBA»'] },
{ tipo:'texto', clave:'eth_ip', si:ethSi, rows:'1', txt:'IP en STAT (eth=… ip=)', ph:'192.168.7.2' },
{ tipo:'radio', clave:'eth_tcp', si:ethSi, req:true, txt:'Espejo TCP a 192.168.7.1:5010', opciones:['Conectó y nc recibe líneas','Conectó pero nc no muestra nada','Nunca conectó (eth=buscando_srv)'] },
{ tipo:'check', clave:'eth_phid', si:ethSi, txt:'Primero <code>$PHID,…,0.6.0-eth,…</code> en <code>nc</code>, luego NMEA + <code>$PHLG</code>.' },
{ tipo:'texto', clave:'eth_phid_txt', si:ethSi, rows:'1', txt:'Línea $PHID', ph:'$PHID,3A0021000E51313230383335,0.6.0-eth,EinarBoard v5 (HBOX v5),02:48:42:1F:2C:9B,42*5C' },
{ tipo:'texto', clave:'eth_stat', si:ethSi, rows:'2', txt:'STAT eth= a 5 min', ph:'eth=CONECTADO ip=192.168.7.2 lineas=612 bytes=48210 drop=0 conn=1' },
{ tipo:'radio', clave:'eth_cable', si:ethSi, req:true, txt:'Cable fuera 10 s: reconecta en < 10 s', opciones:['Sí','No'] },
{ tipo:'radio', clave:'eth_srv', si:ethSi, req:true, txt:'nc relanzado: reconecta solo', opciones:['Sí','No'] },
{ tipo:'radio', clave:'eth_e', si:ethSi, txt:'Tecla E apaga y levanta', opciones:['Sí','No','No probado'] },
{ tipo:'radio', clave:'eth_4g', si:ethSi, req:true, txt:'4G sin afectar con Ethernet conectado (modoB=ON, phlg_aire sube)', opciones:['Sí','No','Sin módem en esta prueba'] },
{ tipo:'archivo', clave:'eth_nc', si:ethSi, etiqueta:'eth-nc', txt:'Captura de nc' },
] },
{ titulo: 'B · RS-485 (P15)',
sub:'1 = A · 2 = B · 3 = GND. JP5 = terminación 120 Ω, cerrada solo si el HBOX es un extremo del bus.',
items: [
{ tipo:'radio', clave:'ser_aplica', req:true, txt:'Puertos serie probados', opciones:['Sí','No — el panel no lleva clemas serie','No — pendiente'] },
{ tipo:'radio', clave:'ser_fw', si:serSi, req:true, txt:'Alcance según firmware', opciones:['0.6.0 / 0.6.0-eth: presencia + niveles','0.6.1: presencia + niveles + lazo + eco'] },
{ tipo:'check', clave:'ser_post', si:serSi, req:true, txt:'POST: <code>[PASS] SC16IS752 0x4D ACK, SPR rd=0xA5</code>.' },
{ tipo:'radio', clave:'jp5', si:serSi, req:true, txt:'JP5 durante la prueba', opciones:['Abierto (de fábrica)','Cerrado (120 Ω)'] },
{ tipo:'medida', clave:'r485_ohm', si:serSi, txt:'A–B en ohms, tarjeta apagada', esperado:'≈ 120 Ω con JP5 cerrado · > 10 kΩ abierto', u:'Ω' },
{ tipo:'medida', clave:'r485_a', si:serSi, txt:'A (P15.1) a GND, sin nada conectado', esperado:'1 – 3 V', u:'V' },
{ tipo:'medida', clave:'r485_b', si:serSi, txt:'B (P15.2) a GND', esperado:'1 – 3 V', u:'V' },
{ tipo:'radio', clave:'r485_tx', si:fw061, txt:'Eco RS-485 9600 8N1 — TX', opciones:['OK 10/10','Parcial (caracteres perdidos)','Nada'] },
{ tipo:'radio', clave:'r485_rx', si:fw061, txt:'Eco RS-485 — RX', opciones:['OK','Nada'] },
{ tipo:'radio', clave:'r485_swap', si:fw061, txt:'A y B intercambiados', opciones:['No','Sí (adaptador con D+/D− al revés)'] },
] },
{ titulo: 'C · RS-232 (P16)',
sub:'1 = TX (sale) · 2 = RX (entra) · 3 = GND. Contra la laptop, cruzado: TX → DB9 2, RX ← DB9 3, GND ↔ 5.',
items: [
{ tipo:'medida', clave:'r232_tx_v', si:serSi, req:true, txt:'TX (P16.1) a GND en reposo', esperado:'−5 a −6.5 V', u:'V',
aviso:'≈ 0 V = MAX3232 sin alimentación o bomba de carga muerta · ≈ +5 V = U10 en reset (T1IN bajo).' },
{ tipo:'radio', clave:'r232_tx', si:fw061, txt:'Eco RS-232 9600 8N1 — TX', opciones:['OK 10/10','Parcial','Nada'] },
{ tipo:'radio', clave:'r232_rx', si:fw061, txt:'Eco RS-232 — RX', opciones:['OK','Nada'] },
{ tipo:'texto', clave:'ser_nota', si:serSi, rows:'2', txt:'Adaptadores (marca / chip) y velocidad', ph:'USB-RS485 CH340 con terminación interna ON · USB-RS232 FTDI · 9600 8N1' },
] },
{ titulo: 'Cierre',
items: [
{ tipo:'archivo', clave:'log', req:true, etiqueta:'eth-serie-consola', txt:'Log completo de consola' },
{ tipo:'foto', clave:'f_banco', etiqueta:'banco', txt:'Banco: J10, clemas y JP5.' },
{ tipo:'check', clave:'reflash', txt:'De vuelta a <code>hbox-v5-bringup_0.6.0.bin</code>, anotado en el acta de reflasheo.' },
{ tipo:'radio', clave:'accion', req:true, guardaEn:'accion', txt:'Resultado',
opciones:['APROBADA — Ethernet y serie OK','APROBADA — solo Ethernet (serie no aplica / pendiente 0.6.1)','APROBADA — solo serie','FALLA Ethernet','FALLA serie','FALLA ambos'] },
{ tipo:'texto', clave:'observaciones', rows:'4', txt:'Observaciones', ph:'síntoma, punto del árbol de fallas, valores fuera de rango' },
] },
]
});
</script>
</body>
</html>

View File

@ -13,8 +13,8 @@
Acta.render({
tipo: 'integracion',
titulo: 'Acta de integración — simpleRTK2B Pro + 4G NTRIP Master',
subtitulo: 'La pareja que irá junta en una unidad. Procedimiento: "Módulos e integración" §4.',
intro: 'Elige los dos módulos. Ambos deben estar <b>aprobados</b> en su propia acta; el sitio lo verifica al seleccionarlos.',
subtitulo: 'La pareja que irá junta en una unidad. Procedimiento: Módulos e integración §3.',
intro: 'Elige los dos módulos. Ambos deben estar aprobados en su acta; el sitio lo verifica.',
componentes: [
{ clave:'ard', etiqueta:'simpleRTK2B Pro (ArduSimple)', prefijo:'ARD', desde:1, hasta:30, pad:3, tipoActa:'modulo-ard' },
{ clave:'modem', etiqueta:'4G NTRIP Master', prefijo:'RTK', desde:1, hasta:30, pad:4, tipoActa:'modulo-4g' },
@ -24,26 +24,26 @@ Acta.render({
etiquetaSerie: 'Identificador de la pareja (automático)',
exigirAprobados: true,
secciones: [
{ titulo: '4 · Montaje',
sub: '4G sobre el zócalo XBee del simpleRTK2B, 2 antenas LTE, antena GNSS al cielo, USB POWER+GPS. u-center a 115200.',
{ titulo: '3a · Montaje',
sub: 'Módem en el zócalo XBee del simpleRTK2B, 2 antenas LTE, GNSS al cielo, USB POWER+GPS. u-center a 115200.',
items: [
{ tipo:'check', txt:'Montaje completo <b>sin energía</b>; antenas conectadas antes de energizar.' },
{ tipo:'check', txt:'Montado sin energía; antenas antes de energizar.' },
{ tipo:'check', txt:'Fix <b>3D</b> en u-center.' },
{ tipo:'check', txt:'LED de red del 4G registrado; LED <b>NO RTK</b> del simpleRTK2B empieza a <b>parpadear</b> (llegan correcciones).' },
{ tipo:'check', txt:'Módem registrado; LED <b>NO RTK</b> parpadea (llegan correcciones).' },
] },
{ titulo: '4 · RTK FIX',
{ titulo: '3b · RTK FIX',
items: [
{ tipo:'medida', txt:'Tiempo desde encendido hasta RTK FIX (LED NO RTK apagado / Fix Mode FIXED)', esperado:'< 10 min', u:'min' },
{ tipo:'medida', txt:'Encendido → RTK FIX (NO RTK apagado)', esperado:'< 10 min', u:'min' },
{ tipo:'medida', txt:'Satélites en uso', esperado:'≥ 10', u:'sat' },
{ tipo:'medida', txt:'Precisión estimada hAcc en FIX', esperado:'< 0.05 m', u:'m' },
{ tipo:'check', txt:'Se mantiene <b>FIXED 5 min</b> sin caer a FLOAT (antena quieta).' },
{ tipo:'radio', txt:'Confirmación en la plataforma Helgen (estación AS+K reportando)', opciones:['Confirmado por ingeniería','Pendiente de confirmar','No aparece'] },
{ tipo:'medida', txt:'Hora de la confirmación / a quién se avisó', modo:'text', ph:'p.ej. 12:40, Leo' },
{ tipo:'texto', txt:'Observaciones (FLOAT sin FIX, caídas, señal…)', ph:'ninguna / describir' },
{ tipo:'medida', txt:'hAcc en FIX', esperado:'< 0.05 m', u:'m' },
{ tipo:'check', txt:'FIXED 5 min sin caer a FLOAT (antena quieta).' },
{ tipo:'radio', txt:'Estación AS+K en la plataforma', opciones:['Confirmado por ingeniería','Pendiente de confirmar','No aparece'] },
{ tipo:'medida', txt:'Hora y a quién se avisó', modo:'text', ph:'p.ej. 12:40, Leo' },
{ tipo:'texto', txt:'Observaciones', ph:'FLOAT sin FIX, caídas, señal…' },
] },
{ titulo: '4b · Cierre',
{ titulo: '3c · Cierre',
items: [
{ tipo:'check', txt:'Módulos separados con cuidado; cada uno en su bolsa. En la bolsa del ArduSimple anotada la pareja RTK-NNNN.' },
{ tipo:'check', txt:'Módulos separados, cada uno en su bolsa; en la del ArduSimple anotada la pareja RTK-NNNN.' },
] },
]
});

View File

@ -13,37 +13,37 @@
Acta.render({
tipo: 'modulo-4g',
prefijo: 'RTK', desde: 1, series: 30, pad: 4, // RTK-0001 … RTK-0030 (etiqueta del módem 4G)
etiquetaSerie: 'Número de serie del módem (etiqueta RTK-NNNN)',
etiquetaSerie: 'Módem (RTK-NNNN)',
titulo: 'Acta de módulo — 4G NTRIP Master',
subtitulo: 'Un acta por módem. Procedimiento: "Módulos e integración" §3. Antenas LTE conectadas ANTES de energizar.',
subtitulo: 'Un acta por módem. Antenas LTE antes de energizar. Procedimiento: Módulos e integración §2.',
secciones: [
{ titulo: '3a · Inspección visual (sin energía)',
{ titulo: '2a · Inspección (sin energía)',
items: [
{ tipo:'medida', txt:'IMEI (etiqueta del módem)', modo:'numeric', ph:'15 dígitos' },
{ tipo:'medida', txt:'ICCID de la SIM Telcel', modo:'numeric', ph:'19–20 dígitos' },
{ tipo:'check', txt:'Etiqueta <b>RTK-NNNN</b> puesta; SIM insertada con clic en la dirección correcta.' },
{ tipo:'medida', txt:'IMEI del módem', modo:'numeric', ph:'15 dígitos' },
{ tipo:'medida', txt:'ICCID de la SIM', modo:'numeric', ph:'19–20 dígitos' },
{ tipo:'check', txt:'Etiqueta <b>RTK-NNNN</b> puesta; SIM con clic, bien orientada.' },
{ tipo:'check', txt:'Pines XBee (2 × 10, 2 mm) rectos; conectores <b>u.FL</b> sin daño.' },
] },
{ titulo: '3b · Montaje sobre el simpleRTK2B y configuración',
sub: 'Sin energía: módulo en el zócalo XBee del simpleRTK2B. 2 antenas LTE + antena GNSS. USB POWER+GPS y USB XBEE conectados. Terminal en el puerto XBEE a 115200.',
{ titulo: '2b · Montaje y configuración',
sub: 'Sin energía: módem en el zócalo XBee del simpleRTK2B, 2 antenas LTE y GNSS. USB POWER+GPS y XBEE. Terminal en XBEE a 115200.',
items: [
{ tipo:'medida', txt:'simpleRTK2B usado como base para esta prueba', modo:'text', ph:'ARD-NNN' },
{ tipo:'check', txt:'Archivo <code>4G_NTRIP_HelgenSRV-NMEA.local.txt</code> enviado línea por línea; <b>ninguna</b> línea con <code>ERROR</code>.' },
{ tipo:'medida', txt:'ID de estación programado (<code>$$$AS+K</code>)', modo:'text', ph:'según ingeniería' },
{ tipo:'check', txt:'Configuración verificada al releer (el módulo responde con los valores enviados).' },
{ tipo:'medida', txt:'simpleRTK2B usado (ARD-NNN)', modo:'text', ph:'ARD-NNN' },
{ tipo:'check', txt:'<code>4G_NTRIP_HelgenSRV-NMEA.local.txt</code> enviado; ninguna línea con <code>ERROR</code>.' },
{ tipo:'medida', txt:'ID de estación (<code>AS+K</code>)', modo:'text', ph:'según ingeniería' },
{ tipo:'check', txt:'Configuración releída: coincide con lo enviado.' },
] },
{ titulo: '3c · Registro en la red',
sub: 'Esperar hasta 2 min con las antenas LTE conectadas.',
{ titulo: '2c · Registro en la red',
sub: 'Hasta 2 min con las antenas LTE conectadas.',
items: [
{ tipo:'check', txt:'LED de red del módulo pasa de parpadeo rápido a <b>lento o fijo</b> (registrado).' },
{ tipo:'check', txt:'LED de red de rápido a lento o fijo (registrado).' },
{ tipo:'medida', txt:'Operador reportado', modo:'text', esperado:'Telcel', ph:'Telcel' },
{ tipo:'medida', txt:'Señal (RSSI/CSQ) si el módulo la reporta', modo:'text', ph:'p.ej. 18/31 o −75 dBm' },
{ tipo:'medida', txt:'Tiempo hasta registrarse', esperado:'< 2 min', u:'min' },
{ tipo:'medida', txt:'Señal (RSSI/CSQ), si la reporta', modo:'text', ph:'p.ej. 18/31 o −75 dBm' },
{ tipo:'medida', txt:'Tiempo hasta registrar', esperado:'< 2 min', u:'min' },
{ tipo:'texto', txt:'Observaciones', ph:'ninguna / describir' },
] },
{ titulo: 'Cierre',
items: [
{ tipo:'check', txt:'Módulo separado del simpleRTK2B sin doblar pines; en bolsa con su etiqueta RTK-NNNN.' },
{ tipo:'check', txt:'Separado sin doblar pines; en bolsa con su etiqueta.' },
] },
]
});

View File

@ -21,7 +21,7 @@ const COLS = [
{ k:'uart', txt:'UART simpleRTK2B', opciones:['lento ~1/s','rápido','sin parpadeo'] },
{ k:'k1', txt:'K1', opciones:['sin clic','clic (MODOB ON)','clic repetido'] },
{ k:'vbat', txt:'vbat / vbatmin', ph:'3.92 / 3.71', ancho:'110px' },
{ k:'srv', txt:'¿Servidor?', opciones:['nada','$PHLG 🔋','posición','posición + $PHLG'] },
{ k:'srv', txt:'Servidor', opciones:['nada','$PHLG 🔋','posición','posición + $PHLG'] },
];
const tabla = (clave, txt, sub) => ({ tipo:'tabla', clave, txt, sub, etiquetaFilas:'t', filas:FILAS, columnas:COLS });
const dioA = v => String(v.c2_resultado || '').startsWith('Sigue igual');
@ -34,13 +34,12 @@ Acta.render({
nombres: { alan: 'Alán Basurto', daniel: 'Daniel Martínez', leo: 'Leo Rodríguez' },
unidades: window.SERIES,
etiquetaSerie: 'Unidad bajo prueba',
titulo: 'Prueba de banco — módem 4G en modo batería',
subtitulo: 'Helgen Technologies · fw 0.5.3 · el procedimiento completo está en Procedimientos → 🔋 Prueba: módem 4G en batería.',
titulo: 'Acta: módem 4G en batería',
subtitulo: 'Corridas de diagnóstico 0–4 (fw 0.5.3–0.5.7). Procedimiento: Taller → Módem 4G en batería §4.',
textoOK: 'PRUEBA COMPLETA',
intro: '<b>Qué se busca.</b> En batería la unidad enciende la etapa 2 min cada 10, pero el módem no llega a transmitir. '
+ 'Esta acta separa dos causas: <b>A</b> el riel del boost se hunde con la ráfaga LTE, o <b>B</b> el camino por K1 (Modo B). '
+ 'Las lecturas de multímetro son <b>obligatorias</b>: en batería el firmware no ve el riel (<code>v5</code> mide el 5 V del vehículo). '
+ 'Puntos: <b>MAIN5V</b> = U6 pin 1 / C32 / P11 pin 1 · <b>SW_5V</b> = MOD1 pin 5 / C3 · <b>3V3_MODEM</b> = zócalo XBee pin 1 (J7 pin 1 / J8 pin 7) — <b>esta es la que alimenta al módem</b> · negro a GND. '
intro: 'Separa dos causas de que el módem no transmita en batería: <b>A</b> riel del boost hundido por la ráfaga LTE, o <b>B</b> camino por K1 (Modo B). '
+ 'Multímetro obligatorio: en batería <code>v5</code> mide el 5 V del vehículo, no el riel. '
+ 'Puntos: <b>MAIN5V</b> = U6 pin 1 / C32 / P11 pin 1 · <b>SW_5V</b> = MOD1 pin 5 / C3 · <b>3V3_MODEM</b> (alimenta el módem) = J7 pin 1 / J8 pin 7 · negro a GND. '
+ 'Consola HBOX a 115200 grabando a archivo; teclas <code>s</code> STAT · <code>v</code> puntos · <code>B</code> Modo B.',
secciones: [
@ -48,20 +47,20 @@ Acta.render({
items: [
{ tipo:'fecha', clave:'fecha', req:true, guardaEn:'fecha', txt:'Fecha' },
{ tipo:'radio', clave:'tarjeta', req:true, guardaEn:'clasificacion', txt:'Tarjeta', opciones:['V5','V4','V3'] },
{ tipo:'texto', clave:'fw', rows:'1', req:true, txt:'Firmware (primera línea de la consola)', ph:'hbox-v5-bringup 0.5.5 built …' },
{ tipo:'texto', clave:'bateria', rows:'1', req:true, txt:'Batería: voltaje en vacío antes de empezar y temperatura ambiente', ph:'4.02 V · 27 °C' },
{ tipo:'texto', clave:'fw', rows:'1', req:true, txt:'Firmware (línea BOOT o banner)', ph:'hbox-v5-bringup 0.5.5 built …' },
{ tipo:'texto', clave:'bateria', rows:'1', req:true, txt:'Batería en vacío y temperatura ambiente', ph:'4.02 V · 27 °C' },
{ tipo:'radio', clave:'cielo', req:true, txt:'Antena GNSS', opciones:['Cielo abierto','Ventana','Interior (sin fix)'] },
{ tipo:'check', clave:'usb', req:true, txt:'<b>Ningún USB</b> conectado al simpleRTK2B ni al módem: solo el USB de consola del HBOX.' },
{ tipo:'check', clave:'monitor', req:true, txt:'Monitor abierto con la unidad localizada (para ver si recibe).' },
{ tipo:'check', clave:'usb', req:true, txt:'Ningún USB en el simpleRTK2B ni en el módem; solo el de consola.' },
{ tipo:'check', clave:'monitor', req:true, txt:'Monitor abierto con la unidad.' },
] },
{ titulo: 'Corrida 0 · Referencia con 24 V',
sub:'Todo funcionando con 24 V. Si esto no sale limpio, detenerse: el problema no es la batería.',
sub:'Todo con 24 V. Si no sale limpio, detente: el problema no es la batería.',
items: [
{ tipo:'medida', clave:'c0_main5v', req:true, txt:'MAIN5V', esperado:'5.2 – 5.4 V', u:'V' },
{ tipo:'medida', clave:'c0_sw5v', req:true, txt:'SW_5V', esperado:'≈ 5.0 V', u:'V' },
{ tipo:'medida', clave:'c0_v3m', req:true, txt:'3V3_MODEM (zócalo XBee pin 1)', esperado:'3.25 – 3.35 V', u:'V' },
{ tipo:'texto', clave:'c0_ledm', rows:'1', req:true, txt:'LEDs del módem (cuál, color, patrón)', ph:'NET verde parpadeo lento; PWR rojo fijo' },
{ tipo:'texto', clave:'c0_ledm', rows:'1', req:true, txt:'LEDs del módem (cuál, color, ritmo)', ph:'NET verde parpadeo lento; PWR rojo fijo' },
{ tipo:'radio', clave:'c0_uart', req:true, txt:'LEDs UART del simpleRTK2B', opciones:['rápido (correcciones + NMEA)','lento ~1/s','sin parpadeo'] },
{ tipo:'check', clave:'c0_k1', req:true, txt:'Clic de K1 a los ~13 s y consola <code>MODOB ON</code>.' },
{ tipo:'check', clave:'c0_srv', req:true, txt:'El monitor muestra la unidad con Salud (<code>$PHLG</code>) y ⚡.' },
@ -69,9 +68,9 @@ Acta.render({
] },
{ titulo: 'Corrida 1 · Batería con Modo B (la falla)',
sub:'Quitar los 24 V y arrancar el cronómetro. La primera ventana arranca con el módem ya registrado; la que importa es el despertar #1 a los ~10 min.',
sub:'Quita 24 V y arranca el cronómetro. La que importa es el despertar #1 a los ~10 min.',
items: [
{ tipo:'texto', clave:'c1_perdida', rows:'2', req:true, txt:'Al quitar 24 V: ¿qué se oyó y qué hizo el módem en los primeros 30 s?', ph:'clic de K1 inmediato; el módem se apagó y reencendió / siguió igual' },
{ tipo:'texto', clave:'c1_perdida', rows:'2', req:true, txt:'Al quitar 24 V: clic y módem en 30 s', ph:'clic de K1 inmediato; el módem se apagó y reencendió / siguió igual' },
{ tipo:'medida', clave:'c1_reposo_sw5v', req:true, txt:'En reposo (tras DUTY reposo): SW_5V', esperado:'0 V', u:'V' },
{ tipo:'medida', clave:'c1_reposo_v3m', req:true, txt:'En reposo: 3V3_MODEM', esperado:'0 V con 0.5.5 (con 0.5.4 y anteriores queda ≈2 V: es la falla)', u:'V' },
{ tipo:'medida', clave:'c1_reposo_v3rtk', req:true, txt:'En reposo: 3V3 del simpleRTK2B (pin 3V3 del header UNO)', esperado:'0 V con 0.5.5', u:'V',
@ -79,7 +78,7 @@ Acta.render({
{ tipo:'medida', clave:'c1_reposo_din', txt:'En reposo: DIN_4G (zócalo XBee pin 3)', esperado:'0 V', u:'V' },
{ tipo:'radio', clave:'c1_reposo_modem', req:true, txt:'En reposo: el módem…', opciones:['Se apagó (LEDs apagados)','Sigue encendido'],
aviso:'Si sigue encendido con SW_5V = 0 V, algo lo alimenta por otro lado. Anótalo y avisa antes de seguir.' },
{ tipo:'texto', clave:'c1_reposo_nota', si:modemOn, rows:'2', req:true, txt:'¿Qué está conectado al módem o al simpleRTK2B?' },
{ tipo:'texto', clave:'c1_reposo_nota', si:modemOn, rows:'2', req:true, txt:'Qué está conectado al módem o al simpleRTK2B' },
{ tipo:'texto', clave:'c1_wake', rows:'1', req:true, txt:'Hora del cronómetro en <code>DUTY despertar #1</code>', ph:'10:02' },
tabla('c1', 'Registro del despertar #1 (los 2 minutos de ventana)', 'Anota el valor <b>más bajo</b> que alcances a leer en cada intervalo. Tecla <code>s</code> a los 0:30 y 1:30 para vbat/vbatmin.'),
{ tipo:'texto', clave:'c1_fin', rows:'2', req:true, txt:'Cómo terminó la ventana (línea DUTY reposo y qué decía el monitor)', ph:'DUTY reposo: ventana 120s fix=RTK_FIX phlg_aire=4 … monitor: nada' },
@ -87,7 +86,7 @@ Acta.render({
] },
{ titulo: 'Corrida 2 · Batería SIN Modo B',
sub:'Con la unidad en reposo, teclear B → «MODO B BLOQUEADO por operador». Esperar el despertar #2 y registrar igual.',
sub:'En reposo, tecla B → «MODO B BLOQUEADO por operador». Registra el despertar #2 igual.',
items: [
{ tipo:'check', clave:'c2_b', req:true, txt:'La consola confirmó <code>MODO B BLOQUEADO por operador</code> antes del despertar.' },
{ tipo:'texto', clave:'c2_wake', rows:'1', req:true, txt:'Hora del cronómetro en <code>DUTY despertar #2</code>' },
@ -100,7 +99,7 @@ Acta.render({
{ titulo: 'Corrida 3 · Solo si la 2 dio A: fuente de banco en lugar de la batería',
si: dioA,
sub:'Con 24 V y la etapa apagada, desconectar la batería y poner la fuente de banco a 3.9 V, límite 3 A, en su conector (medir polaridad antes). Repetir la corrida 1.',
sub:'Con 24 V y etapa apagada, cambia la batería por fuente a 3.9 V, límite 3 A (mide polaridad). Repite la corrida 1.',
items: [
{ tipo:'medida', clave:'c3_vfuente', req:true, txt:'Fuente ajustada a', esperado:'3.90 V · límite 3 A', u:'V' },
{ tipo:'texto', clave:'c3_wake', rows:'1', req:true, txt:'Hora del cronómetro en el despertar' },
@ -113,22 +112,22 @@ Acta.render({
] },
{ titulo: 'Corrida 4 · Regreso de los 24 V (sin reset)',
sub:'Con la unidad en batería y el módem oscuro, volver a poner los 24 V SIN tocar el botón de reset. Esto es lo que pasa en campo cuando arranca el vehículo.',
sub:'En batería con el módem oscuro, vuelve a poner 24 V sin tocar reset (como al arrancar el vehículo).',
items: [
{ tipo:'radio', clave:'c4_modem', req:true, txt:'Al volver el 24 V, el módem…', opciones:['Arranca solo (LEDs, registra)','Sigue oscuro','Arranca pero no registra'] },
{ tipo:'medida', clave:'c4_v3m', req:true, txt:'3V3_MODEM con el módem oscuro y 24 V puesto', u:'V',
aviso:'Si marca ~3.3 V y el módem sigue oscuro, el módem está <b>alimentado pero sin power-on reset</b> (con 0.5.4 y anteriores: el UART del GNSS sostenía su riel). Con 0.5.5 la tarjeta suelta el UART y cicla la etapa 10 s al volver el 5 V.' },
{ tipo:'texto', clave:'c4_recupera', rows:'2', req:true, txt:'¿Qué lo revivió? (reset SW1, quitar batería, nada…)', ph:'Solo el reset de la tarjeta' },
{ tipo:'texto', clave:'c4_recupera', rows:'2', req:true, txt:'Qué lo revivió', ph:'Solo el reset de la tarjeta' },
{ tipo:'texto', clave:'c4_consola', rows:'2', txt:'Líneas de consola al volver el 5 V', ph:'V5 PRESENTE … DUTY fin … PWR_RETURN_CYCLE … STACK ON reason=recovery' },
] },
{ titulo: 'Cierre',
items: [
{ tipo:'archivo', clave:'log', req:true, etiqueta:'bateria-consola', txt:'Archivo completo de la consola (toda la sesión)' },
{ tipo:'foto', clave:'f_banco', etiqueta:'banco', txt:'Foto del banco con los multímetros conectados (para saber dónde se midió).' },
{ tipo:'archivo', clave:'log', req:true, etiqueta:'bateria-consola', txt:'Log completo de consola' },
{ tipo:'foto', clave:'f_banco', etiqueta:'banco', txt:'Banco con los multímetros conectados.' },
{ tipo:'radio', clave:'accion', req:true, guardaEn:'accion', txt:'Conclusión',
opciones:['A — riel: el paquete','A — riel: etapa de boost','B — camino por K1 (firmware)','No concluyente (explica)'] },
{ tipo:'texto', clave:'observaciones', rows:'4', txt:'Observaciones (todo lo que no cupo arriba)' },
{ tipo:'texto', clave:'observaciones', rows:'4', txt:'Observaciones' },
] },
]
});

View File

@ -26,117 +26,114 @@ Acta.render({
unidades: window.SERIES,
etiquetaSerie: 'Unidad que se recibe',
titulo: 'Acta de recepción e inspección',
subtitulo: 'Helgen Technologies · una por cada caja, al abrirla, ANTES de entrar al puerto.',
subtitulo: 'Una por unidad, al abrir la caja y antes de entrar al puerto. Procedimiento: Ciclo de vida §7.',
textoOK: 'LISTA PARA ENTRAR',
intro: '<b>Para qué sirve.</b> Es la última revisión antes de que la unidad cruce la puerta del puerto, donde ya '
+ 'no se puede regresar por un cable ni abrir la caja. Se hace <b>a cada unidad, sin excepción</b>: se compara '
+ 'contra el <b>acta de envío</b> (mismo firmware, misma SIM, mismo contenido), se busca daño de transporte y se '
+ 'comprueba con multímetro y fuente que la unidad enciende bien <b>antes</b> de que alguien la suba a una máquina. '
+ '<b>Kit:</b> fuente de 24 V (≥ 1 A, con límite de corriente si la tiene), multímetro, cable USB con datos, laptop. '
+ '<b>Orden obligatorio:</b> inspección → multímetro sin energía → energizar → prueba de vida.',
intro: 'Compara contra el acta de envío (firmware, SIM, contenido) y busca daño de transporte. '
+ 'Kit: fuente de 24 V (≥ 1 A; límite en 1 A si lo tiene), multímetro, cable USB con datos, laptop. '
+ '<b>Orden:</b> inspección → multímetro sin energía → energizar → prueba de vida.',
secciones: [
{ titulo: '0 · Qué llega y dónde',
items: [
{ tipo:'fecha', clave:'fecha', req:true, guardaEn:'fecha', txt:'Fecha de recepción' },
{ tipo:'radio', clave:'donde', req:true, guardaEn:'clasificacion', txt:'¿Dónde la recibes?',
{ tipo:'fecha', clave:'fecha', req:true, guardaEn:'fecha', txt:'Fecha' },
{ tipo:'radio', clave:'donde', req:true, guardaEn:'clasificacion', txt:'Dónde se recibe',
opciones:['Taller Veracruz','Oficina ICAVE','Otra terminal','Querétaro'] },
{ tipo:'texto', clave:'guia', rows:'1', txt:'Número de guía o quién la entregó' },
{ tipo:'texto', clave:'maquina_destino', rows:'1', guardaEn:'maquina_id', txt:'Máquina a la que va', ph:'FL-JUN-060' },
{ tipo:'texto', clave:'guia', rows:'1', txt:'Guía o quién la entregó' },
{ tipo:'texto', clave:'maquina_destino', rows:'1', guardaEn:'maquina_id', txt:'Máquina destino', ph:'FL-JUN-060' },
] },
{ titulo: '1 · El paquete, antes de abrir',
items: [
{ tipo:'foto', clave:'f_paquete', req:true, etiqueta:'paquete', txt:'La caja cerrada tal como llegó.' },
{ tipo:'foto', clave:'f_paquete', req:true, etiqueta:'paquete', txt:'Caja cerrada como llegó.' },
{ tipo:'radio', clave:'paquete', req:true, txt:'Estado del paquete',
opciones:['Intacto','Golpeado o aplastado','Abierto o con cinta distinta','Mojado'] },
{ tipo:'foto', clave:'f_dano_paquete', etiqueta:'paquete-dano', si:v=>!String(v.paquete||'').startsWith('Intacto'), req:true,
txt:'Foto del daño del paquete, antes de abrirlo.' },
txt:'Daño del paquete, antes de abrir.' },
] },
{ titulo: '2 · Contenido contra el acta de envío',
sub:'Abre el acta de envío de esta unidad (expediente, arriba) y compara punto por punto.',
sub:'Abre el acta de envío (expediente, arriba) y compara punto por punto.',
items: [
{ tipo:'check', clave:'c_unidad', req:true, txt:'Unidad HBOX presente, etiqueta legible, <b>la serie coincide</b> con la del envío.' },
{ tipo:'check', clave:'c_unidad', req:true, txt:'Unidad presente; la serie coincide con el envío.' },
{ tipo:'check', clave:'c_ant_gnss', txt:'Antena GNSS con cable.' },
{ tipo:'check', clave:'c_ant_lte', txt:'2 antenas LTE.' },
{ tipo:'check', clave:'c_gx16', txt:'Arnés GX16.' },
{ tipo:'check', clave:'c_docs', txt:'Hoja con serie, máquina y contacto.' },
{ tipo:'texto', clave:'faltante', rows:'2', txt:'¿Falta algo o llegó algo de más?' },
{ tipo:'foto', clave:'f_contenido', req:true, etiqueta:'contenido', txt:'Todo el contenido desplegado.' },
{ tipo:'texto', clave:'faltante', rows:'2', txt:'Faltantes o sobrantes' },
{ tipo:'foto', clave:'f_contenido', req:true, etiqueta:'contenido', txt:'Contenido desplegado.' },
] },
{ titulo: '3 · Inspección física de la unidad — daño de transporte',
sub:'Con la tapa abierta y SIN energía. Lo que se busca: golpes, cosas sueltas y módulos que se salieron de su zócalo con la vibración.',
{ titulo: '3 · Inspección física',
sub:'Tapa abierta, sin energía. Golpes, piezas sueltas y módulos fuera de su zócalo por la vibración.',
items: [
{ tipo:'check', clave:'i_sacudir', req:true, txt:'Sacudí la unidad cerrada junto al oído: <b>nada suena suelto</b> adentro.' },
{ tipo:'check', clave:'i_sacudir', req:true, txt:'Sacudida junto al oído: nada suelto.' },
{ tipo:'radio', clave:'gabinete', req:true, txt:'Gabinete y prensaestopas',
opciones:['Sin daño','Rayado o marcado (cosmético)','Golpeado, agrietado o deformado','Con humedad adentro'] },
{ tipo:'check', clave:'i_zocalos', req:true, txt:'Módulos <b>bien asentados en sus zócalos</b>: Blackpill (si la tarjeta lo lleva), simpleRTK2B en los headers UNO y módem 4G en el zócalo XBee. Empujé cada uno con el dedo: no se mueven ni quedan pines fuera.' },
{ tipo:'check', clave:'i_conectores', req:true, txt:'Prueba de meneo en cada conector, Dupont y SMA: los SMA de las antenas apretados, el GX16 con seguro, ningún cable con el aislante pelado o pellizcado por la tapa.' },
{ tipo:'radio', clave:'placa', req:true, txt:'Tarjeta a simple vista',
{ tipo:'check', clave:'i_zocalos', req:true, txt:'Módulos asentados (Blackpill si lo lleva, simpleRTK2B, módem): empujados con el dedo, sin pines fuera.' },
{ tipo:'check', clave:'i_conectores', req:true, txt:'Meneo de conectores, Dupont y SMA: SMA apretados, GX16 con seguro, ningún cable pelado o pellizcado.' },
{ tipo:'radio', clave:'placa', req:true, txt:'Tarjeta',
opciones:['Normal','Componente desprendido o pista levantada','Marca de quemado o decoloración','Corrosión o humedad'] },
{ tipo:'radio', clave:'bateria_fisica', req:true, txt:'Estado físico de la batería',
{ tipo:'radio', clave:'bateria_fisica', req:true, txt:'Batería',
opciones:['Normal','Hinchada o abombada','Con manchas o fuga','Caliente','La unidad no trae batería'],
aviso:'Hinchada, con fuga o caliente: <b>desconéctala antes de energizar</b> y la unidad <b>no entra</b>. Registra un acta de daño.' },
{ tipo:'foto', clave:'f_bat', etiqueta:'bateria', si:batMala, req:true, txt:'Foto de la batería, dos ángulos.' },
{ tipo:'foto', clave:'f_interior', req:true, etiqueta:'interior', txt:'El interior de la unidad, tapa abierta, con los módulos y conectores a la vista.' },
{ tipo:'foto', clave:'f_dano_unidad', etiqueta:'unidad-dano', txt:'Foto de cualquier daño que hayas encontrado (de cerca).',
aviso:'Hinchada, con fuga o caliente: desconéctala antes de energizar; la unidad <b>no entra</b>. Acta de daño.' },
{ tipo:'foto', clave:'f_bat', etiqueta:'bateria', si:batMala, req:true, txt:'Batería, dos ángulos.' },
{ tipo:'foto', clave:'f_interior', req:true, etiqueta:'interior', txt:'Interior con módulos y conectores a la vista.' },
{ tipo:'foto', clave:'f_dano_unidad', etiqueta:'unidad-dano', txt:'Daño encontrado, de cerca.',
si:v=>['Golpeado','Con humedad'].some(t=>String(v.gabinete||'').startsWith(t)) || !String(v.placa||'').startsWith('Normal'), req:true },
{ tipo:'texto', clave:'nota_fisica', rows:'2', txt:'¿Qué encontraste?' },
{ tipo:'texto', clave:'nota_fisica', rows:'2', txt:'Hallazgos' },
] },
{ titulo: '4 · Multímetro SIN energía — continuidad a tierra',
sub:'Multímetro en Ω, fuente apagada y desconectada, batería desconectada si se puede. Un corto que llegó del transporte se detecta aquí y no con humo.',
{ titulo: '4 · Continuidad a tierra (sin energía)',
sub:'Multímetro en Ω, fuente desconectada, batería desconectada si se puede.',
items: [
{ tipo:'nota', txt:'<div class="peligro"><b>Nunca energices antes de medir continuidad.</b> Si hay un corto, la fuente lo va a alimentar y el daño ya no se puede rastrear al transporte.</div>' },
{ tipo:'medida', clave:'r_24v', req:true, txt:'Entrada 24 V a GND (GX16 pines 1-2)', esperado:'> 10 kΩ (la lectura sube mientras cargan los capacitores)', u:'Ω' },
{ tipo:'medida', clave:'r_5v', req:true, txt:'Riel de 5 V a GND (salida Mean Well / P2)', esperado:'> 1 kΩ', u:'Ω' },
{ tipo:'medida', clave:'r_3v3', txt:'Riel de 3.3 V a GND', esperado:'> 1 kΩ', u:'Ω' },
{ tipo:'radio', clave:'continuidad', req:true, txt:'¿Alguna lectura se quedó fija entre 0 y 20 Ω?',
{ tipo:'nota', txt:'<div class="peligro"><b>Nunca energices antes de medir continuidad.</b> Con corto, la fuente lo alimenta y el daño ya no se puede atribuir al transporte.</div>' },
{ tipo:'medida', clave:'r_24v', req:true, txt:'Entrada 24 V a GND (GX16 1-2)', esperado:'> 10 kΩ (sube mientras cargan los capacitores)', u:'Ω' },
{ tipo:'medida', clave:'r_5v', req:true, txt:'5 V a GND (Mean Well / P2)', esperado:'> 1 kΩ', u:'Ω' },
{ tipo:'medida', clave:'r_3v3', txt:'3.3 V a GND', esperado:'> 1 kΩ', u:'Ω' },
{ tipo:'radio', clave:'continuidad', req:true, txt:'Lectura fija en 0–20 Ω',
opciones:['No — todo abierto','Sí — hay un corto'],
aviso:'Con corto <b>no se energiza</b>. La unidad no entra: registra un <b>acta de daño</b> con la lectura y la foto, y marca la serie.' },
{ tipo:'medida', clave:'v_bat_vacio', si:conBat, req:true, txt:'Voltaje de la batería en vacío', esperado:'3.0 – 4.2 V (compara con el del acta de envío)', u:'V',
aviso:'Menor a 3.0 V: la batería se descargó en el trayecto; anótalo. Mucho más baja que en el envío: sospecha de consumo con la unidad "apagada".' },
aviso:'Con corto <b>no se energiza</b> y la unidad no entra: acta de daño con la lectura y la foto.' },
{ tipo:'medida', clave:'v_bat_vacio', si:conBat, req:true, txt:'Batería en vacío', esperado:'3.0 – 4.2 V (compara con el envío)', u:'V',
aviso:'< 3.0 V: se descargó en el trayecto; anótalo. Mucho menor que en el envío: consumo con la unidad "apagada".' },
] },
{ titulo: '5 · Energizar y medir',
sub:'Solo si el paso 4 salió limpio. Fuente de 24 V al GX16 (pines 1-2), antenas conectadas, tapa abierta para medir. Si la fuente tiene límite de corriente, ponlo en 1 A.',
sub:'Solo si el paso 4 salió limpio. 24 V al GX16 (pines 1-2), antenas puestas, tapa abierta, límite 1 A.',
items: [
{ tipo:'radio', clave:'enciende', req:true, si:puedeEnergizar, txt:'Al energizar: ¿enciende y el LED de estado parpadea?',
{ tipo:'radio', clave:'enciende', req:true, si:puedeEnergizar, txt:'Encendido y LED de estado',
opciones:['Sí','No — LED apagado','Enciende pero se apaga','Enciende y la fuente entra en límite de corriente'],
aviso:'Si la fuente entra en límite o algo se calienta: <b>apaga de inmediato</b>. No entra; acta de daño.' },
aviso:'Fuente en límite o algo caliente: <b>apaga ya</b>. No entra; acta de daño.' },
{ tipo:'medida', clave:'v_24', si:enciende, req:true, txt:'Entrada 24 V', esperado:'23 – 26 V', u:'V' },
{ tipo:'medida', clave:'v_5', si:enciende, req:true, txt:'Riel 5 V (salida Mean Well / P2)', esperado:'4.9 – 5.4 V', u:'V',
aviso:'Por debajo de 4.8 V el módem se va a caer con cada ráfaga LTE (disparo PFI del LTC4040). No entra así.' },
{ tipo:'medida', clave:'v_5', si:enciende, req:true, txt:'Riel 5 V (Mean Well / P2)', esperado:'4.9 – 5.4 V', u:'V',
aviso:'Bajo 4.8 V el módem se cae con cada ráfaga LTE (PFI del LTC4040). No entra así.' },
{ tipo:'medida', clave:'v_3v3', si:enciende, txt:'Riel 3.3 V', esperado:'3.20 – 3.40 V', u:'V' },
{ tipo:'medida', clave:'i_estable', si:enciende, txt:'Corriente a los 60 s (si la fuente la muestra)', esperado:'150 – 400 mA con la etapa RTK encendida', u:'mA' },
{ tipo:'medida', clave:'v_bat_on', si:v=>enciende(v)&&conBat(v), txt:'Batería con la unidad encendida', u:'V' },
{ tipo:'medida', clave:'i_estable', si:enciende, txt:'Corriente a 60 s (si la fuente la muestra)', esperado:'150 – 400 mA con la etapa RTK encendida', u:'mA' },
{ tipo:'medida', clave:'v_bat_on', si:v=>enciende(v)&&conBat(v), txt:'Batería, unidad encendida', u:'V' },
] },
{ titulo: '6 · Prueba de vida (5 minutos)',
sub:'Con la unidad encendida. Por la consola USB se lee la línea BOOT; el resto es a simple vista.',
sub:'Unidad encendida. La línea BOOT sale por la consola USB; lo demás es a simple vista.',
items: [
{ tipo:'texto', clave:'fw', rows:'1', si:enciende, req:true, txt:'Firmware que reporta (línea BOOT o banner de consola)', ph:'fw=4.0.0' },
{ tipo:'check', clave:'fw_coincide', si:enciende, req:true, txt:'El firmware <b>coincide con el del acta de envío</b>.' },
{ tipo:'radio', clave:'modem', si:enciende, req:true, txt:'LED de red del módem 4G tras 3 minutos',
{ tipo:'texto', clave:'fw', rows:'1', si:enciende, req:true, txt:'Firmware (línea BOOT o banner)', ph:'fw=4.0.0' },
{ tipo:'check', clave:'fw_coincide', si:enciende, req:true, txt:'Firmware igual al del envío.' },
{ tipo:'radio', clave:'modem', si:enciende, req:true, txt:'LED de red del módem a 3 min',
opciones:['Lento o fijo (registró)','Rápido (no registra)','Apagado'] },
{ tipo:'check', clave:'sim_ok', si:enciende, txt:'La SIM es la del acta de envío (ICCID coincide).' },
{ tipo:'check', clave:'sim_ok', si:enciende, txt:'ICCID igual al del envío.' },
{ tipo:'radio', clave:'gnss', si:enciende, txt:'GNSS (si hay cielo o ventana)', opciones:['Ve satélites / tiene fix','No ve satélites','No se pudo probar (techo)'] },
{ tipo:'check', clave:'servidor', si:enciende, txt:'La unidad <b>aparece en el monitor</b> (posición o Salud) — pídele a alguien con acceso que lo confirme.' },
{ tipo:'archivo', clave:'log', etiqueta:'recepcion', si:enciende, txt:'Captura de la consola (opcional, pero útil si algo se ve raro)' },
{ tipo:'check', clave:'cerrada', si:enciende, txt:'Apagué la fuente, cerré la tapa, apreté los prensaestopas y volví a poner la etiqueta a la vista.' },
{ tipo:'check', clave:'servidor', si:enciende, txt:'Aparece en el monitor (posición o Salud), confirmado por alguien con acceso.' },
{ tipo:'archivo', clave:'log', etiqueta:'recepcion', si:enciende, txt:'Captura de consola (opcional)' },
{ tipo:'check', clave:'cerrada', si:enciende, txt:'Fuente apagada, tapa cerrada, prensaestopas apretados, etiqueta a la vista.' },
] },
{ titulo: '7 · Veredicto',
items: [
{ tipo:'radio', clave:'accion', req:true, guardaEn:'accion', txt:'¿Entra al puerto?',
{ tipo:'radio', clave:'accion', req:true, guardaEn:'accion', txt:'Resultado',
opciones:[
'Lista para entrar al puerto',
'Entra con observaciones (anótalas)',
'No entra — se queda en el taller para revisión',
'Rechazada — regresa a Querétaro'],
aviso:'Corto, no enciende, riel de 5 V bajo o firmware distinto al del envío: <b>no entra</b>. Instalarla y descubrirlo arriba de una máquina cuesta una visita más y un permiso más de ICAVE. Si no entra, registra además un <b>acta de daño</b> para que la serie quede marcada.' },
aviso:'Corto, no enciende, 5 V bajo o firmware distinto al del envío: <b>no entra</b>, y se registra un acta de daño para marcar la serie.' },
{ tipo:'texto', clave:'observaciones', rows:'3', txt:'Observaciones' },
] },
]

View File

@ -24,113 +24,103 @@ Acta.render({
unidades: window.FLOTA,
etiquetaSerie: 'Unidad o módulo que vas a reflashear',
titulo: 'Acta de reflasheo y configuración',
subtitulo: 'Helgen Technologies · solo en taller. Nunca sobre la máquina.',
subtitulo: 'Solo en taller, nunca sobre la máquina.',
textoOK: 'QUEDÓ BIEN',
intro: '<b>Un reflasheo es una prueba, no una reparación.</b> Sirve para contestar si el problema '
+ 'desaparece con firmware nuevo. Si la unidad tiene un corto, un conector roto o una batería '
+ 'hinchada, el firmware no va a arreglar nada. Y como el flasheo <b>borra la memoria del equipo</b> '
+ '(temperatura máxima, reinicios, causa del último arranque), la captura de antes es obligatoria: '
+ 'sin ella destruyes la evidencia que explicaba la falla. '
intro: 'Un reflasheo es una prueba, no una reparación. El flasheo borra la memoria del equipo: la captura de antes es obligatoria. '
+ 'Procedimiento: <a href="../procedimientos/reflasheo-unidades/">Reflasheo de unidades</a>.',
secciones: [
{ titulo: '0 · Qué vas a reflashear',
{ titulo: '0 · Qué se reflashea',
items: [
{ tipo:'nota', txt:'<div class="peligro"><b>Solo en taller, con la unidad en la mesa.</b> Un flasheo '
+ 'interrumpido deja el equipo muerto: en la mesa se vuelve a intentar, arriba de un RTG hay que '
+ 'bajarlo otra vez.</div>' },
{ tipo:'nota', txt:'<div class="peligro"><b>Solo en taller, con la unidad en la mesa.</b> Un flasheo interrumpido deja el equipo muerto.</div>' },
{ tipo:'fecha', clave:'fecha', req:true, guardaEn:'fecha', txt:'Fecha' },
{ tipo:'radio', clave:'objetivo', req:true, guardaEn:'clasificacion', txt:'¿Qué vas a cargar?',
{ tipo:'radio', clave:'objetivo', req:true, guardaEn:'clasificacion', txt:'Qué se carga',
opciones:[
'A · Firmware del HBOX (Blackpill / EinarBoard)',
'B · Parámetros del módem 4G NTRIP Master',
'C · Firmware o configuración del ArduSimple (ZED-F9P)'] },
{ tipo:'radio', clave:'motivo', guardaEn:'motivo', txt:'¿Por qué?',
{ tipo:'radio', clave:'motivo', guardaEn:'motivo', txt:'Motivo',
opciones:['Falla en campo — a ver si cambia con firmware nuevo','Actualización planeada',
'Unidad nueva antes de instalar','Se perdió o corrompió la configuración','Otro'] },
{ tipo:'texto', clave:'nota_previa', rows:'2', txt:'¿Qué hacía la unidad antes de tocarla?' },
{ tipo:'texto', clave:'nota_previa', rows:'2', txt:'Síntoma antes de tocarla' },
] },
{ titulo: '1 · Antes de tocar nada — la evidencia',
sub:'Este paso es la razón de ser del acta. Si no lo haces, el reflasheo no sirve como prueba de nada.',
{ titulo: '1 · Evidencia de antes',
sub:'Sin esta captura el reflasheo no sirve como prueba.',
items: [
{ tipo:'archivo', clave:'log_antes', etiqueta:'antes', req:true,
txt:'Captura de ANTES del reflasheo',
txt:'Captura de antes',
ayuda:'Terminal serie a 115200, guardar a archivo, 3 minutos. Nómbrala '
+ '<code>SERIE_antes_AAAA-MM-DD.log</code>.' },
{ tipo:'texto', clave:'fw_antes', rows:'1', req:true,
txt:'Versión que traía (de la línea BOOT, o "no se pudo leer")', ph:'fw=3.0.3' },
txt:'Firmware (línea BOOT o "no se pudo leer")', ph:'fw=3.0.3' },
{ tipo:'nota', si:v=>!conEvidencia(v),
txt:'<div class="peligro">⛔ <b>No sigas todavía.</b> Sube la captura de antes: el resto del '
+ 'formulario se abre cuando esté guardada en el servidor.</div>' },
txt:'<div class="peligro"><b>No sigas todavía.</b> Sube la captura de antes; el resto del formulario se abre cuando esté guardada.</div>' },
] },
// ---------------------------------------------------------------- HBOX
{ titulo: '🔵 A · Firmware del HBOX', si:v=>esHBOX(v)&&conEvidencia(v),
sub:'DFU por USB del Blackpill. El binario se descarga del sitio, nunca de un USB que ande circulando.',
{ titulo: 'A · Firmware del HBOX', si:v=>esHBOX(v)&&conEvidencia(v),
sub:'DFU por USB. El binario sale de Descargas, nunca de una memoria USB que ande circulando.',
items: [
{ tipo:'texto', clave:'bin_nombre', rows:'1', req:true,
txt:'Archivo binario que usaste (nombre completo)', ph:'hbox-tarjetaV3_X.Y.Z.bin' },
{ tipo:'radio', clave:'bin_origen', req:true, txt:'¿De dónde lo sacaste?',
txt:'Binario (nombre completo)', ph:'hbox-tarjetaV3_X.Y.Z.bin' },
{ tipo:'radio', clave:'bin_origen', req:true, txt:'Origen del binario',
opciones:['De la página de Descargas del sitio','Me lo pasó ingeniería directo','De otro lado'],
aviso:'Si no salió del sitio ni de ingeniería, <b>detente</b>: un binario de la generación equivocada puede dejar la batería cargando cuando debería estar cortada.' },
aviso:'Si no salió del sitio ni de ingeniería, <b>detente</b>: un binario de otra tarjeta puede dejar la batería cargando cuando debería estar cortada.' },
{ tipo:'check', clave:'sha_ok', req:true,
txt:'Verifiqué el <b>SHA-256</b> del archivo y coincide con el publicado.' },
{ tipo:'check', clave:'dfu_ok', txt:'Entró en DFU: apareció <b>STM32 BOOTLOADER</b> (0483:DF11).' },
{ tipo:'check', clave:'grabado', txt:'Grabado en <code>0x08000000</code>: «Download complete» y «Verify successful».' },
{ tipo:'texto', clave:'fw_despues', rows:'1', txt:'Versión que quedó (línea BOOT después)', ph:'fw=3.0.3' },
{ tipo:'radio', clave:'arranque', txt:'Después de 10 minutos con antenas, ¿a qué estado llegó?',
txt:'SHA-256 verificado contra el publicado.' },
{ tipo:'check', clave:'dfu_ok', txt:'DFU: STM32 BOOTLOADER (0483:DF11).' },
{ tipo:'check', clave:'grabado', txt:'Grabado en <code>0x08000000</code>: Download complete y Verify successful.' },
{ tipo:'texto', clave:'fw_despues', rows:'1', txt:'Firmware después (línea BOOT)', ph:'fw=3.0.3' },
{ tipo:'radio', clave:'arranque', txt:'Estado a 10 min con antenas',
opciones:['RUN con link OK','RUN pero link DEGR o LIMP','Se queda en BOOT','Se reinicia solo','Ya no arranca'] },
] },
// ---------------------------------------------------------------- 4G
{ titulo: '🟠 B · Parámetros del módem 4G', si:v=>es4G(v)&&conEvidencia(v),
sub:'Por el puerto USB "XBEE" del simpleRTK2B Pro, a 115200. Solo las líneas que empiezan con $$$AS+.',
{ titulo: 'B · Parámetros del módem 4G', si:v=>es4G(v)&&conEvidencia(v),
sub:'Por el USB XBEE del simpleRTK2B a 115200. Solo las líneas $$$AS+.',
items: [
{ tipo:'nota', txt:'<div class="peligro"><b>Cuidado con lo que subes.</b> El archivo de parámetros '
+ 'lleno contiene <b>usuario y contraseña</b> del caster NTRIP y de la APN. Aquí sube la versión '
+ '<b>sin credenciales</b>: borra los valores de <code>AS+U</code>, <code>AS+q</code> y '
+ '<code>AS+Q</code> antes de subirlo. Lo que nos sirve guardar es qué quedó configurado, no las claves.</div>' },
{ tipo:'nota', txt:'<div class="peligro"><b>Sin credenciales.</b> Antes de subir el archivo, borra los valores de <code>AS+U</code>, <code>AS+q</code> y <code>AS+Q</code> (usuario y contraseña del caster y de la APN).</div>' },
{ tipo:'texto', clave:'imei', rows:'1', txt:'IMEI del módem' },
{ tipo:'texto', clave:'iccid', rows:'1', txt:'ICCID de la SIM' },
{ tipo:'check', clave:'lineas_ok', txt:'Todas las líneas contestaron <code>OK</code> (ninguna con <code>ERROR</code>).' },
{ tipo:'texto', clave:'as_k', rows:'1', req:true, txt:'ID de estación (<code>AS+K</code>) que quedó' },
{ tipo:'check', clave:'lineas_ok', txt:'Todas las líneas con <code>OK</code>, ninguna <code>ERROR</code>.' },
{ tipo:'texto', clave:'as_k', rows:'1', req:true, txt:'ID de estación (<code>AS+K</code>)' },
{ tipo:'texto', clave:'mountpoint', rows:'1', txt:'Mountpoint (<code>AS+M</code>)' },
{ tipo:'archivo', clave:'params_4g', etiqueta:'parametros-4g', req:true,
txt:'Archivo de parámetros que cargaste, SIN credenciales',
txt:'Archivo de parámetros, sin credenciales',
ayuda:'Nómbralo <code>RTK-NNNN_parametros_AAAA-MM-DD.txt</code>. Queda guardado en el expediente de este módem.' },
{ tipo:'radio', clave:'registro', txt:'¿Registró en la red?',
{ tipo:'radio', clave:'registro', txt:'Registro en la red',
opciones:['Sí, LED lento o fijo','No, sigue en parpadeo rápido','El LED no enciende'] },
{ tipo:'medida', clave:'rssi', txt:'RSSI, si el módulo lo reporta' },
{ tipo:'medida', clave:'rssi', txt:'RSSI, si lo reporta' },
{ tipo:'archivo', clave:'log_4g', etiqueta:'consola-4g', txt:'Captura de la consola del módem (opcional)',
ayuda:'Recuerda: esta consola no prueba que las correcciones lleguen. Sirve para ver que enciende y registra.' },
ayuda:'Esta consola no prueba que lleguen correcciones; solo que enciende y registra.' },
] },
// ---------------------------------------------------------------- ArduSimple
{ titulo: '🟢 C · ArduSimple / ZED-F9P', si:v=>esARD(v)&&conEvidencia(v),
sub:'Por el USB POWER+GPS con u-center. Antena con vista al cielo, o no habrá fix y parecerá falla.',
{ titulo: 'C · ArduSimple / ZED-F9P', si:v=>esARD(v)&&conEvidencia(v),
sub:'USB POWER+GPS con u-center. Antena con cielo (sin cielo no hay fix y parece falla).',
items: [
{ tipo:'radio', clave:'ard_que', req:true, txt:'¿Qué cargaste?',
{ tipo:'radio', clave:'ard_que', req:true, txt:'Qué se cargó',
opciones:['Solo la configuración (archivo .txt de Helgen)','Firmware del ZED-F9P','Las dos cosas'] },
{ tipo:'texto', clave:'f9p_antes', rows:'1', txt:'Versión del ZED-F9P ANTES (UBX-MON-VER)' },
{ tipo:'texto', clave:'f9p_despues', rows:'1', txt:'Versión DESPUÉS (UBX-MON-VER)' },
{ tipo:'texto', clave:'f9p_antes', rows:'1', txt:'ZED-F9P antes (UBX-MON-VER)' },
{ tipo:'texto', clave:'f9p_despues', rows:'1', txt:'ZED-F9P después (UBX-MON-VER)' },
{ tipo:'texto', clave:'cfg_nombre', rows:'1', txt:'Archivo de configuración cargado' },
{ tipo:'check', clave:'flash_ok', req:true,
txt:'Guardé la configuración en <b>FLASH</b> (no solo en RAM) y sobrevive al reinicio.',
aviso:'En junio perdimos tiempo por esto: una configuración que solo quedó en RAM se borra al primer corte de energía y el receptor vuelve a su estado anterior sin avisar.' },
{ tipo:'check', clave:'uart_ok', txt:'UART1 a <b>115200</b> (es lo que lee la tarjeta) y UART2 a la velocidad del módem.' },
{ tipo:'radio', clave:'fix', txt:'Calidad de fix alcanzada a cielo abierto',
txt:'Configuración en FLASH; sobrevive al reinicio.',
aviso:'Una configuración solo en RAM se borra al primer corte de energía, sin aviso.' },
{ tipo:'check', clave:'uart_ok', txt:'UART1 a 115200 (lo lee la tarjeta); UART2 a la velocidad del módem.' },
{ tipo:'radio', clave:'fix', txt:'Calidad de fix a cielo abierto',
opciones:['0 — sin posición','1 — GPS solo','2 — corregido básico','4 — RTK fijo','5 — RTK flotante'] },
{ tipo:'archivo', clave:'log_ard', etiqueta:'ardusimple', txt:'Captura NMEA o log de u-center (opcional)' },
{ tipo:'archivo', clave:'log_ard', etiqueta:'ardusimple', txt:'NMEA o log de u-center (opcional)' },
] },
// ---------------------------------------------------------------- cierre
{ titulo: '2 · Después del reflasheo', si:conEvidencia,
{ titulo: '2 · Después', si:conEvidencia,
items: [
{ tipo:'archivo', clave:'log_despues', etiqueta:'despues', req:true,
txt:'Captura de DESPUÉS del reflasheo',
ayuda:'Las dos capturas juntas — antes y después — son la prueba de si el firmware cambió algo. Por separado no dicen nada.' },
{ tipo:'radio', clave:'accion', req:true, guardaEn:'accion', txt:'¿Cómo queda?',
txt:'Captura de después',
ayuda:'Antes y después juntas dicen si el firmware cambió algo.' },
{ tipo:'radio', clave:'accion', req:true, guardaEn:'accion', txt:'Resultado',
opciones:[
'Lista para reinstalar',
'En observación en el taller',
@ -138,9 +128,9 @@ Acta.render({
'Empeoró: ya no arranca — se envía a Querétaro',
'Pendiente de más pruebas'] },
{ tipo:'texto', clave:'observaciones', rows:'4', req:true,
txt:'¿Cambió algo? Cuéntalo con tus palabras',
txt:'Observaciones: qué cambió',
ph:'Antes se reiniciaba cada 3 minutos; después de cargar 3.0.3 lleva 40 minutos en RUN sin reiniciarse.' },
{ tipo:'foto', clave:'f_final', etiqueta:'final', txt:'Foto de cómo quedó (opcional).' },
{ tipo:'foto', clave:'f_final', etiqueta:'final', txt:'Cómo quedó (opcional).' },
] },
]
});

View File

@ -27,8 +27,8 @@ const COLS_DESP = [
{ k:'hora', txt:'Hora del despertar', ph:'14:15', ancho:'80px' },
{ k:'trama', txt:'Primera trama NMEA', opciones:['$GNTXT u-blox','otra (GGA, RMC…)','no salió'] },
{ k:'mrst', txt:'<code>MODEM_RST stack_on</code> a los 3 s', opciones:['sí','no salió'] },
{ k:'modem', txt:'¿El módem registró solo?', opciones:['sí','LEDs, sin registrar','oscuro'] },
{ k:'monitor', txt:'¿El monitor recibió 🔋?', opciones:['sí','no'] },
{ k:'modem', txt:'Módem registró solo', opciones:['sí','LEDs, sin registrar','oscuro'] },
{ k:'monitor', txt:'Monitor recibió (batería)', opciones:['sí','no'] },
{ k:'reposo', txt:'Línea <code>DUTY reposo</code> al cerrar la ventana', ph:'ventana 150s fix=RTK_FIX phlg_aire=4 vbat=3.95', ancho:'240px' },
];
const FILAS = ['0:15', '0:30', '0:45', '1:00', '1:30', '2:00'];
@ -48,207 +48,201 @@ Acta.render({
tecnicoDesdeUsuario: true,
nombres: { alan: 'Alán Basurto', daniel: 'Daniel Martínez', leo: 'Leo Rodríguez', jesus: 'Jesús' },
etiquetaSerie: 'Tarjeta V4',
titulo: 'Acta de prueba — EinarBoard V4 con firmware 0.5.6',
subtitulo: 'Helgen Technologies · un acta por tarjeta (V4-01 … V4-15) · ~1 h',
titulo: 'Acta de prueba — EinarBoard V4 con firmware 0.6.0',
subtitulo: 'Un acta por tarjeta (V4-01 … V4-15) · ~1 h',
textoOK: 'APROBADA',
intro: '<b>Llénala mientras avanzas</b> por el procedimiento '
+ '<a href="../procedimientos/v4-prueba-fw-0.5.6/">V4 — preparación y prueba con 0.5.6</a>: '
+ 'puente de reset del módem, interruptores del simpleRTK2B, cable de consola sin 5 V y batería; '
+ 'flasheo; y las pruebas A (24 V), B (batería) y C (regreso de 24 V). '
+ 'Graba la consola a archivo desde el primer minuto: al final se sube completa.<br>'
+ '<b>Si una etapa no pasa</b>, marca «me detengo» en su última pregunta: lo que sigue se oculta, '
+ 'llenas el Cierre y envías con resultado <b>FALLA</b>. Si la tarjeta no tiene número, etiquétala '
+ 'con el siguiente V4 libre del <a href="../tablero.html">tablero</a>. La serie <b>PRUEBA</b> sirve para practicar.',
intro: 'Llénala mientras avanzas por el procedimiento '
+ '<a href="../procedimientos/v4-prueba-fw-0.5.6/">V4 — preparación y prueba con 0.6.0</a>. '
+ 'Graba la consola desde el primer minuto; al final se sube completa. '
+ 'Si una etapa no pasa, marca «me detengo»: lo que sigue se oculta, llenas el Cierre y envías como <b>FALLA</b>. '
+ 'Sin número de serie: el siguiente V4 libre del <a href="../tablero.html">tablero</a>. La serie PRUEBA sirve para practicar.',
secciones: [
{ titulo: '1 · Datos',
items: [
{ tipo:'fecha', clave:'s0_00_fecha', req:true, guardaEn:'fecha', txt:'Fecha de la prueba' },
{ tipo:'texto', clave:'s0_01_modem', rows:'1', txt:'Módem 4G: serie RTK- o IMEI (si tiene etiqueta)', ph:'RTK-0007' },
{ tipo:'texto', clave:'s0_02_ard', rows:'1', txt:'simpleRTK2B: serie ARD- (si tiene etiqueta)', ph:'ARD-012' },
{ tipo:'texto', clave:'s0_03_bp', rows:'1', txt:'Blackpill: leyenda impresa en la placa', ph:'WeAct BlackPill V3.0 F411CEU6' },
{ tipo:'nota', txt:'<div class="peligro"><b>Reglas.</b> Todo cambio de hardware (soldar, mover interruptores, '
+ 'poner o quitar módulos) se hace <b>sin energía</b>: sin 24 V, batería desconectada y sin USB. '
+ 'Durante las pruebas, <b>ningún USB</b> en el simpleRTK2B ni en el USB-C del módem (J9). '
+ 'En la V4 la consola va <b>solo con el cable sin 5 V</b>; el cable normal es solo para flashear.</div>' },
{ tipo:'fecha', clave:'s0_00_fecha', req:true, guardaEn:'fecha', txt:'Fecha' },
{ tipo:'texto', clave:'s0_01_modem', rows:'1', txt:'Módem: RTK-NNNN o IMEI', ph:'RTK-0007' },
{ tipo:'texto', clave:'s0_02_ard', rows:'1', txt:'simpleRTK2B: ARD-NNN', ph:'ARD-012' },
{ tipo:'texto', clave:'s0_03_bp', rows:'1', txt:'Blackpill: leyenda impresa', ph:'WeAct BlackPill V3.0 F411CEU6' },
{ tipo:'nota', txt:'<div class="peligro"><b>Reglas.</b> Cambios de hardware sin energía (sin 24 V, batería desconectada, sin USB). '
+ 'Ningún USB en el simpleRTK2B ni en J9 durante las pruebas. Consola solo con el cable sin 5 V.</div>' },
] },
{ titulo: '2 · Puente de reset del módem (Preparación 1, sin energía)',
sub: 'Diodo de <b>SW4G1</b> (pad que va a RESET de J7) a <b>U13 pata 12</b>: '
+ '<code>U13-12 ──|&lt;── SW4G1</code> · banda (cátodo) en U13, lado sin banda (ánodo) en SW4G1.',
items: [
{ tipo:'radio', clave:'s1_00_diodo', req:true, txt:'Diodo que usaste',
{ tipo:'radio', clave:'s1_00_diodo', req:true, txt:'Diodo',
opciones:['BAT54','BAT85','BAT43','1N5711','1N4148 (solo si en la Prueba A baja de 0.4 V)','Otro'],
aviso:'<b>No uses 1N5819</b>: en caliente deja pasar corriente al revés y alimenta al módem durante el reposo.' },
{ tipo:'texto', clave:'s1_01_diodo_otro', rows:'1', req:true, si: v => v.s1_00_diodo === 'Otro',
txt:'¿Cuál? (número de parte o marcado)' },
txt:'Número de parte o marcado' },
{ tipo:'check', clave:'s1_02_orient', req:true,
txt:'Banda del diodo (cátodo) en <b>U13 pata 12</b>; lado sin banda (ánodo) en el pad de <b>SW4G1</b> que tiene continuidad con el pin <b>RESET</b> de J7.' },
{ tipo:'check', clave:'s1_03_limpio', req:true,
txt:'Revisé con lupa: la pata 12 <b>no quedó unida a la 11 ni a la 13</b>. Alambre fijo con Kapton y lejos del módem 4G.' },
{ tipo:'medida', clave:'s1_04_d_dir', req:true, txt:'Prueba de diodo: roja en SW4G1 (RESET), negra en U13 pata 12',
txt:'Con lupa: pata 12 sin puente a la 11 ni a la 13. Alambre fijo con Kapton, lejos del módem.' },
{ tipo:'medida', clave:'s1_04_d_dir', req:true, txt:'Prueba de diodo: roja SW4G1, negra U13-12',
esperado:'0.15 – 0.45 V', u:'V',
aviso:'0 V = corto. OL en los dos sentidos = falta soldadura. Corrígelo antes de seguir.' },
{ tipo:'medida', clave:'s1_05_d_inv', req:true, modo:'text', txt:'Prueba de diodo con las puntas invertidas',
{ tipo:'medida', clave:'s1_05_d_inv', req:true, modo:'text', txt:'Prueba de diodo, puntas invertidas',
esperado:'OL o más de 1 V', ph:'OL' },
{ tipo:'foto', clave:'s1_06_f_puente', req:true, etiqueta:'puente-u13-sw4g1',
txt:'Foto del puente: U13 y SW4G1 (una toma o dos), con el diodo y el alambre visibles.' },
txt:'Puente: U13 y SW4G1 con diodo y alambre visibles.' },
] },
{ titulo: '3 · Interruptores, cable de consola y batería (Preparación 2)',
sub: 'Interruptores y batería <b>sin energía</b>. El interruptor doble está junto al LED POWER del simpleRTK2B.',
items: [
{ tipo:'radio', clave:'s2_00_ioref', req:true, txt:'Interruptor IOREF=3.3V del simpleRTK2B (debe quedar en OFF)',
{ tipo:'radio', clave:'s2_00_ioref', req:true, txt:'IOREF=3.3V (debe quedar en OFF)',
opciones:['Estaba en OFF','Estaba en ON — lo pasé a OFF','No tiene esa leyenda — tomé foto y pregunté'] },
{ tipo:'radio', clave:'s2_01_5vout', req:true, txt:'Interruptor 5V=OUTPUT del simpleRTK2B (debe quedar en OFF)',
{ tipo:'radio', clave:'s2_01_5vout', req:true, txt:'5V=OUTPUT (debe quedar en OFF)',
opciones:['Estaba en OFF','Estaba en ON — lo pasé a OFF','No tiene esa leyenda — tomé foto y pregunté'] },
{ tipo:'foto', clave:'s2_02_f_sw', req:true, etiqueta:'interruptores-simplertk2b',
si: v => empieza(v, 's2_00_ioref', 'No tiene') || empieza(v, 's2_01_5vout', 'No tiene'),
txt:'Foto de los interruptores del simpleRTK2B.' },
txt:'Interruptores del simpleRTK2B.' },
{ tipo:'texto', clave:'s2_03_sw_resp', rows:'2', req:true,
si: v => empieza(v, 's2_00_ioref', 'No tiene') || empieza(v, 's2_01_5vout', 'No tiene'),
txt:'¿Qué te indicó ingeniería y en qué posición quedaron?' },
txt:'Indicación de ingeniería y posición final' },
{ tipo:'check', clave:'s2_04_usb', req:true,
txt:'<b>Ningún USB</b> conectado al simpleRTK2B ni al USB-C del módem (J9).' },
txt:'Ningún USB en el simpleRTK2B ni en J9.' },
{ tipo:'radio', clave:'s2_05_cable', req:true,
txt:'Prueba del cable sin 5 V (tarjeta sin 24 V y sin batería; laptop → Blackpill con ese cable)',
txt:'Prueba del cable sin 5 V (tarjeta sin 24 V ni batería)',
opciones:['La Blackpill quedó apagada (ningún LED) — cable bueno','La Blackpill encendió'] },
{ tipo:'nota', si: v => empieza(v, 's2_05_cable', 'La Blackpill encendió'),
txt:'<div class="peligro"><b>El cable no sirve.</b> Revisa que el hilo rojo esté cortado y aislado. '
+ 'Si con el rojo cortado la Blackpill sigue encendiendo, <b>detente y avisa a ingeniería</b>.</div>' },
{ tipo:'medida', clave:'s2_06_vbat', req:true, txt:'Batería medida en su propio conector, como llegó',
{ tipo:'medida', clave:'s2_06_vbat', req:true, txt:'Batería en su conector, como llegó',
esperado:'3.80 V o más para empezar', u:'V',
aviso:'Menos de 3.80 V: cárgala <b>por fuera de la tarjeta</b> (el firmware 0.5.6 no la carga) con el cargador de 1 celda, '
+ 'o con fuente de banco a 4.00 V y límite de 1 A, sin dejarla sola. Si se calienta o se ve inflada: detente y avisa.' },
{ tipo:'radio', clave:'s2_07_carga', req:true, txt:'¿Tuviste que cargarla?',
aviso:'Menos de 3.80 V: cárgala fuera de la tarjeta con el cargador de 1 celda, '
+ 'o fuente de banco a 4.00 V y límite 1 A, sin dejarla sola. Si se calienta o se infla: detente y avisa.' },
{ tipo:'radio', clave:'s2_07_carga', req:true, txt:'Carga previa',
opciones:['No hizo falta','Sí, con el cargador de 1 celda','Sí, con fuente de banco 4.00 V / 1 A'] },
{ tipo:'medida', clave:'s2_08_vbat_final', req:true, si: v => empieza(v, 's2_07_carga', 'Sí'),
txt:'Voltaje después de cargarla', esperado:'3.80 V o más', u:'V' },
txt:'Batería después de cargar', esperado:'3.80 V o más', u:'V' },
{ tipo:'radio', clave:'s2_09_prep_fin', req:true, txt:'Preparación',
opciones:['Completa — sigo al flasheo', PASO_NO] },
] },
{ titulo: '4 · Flasheo de 0.5.6', si: prepOK,
sub: 'Tarjeta <b>sin 24 V y con la batería desconectada</b>, <b>cable normal</b> en la Blackpill. '
+ 'DFU: mantén BOOT0, presiona y suelta NRST, suelta BOOT0 → <b>STM32 BOOTLOADER</b> (0483:DF11). '
+ '<code>dfu-util -a 0 -s 0x08000000:leave -D hbox-tarjetaV4_0.5.6.bin</code>',
{ titulo: '4 · Flasheo de 0.6.0', si: prepOK,
sub: 'Sin 24 V, batería desconectada, cable normal en la Blackpill. '
+ 'DFU: mantén BOOT0, pulsa y suelta NRST, suelta BOOT0 → STM32 BOOTLOADER (0483:DF11). '
+ '<code>dfu-util -a 0 -s 0x08000000:leave -D hbox-tarjetaV4_0.6.0.bin</code>',
items: [
{ tipo:'check', clave:'s3_00_sha', req:true,
txt:'Usé <code>hbox-tarjetaV4_0.5.6.bin</code> de Descargas (no el de V5) y su SHA-256 empieza con <code>1e604edd</code> y termina con <code>0e4c52ab</code>.' },
{ tipo:'radio', clave:'s3_01_dfu', req:true, txt:'¿Dónde lo flasheaste?',
txt:'<code>hbox-tarjetaV4_0.6.0.bin</code> de Descargas (no el de V5); SHA-256 empieza con <code>1458470b</code> y termina con <code>ba77b2e3</code>.' },
{ tipo:'radio', clave:'s3_01_dfu', req:true, txt:'Dónde se flasheó',
opciones:['En la tarjeta','Fuera del zócalo (en la tarjeta no apareció STM32 BOOTLOADER)','No logré flashear'] },
{ tipo:'check', clave:'s3_02_orient', req:true, si: v => empieza(v, 's3_01_dfu', 'Fuera'),
txt:'Al regresarla al zócalo, sin energía: USB-C del lado de la etiqueta <b>E-CSn</b>; pin B12 de la Blackpill en E-CSn y pin R en NRST.' },
{ tipo:'texto', clave:'s3_03_fw', rows:'1', req:true, si: flasheada, txt:'Primera línea de la consola tras reiniciar',
ph:'hbox-v5-bringup 0.5.6 built Sep 26 2026 15:52:10' },
txt:'Reinsertada sin energía: USB-C del lado de E-CSn; B12 en E-CSn y R en NRST.' },
{ tipo:'texto', clave:'s3_03_fw', rows:'1', req:true, si: flasheada, txt:'Firmware (línea BOOT o banner)',
ph:'hbox-v5-bringup 0.6.0 built …' },
{ tipo:'check', clave:'s3_04_board', req:true, si: flasheada,
txt:'La segunda línea dice <code>board=EinarBoard v4 (HBOX v4)</code>. (Si dice v5, es el binario equivocado: vuelve a flashear.)' },
txt:'Segunda línea: <code>board=EinarBoard v4 (HBOX v4)</code> (si dice v5, binario equivocado: reflashea).' },
{ tipo:'radio', clave:'s3_05_tests', req:true, si: flasheada,
txt:'Final de los tests de arranque (la tecla r los repite; la tecla t imprime la línea $PHLG,0.5.6-fm)',
txt:'Final de los tests de arranque (r los repite; t imprime <code>$PHLG,0.6.0,</code>)',
opciones:['>>> BOARD OK','>>> BOARD CHECK FAILED'] },
{ tipo:'texto', clave:'s3_06_fails', rows:'3', req:true, si: v => flasheada(v) && v.s3_05_tests === '>>> BOARD CHECK FAILED',
txt:'Copia las líneas [FAIL] completas', ph:'[FAIL] …' },
txt:'Líneas [FAIL] completas', ph:'[FAIL] …' },
{ tipo:'nota', si: v => empieza(v, 's3_01_dfu', 'No logré') || (flasheada(v) && v.s3_05_tests === '>>> BOARD CHECK FAILED'),
txt:'<div class="peligro"><b>Detente y avisa a ingeniería.</b> Llena el Cierre y envía el acta con resultado FALLA.</div>' },
{ tipo:'check', clave:'s3_07_cable', req:true, si: flashOK,
txt:'Desconecté el cable normal. De aquí en adelante, <b>solo el cable sin 5 V</b>.' },
txt:'Cable normal retirado; desde aquí, solo el cable sin 5 V.' },
] },
{ titulo: '5 · Prueba A — con 24 V', si: flashOK,
sub: 'Conecta la batería y <b>después</b> los 24 V. Espera 30 s, conecta el cable sin 5 V y abre la consola grabando.',
sub: 'Batería y luego 24 V. A los 30 s, cable sin 5 V y consola grabando.',
items: [
{ tipo:'medida', clave:'s4_00_p2', req:true, txt:'P2 (entrada de 5 V del SD-15B)', esperado:'5.1 – 5.3 V', u:'V',
aviso:'0 V con los 24 V puestos: <b>detente y avisa a ingeniería</b> (el SD-15B o el arnés no entregan).' },
{ tipo:'medida', clave:'s4_00_p2', req:true, txt:'P2 (salida del SD-15B)', esperado:'5.1 – 5.3 V', u:'V',
aviso:'0 V con 24 V puestos: <b>detente y avisa a ingeniería</b> (SD-15B o arnés).' },
{ tipo:'texto', clave:'s4_01_stat', rows:'3', req:true,
txt:'Línea STAT (tecla s): debe traer v5=5.xx(ok), stack=ON y mrst=1 o más; al rato modoB=ON y gga= con satélites',
txt:'Línea STAT (s): v5=5.xx(ok), stack=ON, mrst ≥ 1; luego modoB=ON y gga= con satélites',
ph:'STAT vbat=4.02 v5=5.21(ok) … stack=ON … modoB=ON … mrst=1' },
{ tipo:'medida', clave:'s4_02_m_min', req:true,
txt:'Prueba del puente: tecla M con el multímetro en el pad RESET de SW4G1 contra GND. Lectura más baja',
txt:'Tecla M: mínimo en el pad RESET de SW4G1',
esperado:'menos de 0.4 V durante ~0.5 s (usa MIN/MAX si lo tiene); en reposo marca alto', u:'V' },
{ tipo:'radio', clave:'s4_03_m_res', req:true, txt:'Con M…',
{ tipo:'radio', clave:'s4_03_m_res', req:true, txt:'Resultado de M',
opciones:['Bajó de 0.4 V, los LEDs del módem se apagaron y volvieron, consola «MODEM_RST operador»',
'No bajó',
'Bajó, pero se quedó entre 0.4 y 0.7 V'],
aviso:'<b>No bajó:</b> el diodo está al revés o sin soldar. <b>Se quedó entre 0.4 y 0.7 V:</b> el diodo no es Schottky; cámbialo. '
+ 'Corrige (sin energía) y repite. Si después de corregir sigue sin bajar de 0.4 V: <b>detente y avisa a ingeniería</b>.' },
aviso:'No bajó: diodo al revés o sin soldar. Entre 0.4 y 0.7 V: el diodo no es Schottky. '
+ 'Corrige sin energía y repite; si sigue sin bajar de 0.4 V, <b>detente y avisa a ingeniería</b>.' },
{ tipo:'radio', clave:'s4_04_modem', req:true,
txt:'¿El módem registró y los LEDs UART del simpleRTK2B parpadean rápido (llegan correcciones)?',
txt:'Módem registrado y UART del simpleRTK2B en parpadeo rápido',
opciones:['Sí','No'] },
{ tipo:'radio', clave:'s4_05_monitor', req:true, txt:'¿En el monitor aparece la unidad con 0.5.6-fm y ⚡?',
{ tipo:'radio', clave:'s4_05_monitor', req:true, txt:'Monitor: unidad con 0.6.0 y ⚡',
opciones:['Sí','No'] },
{ tipo:'check', clave:'s4_06_sin_usb', req:true,
txt:'Todo esto con el <b>cable sin 5 V</b> y sin USB en el simpleRTK2B ni en J9.' },
txt:'Todo con el cable sin 5 V y sin USB en el simpleRTK2B ni en J9.' },
{ tipo:'radio', clave:'s4_07_a_fin', req:true, txt:'Prueba A',
opciones:['Pasó — sigo a la prueba en batería','No pasó — me detengo (explico en Cierre)'] },
] },
{ titulo: '6 · Prueba B — en batería', si: aOK,
sub: 'Con todo funcionando, <b>quita los 24 V</b> (la batería se queda conectada) y anota la hora. '
+ '<b>No presiones RESET</b> en esta prueba: tras un reset sin 24 V la etapa no enciende (es a propósito) y la prueba se pierde.',
sub: 'Quita 24 V (la batería queda) y anota la hora. No pulses RESET: sin 24 V la etapa no vuelve a encender. '
+ 'Nota: los despertares y el reposo describen el ciclo de 0.5.6–0.5.7; desde 0.5.9 la etapa y el módem siguen encendidos en batería. Anota lo que ocurra y avisa a ingeniería.',
items: [
{ tipo:'texto', clave:'s5_00_hora', rows:'1', req:true, txt:'Hora en que quitaste los 24 V', ph:'14:05' },
{ tipo:'texto', clave:'s5_00_hora', rows:'1', req:true, txt:'Hora sin 24 V', ph:'14:05' },
{ tipo:'radio', clave:'s5_01_perdido', req:true,
txt:'¿La consola mostró «V5 PERDIDO» y «BACKUP inicio … modo reporte cada 10 min», y la etapa siguió encendida unos 2 min?',
txt:'«V5 PERDIDO» y «BACKUP inicio …»; etapa encendida',
opciones:['Sí','No (anoto en Cierre qué salió)'] },
{ tipo:'radio', clave:'s5_02_reposo', req:true, txt:'¿Llegaron «DUTY reposo … etapa OFF» y «STACK OFF reason=duty_sleep»?',
{ tipo:'radio', clave:'s5_02_reposo', req:true, txt:'«DUTY reposo … etapa OFF» y «STACK OFF reason=duty_sleep»',
opciones:['Sí','No'] },
{ tipo:'medida', clave:'s5_03_sw5v', req:true, txt:'En reposo, 30 s después: SW_5V en C3 (+)', esperado:'menos de 0.3 V', u:'V' },
{ tipo:'medida', clave:'s5_04_v3m', req:true, txt:'En reposo: 3V3_MODEM en C43 (+) o J7 pin 1',
esperado:'menos de 0.3 V — anota el valor aunque sea mayor y sigue; ingeniería lo revisa', u:'V' },
{ tipo:'radio', clave:'s5_05_ledpwr', req:true, txt:'En reposo: LED POWER del simpleRTK2B',
{ tipo:'medida', clave:'s5_03_sw5v', req:true, txt:'Reposo, 30 s: SW_5V en C3 (+)', esperado:'menos de 0.3 V', u:'V' },
{ tipo:'medida', clave:'s5_04_v3m', req:true, txt:'Reposo: 3V3_MODEM en C43 (+) o J7 pin 1',
esperado:'< 0.3 V (anota el valor aunque sea mayor)', u:'V' },
{ tipo:'radio', clave:'s5_05_ledpwr', req:true, txt:'Reposo: LED POWER del simpleRTK2B',
opciones:['Apagado (el LED IOREF encendido es normal)','Encendido'] },
{ tipo:'nota', si: v => v.s5_05_ledpwr === 'Encendido',
txt:'<div class="peligro"><b>LED POWER encendido en reposo:</b> el interruptor IOREF=3.3V quedó en ON o hay un USB en el '
+ 'simpleRTK2B. Si está en OFF y no hay USB: <b>detente y avisa a ingeniería</b>.</div>' },
{ tipo:'tabla', clave:'s5_06_desp', txt:'Despertares — a los ~10 y ~20 min de quitar los 24 V',
txt:'<div class="peligro"><b>LED POWER encendido en reposo:</b> IOREF en ON o USB en el simpleRTK2B. Si no es eso: <b>detente y avisa a ingeniería</b>.</div>' },
{ tipo:'tabla', clave:'s5_06_desp', txt:'Despertares (~10 y ~20 min sin 24 V)',
sub:'En cada ventana deben salir, en orden: <code>STACK ON reason=duty_wake</code> → <code>NMEA primera trama en PA3 ($GNTXT … u-blox AG …)</code> '
+ '→ a los 3 s <code>MODEM_RST stack_on</code> → a los ~10 s <code>MODOB ON</code>. Si la primera trama no es la de u-blox AG, '
+ 'el GPS nunca se apagó: revisa el interruptor IOREF=3.3V. Durante la ventana (2–3 min) no toques nada.',
+ 'el GPS nunca se apagó (IOREF). No toques nada durante la ventana (2–3 min).',
etiquetaFilas:'Ventana', filas: DESP, columnas: COLS_DESP },
{ tipo:'radio', clave:'s5_07_b_fin', req:true,
txt:'Prueba B: ¿el módem registró solo y el monitor recibió la unidad (🔋) en las dos ventanas, sin tocar nada?',
txt:'Prueba B: módem registró solo y el monitor recibió',
opciones:['Sí, en las dos ventanas','Solo en una','En ninguna'] },
{ tipo:'tabla', clave:'s5_08_diag', si: v => !!v.s5_07_b_fin && !empieza(v, 's5_07_b_fin', 'Sí'),
txt:'No registró: en la siguiente ventana anota lo que veas',
sub:'El valor <b>más bajo</b> que alcances a leer en cada intervalo. Tecla <code>s</code> a 0:30 y 1:30 para vbat / vbatmin.',
txt:'No registró: registro de la siguiente ventana',
sub:'El valor más bajo en cada intervalo. Tecla <code>s</code> a 0:30 y 1:30 para vbat / vbatmin.',
etiquetaFilas:'t', filas: FILAS, columnas: COLS_DIAG },
] },
{ titulo: '7 · Prueba C — regreso de los 24 V sin reset', si: aOK,
sub: 'Dos casos. En ninguno se presiona RESET.',
{ titulo: '7 · Prueba C — regreso de 24 V sin reset', si: aOK,
sub: 'Dos casos, sin pulsar RESET.',
items: [
{ tipo:'radio', clave:'s6_00_c1', req:true, txt:'Caso 1 — durante el reposo (etapa OFF) reconecté los 24 V. El módem…',
{ tipo:'radio', clave:'s6_00_c1', req:true, txt:'Caso 1 — 24 V de vuelta en reposo: módem',
opciones:['Registró solo en menos de 2 min','Encendió pero no registró','Siguió oscuro'] },
{ tipo:'radio', clave:'s6_01_c1_evt', req:true,
txt:'Caso 1 — ¿salieron «V5 PRESENTE», «DUTY fin», «BACKUP fin», a los ~3 s «STACK ON reason=auto» y 3 s después «MODEM_RST stack_on»?',
txt:'Caso 1 — eventos: «V5 PRESENTE», «DUTY fin», «BACKUP fin», ~3 s «STACK ON reason=auto», 3 s «MODEM_RST stack_on»',
opciones:['Sí, todas','Faltó alguna (anoto cuál en Cierre)'] },
{ tipo:'radio', clave:'s6_02_c2', req:true,
txt:'Caso 2 — durante una ventana (etapa ON) quité los 24 V y los reconecté antes de 2 min. El módem…',
txt:'Caso 2 — 24 V fuera y de vuelta en < 2 min (etapa ON): módem',
opciones:['Registró solo en menos de 2 min','Encendió pero no registró','Siguió oscuro'] },
{ tipo:'radio', clave:'s6_03_c2_evt', req:true,
txt:'Caso 2 — ¿salieron «5 V de vuelta tras bateria: ciclo de etapa…» → «STACK OFF reason=pwr_return» → unos 10 s después «STACK ON reason=recovery» → «MODEM_RST stack_on»?',
txt:'Caso 2 — eventos: «5 V de vuelta tras bateria: ciclo de etapa…» → «STACK OFF reason=pwr_return» → ~10 s «STACK ON reason=recovery» → «MODEM_RST stack_on»',
opciones:['Sí, todas','Faltó alguna (anoto cuál en Cierre)'] },
{ tipo:'radio', clave:'s6_04_monitor', req:true, txt:'¿El monitor volvió a mostrar la unidad con ⚡?', opciones:['Sí','No'] },
{ tipo:'radio', clave:'s6_04_monitor', req:true, txt:'Monitor de vuelta en ⚡', opciones:['Sí','No'] },
] },
{ titulo: '8 · Cierre',
items: [
{ tipo:'archivo', clave:'s7_00_log', req:true, etiqueta:'v4-consola',
txt:'Archivo completo de la consola (toda la sesión, desde el flasheo o la Prueba A).' },
{ tipo:'radio', clave:'s7_01_clasif', req:true, guardaEn:'clasificacion', txt:'¿Hasta dónde llegó la tarjeta?',
txt:'Log completo de consola (desde el flasheo o la Prueba A).' },
{ tipo:'radio', clave:'s7_01_clasif', req:true, guardaEn:'clasificacion', txt:'Resultado',
opciones:['Pasó A, B y C',
'Se detuvo en la preparación',
'Se detuvo en el flasheo',
'Falló la Prueba A (24 V)',
'Falló la Prueba B (batería)',
'Falló la Prueba C (regreso de 24 V)'],
aviso:'Debe coincidir con lo que marcaste arriba. Resultado final: <b>APROBADA</b> solo si pasó A, B y C.' },
aviso:'Debe coincidir con lo marcado arriba. APROBADA solo si pasó A, B y C.' },
{ tipo:'texto', clave:'s7_02_detalle', rows:'4', req:true, si: falla,
txt:'¿Qué pasó? Paso exacto, lo que se vio en la consola y lo que mediste',
txt:'Detalle de la falla (paso, consola, medidas)',
ph:'Prueba B, despertar #1: MODEM_RST stack_on salió pero el módem siguió oscuro; 3V3_MODEM 3.31 V…' },
{ tipo:'texto', clave:'s7_03_obs', rows:'3', txt:'Observaciones (todo lo que no cupo arriba)' },
{ tipo:'texto', clave:'s7_03_obs', rows:'3', txt:'Observaciones' },
{ tipo:'check', clave:'s7_04_guardada', req:true,
txt:'Al terminar: 24 V y batería desconectados, tarjeta etiquetada con su serie (V4-NN) y guardada.' },
txt:'24 V y batería desconectados; tarjeta etiquetada (V4-NN) y guardada.' },
] },
]
});

View File

@ -15,46 +15,46 @@ Acta.render({
prefijo: 'V5',
series: 30, // 15 en el lote actual; 30 seleccionables
titulo: 'Acta de prueba y flasheo — EinarBoard V5',
subtitulo: 'Lote 15 tarjetas (JLC 22-Ago). Llena cada sección durante la prueba.',
subtitulo: 'Lote de 15 tarjetas (JLC 22-ago). Llena cada sección durante la prueba.',
secciones: [
{ titulo: '1 · Inspección visual (sin energía)',
sub: 'Con lupa. Marca cada casilla solo cuando lo verifiques.',
sub: 'Con lupa. Marca cada casilla al verificarla.',
items: [
{ tipo:'check', txt:'Sin puentes de soldadura entre pines de <b>U16</b> (MCU), <b>U11</b> (W5500), <b>U10</b> (SC16IS752), <b>U6</b> (LTC4040).' },
{ tipo:'check', txt:'<b>Y2</b> dice <code>3.6864</code> (o <code>36.864</code>). Y1 y Y3 = <code>25.000</code>, Y4 = 32.768 kHz.', aviso:'Si Y2 dice <code>1.8432</code> → marca y avisa a ingeniería.' },
{ tipo:'check', txt:'Botones <b>SW1</b> y <b>SW2</b> presentes y con "clic".' },
{ tipo:'check', txt:'Conectores <b>J11</b>, <b>J9</b>, <b>J10 (RJ45)</b> bien asentados, sin pines doblados.' },
{ tipo:'check', txt:'Jumpers del cargador presentes: <b>JP2, JP3, JP4</b> (no tocar su posición).' },
{ tipo:'check', txt:'<b>Y2</b> marcado <code>3.6864</code> o <code>36.864</code>; Y1 y Y3 <code>25.000</code>; Y4 32.768 kHz.', aviso:'Y2 marcado <code>1.8432</code>: anótalo y avisa a ingeniería.' },
{ tipo:'check', txt:'<b>SW1</b> y <b>SW2</b> presentes y con clic.' },
{ tipo:'check', txt:'<b>J11</b>, <b>J9</b> y <b>J10</b> asentados, sin pines doblados.' },
{ tipo:'check', txt:'<b>JP2, JP3, JP4</b> presentes (no cambiar su posición).' },
{ tipo:'check', txt:'Sin componentes faltantes ni marcas de quemado.' },
] },
{ titulo: '2 · Continuidad — cortos a tierra (sin energía)',
sub: 'Multímetro en ohms, punta negra en TP6 (GND). Espera a que la lectura se estabilice.',
{ titulo: '2 · Cortos a tierra (sin energía)',
sub: 'Multímetro en ohms, punta negra en TP6. Espera a que la lectura se estabilice.',
items: [
{ tipo:'medida', txt:'TP7 — riel 3V3', esperado:'> 1 kΩ (sube lento)', u:'Ω' },
{ tipo:'medida', txt:'P2 pin 1 — VEH5V (entrada 5 V)', esperado:'> 1 kΩ', u:'Ω' },
{ tipo:'medida', txt:'P11 pin 1 — MAIN5V', esperado:'> 1 kΩ', u:'Ω' },
{ tipo:'medida', txt:'P1 pin 1 — 24V_IN', esperado:'> 10 kΩ', u:'Ω' },
{ tipo:'medida', txt:'MOD1 pin "5V" — SW_5V (etapa RTK)', esperado:'> 1 kΩ', u:'Ω',
aviso:'Una lectura fija de 0–20 Ω = corto = FALLA. Unos cientos de Ω que suben es normal (capacitores cargando).' },
aviso:'Fija en 0–20 Ω = corto = FALLA. Unos cientos de Ω que suben es normal.' },
] },
{ titulo: '3 · Riel 3.3 V por USB (J11)',
sub: 'Conecta el USB-C en J11 (junto a los botones). Solo energiza el MCU.',
sub: 'USB-C en J11. Solo energiza el MCU.',
items: [
{ tipo:'check', txt:'<b>D18</b> (LED verde PWR) <b>encendido</b>.' },
{ tipo:'check', txt:'<b>D18</b> (PWR) encendido.' },
{ tipo:'medida', txt:'TP7 respecto a TP6', esperado:'3.20 – 3.40 V', u:'V' },
{ tipo:'check', txt:'<b>U17</b> (AMS1117) tibio tras 1 min (si quema → FALLA).' },
{ tipo:'nota', txt:'Deja el USB conectado para las siguientes secciones.' },
{ tipo:'check', txt:'<b>U17</b> tibio tras 1 min (si quema: FALLA).' },
{ tipo:'nota', txt:'Deja el USB conectado.' },
] },
{ titulo: '4a · Riel 5 V con fuente de banco (entrada P2)',
sub: 'Fuente 5.0 V, límite 500 mA. Coloca el jumper en P11. MCU virgen (sin firmware).',
sub: 'Fuente 5.0 V, límite 500 mA. Jumper en P11. MCU virgen.',
items: [
{ tipo:'medida', txt:'Corriente de la fuente', esperado:'< 300 mA (típ. 100–250)', u:'mA' },
{ tipo:'medida', txt:'P11 pin 1 — MAIN5V', esperado:'4.8 – 5.1 V', u:'V' },
{ tipo:'medida', txt:'P11 pin 2 — SYS5V (con jumper)', esperado:'4.8 – 5.1 V', u:'V' },
{ tipo:'medida', txt:'TP7 — 3V3', esperado:'3.20 – 3.40 V', u:'V' },
{ tipo:'medida', txt:'MOD1 pin "5V" — SW_5V', esperado:'0 V (obligatorio)', u:'V',
aviso:'Si hay 5 V aquí → FALLA (la etapa RTK no arranca apagada).' },
{ tipo:'check', txt:'<b>U6</b> y <b>U12</b> tibios, no queman.' },
aviso:'Con 5 V aquí: FALLA (la etapa RTK no arranca apagada).' },
{ tipo:'check', txt:'<b>U6</b> y <b>U12</b> tibios.' },
] },
{ titulo: '4b · Riel 24 V → buck del ventilador (entrada P1)',
sub: 'Fuente 24.0 V, límite 200 mA. Pin 3 (ignición) sin conectar.',
@ -62,27 +62,27 @@ Acta.render({
{ tipo:'medida', txt:'Corriente de la fuente', esperado:'< 50 mA (sin ventilador)', u:'mA' },
{ tipo:'medida', txt:'P6 pin 1 — 5V_FAN (contra TP6)', esperado:'4.9 – 5.1 V', u:'V' },
{ tipo:'check', txt:'<b>U2</b> (buck) frío o tibio.' },
{ tipo:'nota', txt:'Si algún valor está fuera de rango: marca FALLA y no flashees la tarjeta.' },
{ tipo:'nota', txt:'Valor fuera de rango: FALLA; no se flashea.' },
] },
{ titulo: '5 · Flasheo por USB DFU (J11)',
sub: 'Solo tarjetas que pasaron 1–4. Firmware: hbox-v5-bringup_0.1.1.bin @ 0x08000000.',
sub: 'Solo tarjetas que pasaron 1–4. Binario V5 vigente de Descargas, SHA-256 verificado, en 0x08000000.',
items: [
{ tipo:'check', txt:'DFU: mantener <b>SW2 (BOOT0)</b>, presionar y soltar <b>SW1 (RESET)</b>, soltar SW2 → aparece "STM32 BOOTLOADER" (0483:DF11).' },
{ tipo:'check', txt:'Flasheado con STM32CubeProgrammer (o dfu-util): "download complete" + "verify successful".' },
{ tipo:'check', txt:'DFU: mantén <b>SW2</b>, pulsa y suelta <b>SW1</b>, suelta SW2 → STM32 BOOTLOADER (0483:DF11).' },
{ tipo:'check', txt:'Flasheado: "download complete" y "verify successful".' },
] },
{ titulo: '5d · Verificación después del flasheo',
sub: 'Abre un terminal serie a 115200 baud y pulsa SW1 (RESET).',
{ titulo: '5d · Verificación',
sub: 'Terminal serie a 115200 y pulsa SW1.',
items: [
{ tipo:'check', txt:'<b>D17</b> (LED azul) parpadea a 1 Hz.' },
{ tipo:'check', txt:'<b>DB1 → DB4</b> se encienden en secuencia una vez.' },
{ tipo:'check', txt:'Aparece un puerto serie nuevo en la laptop.' },
{ tipo:'check', txt:'Encabezado <code>hbox-v5-bringup 0.1.1</code> y al final <code>&gt;&gt;&gt; BOARD OK</code>.' },
{ tipo:'texto', txt:'Reporte / observaciones (anota cualquier línea [FAIL] completa)', ph:'---- RESULT: 12 PASS / 0 FAIL ----' },
{ tipo:'check', txt:'<b>D17</b> parpadea a 1 Hz.' },
{ tipo:'check', txt:'<b>DB1 → DB4</b> en secuencia una vez.' },
{ tipo:'check', txt:'Puerto serie nuevo en la laptop.' },
{ tipo:'check', txt:'Encabezado <code>hbox-v5-bringup</code> con la versión flasheada y al final <code>&gt;&gt;&gt; BOARD OK</code>.' },
{ tipo:'texto', txt:'Observaciones (líneas [FAIL] completas)', ph:'---- RESULT: 12 PASS / 0 FAIL ----' },
] },
{ titulo: '6 · Cierre',
items: [
{ tipo:'check', txt:'Tarjeta etiquetada con su número de serie y fecha (cerca de MH4).' },
{ tipo:'check', txt:'Guardada en bolsa antiestática (las FALLA en bolsa aparte con la nota del punto que falló).' },
{ tipo:'check', txt:'Etiqueta con serie y fecha cerca de MH4.' },
{ tipo:'check', txt:'En bolsa antiestática (FALLA en bolsa aparte, con nota).' },
] },
]
});

View File

@ -1,5 +1,16 @@
---
title: "HBox_PCB — Guía Git para colaboradores externos (versión en inglés)"
tags: [project-drogheda, git, kicad, colaboradores, en]
date: 2026-09-15
project: Project Drogheda
author: Helgen Technologies
---
# HBox_PCB — Guide for External Collaborators
!!! note "Versión en inglés"
Versión en inglés — la versión en español es [Guía Git para colaboradores externos](guia-git-es.md).
**Project:** EinarBoard / HBOX watchdog (Helgen Technologies)
**Repository:** KiCad hardware design files only
**Contact:** Leo Rodríguez — leo@helgen.tech
@ -103,4 +114,12 @@ If your role is review rather than editing, do not modify files at all: open an
## 8. Questions
Anything unclear — ask before pushing. A five-minute question is cheaper than untangling a bad merge of a 1.5 MB board file.
Anything unclear — ask before pushing. A five-minute question is cheaper than untangling a bad merge of a 1.5 MB board file.
---
## Historial de revisiones
| Versión | Fecha | Autor | Cambios |
|---|---|---|---|
| 1.0 | 2026-09-15 | Helgen Technologies | Guide for external collaborators (English). |

View File

@ -1,10 +1,18 @@
# HBox_PCB — Guía para colaboradores externos
**Proyecto:** EinarBoard / HBOX watchdog (Helgen Technologies)
**Repositorio:** únicamente archivos de diseño KiCad
**Contacto:** Leo Rodríguez — leo@helgen.tech
---
title: "HBox_PCB — Guía Git para colaboradores externos"
tags: [project-drogheda, git, kicad, colaboradores]
date: 2026-09-15
project: Project Drogheda
author: Helgen Technologies
---
# HBox_PCB — Guía Git para colaboradores externos
[English version](git-guide-en.md).
Proyecto: EinarBoard / HBOX watchdog (Helgen Technologies)
Repositorio: únicamente archivos de diseño KiCad
Contacto: Leo Rodríguez — leo@helgen.tech
## 1. Qué es este repositorio
@ -19,7 +27,7 @@ El historial completo de diseño en KiCad de la tarjeta HBOX watchdog, versiones
## 2. Obtener acceso
1. Pide a Helgen que te cree una cuenta en el servidor Git `git.helgen.online` y te dé acceso a `Helgen-Services/HBox_PCB`.
2. Entra a la interfaz web y agrega tu **llave pública SSH** en la configuración de tu cuenta.
2. Entra a la interfaz web y agrega tu llave pública SSH en la configuración de tu cuenta.
3. Ten en cuenta que SSH corre en el **puerto 222**, no en el 22.
## 3. Clonar
@ -54,8 +62,8 @@ git clone --depth 1 ssh://git@git.helgen.online:222/Helgen-Services/HBox_PCB.git
Los `.kicad_sch` y `.kicad_pcb` de KiCad son archivos de texto únicos y grandes. Las ediciones concurrentes no se fusionan bien, así que:
1. **Una sola persona editando a la vez.** Avisa antes de empezar a editar y avisa cuando termines.
2. **Haz pull antes de abrir KiCad. Nunca hagas pull con el proyecto abierto en KiCad.** Cierra KiCad, haz pull, y vuelve a abrir.
1. Una sola persona editando a la vez. Avisa antes de empezar a editar y avisa cuando termines.
2. Haz pull antes de abrir KiCad. Nunca hagas pull con el proyecto abierto en KiCad. Cierra KiCad, haz pull, y vuelve a abrir.
3. **Nunca subas al repositorio:**
- archivos de bloqueo (`~*.lck`)
- respaldos (`*bak`, `*-bak*`, archivos de autoguardado)
@ -99,8 +107,14 @@ Helgen revisa y hace el merge. Nunca hagas force-push a `main`.
## 7. Retroalimentación de solo revisión (sin editar archivos)
Si tu papel es revisar en lugar de editar, no modifiques archivos: abre un **Issue** en la interfaz web. Refiérete a los componentes por su designador de referencia (`U25`, `C149`, `J12`…) y, cuando aplique, por el número de sección del Plan de Cobre (p. ej. "§8, grupo U25"). Las capturas de pantalla de KiCad son bienvenidas.
Si tu papel es revisar en lugar de editar, no modifiques archivos: abre un Issue en la interfaz web. Refiérete a los componentes por su designador de referencia (`U25`, `C149`, `J12`…) y, cuando aplique, por el número de sección del Plan de Cobre (p. ej. "§8, grupo U25"). Las capturas de pantalla de KiCad son bienvenidas.
## 8. Dudas
Cualquier cosa que no esté clara — pregunta antes de hacer push. Una pregunta de cinco minutos cuesta menos que desenredar un mal merge de un archivo de tarjeta de 1.5 MB.
Cualquier cosa que no esté clara — pregunta antes de hacer push. Una pregunta de cinco minutos cuesta menos que desenredar un mal merge de un archivo de tarjeta de 1.5 MB.
## Historial de revisiones
| Versión | Fecha | Cambios |
|---|---|---|
| 1.0 | 2026-09-15 | Guía para colaboradores externos. |

63
docs/guia-ingeniero.md Normal file
View File

@ -0,0 +1,63 @@
---
title: "Guía del ingeniero"
project: Project Drogheda
date: 2026-09-29
version: "1.1"
tags: [project-drogheda, procedimientos, sitio, ingeniero]
---
# Guía del ingeniero
Acceso: usuario y contraseña te los da Leo; cámbiala la primera vez en [Mi cuenta](cuenta.html). El sitio es interno: no compartas ligas ni descargas fuera de Helgen.
## Reglas
1. Antes de tocar una unidad, abre su [expediente](unidad.html) (H00xx o serie) y lee las actas anteriores.
2. Sigue el procedimiento completo y en orden. Una tarjeta o unidad que falla un paso no avanza al siguiente.
3. Al terminar, llena el acta del procedimiento. Sin acta, el trabajo no existe ([cómo se usan](actas/index.md)).
4. Anota toda medición fuera de rango con su valor, no solo "FALLA".
5. Si algo no cuadra con el documento (valor fuera de rango, paso imposible, la tarjeta no coincide), no improvises: detente, anótalo en Observaciones y avisa a Leo.
6. No edites procedimientos. Si un paso está mal, escríbele a Leo con la página, el número de paso, qué esperabas y qué encontraste. Las páginas se corrigen en el repositorio `Drogheda`; tú no tocas Git.
## Qué abrir
- [Producción](produccion/index.md): de la tarjeta nueva a la unidad lista para embarcar.
- [Taller](taller/index.md): unidad o tarjeta en la mesa.
- [Campo](campo/index.md): unidad en la máquina, envíos, recepciones y daños.
- [Tarjetas y hardware](hardware/index.md): pinout, hoja de datos, manuales por tarjeta.
- [Descargas](descargas/index.md): firmware por tarjeta y SHA-256.
## Reglas que se rompen seguido
Cada una vive en la página donde se aplica:
- Firmware por tarjeta, nunca por número de versión; `superseded/` no se instala: [Descargas](descargas/index.md#firmware-del-hbox-que-binario-va-en-que-tarjeta).
- SHA-256 antes de flashear: [Descargas](descargas/index.md#verifica-el-sha-256).
- Credenciales del módem (APN, caster) nunca en un acta ni en el sitio: [Descargas](descargas/index.md#parametros-del-modem-4g-ntrip-master).
- Química del paquete = JP2: [Ensamble §2](procedimientos/v5-ensamble.md#2-tarjeta-sin-energia).
- JP5 solo en los extremos del bus RS-485: [Ethernet y serie](procedimientos/v5-prueba-ethernet-serie.md#conexion-en-la-instalacion).
- En banco, 5 V ≥ 5.2 V o paquete conectado: [Reglas de banco](procedimientos/diagnostico-banco.md#reglas-de-banco).
- En campo, nada se reinicia antes de capturar la evidencia: [Diagnóstico en campo](diagnostico/procedimiento-diagnostico-campo.md).
- En V5.5 no se apaga y prende la etapa RTK en batería "para ver si vuelve": el módem queda oscuro hasta RESET 4G o 24 V ([Módem en batería](procedimientos/prueba-bateria-modem.md#3-hallazgos-2527-sep)).
## Anexo — publicar el sitio (Leo)
```bash
cd ~/Documents/Claude/Projects/Drogheda/hbox-docs
./scripts/sync-docs.sh # copia desde el repo lo que está en la lista MAP (política de publicación)
mkdocs build --strict # tiene que terminar sin WARNING
./scripts/deploy.sh # rsync del sitio + backend al servidor
# nuevos tipos de acta: actualizar ACTAS_REPETIBLES en /etc/systemd/system/actas-hbox.service
# (ya incluye prueba-ethernet-serie en backend/actas-hbox.service y DESPLIEGUE.md), luego
# sudo systemctl daemon-reload && sudo systemctl restart actas-hbox
git add -A && git commit -m "docs: ..." && git push
```
## Historial de revisiones
| Versión | Fecha | Cambios |
|---|---|---|
| 1.0 | 2026-09-29 | Primera versión. |
| 1.1 | 2026-09-29 | Edición breve; recibe las reglas de la portada; la tabla por situación queda en las portadas de sección. |
Versiones anteriores en git.

28
docs/hardware/index.md Normal file
View File

@ -0,0 +1,28 @@
---
title: "Tarjetas y hardware"
---
# Tarjetas y hardware
Estado, firmware y cómo reconocer cada tarjeta: [Manuales por tarjeta](../manuales/index.md).
| Tarjeta | Documentos |
|---|---|
| <span class="badge-v3">V3</span> | [Manual](../manuales/manual-tarjeta-V3.md) · [Pinout](../montaje/pinout-arneses.md) · [BOM](../montaje/bom-split.md) · [Ensamble y QC](../montaje/guia-ensamble-qc.md) · [Guía de ensamble (PDF)](../montaje/assembly-guide.md) |
| <span class="badge-v4">V4</span> | [Manual](../manuales/manual-tarjeta-V4.md) · [Preparación y prueba](../procedimientos/v4-prueba-fw-0.5.6.md) |
| <span class="badge-v55">V5.5</span> | [Manual V5](../manuales/manual-tarjeta-V5.md) |
| <span class="badge-v56">V5.6</span> | [Manual V5 §9](../manuales/manual-tarjeta-V5.md) · [Hoja de datos](v56-datasheet.md) · [Pinout](v56-pinout.md) · [Layout](v56-layout-instrucciones.md) · [ECO](v56-eco.md) · [Cambios al esquemático](v56-cambios-esquematico.md) |
| <span class="badge-v6">v6</span> | [Manual](../manuales/manual-tarjeta-v6.md) · [Auditoría completa](v6-auditoria-completa.md) · [Cambios al esquemático](v6-cambios-esquematico.md) · [Revisión vs. lecciones V5.5](v6-revision-lecciones-v55.md) · [Mapa de pines](v6-pinmap.md) · [Auditoría pre-fab](v6-auditoria-prefab.md) ([inglés](v6-prefab-audit.md)) · [Plan de cobre](EinarBoard-v6_Plan-de-Cobre_ES.html) ([inglés](EinarBoard-v6_Copper-Plan_EN.html)) |
## Por necesidad
| Necesito | Página |
|---|---|
| Saber qué tarjeta tengo | [Manuales por tarjeta](../manuales/index.md) |
| Pin, puente o LED de V5.5/V5.6 | [Pinout V5.6](v56-pinout.md) · [Manual V5](../manuales/manual-tarjeta-V5.md) |
| Límites eléctricos, consumos, rieles | [Hoja de datos V5.6](v56-datasheet.md) |
| Qué cambió de V5.5 a V5.6 | [ECO V5.6](v56-eco.md) · [Cambios al esquemático](v56-cambios-esquematico.md) |
| Rutear la PCB V5.6 | [Instrucciones de layout](v56-layout-instrucciones.md) |
| Arneses de una V3 | [Pinout V3](../montaje/pinout-arneses.md) · [BOM V3](../montaje/bom-split.md) |
| El binario correcto | [Descargas](../descargas/index.md) |
| KiCad o el repositorio | [Guía Git](../git/guia-git-es.md) |

View File

@ -0,0 +1,254 @@
---
title: "EinarBoard V5.6 — Informe de cambios al esquemático"
tags: [project-drogheda, hardware, einarboard, v5.6, esquematico, eco, kicad]
date: 2026-09-28
project: Project Drogheda
author: Helgen Technologies
---
# EinarBoard V5.6 — Informe de cambios al esquemático
!!! note "EinarBoard V5.6 (`hbox-watchdog-v5`), lote en pedido"
Esta tarjeta es la evolución de la V5.5 fabricada (STM32F411 a bordo + zócalos simpleRTK2B y 4G NTRIP Master). **No es la v6** (GNSS y 4G soldados a bordo, `hbox-watchdog-v6`, en diseño): la v6 tiene su propia sección en el sitio. Cuando este documento dice «copiado de v6» se refiere solo al origen de un valor de componente.
Fecha: 2026-09-28 · Base: `hbox-watchdog-v5` (V5.5 as-fabbed, intacto) · Proyecto: `kicad/hbox-watchdog-v5.*` (la copia `-v56` de la mañana se fusionó en el proyecto v5 por la tarde, ver §9) · ECO implementada: `2026-09-27_Drogheda_EinarBoard-V5.6_ECO_ES_v1.0.md` secciones A, B, C, D3, E5, F · Autor: Helgen Technologies (elaborado con asistencia de Claude) · Estado: listo para revisión de Leo en KiCad; **no** se ha ejecutado *Update PCB from Schematic* ni se ha tocado el layout.
## 0. Resumen
| Ítem | Resultado |
|---|---|
| Proyecto V5.6 | `hbox-watchdog-v56.kicad_sch/.kicad_pro/.kicad_pcb/.kicad_prl/.kicad_dru` (copia de v5; `.kicad_pro/.kicad_prl` apuntan a los nombres v56). Librerías `sym-lib-table`/`fp-lib-table` sin cambio (ya incluían `Drogheda-v6`). |
| V5.5 as-fabbed | Byte-idéntico: SHA-256 de los 5 archivos `hbox-watchdog-v5.*` iguales antes y después (§7). |
| ERC (kicad-cli) | **1 error, 27 warnings — todos preexistentes** en V5.5 (línea base: 1 error, 33 warnings). La ECO no introduce ninguna violación. Detalle en §5. |
| Netlist | Exportada con kicad-cli (`_to_delete/v56-work-20260928/hbox-watchdog-v56-netlist.xml`). Diff pin-a-pin contra la netlist de V5.5: **58 diferencias, todas las previstas por la ECO, ninguna otra** (§4). |
| Refs nuevas | C119 C120 C121 C122 C123 C124 · R105 R106 R107 R108 R109 R110 R111 R112 · U18 · D19 · JP6 (17 componentes). |
| Refs con cambio de valor/símbolo | U7 · L7 · Cbst2 · Rcomp2 · Ccomp2 · Rfreq2 · C3 · C43 · RS1 · R50 · F1 · Dbk2 (DNP). |
| PCB | `hbox-watchdog-v56.kicad_pcb` es copia byte-a-byte de v5; los footprints nuevos entran con *Update PCB* (§8). |
| PDF | `03-Architecture-Hardware/hbox-watchdog-v56-schematic.pdf` (exportado con kicad-cli para revisión rápida). |
Nombres del ECO → refdes reales asignados: `R_EN` → **R105** (10 k serie) + **R106** (100 k a GND) · `R_RSTM` → **R107** · `R_LEDM` → **R108** · `R_ONS` → **R109** (DNP) · `R_ASC` → **R110** (DNP) · `R_TAP` → **R111** · `R_ETHPD` → **R112** · `Cin U7` → **C119/C120** (22 µF 0805) + **C121** (10 µF 1206) · 22 µF extra en 3V3_MODEM → **C122** · `U4b` → **U18** · `D_J9` → **D19** · `JP_CUT` → **JP6** · 47 pF de COMP → **C123** · desacoplo de U18 → **C124**. (KiCad exige que la referencia termine en número, por eso no se usó «U4b».)
## 1. Cambios en componentes existentes (antes → después)
| Ref | V5.5 | V5.6 | LCSC | Nota |
|---|---|---|---|---|
| **U7** | MP1584EN, `Package_SO:SOIC-8-1EP_3.9x4.9mm_P1.27mm_EP2.29x3mm`, LCSC C15051 | **AP64350SP-13**, `Drogheda-v6:SO-8_L4.9-W3.9-P1.27-LS6.0-BL-EP` (mismo footprint que U20 de v6) | **C2071691** | Mismo UUID de símbolo que en v5 (`56a2435b-…`) → *Update PCB* sustituye el footprint en su sitio. Pinout nuevo: 1 BST, 2 VIN, 3 EN, 4 RT/CLK, 5 FB, 6 COMP, 7 GND, 8 SW, 9 EP. |
| U7 VIN | `SW_5V` (pines 2 y 7) | **`SYS5V`** (pin 2) | | El módem ya no cuelga de Q1/F1. `SW_5V` queda solo con C3, C40, MOD1.5, Q1.3, PF5 (verificado §4). |
| U7 EN | `SW_5V` | **`MODEM_EN_U7`** (R105 10 k desde `MODEM_EN`/PC3, R106 100 k a GND) | | Módem apagado con el MCU en reset/DFU. |
| Cbst2 | 10 nF (BST3↔SW3_NODE) | **100 nF** | C14663 | Cap de bootstrap del AP64350 (v6 usa 100 nF). |
| Rcomp2 | 40.2 k (COMP3→COMP3_C) | **14 k** | C22803 | Compensación copiada de U20 v6 (R116). |
| Ccomp2 | 2.2 nF (COMP3_C→GND) | **3.3 nF** | C1613 | Copiada de U20 v6 (C141). |
| Rfreq2 | 100 k (FREQ3→GND, pin FREQ del MP1584) | **200 k/1 %** (misma net `FREQ3`, ahora al pin 4 **RT/CLK**) | C25811 | Copiada de U20 v6 (R117). La net conserva el nombre `FREQ3`. |
| Dbk2 | SS34 (SW3_NODE→GND, diodo de recirculación) | SS34 DNP (`dnp yes`) | C8678 | El AP64350 es síncrono; se deja el footprint por si se vuelve al MP1584. |
| L7 | 10 µH/2 A, LCSC C17700171 | **4.7uH/4A** | **C17700167** | Sunlord MWSA0804S-4R7MT (misma familia 8.8×8.2 mm que la pieza actual; igual que L20 de v6). Footprint sin cambio. |
| C43 | 100uF/6.3V elco 6.3×7.7 (3V3_MODEM) | **220uF/16V polymer** | **C881921** | Lelon OVZ221M1CTR-0608, mismo can. |
| C3 | 47uF elco 6.3×7.7 (SW_5V) | **220uF/16V polymer** | **C881921** | |
| RS1 | 8mR/1% 1206 | **10mR/1%/1W** | **C105362** | Límite de entrada 2.5 A. |
| R50 | 825R/1% | **1.5k/1%** | **C22843** | I_chg 1.33 A. |
| F1 | PPTC 3A 1812 (C20627123) | **PPTC 4A/1812 low-R** | TBD | Solo nota: elegir ≥ 4 A hold / ≤ 20 mΩ (o 0 Ω + protección en Q1). Footprint 1812 sin cambio. |
| R53 | 499k | 499k (sin cambio) | | Decisión J3 del ECO. |
| RNTB | 10k | 10k (sin cambio) | | Solo BOM; depende de la química (D1). |
| R60/R61 | 100k / 31.6k | sin cambio | | FB 0.8 V → 3.33 V, igual en AP64350. |
| C40, C41 | 22 µF (SW_5V / 3V3_MODEM) | sin cambio | | Ver §6 (decisión pendiente sobre C40). |
Cada componente tocado lleva una propiedad `Note` que empieza por «V5.6:» y la propiedad `LCSC` actualizada (mismo campo que ya usaba la BOM del proyecto).
## 2. Componentes nuevos
Colocados en la zona libre inferior-izquierda de la hoja A1 (x 80–205 mm, y 380–520 mm), en cuatro filas con un texto de cabecera «V5.6 ECO (2026-09-28)». Todo va por etiquetas locales (net labels), igual que el resto del esquemático, así que Leo puede moverlos a su bloque sin rehacer conexiones.
| Ref | Valor | Footprint | LCSC | Conexión (pin 1 / pin 2) | ECO |
|---|---|---|---|---|---|
| C119 | 22uF | C_0805 | C86817 | SYS5V / GND — Cin de U7, < 3 mm de VIN | A |
| C120 | 22uF | C_0805 | C86817 | SYS5V / GND — Cin de U7 | A |
| C121 | 10uF/25V | C_1206 | C14860 | SYS5V / GND — Cin bulk de U7 | A |
| C122 | 22uF | C_0805 | C86817 | 3V3_MODEM / GND — segundo 22 µF de salida | A |
| C123 | 47pF | C_0603 | C1671 | COMP3 / GND — parte del lazo de compensación (v6 C142) | A |
| R105 | 10k | R_0603 | C25804 | MODEM_EN (PC3) / MODEM_EN_U7 | A/B |
| R106 | 100k | R_0603 | C103211 | MODEM_EN_U7 / GND | A/B |
| R107 | 1k | R_0603 | C14676 | MODEM_RST_MCU (PC1) / MODEM_RST | B |
| R108 | 10k | R_0603 | C25804 | MODEM_LED_MCU (PC2) / MODEM_LED | B |
| R109 | 10k DNP | R_0603 | C25804 | MODEM_ON_SLEEP (PC4) / XBEE_ONSLP (J8.3) | B |
| R110 | 10k DNP | R_0603 | C25804 | MODEM_ASSOC (PC5) / XBEE_ASSOC (J8.5) | B |
| R111 | 1k | R_0603 | C14676 | RTCM_TAP (PC7 = USART6_RX) / DOUT_4G | B |
| R112 | 100k | R_0603 | C103211 | ETH_RST / GND | F |
| U18 | TMP102 (`Sensor_Temperature:TMP102xxDRL`) | SOT-563 | C99269 | 1 SCL→I2C_SCL, 2 GND, 3 ALERT n/c, 4 **ADD0→3V3 (0x49)**, 5 V+→3V3, 6 SDA→I2C_SDA | D3 («U4b») |
| C124 | 100nF | C_0603 | C14663 | 3V3 / GND — desacoplo de U18 | D3 |
| D19 | USBLC6-2SC6 (`Power_Protection:USBLC6-2SC6`) | `Package_TO_SOT_SMD:SOT-23-6` | C7519 | 1,6 I/O1→USB_DM · 3,4 I/O2→USB_DP · 5 VBUS→USB_VBUS · 2 GND | E5 («D_J9») |
| JP6 | JP_CUT (`Jumper:SolderJumper_2_Open`) | `Jumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mm` | — | MAIN5V / SYS5V, en paralelo con P11, abierto | F («JP_CUT») |
Nets nuevas de señal (J8.3 y J8.5 estaban sin conexión; se les quitó la bandera *no-connect*): `XBEE_ONSLP` (J8.3 = XBee pin 13) y `XBEE_ASSOC` (J8.5 = XBee pin 15).
## 3. Líneas al MCU (U16 STM32F411RET6)
Se retiraron las banderas *no-connect* de PC1/PC2/PC3/PC4/PC5/PC7 y se colocó la etiqueta en el extremo del pin.
| Pad | Pin | Net nueva | A través de | Destino |
|---|---|---|---|---|
| 9 | PC1 | `MODEM_RST_MCU` | R107 1 k | `MODEM_RST` (J7.5, SW4G1) |
| 10 | PC2 | `MODEM_LED_MCU` | R108 10 k | `MODEM_LED` (J8.8, antes de Rmled1) |
| 11 | PC3 | `MODEM_EN` | R105 10 k → `MODEM_EN_U7` (R106 100 k a GND) | U7 pin 3 EN |
| 24 | PC4 | `MODEM_ON_SLEEP` | R109 10 k DNP | `XBEE_ONSLP` (J8.3) |
| 25 | PC5 | `MODEM_ASSOC` | R110 10 k DNP | `XBEE_ASSOC` (J8.5) |
| 38 | PC7 (USART6_RX) | `RTCM_TAP` | R111 1 k | `DOUT_4G` (J7.2 → MOD1.17) |
| 50 | PA15 | `ETH_RST` (existente) | R112 100 k a GND | U11 W5500 pin 37 |
## 4. Verificación por netlist (kicad-cli, `sch export netlist`)
Diff pin-a-pin `v55-baseline.xml` → `hbox-watchdog-v56-netlist.xml`: **58 pines cambian, 0 cambios no previstos** (todos los demás ~1 300 nodos idénticos, incluido el resto de U16, MOD1, U6, U12, J7, J9…).
| Net | Nodos en V5.6 |
|---|---|
| `MODEM_EN` | U16.11 (PC3), R105.1 |
| `MODEM_EN_U7` | U7.3 (EN), R105.2, R106.1 |
| `MODEM_RST_MCU` | U16.9 (PC1), R107.1 |
| `MODEM_RST` | J7.5, SW4G1.1, **R107.2** |
| `MODEM_LED_MCU` | U16.10 (PC2), R108.1 |
| `MODEM_LED` | J8.8, Rmled1.1, **R108.2** |
| `MODEM_ON_SLEEP` | U16.24 (PC4), R109.1 |
| `XBEE_ONSLP` | J8.3, R109.2 |
| `MODEM_ASSOC` | U16.25 (PC5), R110.1 |
| `XBEE_ASSOC` | J8.5, R110.2 |
| `RTCM_TAP` | U16.38 (PC7), R111.1 |
| `DOUT_4G` | J7.2, MOD1.17, **R111.2** |
| `ETH_RST` | U11.37, U16.50, **R112.1** |
| `SYS5V` | C101.1, D12.2, D6.1, F1.1, K1.2, P11.2, PF10.1, R2.2, U12.2, U12.7, **U7.2 (VIN)**, **C119.1, C120.1, C121.1**, **JP6.2** |
| `SW_5V` | C3.1, C40.1, MOD1.5, PF5.1, Q1.3 — **U7 ya no está** |
| `3V3_MODEM` | C41.1, C43.1, J7.1, J8.7, L7.2, R60.1, **C122.1** |
| `SW3_NODE` | U7.8 (SW), L7.1, Cbst2.2, Dbk2.1 (DNP) |
| `BST3` | U7.1 (BST), Cbst2.1 |
| `FB3` | U7.5 (FB), R60.2, R61.1 |
| `COMP3` | U7.6 (COMP), Rcomp2.1, **C123.1** |
| `COMP3_C` | Rcomp2.2, Ccomp2.1 |
| `FREQ3` | U7.4 (RT/CLK), Rfreq2.1 |
| `MAIN5V` | … P11.1, **JP6.1** (resto sin cambio) |
| `USB_DP` | J7.7, J9.A6, J9.B6, **D19.3, D19.4** |
| `USB_DM` | J7.8, J9.A7, J9.B7, **D19.1, D19.6** |
| `USB_VBUS` | J7.6, J9.A4/A9/B4/B9, **D19.5** |
| `I2C_SCL` / `I2C_SDA` | … U4.1/U4.6, **U18.1 / U18.6** |
| `3V3` | … **U18.4 (ADD0), U18.5, C124.1** |
Volcado pad→net completo de todos los componentes nuevos y modificados: `kicad/_to_delete/v56-work-20260928/padnet-dump.txt`.
## 5. ERC (kicad-cli, `hbox-watchdog-v56.kicad_sch`)
**Resultado: 1 error, 27 avisos.** Línea base V5.5 (misma herramienta, antes de tocar nada): 1 error, 33 warnings.
Preexistentes en V5.5 (no son de la ECO, se dejan tal cual):
- **[error] Label not connected @ (50.8, 25.146)** — etiqueta `GND` suelta en la esquina superior izquierda. Existe igual en `hbox-watchdog-v5.kicad_sch`.
- [warning] Unconnected wire endpoint @ (201.676, 216.408).
- [warning] «Symbol … doesn't match copy in library» ×17 (SW_Push ×3, L ×4, Crystal ×4, AO4406A, STM32F411RETx, D, SP3485EN, AMS1117-3.3, RJ45_Hanrun…) y «not found in symbol library» ×6 (D_Zener_ANK, Q_PMOS_GDS, Q_NMOS_GSD ×2, Q_PMOS_GSD, PCF8574) — símbolos embebidos distintos de la librería global; sin efecto eléctrico.
- [warning] Footprint PhoenixContact_MC_1,5_3-G-3.5… not found ×2; footprint library `Connector_RJ45` no configurada ×1.
Warnings que desaparecieron respecto a la línea base (limpieza colateral, sin efecto en la netlist):
- 8× «A pin with a "no connection" flag is connected»: J7/J8 tenían banderas *no-connect* encima de pines que sí están conectados por etiqueta (J7.1–.8, J8.1, .6, .7, .8, .10). Se quitaron esas 10 banderas (más las 8 de los pines PC1–PC7/J8.3/J8.5 que ahora se usan). Los pines siguen conectados exactamente igual (diff de netlist = 0 en ellos).
- Los pines del símbolo `AP64350SP-13` en `Drogheda-v6.kicad_sym` son de tipo *unspecified*; en la copia embebida en `hbox-watchdog-v56.kicad_sch` se les asignó tipo (VIN/GND power_in, EN/FB input, SW power_out, resto passive) para que ERC no avise «Unspecified and Passive connected». La librería `Drogheda-v6.kicad_sym` no se tocó.
## 6. Lo que no se hizo / decisiones abiertas
1. **Compensación y frecuencia del AP64350 copiadas de v6 (U20)** — Rcomp2 14 k, Ccomp2 3.3 nF, C123 47 pF, Rfreq2 200 k, Cbst2 100 nF. En v6 esa red se diseñó para 3.8 V con Cout distinto; aquí la salida es 3.33 V con L = 4.7 µH y Cout ≈ 2×22 µF cerámico + 220 µF polímero (baja ESR). **Comprobar contra la tabla de aplicación del datasheet AP64350** (Diodes, «Typical Application» 3.3 V) antes de pedir; son 0603 y se cambian sin re-layout.
2. **C40 sigue en `SW_5V`.** El ECO dice «C40 pasa a ser Cin»; el brief de ejecución pedía *añadir* 2×22 µF + 10 µF con refs nuevas en SYS5V. Se hizo lo segundo (C119/C120/C121) y C40 se dejó en SW_5V como cerámico del riel del F9P. Si Leo prefiere el texto del ECO: marcar C40 DNP o moverlo a SYS5V en layout (una sola etiqueta).
3. **F1**: valor «PPTC 4A/1812 low-R», LCSC = `TBD`. Elegir la pieza (o 0 Ω) antes de la BOM.
4. **L7 LCSC C17700167** = Sunlord MWSA0804S-4R7MT (8.8×8.2 mm, Extended). La pieza actual (C17700171) es de la misma familia sobre el footprint `L_Bourns-SRU8028_8.0x8.0mm`; confirmar que el 4R7 tiene la misma huella (o cambiar por SRU8028-4R7Y).
5. **U12 (buck 3V3_ETH)** no se cambió (opcional J4 del ECO).
6. **RNTB / JP2** sin cambio (decisión de química D1 pendiente).
7. Serigrafía (SW4G1 = RESET MÓDEM, SW1 = RESET MCU, JP2 = F2) y toda la sección E de EMC son de PCB: no se tocaron.
8. Error ERC preexistente (etiqueta GND suelta en 50.8, 25.146) se dejó tal cual por estar fuera de la ECO; borrar esa etiqueta en KiCad cuesta un clic si se quiere ERC = 0 errores.
## 7. Integridad de V5.5
El estado as-fabbed V5.5 quedó byte-idéntico: los cinco archivos `hbox-watchdog-v5.*` tienen el mismo SHA-256 antes y después del trabajo (hashes y respaldos intermedios en el anexo de trazabilidad, al final de la página). No se ejecutó `git` en la carpeta.
## 8. Siguientes pasos para Leo / Michelle
1. **Abrir `hbox-watchdog-v56.kicad_pro` en KiCad 10**, revisar el bloque U7 (x≈433–475, y≈185–210) y el bloque «V5.6 ECO» (x 70–210, y 362–530); mover los componentes nuevos junto a sus bloques si se quiere (todo es por etiquetas). Guardar → KiCad reescribe el archivo en formato canónico.
2. Opcional: borrar la etiqueta `GND` suelta en (50.8, 25.146) para ERC = 0 errores.
3. Revisar punto 6.1 (compensación AP64350) y 6.2 (C40); fijar F1 (6.3).
4. Update PCB from Schematic (F8) sobre `hbox-watchdog-v56.kicad_pcb`: sustituye U7 (mismo UUID, footprint `Drogheda-v6:SO-8_L4.9-W3.9-P1.27-LS6.0-BL-EP`, pinout distinto → hay que re-rutear el bloque) y añade 17 footprints nuevos (C119–C124, R105–R112, U18 SOT-563, D19 SOT-23-6, JP6). Dbk2, R109, R110 quedan DNP.
5. Layout (sección E del ECO + notas de A/D):
- U7: lazo Cin (C119/C120/C121) < 3 mm de VIN; BST (Cbst2) pegado a pines 1/8; C123/Rcomp2/Ccomp2 y Rfreq2 junto a pines 4/6 con retorno a GND corto; EP con vías térmicas.
- `SW_BAT` polígono ≥ 2 mm; `BAT_PLUS` ≥ 1.5 mm + vías; EP de U6 ≥ 9 vías térmicas.
- Divisor FB del ventilador (R20/R21) junto al pin 4 de U2; ESD DFU (D14/D15/D16) junto a J11; **D19 en J9**, en la salida de las líneas D+/D− del conector.
- Cristales ≤ 5 mm de sus ICs; costura de vías bajo MOD1.
- **U18** entre J7/J8 y el módem (fuente de calor); C124 al lado.
- JP6 junto a P11; R112 junto a U11 (pin 37); R107/R108 cerca de J7/J8; R111 cerca de J7.2.
- Serigrafía: `SW4G1 = RESET MÓDEM`, `SW1 = RESET MCU`, `JP2 = F2 (Li-ion / LFP)`, `JP6 = CUTOFF BYPASS (abierto)`.
6. DRC = 0 → auditoría pad-a-pad contra `board_v56.h` (PC1/PC2/PC3/PC4/PC5/PC7 según §3) → BOM/CPL → JLC.
## 9. Addendum 28-sep (tarde) — decisiones cerradas y fusión en `hbox-watchdog-v5.*`
Por decisión de Leo ya **no existe una copia `hbox-watchdog-v56.*`**: el esquemático de la ECO se fusionó en `hbox-watchdog-v5.kicad_sch` (255 instancias `(project …)` renombradas de vuelta a `hbox-watchdog-v5`; `.kicad_pcb/.kicad_pro` eran copias idénticas). El estado as-fabbed V5.5 queda en git (`git tag v5.5-as-fabbed` antes del commit) y una copia en `kicad/_to_delete/v56-work-20260928/hbox-watchdog-v5_as-fabbed-before-v56-merge.kicad_sch`. Los archivos `-v56` se movieron a la misma carpeta `_to_delete/`.
Decisiones §6 cerradas y aplicadas en el esquemático (script por referencia, respaldos `08-merged-into-v5` y `09-before-chemistry`):
| Ref | Antes | Ahora | LCSC | Razón |
|---|---|---|---|---|
| Rcomp2 | 14k (fila 5 V del datasheet, copiada de v6) | **9.1k** | C23260 (básica) | Fila 3.3 V del AP64350 (9.31k); fc ≈ 2.4 kHz con Cout ≈ 250 µF (2×22 µF + 220 µF polímero) |
| Ccomp2 | 3.3nF | **10nF** | C57112 (básica) | Con Cout 250 µF el cero a 5.3 kHz quedaba por encima del cruce → MF 25–40°; a 1.75 kHz → MF 55–70° |
| C123 | 47pF | **68pF** | C1680 | Fila 3.3 V; polo ≈ 260 kHz contra el rizado de 500 kHz |
| F1 | PPTC 3 A (C20627123) / «TBD» | **BSMD1812-400-12V** 4 A hold / 8 A trip, 25 mΩ máx | C18164540 | ≤ 60 mV a 2.5 A; hold ≈ 3 A a 45 °C; mismo 1812 |
| C40 | 22 µF en SW_5V | sin cambio | — | U7 ya tiene C119–C121 como Cin; C40 sigue desacoplando el F9P |
| L7 | — | C17700167 confirmado | — | Misma familia MWSA0804S, mismo encapsulado 8.8×8.2 → misma huella |
| **R55 (= RNTB)** | 10k/1% (C25804) | **5.6k/1%** | C23189 (básica) | Química **LFP-HT 26650**: ventana de carga +10…+60 °C con NTC B3380 en el paquete (P4.3) |
| **JP2** | `SolderJumper_3_Bridged12` «F2:Li-ion» | **`SolderJumper_3_Bridged23`** «F2:LFP (2-3)», huella `…_Bridged23_…` | — | F2 = bajo → flotación LiFePO4 del LTC4040. Símbolo Bridged23 añadido a `lib_symbols` (derivado del Bridged12: puente entre pads 2-3) |
Pendiente de Leo: tamaño del lote; el paquete 26650 LFP-HT con NTC **B3380** (caja/BOM mecánica). Validación de banco en la primera tarjeta: escalón de carga 0→2 A en 3V3_MODEM (< 150 mV, sin oscilación); carga LFP a 45 °C en horno sin pausa NTC.
## 10. Addendum 28-sep (noche) — hallazgos de la auditoría v6 aplicados a V5.6 + chequeo de stock JLC
Fuente: `2026-09-28_EinarBoard-v6_Full-Audit` (E-02, H-01, A-03, H-02, H-02b, A-08, A-09) y un chequeo de stock de las 94 LCSC de la BOM V5.6 para 30 tarjetas (2 problemas, 92 OK). Respaldo previo: `_to_delete/v56-work-20260928/10-before-v6audit-fixes.kicad_sch`.
| Ref | Antes | Ahora | LCSC | Razón |
|---|---|---|---|---|
| **R112** (ETH_RST → GND) | 100k | **4.7k** | C23162 (básica) | E-02: el W5500 tiene pull-up interno de 62–112 k en RSTn y PA15 arranca como JTDI con pull-up de 30–50 k → con 100 k el nodo queda en 2.75 V (ALTO). Con 4.7 k: 0.62 V peor caso (BAJO). 0.7 mA cuando el firmware lo pone en alto. |
| **U15** MAX3232ESE | huella `SOIC-16W_7.5x10.3mm` (campo obsoleto; la PCB V5.5 ya usa la angosta) | **`Package_SO:SOIC-16_3.9x9.9mm_P1.27mm`** | C15846 | H-01: el ESE es SO-16 angosto. Corregido en el esquemático para que *Update PCB* no cambie la huella buena de la PCB. (U13 PCF8574T sí es ancho: correcto.) |
| **R50** | 1.5k | **1.43k/1%** | C22840 | A-03: I_chg = 2000/R ±5 % → 1.316–1.483 A (con 1.5 k el mínimo es 1.254 A < 1.3 A). Mismo valor en v6 (comunalidad). |
| **U10** | C729142 (SC16IS762, **15 en stock**) | mismo valor SC16IS752IPW | **C57156** (2 670) | H-02: por debajo del mínimo de 20 de JLC. Pin-compatible, modo I²C idéntico, mitad de precio. |
| **R53** 499k | C131054 (**6 en stock**) | mismo valor | **C177479** (26 862) | H-02: fija el voltaje del boost de respaldo; sin ella no hay respaldo. |
| 100k ×9 (Rgs1, R87, R20, R56, Ren1, Rfreq1, R85…) y 100k/1% ×3 (R60, R52, R54) | C103211 (5 %, 702 en stock) / C14675 | mismos valores | **C25803** (1 %, básica, 10.8 M) | H-02b: 2.3× de cobertura para 30 tarjetas y una bobina Extended menos. |
| **U17** | AMS1117-3.3 (C6186) | **TLV1117LV33DCYR** (mismo SOT-223, pin 1 GND / 2 OUT / 3 IN) | C15578 | A-08: en batería LDO_IN = VSYS 4.60–4.99 V − D12 ≈ 4.25–4.65 V y el AMS1117 necesita ≈ 4.3 V (dropout 1.0–1.3 V) → 3V3 marginal justo en respaldo; Iq 5–11 mA vs 0.1 mA. Vin máx 5.5 V ≥ SD-15B 5.57 − D12. Comprobar ≥ 10 µF cerámico en 3V3 (C23 22 µF). |
| **C78** (VEH5V bulk) | 220uF/10V electrolítico 85 °C (C2827940) | **220 µF/16 V polímero** | C881921 | A-09: 2 000 h @ 85 °C ≈ 1 año en gabinete de puerto; mismo can 6.3×7.7. |
No aplicados a V5.6 (decisión de Leo, o v6.1): A-11 (R56 a 3V3 → cargador OFF por defecto sin MCU; es un cambio de red), D-09 (100 k en la base de Q5), crystales Y1/Y3 HC-49 (E-03/D-02, V5.5 funciona en campo), A-13 (PFO al MCU: no hay pin libre en V5).
Añadido (Ethernet, E-04, respaldo `11-before-eth-caps`): **C90** (TOCAP, U11.20) 10 µF → **4.7 µF** (C1779) y **C91** (1V2O, U11.22) 4.7 µF → **10 nF** (C1710, básica), ambos 0805 sin cambio de huella — valores que exige el datasheet W5500 v1.0.2 («must be connected to a 4.7uF / 10nF capacitor»). Y1/C95/C96 (E-03) se dejan: el diseño de referencia de WIZnet usa las mismas cargas de 18 pF; sólo verificar con frecuencímetro si el enlace falla.
## Historial de revisiones
| Versión | Fecha | Cambios |
|---|---|---|
| 1.0 | 2026-09-28 | Informe de la ECO aplicada al esquemático; addenda tarde (fusión en `hbox-watchdog-v5`, decisiones cerradas) y noche (hallazgos de la auditoría v6, stock JLC). |
| 1.1 | 2026-09-29 | Hashes, respaldos e incidentes de herramienta movidos al anexo de trazabilidad. Sin cambios técnicos. |
??? note "Anexo técnico — trazabilidad"
**SHA-256 de V5.5 as-fabbed (antes = después):**
```
8e4d3a7ba7a209367c2dda2394ca7809b5b68078a388f74b8052ddda2aab518c hbox-watchdog-v5.kicad_dru
6f7ca0e414cc2af321c4909ac3491ee71300f6fa61507e179a46e945eb5c39b0 hbox-watchdog-v5.kicad_pcb
8f0158affbf93516649a1317572a687f330ad7f009cd4f4d8345324d8506c04c hbox-watchdog-v5.kicad_prl
8253ad14bea362c534bdb0895477899863bd3c843173751b0af3d253448a8fe3 hbox-watchdog-v5.kicad_pro
8926a7c0ec4785f9accaf6d005ae7a57b43099dd5d772b945782fdc3751c843f hbox-watchdog-v5.kicad_sch
```
`hbox-watchdog-v56.kicad_sch` final: `08219316517f636564fd0ae0804a30213d10fbc048b6446dd61216b312f81d2e`.
Respaldos intermedios. Respaldos de cada estado intermedio (nada se borró): `kicad/_to_delete/v56-work-20260928/` — `00-copied-from-v5`, `01-nc-removed-renamed`, `02-u7-replaced`, `03-values`, `04-new-parts`, `05-metadata`, `06-junction-nc-pintypes`, `07-final` (`.kicad_sch`), netlists `v55-baseline.xml`, `v6-reference.xml`, `step02/04/06.xml`, `hbox-watchdog-v56-netlist.xml`, y `padnet-dump.txt`. No se ejecutó `git` en la carpeta.
**Notas de proceso (antes §6.9–6.10):**
9. Formato del archivo: las herramientas KiCad-MCP reescriben `hbox-watchdog-v56.kicad_sch` en formato compacto (una línea por elemento, 657 kB frente a 813 kB). Es válido para KiCad 10 (kicad-cli lo lee para ERC/netlist/PDF) y al guardar desde eeschema vuelve al formato canónico; solo afecta a la legibilidad del diff en git. Las 238 instancias `(project …)` se renombraron de `hbox-watchdog-v5` a `hbox-watchdog-v56` (lo que haría *Save As*).
10. Incidente detectado y corregido durante el trabajo: la herramienta MCP `replace_schematic_component` eliminó la unión (junction) en (39.37, 76.2) — Rig2.1 quedaba sin `IGN_SENSE`. Se detectó con el diff de netlist, se restauró la junction con su UUID original y el diff final es limpio. La misma herramienta añadió 5 junctions en cruces de cables ya conectados (722.63,130.81 · 722.63,69.85 · 699.77,240.03 · 446.786,301.498 · 509.524,287.02); se verificó que no alteran ninguna net.
## 11. Addendum 29-sep — correcciones para que *Update PCB* funcione en cualquier máquina
| Problema | Corrección |
|---|---|
| JP2 apuntaba a `Jumper:SolderJumper-3_P1.3mm_Bridged23_RoundedPad1.0x1.5mm`, que **no existe** en la librería estándar de KiCad → *Update PCB* no podía cargar la huella. | Nueva huella de proyecto `Drogheda:SolderJumper-3_P1.3mm_Bridged23_RoundedPad1.0x1.5mm` (copia de la Bridged12 con el puente de cobre en 2-3 y `net_tie_pad_groups "2,3"`); JP2 la usa. |
| `sym-lib-table` tenía la ruta absoluta `/Users/leo/…/Drogheda-sym.kicad_sym` → en otra máquina la librería no aparece. | Ruta relativa `${KIPRJMOD}/Drogheda-sym.kicad_sym`. |
| P15/P16 con huella `…MC_1,5_3-G-3.5…_Vertical` (no existe) y J10 con el apodo `Connector_RJ45` (no configurado): en la PCB ya estaban `…_Horizontal` y `Connector_RJ:`. | Esquemático igualado a la PCB. |
| R85 (100 k, ETH_FREQ de U12) tenía LCSC `C15051` (el MP1584EN) — error de la sustitución masiva. | R85 → `C25803`. |
Verificación: ERC 1 error / 28 avisos, todos preexistentes (ninguno de huella no encontrada en piezas nuevas); netlist contra V5.5 = exactamente los 65 pines previstos; *Update PCB* de prueba sobre una copia: las 19 huellas nuevas cargan, 0 sin resolver.

View File

@ -0,0 +1,346 @@
---
title: "EinarBoard V5.6 (HBOX V5) — Hoja de datos de ingeniería"
project: Project Drogheda
date: 2026-09-29
version: "1.0"
status: BORRADOR para revisión de ingeniería — V5.6 con ECO aplicada en esquemático; PCB pendiente de *Update PCB*
tags: [project-drogheda, hardware, einarboard, v5.6, datasheet, hbox]
author: Helgen Technologies
---
# EinarBoard V5.6 (HBOX V5) — Hoja de datos de ingeniería
!!! note "Alcance y fuentes"
Evolución de la V5.5 fabricada (STM32F411 a bordo + zócalos simpleRTK2B y 4G NTRIP Master). No es la v6 (GNSS y 4G soldados, `hbox-watchdog-v6`, en diseño); "copiado de v6" se refiere solo al origen de un valor de componente. Fuentes: netlist `kicad/_to_delete/v56-work-20260928/p5ntc-after.xml` (SHA-256 `45d3f034…8e42a7`, exportada de `kicad/hbox-watchdog-v5.kicad_sch` el 2026-09-28), `2026-09-28_Drogheda_EinarBoard-V5.6_Schematic-Change-Report_v1.0.md` (§1, §9, §10), `2026-09-27_Drogheda_EinarBoard-V5.6_ECO_ES_v1.0.md`, `04-Source-Code/firmware/hbox_v5_bringup/board_v5.h`, `hbox_v5_bringup.ino` 0.6.0 y `README.md`. Lo no verificado va marcado `<!-- VERIFICAR -->`.
## Resumen
La EinarBoard V5.6 es la tarjeta portadora/watchdog del rastreador HBOX RTK. Lleva a bordo:
- MCU STM32F411RET6 (LQFP-64, HSE 25 MHz, USB-C DFU/consola en J11).
- LTC4040, respaldo de batería 1S: límite de entrada 2.5 A, carga 1.4 A, boost de respaldo 4.79 V, umbral de falla de alimentación 4.44 V. Alimenta el riel `SYS5V`, que corta el interruptor P11.
- Zócalos para los módulos ArduSimple: simpleRTK2B (u-blox ZED-F9P, formato UNO, MOD1, en el riel `SW_5V` que controla el MCU) y 4G NTRIP Master (formato XBee, J7/J8, con buck propio AP64350 de 3.3 V que el MCU enciende con `MODEM_EN` y resetea con `MODEM_RST`).
- Periféricos: Ethernet W5500 (SPI2, RJ45 J10, sin PoE); puente UART doble SC16IS752 para RS-485 (P15) y RS-232 (P16); expansor PCF8574 para el medidor de batería de 4 LEDs y el LED RGB externo (P14); SHT40 (T/HR del aire); dos TMP102 (cargador @0x48, módem @0x49); NTC del paquete leída por el LTC4040 y el MCU; entrada de NTC de punto caliente (P12); buck del ventilador (24 V → 5 V, P6); relevador K1 de Modo B a prueba de fallas, que mantiene el tráfico GNSS → módem aunque el MCU muera.
- Entradas: 24 V del vehículo (P1, solo ventilador y lectura de ignición) y 5 V de una Mean Well SD-15B-05 externa (P2).
V5.6 = V5.5 (15 pzas, JLC 22-ago-2026) + ECO 27/28-sep: riel del módem en `SYS5V` bajo control del MCU, cargador redimensionado para la SD-15B, straps de química LiFePO4 (LFP-HT 26650), sensores de temperatura de módem y cargador, ESD en J9, pull-down en `ETH_RST`, puente JP6 del corte, sin conector P5. Firmware: `hbox_v5_bringup` 0.6.0 (un binario para V5.5/V5.6; `MODEM_EN/RST`, derivación RTCM y `tcell` llegan en 0.6.x).
## 1. Qué es
| Ítem | Valor | Fuente |
|---|---|---|
| Nombre | **EinarBoard V5.6** — tarjeta portadora/watchdog del HBOX RTK (cuadro de título KiCad: *EINARBoard HBox*, Helgen Servicios Especializados) | netlist `title_block` |
| Proyecto KiCad | `03-Architecture-Hardware/kicad/hbox-watchdog-v5.*` (V5.5 y V5.6 comparten proyecto; V5.6 = ECO aplicada al esquemático el 28-sep; PCB pendiente de *Update PCB from Schematic*; etiqueta git `v5.5-as-fabbed` guarda el estado del lote anterior) | Informe de cambios §9 |
| MCU | U16 **STM32F411RET6** LQFP-64 soldado (ya no hay Blackpill en zócalo) · HSE Y3 25 MHz · LSE Y4 32.768 kHz · SYSCLK 96 MHz, USB 48 MHz | `board_v5.h`, `.ino` |
| Módulos en zócalo | **MOD1** simpleRTK2B (u-blox ZED-F9P, formato UNO) · **J7/J8** 4G NTRIP Master (formato XBee, paso 2.00 mm) | netlist |
| Firmware | `hbox_v5_bringup` **0.6.0** (`hbox-v5-bringup_0.6.0.bin`), consola USB CDC en J11 | `README.md` |
| Lote V5.5 | 15 pzas, JLCPCB 22-ago-2026 | FACTS / procedimiento v5 |
| Lote V5.6 | Por pedir (semana del 29-sep-2026); BOM 94 LCSC comprobados para 30 tarjetas | Informe §10 |
| Componentes / nets | 252 componentes · 237 nets en la netlist V5.6 | netlist |
## 2. Diagrama de bloques
`pymdownx.superfences` no tiene configurado el *custom fence* de Mermaid en `mkdocs.yml`, así que el diagrama va en texto.
```text
P1 GX16-5 ──24V_IN──▶ D10 SMBJ33A (TVS) ─▶ Q10 IRFR5305 (polaridad) ──24V──▶ U2 MP1584EN ──5V_FAN──▶ P6 FAN (Q2 lado bajo, PA6)
│ pin 3 IGN_IN ──▶ Rig1 22k / (Rig2 22k ∥ Rigb1 3.3k) + D5 BAT54 ──IGN_SENSE──▶ PA5
│
P2 5V (SD-15B-05) ──VEH5V──▶ RS1 10 mΩ ──VIN_SW──▶ Q7 AO4406A (ideal diode, IGATE) ──▶ U6 LTC4040 ──MAIN5V──▶ P11 CUTOFF-SW / JP6 ──SYS5V──┐
│ │ ▲ BAT_PLUS ◀── P4 paquete 1S (+NTC) │
│ R7/R8 ÷2 ──5V_SENSE──▶ PA4 │ PFI 4.44 V (R51/R52) · boost 4.79 V (R53/R54) · I_chg 1.4 A (R50) · straps JP2/3/4 │
│ │
├── SYS5V ──▶ F1 PPTC 4 A ──SW_IN──▶ Q1 AO3401A (gate ◀ Q5 ◀ PA1 PWR_CTRL) ──SW_5V──▶ MOD1.5 (simpleRTK2B) │
├── SYS5V ──▶ U7 AP64350 (EN ◀ PC3 MODEM_EN) ──3V3_MODEM──▶ J7.1/J8.7 (4G NTRIP Master) │
├── SYS5V ──▶ U12 MP1584EN ──3V3_ETH──▶ U11 W5500 + J10 RJ45 (siempre encendido) │
├── SYS5V ──▶ D12 ─┐ │
│ J11 DFU_VBUS ──▶ D13 ─┴─LDO_IN──▶ U17 TLV1117LV33 ──3V3──▶ U16 MCU, U3/U4/U18/U10/U13/U14/U15, LEDs │
└── SYS5V ──▶ K1 G5V-1 bobina (Q6 ◀ PB5 BYP_CTRL) ┘
Datos: MOD1 D0/D1 (F9P UART1) ◀──USART2 PA2/PA3──▶ U16 MOD1 D8 (F9P TX2) ──USART1_RX PA10──▶ U16 ──PA9──▶ K1 NO ─┐
J7.2 DOUT_4G (RTCM del módem) ──▶ MOD1 D2 (F9P RX2) y ──R111──▶ PC7 USART6_RX (escucha) K1 NC ◀── F9P TX2 ─┴─DIN_4G──▶ J7.3
I²C1 PB6/PB7: U3 SHT40 0x44 · U4 TMP102 0x48 · U18 TMP102 0x49 · U13 PCF8574 0x20 · U10 SC16IS752 0x4D
U10 ch A ──▶ U14 SP3485 ──▶ P15 RS-485 (JP5 120 Ω) U10 ch B ──▶ U15 MAX3232 ──▶ P16 RS-232 (H4 = mismo canal en TTL 3V3)
U13 P0–P3 ──▶ DB1–DB4 (medidor) · P4–P6 ──▶ P14 RGB externo · P7 libre (puente 0.5.6 a SW4G1 en V5.5/V4)
SPI2 PB12–PB15 + PC0 INT + PA15 RST ──▶ U11 W5500
J11 USB-C ──▶ PA11/PA12 (DFU + consola CDC) J9 USB-C ──▶ J7.6/7/8 (USB de servicio del módem, D19 ESD)
```
## 3. Árbol de potencia
| Riel | Origen | Regulador / paso | Valor | Alimenta | Notas |
|---|---|---|---|---|---|
| `24V_IN` → `24V` | P1.1 (vehículo 24 V nominal; ignición 12–24 V) | D10 SMBJ33A a GND, Q10 IRFR5305 (protección de polaridad, DzG1 BZX84C15 + Rrp1 10 k en compuerta) | 24 V | Solo U2 (ventilador) | El resto de la tarjeta **no** depende de 24 V |
| `5V_FAN` | `24V` | U2 MP1584EN (EN por Ren1 100 k / Ren2 20 k desde `24V`), L2 10 µH, Dbk1 SS34, FB R20 100 k / R21 19.1 k | ≈ 5.0 V (0.8 V × (1 + 100/19.1) = 4.99 V) | P6.1 ventilador; retorno conmutado por Q2 AO3400A (PA6) | JP1 (abierto) une `5V_FAN` con `VEH5V` — no cerrar |
| `VEH5V` | P2.1 (Mean Well SD-15B-05 externa, ajustada 5.2–5.4 V; unidades medidas 5.25–5.57 V) | C78 220 µF polímero + C30/C31 | 5.25–5.57 V | RS1, divisor PFI, R7/R8 (`5V_SENSE`), R55 (NTC bias), U6 VIN/OVSNS | Lección E-PFI: nunca trabajar el módem sin batería con menos de 5.2 V en P2 |
| `VIN_SW` | `VEH5V` | RS1 **10 mΩ** 1 W (límite de entrada LTC4040 = 25 mV / 10 mΩ = **2.5 A**) | — | Q7 AO4406A (diodo ideal, IGATE U6.15) | V5.5 tenía 8 mΩ (3.1 A > 3 A de la fuente → plegado) |
| `MAIN5V` (VSYS) | Q7 o boost de respaldo de U6 | **U6 LTC4040EUFD** · L6 2.2 µH/8 A · C32/C33/C34 (≥ 100 µF) | = VEH5V − caída, o **4.79 V** en respaldo (R53 499 k / R54 100 k) | P11.1, JP6.1, straps JP2/JP3/JP4 | **PFI 4.44 V** de caída (R51 270 k / R52 100 k); PFO en TP2 |
| `SYS5V` | `MAIN5V` a través de **P11 CUTOFF-SW** (o JP6 puenteado) | — | ≈ MAIN5V | F1/Q1 (etapa RTK), U7 (módem), U12 (Ethernet), D12→U17 (3V3), K1 bobina, R2 | Abrir P11 apaga todo salvo el LTC4040 y el cargador |
| `SW_IN` → `SW_5V` | `SYS5V` | **F1 PPTC BSMD1812-400-12V** (4 A hold / 8 A trip, ≤ 25 mΩ) → **Q1 AO3401A** (compuerta por Q5 ← R1 ← PA1 `PWR_CTRL`, R2 10 k pull-up = OFF por defecto) | ≈ 5.0 V con etapa ON | **MOD1.5** (simpleRTK2B) · C3 220 µF polímero + C40 22 µF | `PWR_CTRL` HIGH = etapa ON. Solo el F9P cuelga de aquí en V5.6 |
| `3V3_MODEM` | `SYS5V` (V5.5: `SW_5V`) | **U7 AP64350SP-13** · L7 4.7 µH/4 A · Cin C119/C120 22 µF + C121 10 µF · FB R60 100 k / R61 31.6 k · comp. Rcomp2 9.1 k / Ccomp2 10 nF / C123 68 pF · Rfreq2 200 k · Cbst2 100 nF · Dbk2 DNP | **3.33 V** (0.8 × (1 + 100/31.6)) | J7.1 / J8.7 (4G NTRIP Master) · C41 22 µF + C122 22 µF + C43 220 µF polímero | **EN = PC3 `MODEM_EN`** por R105 10 k, R106 100 k a GND → módem **apagado** con MCU en reset/DFU. Validar en banco: escalón 0→2 A < 150 mV sin oscilación (Informe §9) |
| `3V3_ETH` | `SYS5V` | **U12 MP1584EN** (EN = VIN: siempre encendido) · L8 10 µH/2 A · D11 SS34 · FB R87 100 k / R88 31.6 k | **3.33 V** (0.8 × (1 + 100/31.6)) | U11 W5500, J10 (TCT/RCT) | Sobrevive los ciclos de la etapa RTK; en batería el W5500 sigue alimentado (por eso R112 lo mantiene en reset) |
| `LDO_IN` → `3V3` | `SYS5V` por **D12** SS34 o `DFU_VBUS` (J11) por **D13** SS34 | **U17 TLV1117LV33** (SOT-223; V5.5: AMS1117-3.3) · C117 · C23/C80… | 3.3 V | MCU, sensores, U10/U13/U14/U15, LEDs, SW2, TP7, P14.1, H4.1, MOD1.2 (IOREF) | TLV1117LV: dropout bajo → 3V3 estable en respaldo (LDO_IN ≈ 4.25–4.65 V); Vin máx 5.5 V |
| `VDDA` | `3V3` | R104 + C109/C112 | 3.3 V | U16 VDDA (ADC) | — |
| `BAT_PLUS` | P4.1 | U6.23 BAT · L6 · C35 · R5/R6 ÷2 → `BAT_SENSE` PA0 | 1S: Li-ion 3.0–4.0 V (V5.5) / LFP 2.5–3.6 V (V5.6) | Boost de respaldo del LTC4040 | Ver §8 |
| `USB_VBUS` | J9 | D19 USBLC6-2SC6 | 5 V del portátil | J7.6 (USB de servicio del módem) | No alimenta la tarjeta |
| `DFU_VBUS` | J11 | D16 PESD5V0S1BA · D13 → `LDO_IN` | 5 V del portátil | Solo el 3V3 (MCU + sensores) | Con USB solo: W5500, módem y F9P sin energía |
### 3.1 Cargador LTC4040 (U6) — parámetros
| Parámetro | Valor V5.6 | Componentes | V5.5 | Fuente |
|---|---|---|---|---|
| Corriente de carga | **1.4 A** (2000 / 1430 ± 5 % → 1.32–1.48 A) | R50 **1.43 k** 1 % (PROG) | 2.42 A (825 Ω) | Informe §10 A-03 |
| Límite de entrada (SYSLIM) | **2.5 A** | RS1 **10 mΩ** 1 % 1 W | 3.1 A (8 mΩ) | Informe §1 |
| Umbral PFI (caída) | **4.44 V** (1.2 V × 3.7) | R51 270 k / R52 100 k | igual | README fw 0.2.1; netlist |
| Voltaje de respaldo (BSTFB = RSTFB) | **4.79 V** | R53 499 k / R54 100 k | igual | Informe §1 (R53 sin cambio) |
| Química / flotación | **LiFePO4 3.50 V** (F2=0, F1=0, F0=1) | JP2 **2-3** (`F2_SEL`→GND) · JP3 1-2 (F1→GND) · JP4 1-2 (F0→MAIN5V) | Li-ion 4.00 V (JP2 1-2) | Informe §9; Review-vs-V5.5 F6 |
| NTC de celda (propiedad del cargador) | Ventana de carga **+10…+60 °C** con NTC **B3380** en el paquete | R55 (RNTB) **5.6 k** 1 % de `VEH5V` a `NTC` (P4.3) | 10 k (Li-ion) | Informe §9 |
| Fin de carga | C/8 (interno LTC4040) | — | — | FACTS |
| CHGOFF | `CHRG_EN` PA8 (HIGH = carga OFF) · R56 100 k a GND | U6.4 | igual | `board_v5.h` |
| CHRG / FAULT | `CHRG_STAT` PB3 · `CHRG_FAULT` PB4, colector abierto, pull-ups R57/R58 100 k (LOW = cargando / falla) | U6.8 / U6.9 | igual | `board_v5.h` |
| BSTOFF / OVSNS / RST | GND / a `VEH5V` (OVP sin uso) / sin conectar | U6.5 / U6.16 / U6.11 | igual | netlist |
| Puntos de prueba | TP1 `CLPROG` (U6.3) · TP2 `PFO` (U6.20) | — | — | netlist |
## 4. Mapa de pines del MCU (U16 STM32F411RET6, LQFP-64)
Fuente: netlist V5.6 + `board_v5.h` (0.6.0). Los pines PC1/PC2/PC3/PC4/PC5/PC7 son nuevos en V5.6 y **aún no tienen `#define` en `board_v5.h`** (0.6.x). ADC = ADC1.
| Pad | Pin | Net | Dirección / periférico | Función | Componentes |
|---|---|---|---|---|---|
| 1 | VBAT | `3V3` | — | Alimentación RTC | — |
| 2 | PC13 | `LED_C13` | OUT, activo bajo | LED azul D17 | R102 1 k a 3V3 |
| 3 / 4 | PC14 / PC15 | `LSE_IN` / `LSE_OUT` | OSC32 | Y4 32.768 kHz | C115 / C116 |
| 5 / 6 | PH0 / PH1 | `HSE_IN` / `HSE_OUT` | OSC | Y3 25 MHz | C113 / C114 |
| 7 | NRST | `NRST` | IN | Reset: SW1, P10, TP5 | C104 |
| 8 | PC0 | `ETH_INT` | IN | INT del W5500 (U11.36) | — |
| 9 | PC1 | `MODEM_RST_MCU` | OUT (open-drain, LOW = reset) | Reset del módem por MCU (**V5.6**) | R107 1 k → `MODEM_RST` (J7.5, SW4G1) |
| 10 | PC2 | `MODEM_LED_MCU` | IN | Lee el LED de asociación del módem (**V5.6**) | R108 10 k ← `MODEM_LED` (J8.8) |
| 11 | PC3 | `MODEM_EN` | OUT | Habilita U7 (riel del módem) (**V5.6**); pull-down R106 → OFF por defecto | R105 10 k → U7.3 |
| 13 | VDDA | `VDDA` | — | Referencia ADC | R104, C109, C112 |
| 14 | PA0 | `BAT_SENSE` | ADC1_IN0 | Voltaje del paquete ÷ 2 | R5 / R6 10 k, C5 |
| 15 | PA1 | `PWR_CTRL` | OUT (HIGH = etapa RTK ON) | Compuerta de Q1 vía R1 1 k / Q5 | R2 10 k pull-up = OFF |
| 16 | PA2 | `GNSS_TX` | USART2_TX | → MOD1.16 (F9P UART1 RX) | — |
| 17 | PA3 | `GNSS_RX` | USART2_RX | ← MOD1.15 (F9P UART1 TX), NMEA | — |
| 20 | PA4 | `5V_SENSE` | ADC1_IN4 | `VEH5V` ÷ 2 | R7 / R8 10 k, C7 |
| 21 | PA5 | `IGN_SENSE` | IN digital (INPUT_PULLDOWN) | Ignición 12–24 V | Rig1 22 k / Rig2 22 k ∥ Rigb1 3.3 k, D5 BAT54, C9 |
| 22 | PA6 | `FAN_PWM` | OUT (HIGH = ventilador ON) | Compuerta de Q2 | Rg1 |
| 23 | PA7 | — | — | Sin conectar | — |
| 24 | PC4 | `MODEM_ON_SLEEP` | IN (**V5.6**, DNP) | XBee ON/SLEEP (J8.3) | R109 10 k DNP |
| 25 | PC5 | `NTC_CELL` | ADC1_IN15 (**V5.6**) | NTC del paquete (`tcell`) | R113 100 k / R114 120 k / C125 10 nF desde P4.3 |
| 26 | PB0 | `EXT_LED` | OUT (HIGH = ON) | LED de panel D1 (P8) vía Q4 | Rled1 10 k |
| 27 | PB1 | `NTC_TEMP` | ADC1_IN9 | NTC de punto caliente (P12): 3V3 – R42 10 k – NTC – GND | C24 |
| 28 | PB2 | `BOOT1_STRAP` | strap | R99 10 k a GND — **no reutilizar** | — |
| 29 | PB10 | — | — | Sin conectar (tacómetro de ventilador, no usado) | — |
| 33 | PB12 | `ETH_CS` | SPI2_NSS (GPIO) | W5500 U11.32 | — |
| 34 | PB13 | `ETH_SCK` | SPI2_SCK | U11.33 | — |
| 35 | PB14 | `ETH_MISO` | SPI2_MISO (entrada, nunca manejar) | U11.34 | — |
| 36 | PB15 | `ETH_MOSI` | SPI2_MOSI | U11.35 | — |
| 37 | PC6 | — | — | Sin conectar (USART6_TX libre) | — |
| 38 | PC7 | `RTCM_TAP` | USART6_RX (**V5.6**, solo escucha) | Copia del flujo RTCM módem → F9P | R111 1 k ← `DOUT_4G` (J7.2 / MOD1.17) |
| 39 / 40 | PC8 / PC9 | — | — | Sin conectar | — |
| 41 | PA8 | `CHRG_EN` | OUT (HIGH = carga OFF) | LTC4040 CHGOFF | R56 100 k a GND |
| 42 | PA9 | `USART1_TX` | USART1_TX | → K1.10 (contacto NO) — inyección `$PHLG` en Modo B | — |
| 43 | PA10 | `USART1_RX` | USART1_RX | ← F9P TX2 (MOD1.23) / K1.1 (COM) — tap del uplink | Rdfu1 |
| 44 / 45 | PA11 / PA12 | `DFU_DM` / `DFU_DP` | USB_OTG_FS | J11 USB-C (DFU + consola CDC) | D15 / D14 PESD5V0S1BA |
| 46 / 49 | PA13 / PA14 | `SWDIO` / `SWCLK` | SWD | TP3 / TP4 | — |
| 50 | PA15 | `ETH_RST` | OUT (LOW = W5500 en reset) | U11.37 | R112 **4.7 k** a GND (**V5.6**) |
| 51–54 | PC10–PC12, PD2 | — | — | Sin conectar | — |
| 55 | PB3 | `CHRG_STAT` | IN (LOW = cargando) | U6.8 | R57 100 k pull-up |
| 56 | PB4 | `CHRG_FAULT` | IN (LOW = falla / pausa NTC) | U6.9 | R58 100 k pull-up |
| 57 | PB5 | `BYP_CTRL` | OUT (HIGH = K1 energizado) | Bobina de K1 vía R40 1 k / Q6 | LOW/reset = K1 NC = F9P → módem directo |
| 58 | PB6 | `I2C_SCL` | I2C1_SCL | Bus de sensores | R30 4.7 k |
| 59 | PB7 | `I2C_SDA` | I2C1_SDA | Bus de sensores | R31 4.7 k |
| 60 | BOOT0 | `BOOT0` | strap | SW2 a 3V3; R98 10 k a GND | — |
| 61 | PB8 | `SER_IRQ` | IN | ~IRQ del SC16IS752 (U10.15) | R81 10 k pull-up |
| 62 | PB9 | — | — | Sin conectar | — |
| 12, 18, 31, 47, 63 | VSS / VSSA | `GND` | — | — | — |
| 19, 32, 48, 64 | VDD | `3V3` | — | — | C105–C108 |
| 30 | VCAP1 | `VCAP1` | — | C111 | — |
## 5. Mapa de direcciones I²C (I2C1, PB6/PB7, 100 kHz, pull-ups 4.7 k)
| Dirección | Ref | Dispositivo | Función | Pin de dirección | Fuente |
|---|---|---|---|---|---|
| 0x20 | U13 | PCF8574 (SOIC-16W) | P0–P3 medidor DB1–DB4 (LOW = ON) · P4–P6 RGB R/G/B en P14 (LOW = ON) · P7 libre (en V5.5/V4: puente 0.5.6 → SW4G1) | A0–A2 = GND | `board_v5.h` |
| 0x44 | U3 | SHT40-AD1B | Temperatura y humedad del aire del gabinete (`tair`, `rh`) | fijo | `board_v5.h` |
| 0x48 | U4 | TMP102 (SOT-563) | Temperatura del cargador (`tbat`/`tchg`) — en V5.6 colocar junto a U6/L6 | ADD0 = GND | Informe §10 / FACTS |
| 0x49 | U18 | TMP102 (SOT-563) | Temperatura del módem — colocar entre J7/J8 y el módulo (**V5.6**) | ADD0 = 3V3 | Informe §2 |
| 0x4D | U10 | SC16IS752IPW (TSSOP-28) | UART dual: canal A → RS-485, canal B → RS-232/TTL; ~IRQ → PB8 | A1 = A0 = GND, pin 9 = VDD (modo I²C) | `board_v5.h` |
## 6. Sensores de temperatura y humedad
| Sensor | Ref / pin | Señal firmware | Qué mide | Rango útil | Fuente |
|---|---|---|---|---|---|
| SHT40 | U3 @0x44 | `tair`, `rh` | Aire dentro del gabinete | −40…+125 °C, 0–100 %RH | `.ino` leyenda |
| TMP102 | U4 @0x48 | `tbat` (0.6.0) / `tchg` (V5.6) | Cargador LTC4040 / bobina L6 | −40…+125 °C | Informe §10 |
| TMP102 | U18 @0x49 | (0.6.x) `tmodem` | Módem 4G | −40…+125 °C | Informe §2 |
| NTC del paquete | P4.3 → U6.17 (LTC4040) y PC5 ADC1_IN15 vía R113/R114/C125 | `tcell` (V5.6, 0.6.x) | Celda del paquete (NTC B3380 en LFP-HT) | Ventana de carga +10…+60 °C (hardware) | netlist; Informe §9 |
| NTC de punto caliente | P12.1 → PB1 ADC1_IN9 (3V3 – R42 10 k – NTC) | `tntc` (`n/c` = sin sonda) | Sonda opcional pegada al punto caliente (módem/batería) | — | `board_v5.h` |
| Sensor interno del MCU | ADC canal de temperatura | `tmcu` / `tc`, `tmax` | Silicio del F411 | — | `.ino` |
| *(eliminado)* | P5 TEMP_PROBE | — | Sonda externa I²C — **no existe en V5.6** | — | Informe §10 |
## 7. Conectores, zócalos, puentes, botones y LEDs
Pinout completo pin a pin (generado de la netlist): [Pinout de arneses y conectores V5.6](v56-pinout.md).
### 7.1 Conectores
| Ref | Tipo | Pines | Función | Notas |
|---|---|---|---|---|
| P1 | Phoenix MKDS 1.5 / 5 pos. 5.00 mm (GX16-5 en el gabinete) | 1 `24V_IN` · 2 `GND` · 3 `IGN_IN` · 4 `GND` · 5 n/c | Entrada de vehículo | Ignición cruda 12–24 V |
| P2 | JST-XH 2 | 1 `VEH5V` · 2 `GND` | 5 V de la SD-15B-05 | Calibre ≥ 3 A |
| P4 | JST-XH 3 | 1 `BAT_PLUS` · 2 `GND` · 3 `NTC` | Paquete 1S + NTC | V5.6: LFP-HT 26650, NTC B3380 |
| P6 | JST-XH 2 | 1 `5V_FAN` · 2 `FAN_RET` | Ventilador 5 V, 2 hilos | Q2 conmuta el retorno |
| P8 | JST-XH 2 | 1 `LED_A` · 2 `LED_K` | LED de panel (cableado en duro, PB0) | Sigue vivo aunque falle el I²C |
| P10 | JST-XH 2 | 1 `NRST` · 2 `GND` | Botón de reset externo | Solo resetea el MCU |
| P11 | JST-XH 2 | 1 `MAIN5V` · 2 `SYS5V` | Interruptor de corte | Abierto = tarjeta apagada (salvo LTC4040) |
| P12 | JST-XH 2 | 1 `NTC_TEMP` · 2 `GND` | NTC de punto caliente | Opcional |
| P14 | JST-XH 4 | 1 `3V3` · 2 `RGBR_K` · 3 `RGBG_K` · 4 `RGBB_K` | LED RGB externo, ánodo común | R89/R90/R91 120 Ω |
| P15 | Phoenix MC 1.5 / 3 pos. 3.5 mm | 1 `RS485_A` · 2 `RS485_B` · 3 `GND` | RS-485 semidúplex (U14 SP3485, canal A de U10) | JP5 = terminación 120 Ω (R82) |
| P16 | Phoenix MC 1.5 / 3 pos. 3.5 mm | 1 `RS232_TX` · 2 `RS232_RX` · 3 `GND` | RS-232 (U15 MAX3232, canal B de U10) | No usar junto con H4 |
| H4 | Header 2.54 mm × 4 | 1 `3V3` · 2 `SER_TXB` · 3 `SER_RXB` · 4 `GND` | Canal B en TTL 3V3 | Mismo canal que P16 |
| J11 | USB-C (GCT USB4085) | D+/D− → PA12/PA11, VBUS → D13 → 3V3 | DFU + consola | ESD D14/D15/D16 |
| J9 | USB-C (GCT USB4085) | D+/D−/VBUS → J7.7/J7.8/J7.6 | USB de servicio del módem | ESD D19 (V5.6). No alimenta la tarjeta |
| J10 | RJ45 HR911105A (magnéticas + LEDs) | TX± U11.1/2, RX± U11.5/6, LEDs LINK/ACT | Ethernet 10/100 | **Sin PoE** (pines 7/8 sin conectar) |
| MOD1 | Zócalo UNO hembra | 5 `SW_5V` · 2 `3V3` (IOREF) · 15/16 UART1 · 17 `DOUT_4G` · 23 `USART1_RX` · GND | simpleRTK2B | Resto sin conectar (indicación ArduSimple) |
| J7 / J8 | Zócalo XBee 2×10, paso 2.00 mm | Ver pinout | 4G NTRIP Master | J8 pad k = pin XBee 21−k |
### 7.2 Puentes de soldadura
| Ref | Default V5.6 | Función | Cuándo cambiarlo |
|---|---|---|---|
| **JP1** | Abierto | `5V_FAN` ↔ `VEH5V` | Nunca en producción (drenaría el riel de la SD-15B / respaldo) |
| **JP2** | **2-3** (`F2_SEL` → GND) = LFP | Strap F2 del LTC4040 | 1-2 (→ `MAIN5V`) = Li-ion 4.00 V. **Debe coincidir con la química del paquete y con R55** |
| **JP3** | 1-2 (`F1_SEL` → GND) = F1:0 | Strap F1 | No cambiar |
| **JP4** | 1-2 (`F0_SEL` → `MAIN5V`) = F0:1 | Strap F0 | No cambiar |
| **JP5** | Abierto | Terminación 120 Ω del RS-485 (R82 entre A y B) | Cerrar solo en el nodo terminal del bus |
| **JP6** | Abierto (**nuevo V5.6**) | Puentea P11 (`MAIN5V` ↔ `SYS5V`) | Cerrar solo en unidades sin interruptor de corte |
### 7.3 Botones
| Ref | Serigrafía | Acción |
|---|---|---|
| SW1 | RESET (MCU) | `NRST` a GND: reinicia solo el MCU (no el módem ni el F9P) |
| SW2 | BOOT0 | `BOOT0` a 3V3: mantener + pulsar SW1 → modo DFU (USB `0483:DF11`) |
| SW4G1 | RESET (módem) | `MODEM_RST` (J7.5) a GND: reinicia el 4G NTRIP Master. En V5.6 el MCU hace lo mismo por PC1/R107 |
### 7.4 LEDs
| Ref | Color / nombre | Control | Significado (fw 0.6.0) |
|---|---|---|---|
| D18 | Verde PWR | R103 1 k desde `3V3` | Hay 3.3 V (USB o SYS5V) |
| D17 | Azul **C13** | PC13, activo bajo | Parpadeo rápido: esperando consola USB (hasta 4 s); después lo maneja el firmware |
| DB1–DB4 | Medidor de batería | U13 P0–P3 (RB1–RB4 120 Ω) | Umbrales **3.60 / 3.75 / 3.90 / 3.97 V** (−0.10 V de histéresis) — calibrados para Li-ion <!-- VERIFICAR: umbrales para LFP pendientes en 0.6.x --> |
| RGB externo (P14) | R/G/B ánodo común | U13 P4–P6 | Verde = RTK fix · Azul = etapa ON sin RTK · Magenta = etapa ON sin NMEA · Amarillo = en batería · Rojo = etapa OFF |
| D1 (P8) | LED de panel | PB0 → Q4 | Indicador de respaldo cableado en duro |
| D4G1 | LED del módem | J8.8 `MODEM_LED` → Rmled1 1 k | Asociación del 4G NTRIP Master (salida 1.8 V → tenue) |
| J10 LINK / ACT | Integrados en el RJ45 | U11.25 / U11.27 (R96/R97) | Enlace / actividad Ethernet |
## 8. Valores máximos y rangos de operación
| Parámetro | Mín | Típ | Máx | Nota / fuente |
|---|---|---|---|---|
| Entrada P1 `24V_IN` | 12 V (ignición) | 24 V | 28 V (U2 MP1584EN V_IN máx); TVS D10 SMBJ33A (V_RWM 33 V) <!-- VERIFICAR: el TVS no protege al MP1584 entre 28 y 33 V --> | netlist; datasheet MP1584 |
| Ignición P1.3 | 12 V | 24 V | 24 V (divisor 22 k / 22 k ∥ 3.3 k → 2.8 V a 24 V; clamp BAT54 a 3V3) | Informe V3+V4 §obs-ign |
| Entrada P2 `VEH5V` | **5.2 V** (regla de banco sin batería) | 5.3 V | **5.5 V** (LTC4040 VIN operativo; U17 Vin máx 5.5 V − D12) | E-PFI; Informe §10 A-08 |
| Corriente de entrada P2 | — | — | 2.5 A (SYSLIM por RS1); fuente SD-15B-05 = 3 A | Informe §1 |
| Paquete P4 | 1S | LFP-HT 26650 (V5.6) / Li-ion 18650 1S4P ≈ 12 Ah (V5.5) | — | FACTS; Informe V3+V4 |
| Voltaje de celda (firmware) | Corte etapa **3.40 V**, rearme **3.70 V** o 5 V presente | — | Flotación 3.50 V (LFP) / 4.00 V (Li-ion) | `.ino` 0.4.0/0.6.0 <!-- VERIFICAR: umbrales 3.40/3.70 V son de Li-ion; para LFP revisar en 0.6.x --> |
| Corriente de carga | 1.32 A | 1.40 A | 1.48 A; inhibida con celda ≥ 45 °C (rearme < 40 °C) por firmware; ventana NTC +10…+60 °C por hardware | Informe §10; `.ino` `CHG_CELL_HOT_C` |
| Riel `3V3_MODEM` | — | 3.33 V | 3.5 A (AP64350) — el módem pide 1–2 A en ráfaga | Informe §1 |
| Riel `SW_5V` | — | 5.0 V | 4 A hold / 8 A trip (F1) | Informe §9 |
| Temperatura — corte térmico de la etapa (fw) | aviso 50 °C | — | corte a **60 °C** en `tbat`/`tntc`, rearme < 55 °C | `.ino` 0.4.0 |
| Temperatura — ventilador en batería (fw) | ON ≥ 48 °C | — | OFF ≤ 45 °C (termostato); con 24 V + ignición: 100 % | `.ino` 0.4.0 |
| Temperatura ambiente de operación de la tarjeta | −20 °C | — | +85 °C (rango de validación de los sensores en el autotest) <!-- VERIFICAR: no hay rango de operación formal declarado en ningún documento del proyecto --> | `.ino` `runTests` |
| USB J11 / J9 | 5 V | — | 5.5 V; ESD PESD5V0S1BA (J11) / USBLC6-2SC6 (J9) | netlist |
| Bus RS-485 | — | — | Terminación 120 Ω opcional (JP5); SP3485 ±7 V modo común (datasheet) | netlist |
## 9. Interfaz de firmware (`hbox_v5_bringup` 0.6.0)
| Ítem | Valor |
|---|---|
| Consola | USB CDC en **J11**, 115200 (el baud no importa en CDC), líneas CR+LF. Primera línea: `hbox_v5_bringup 0.6.0 built …`, luego `board=EinarBoard v5 (HBOX v5)` |
| Compilación | `arduino-cli` STM32duino 3.x, FQBN `GenF4:pnum=GENERIC_F411RETX,usb=CDCgen,xserial=generic,rtlib=nanofp`, `-DHSE_VALUE=25000000UL`; variante Ethernet de banco `-DENABLE_ETH=1` (0.6.0-eth); `-DENABLE_CHARGE=0` = cargador siempre OFF (0.5.x) |
| Flasheo | DFU por J11: SW2 pulsado → SW1 pulsar/soltar → soltar SW2 → `dfu-util -a 0 -s 0x08000000:leave -D hbox-v5-bringup_0.6.0.bin` (o STM32CubeProgrammer, USB, `0x08000000`) |
| Modo por defecto | **AUTO** (flash byte `0x5A` = MANUAL): la etapa se enciende sola 3 s después de haber 5 V en P2; respaldo continuo en batería; reset del MCU al volver el 5 V tras ≥ 10 s de respaldo |
| Watchdog | IWDG 16 s |
### 9.1 Teclas de consola (texto de ayuda `h`)
| Tecla | Acción |
|---|---|
| `r` | Repetir autotest · `g` recorrido del medidor/RGB · `i` escaneo I²C · `s` STAT ahora · `t` `$PHLG` ahora · `l` leyenda · `v` puntos de medición · `h` ayuda |
| `P` + `Y` | Armar (10 s) y confirmar el encendido de la etapa RTK (requiere v5 > 4.5 V); `P` de nuevo = apagar |
| `n` | Monitor NMEA 20 s (fix 4 = RTK FIX) |
| `A` | AUTO / MANUAL (se guarda en flash) |
| `B` | Modo B on/off (K1 + `$PHLG` en banda) |
| `M` | Pulso `MODEM_RST` (V5.5/V4: por U13 P7 y el puente 0.5.6; V5.6: por PC1 en 0.6.x) |
| `R` | Reset del MCU por software |
| `C` | Veto del operador al cargador (el gobernador decide cuándo cargar) |
| `E` | Ethernet on/off (solo build `-DENABLE_ETH=1`) |
### 9.2 Autotest (`---- TESTS ----`, se ejecuta al arrancar)
| Prueba | PASS si |
|---|---|
| `CLOCK_HSE` | SYSCLK = 96 MHz, HSE listo, PLL desde HSE |
| `LSE_Y4` | LSERDY = 1 (Y4 32.768 kHz) |
| `I2C` ×4 | ACK de PCF8574 0x20, SHT40 0x44, TMP102 0x48, SC16IS752 0x4D (+ escaneo 0x08–0x77) <!-- VERIFICAR: 0.6.0 no incluye U18 0x49 en la lista; añadir en 0.6.x --> |
| `TMP102` / `SHT40` | Lectura entre −20 y +85 °C |
| `SC16IS752` | Registro *scratchpad* lee lo escrito (sin *loopback* de canal todavía; previsto 0.6.1) |
| `GAUGE_WALK` | Visual: DB1→DB4 y luego R, G, B |
| `ADC` / `DIN` | Informativos: `vbat v5 ntc mcu` y `ign chrg fault ser_irq eth_int` |
| Resultado | `---- RESULT: n PASS / m FAIL ----` → `>>> BOARD OK` o `>>> BOARD CHECK FAILED` |
### 9.3 Línea `STAT` (cada 5 s)
`STAT up= vbat= v5=(ok|BAJO|no) ign= chrg= flt= tntc= tbat= tair= rh= tmcu= i2cerr= stack= modo= fan= rec= [LIMP] [backup=] [duty=…] carga=FASE [+CALIENTE][+OP] pin= ltc= cortes= modoB= relay= phlg_aire= v5min= vbatmin= bkp= mrst= [eth=… ip= lineas= bytes= drop= conn=] [t_on= nmea= bad= gga= sats= hdop= age= rtcm_age= sta= rtcm_last= sag5= sagb= flat= modem=]`
Fases del gobernador de carga (`carga=`): `HOLDOFF` (< 120 s tras boot/STACK ON) · `NOTRUN` · `BATT` · `WAIT` (riel 4.90–5.05 V) · `PROVING n/30s` · `ON` · `SHED` · `COOLDOWN faltan s`. Umbrales: arranque ≥ 5.05 V estable 30 s, corte < 4.90 V (muestra rápida), enfriamiento 60 s → 30 min, celda ≥ 45 °C inhibe.
### 9.4 Trama `$PHLG` (cada 10 s en consola, cada 30 s en banda; checksum XOR)
Campos 1–24 (formato de flota v3.x, lo lee `htracker/retranslator.py`) + 25–29 (0.5.1, *append-only*):
`fw, state, link, fix_q, sats, rx_count, vbat, v5v, tc, tmax, recoveries, limp, nmea_age_ms, reset, tair, rh, tbat, fan_rpm, fan_pwm, fan_fault, tntc, chg, cflt, rxbad, up_s, pwr(VEH|BATT), v5min, vbat_min, bkp_n`
`state` = `BENCH | RUN | PWRCYC | SLEEP | DUTY` · `link` = `SRCH | DEGR | OK | LIMP` · `chg` = CHRG_STAT real del LTC4040 · `cflt` = CHRG_FAULT (1 con pausa NTC). Eventos en banda: `$PHEV,<up_s>,<CODIGO>,<detalle>*CS`; identificación: `$PHID` (UID, fw, tarjeta, MAC) por Ethernet.
## 10. Cambios V5.5 → V5.6
Fuente: Informe de cambios §1 (tabla antes → después), §2–§3 (partes y pines nuevos), §9 (decisiones cerradas 28-sep tarde) y §10 (hallazgos de la auditoría v6 aplicados 28-sep noche).
| Área | V5.5 (as-fabbed 22-ago) | V5.6 | Refs | Motivo |
|---|---|---|---|---|
| Riel del módem | U7 MP1584EN desde `SW_5V` (tras F1/Q1), EN = VIN | **U7 AP64350SP-13** desde **`SYS5V`**, EN = **PC3 `MODEM_EN`** (R105 10 k, R106 100 k ↓) | U7, L7 4.7 µH/4 A, Cbst2 100 nF, Rcomp2 9.1 k, Ccomp2 10 nF, C123 68 pF, Rfreq2 200 k, C119/C120 22 µF, C121 10 µF, C122 22 µF, Dbk2 DNP | Módem oscuro en batería (MP1584 no arranca a 4.6 V); el MCU puede apagar/encender el módem |
| Control del módem | Solo SW4G1 (V4/V5.5 con puente 0.5.6 a U13 P7) | **PC1 `MODEM_RST`** (R107 1 k) · **PC2 `MODEM_LED`** (R108 10 k) · PC4 `XBEE_ONSLP` (R109 DNP) · **PC7 `RTCM_TAP`** USART6_RX (R111 1 k) | R107–R111 | Reset y diagnóstico del módem desde firmware; escucha de RTCM |
| Capacitores de riel | C3 47 µF elco, C43 100 µF/6.3 V elco, C78 220 µF/10 V elco 85 °C | **C3, C43, C78 = 220 µF/16 V polímero** (Lelon OVZ221M1CTR-0608, C881921) | C3, C43, C78 | Ráfagas LTE; vida a 85 °C en gabinete |
| Cargador | RS1 8 mΩ (3.1 A), R50 825 Ω (2.42 A) | **RS1 10 mΩ/1 W (2.5 A)**, **R50 1.43 k (1.40 A)** | RS1, R50 | La SD-15B (3 A) se plegaba (incidente 10-ago) |
| Química | Li-ion 4.00 V: JP2 1-2, R55 10 k | **LFP 3.50 V: JP2 2-3, R55 5.6 k** (NTC B3380, ventana +10…+60 °C) | JP2, R55 | Paquete LFP-HT 26650 para puertos a 45 °C |
| Fusible etapa | F1 PPTC 3 A (C20627123) | **F1 BSMD1812-400-12V** 4 A/8 A, 25 mΩ | F1 | Caída ≤ 60 mV a 2.5 A |
| Térmico | U4 TMP102 (posición V5.5), sonda externa P5 | **U4 junto a U6/L6 (cargador)**, **U18 TMP102 0x49 junto al módem** (+ C124), **NTC del paquete también a PC5** (R113 100 k / R114 120 k / C125 10 nF), **P5 eliminado** | U4, U18, C124, R113, R114, C125, P5 | Ver el calor donde ocurre; sin sonda externa |
| Ethernet | `ETH_RST` sin pull; C90 10 µF, C91 4.7 µF | **R112 4.7 k** `ETH_RST` → GND; **C90 4.7 µF**, **C91 10 nF** (datasheet W5500) | R112, C90, C91 | W5500 en reset mientras el MCU está en reset (130 mA en batería); valores de datasheet |
| USB módem | Sin ESD en J9 | **D19 USBLC6-2SC6** | D19 | Robustez |
| Corte | Solo P11 | **JP6** en paralelo con P11 (abierto) | JP6 | Unidades sin interruptor |
| LDO 3V3 | U17 AMS1117-3.3 | **U17 TLV1117LV33DCYR** (mismo SOT-223) | U17 | Dropout: 3V3 marginal en respaldo; Iq 0.1 mA |
| BOM / stock | U10 C729142 (15 en stock), R53 C131054 (6), 100 k C103211 | **U10 C57156**, **R53 C177479**, 100 k → **C25803** (1 %, básica) | U10, R53, ×12 | Stock JLC para 30 tarjetas |
| Huella | U15 `SOIC-16W` (campo obsoleto) | U15 **`SOIC-16_3.9x9.9mm`** (la PCB ya la usaba) | U15 | Evitar que *Update PCB* cambie la huella buena |
| Sin cambio (decisión) | R53 499 k (boost 4.79 V), C40 22 µF en `SW_5V`, U12, R60/R61, cristales HC-49, A-11 (R56), D-09, A-13 (PFO al MCU: sin pin libre) | — | — | Informe §6, §9, §10 |
## 11. Pedido y BOM
| Ítem | Dónde |
|---|---|
| BOM V5.6 (94 LCSC, verificados para 30 pzas el 28-sep) | Campo `LCSC` de cada componente en `kicad/hbox-watchdog-v5.kicad_sch` → exportar con `kicad-cli sch export bom` / plugin JLC; guía: `03-Architecture-Hardware/JLCPCB-Order-Guide.md` |
| BOM maestro del gabinete (módulos, fuente, paquete, cables) | `03-Architecture-Hardware/Drogheda-BOM-Maestro.xlsx`, `BOM-master.md`, `Assembly-BOM-Split.md` |
| Pendientes antes de pedir | *Update PCB* + re-ruteo del bloque U7 y 17 huellas nuevas · DRC 0 · auditoría pad-a-pad contra `board_v5.h`/0.6.x · **prueba de Ethernet en una V5.5** (nunca ejercitado en hardware real) · escalón de carga en `3V3_MODEM` · carga LFP a 45 °C sin pausa NTC (Informe §8–§9) |
| Esquemático PDF | `03-Architecture-Hardware/hbox-watchdog-v56-schematic.pdf` |
| Cristal Y2 | Valor en esquemático `1.8432MHz`, LCSC C2238 = X49SM36864MSD2SC-1 (**3.6864 MHz**, que es lo que dice `board_v5.h` y la serigrafía del cristal) <!-- VERIFICAR y corregir el campo Value en el esquemático --> |
## Historial de revisiones
| Versión | Fecha | Cambios |
|---|---|---|
| 1.0 | 2026-09-29 | Primera versión (V5.6 con ECO en esquemático; PCB pendiente) |
Ver también: [manual V5](../manuales/manual-tarjeta-V5.md) · [pinout V5.6](v56-pinout.md) · [informe de cambios](v56-cambios-esquematico.md) · [ECO](v56-eco.md) · [instrucciones de layout](v56-layout-instrucciones.md).

159
docs/hardware/v56-eco.md Normal file
View File

@ -0,0 +1,159 @@
---
title: "EinarBoard V5.6 — ECO (orden de cambio de ingeniería) para el siguiente lote"
tags: [project-drogheda, hardware, einarboard, v5.6, eco, requisitos]
date: 2026-09-27
project: Project Drogheda
author: Helgen Technologies
---
# EinarBoard V5.6 — ECO (orden de cambio de ingeniería) para el siguiente lote
!!! note "EinarBoard V5.6 (`hbox-watchdog-v5`), lote en pedido"
Esta tarjeta es la evolución de la V5.5 fabricada (STM32F411 a bordo + zócalos simpleRTK2B y 4G NTRIP Master). **No es la v6** (GNSS y 4G soldados a bordo, `hbox-watchdog-v6`, en diseño): la v6 tiene su propia sección en el sitio. Cuando este documento dice «copiado de v6» se refiere solo al origen de un valor de componente.
Fecha: 2026-09-27 · Base: `hbox-watchdog-v5` (V5.5, 15 pzas 22-ago, netlist verificada) · Autor: Helgen Technologies (elaborado con asistencia de Claude) para Leo / Michelle (PCB) · Estado: propuesta para aprobar antes de pedir esta semana.
Documentos relacionados: [Informe de cambios al esquemático](v56-cambios-esquematico.md) (lo que se aplicó de esta ECO) · [Instrucciones de layout](v56-layout-instrucciones.md) · [Hoja de datos V5.6](v56-datasheet.md) · [Pinout V5.6](v56-pinout.md).
Arquitectura que no cambia: simpleRTK2B en zócalo UNO (MOD1) + 4G NTRIP Master en zócalo XBee (J7/J8), STM32F411RET6, LTC4040 con paquete 1S4P, W5500, SC16IS752, mismo contorno 140×100 mm, mismo stackup S-G-P-S.
## 0. Qué tiene que poder hacer la V5.6 que la V5.5 no puede
| # | Requisito | Por qué la V5.5 no lo hace (evidencia de banco 26/27-sep) |
|---|---|---|
| R1 | **Ciclo de 10 min en batería**: apagar todo, despertar, registrar el módem, reportar, apagar | El módem no arranca en frío sobre el boost: F9P y módem arrancan juntos por Q1 sobre 4.6 V; U7 MP1584 (mín. 4.5 V) cae en UVLO con la ráfaga de arranque; el PMIC del módem aborta sin reintentar. Solo SW4G1 lo revive. |
| R2 | Control del módem desde el MCU: encender/apagar, resetear, saber si está vivo | `MODEM_RST` solo llega a SW4G1; `MODEM_LED` solo a D4G1; el MCU no ve nada del módem. |
| R3 | **Cargar la batería con la fuente SD-15B (3 A)** sin bucles de brown-out | `RS1` 8 mΩ → límite de entrada 3.1 A > 3 A de la fuente; `R50` 825 Ω → 2.4 A de carga. La fuente se pliega antes de que el LTC4040 recorte al cargador (incidente 10-ago; hoy lo tapa el gobernador 0.6.0 por firmware). |
| R4 | Gestión térmica en puertos a ~45 °C | Ventana de carga del LTC4040 con `RNTB` 10 k pausa en caliente a ~40–42 °C: el paquete no se llena de día. Cobre del boost (`SW_BAT` 0.3 mm) se calienta. Sin temperatura del módem en telemetría. |
| R5 | Lista EMC del segundo lote (auditoría 22-ago) | `SW_BAT` 0.3 mm, `BAT_PLUS` 0.3–0.5 mm, lazos Cin 5–8.5 mm, divisor FB del ventilador a 25 mm, ESD DFU a 41 mm de J11, J9 sin ESD. |
## A. Alimentación del módem — riel propio con margen y enable desde el MCU (R1)
| Cambio | Detalle |
|---|---|
| **U7: MP1584EN → AP64350SP-13** | Buck 3.5 A, **Vin 3.8–40 V** (UVLO 1 V por debajo del riel de batería, contra 0.1 V hoy), SO-8-EP (mismo tamaño que el MP1584, otro pinout → re-layout del bloque). LCSC **C2071691** (~US$0.90, 14 900 en stock). FB = 0.8 V igual que el MP1584 → **R60 100k / R61 31.6k se quedan** (3.33 V). |
| **Entrada de U7: de `SW_5V` a `SYS5V`** | El módem ya no cuelga de Q1 ni de F1: tiene su propio interruptor (EN). Sigue detrás de P11 (cable de corte) para que el corte físico siga apagando todo. Cin: 2 × 22 µF 0805 + 10 µF 1206 pegados a VIN (lazo < 3 mm). |
| **EN de U7 = `MODEM_EN` (MCU PC3, pad 11)** | 10 k en serie desde PC3; **100 k a GND** en el pin EN para que el módem esté APAGADO con el MCU en reset/DFU (mismo criterio que PWR_CTRL). |
| **Salida 3V3_MODEM** | 2 × 22 µF 0805 (C41 + 1 nuevo) + **C43 100 µF electrolítico → 220 µF/16 V polímero 6.3×7.7** (LCSC **C881921**, mismo can): las ráfagas LTE de 2 A las absorbe el condensador, no el riel. |
| **L7 10 µH/2 A → 4.7 µH, Isat ≥ 4 A**, misma huella 8×8 (Bourns SRU8028-4R7Y o equiv.) | Con 2 A de ráfaga el 10 µH/2 A satura. |
| **C3 47 µF electrolítico (SW_5V) → 220 µF/16 V polímero** (C881921) | Riel del F9P: más colchón al arrancar sobre el boost. |
| Opcional **R53 499k → 511k** (LCSC C188257) → boost 4.79 → **4.89 V** | LTC4040 permite 3.5–5.0 V (datasheet confirmada 27-sep). No es necesario con el AP64350; dejar 499k salvo que el banco muestre caídas. **No subir a 523k** (4.98 V, tolerancia del 0.8 V ±2.5 % roza el máximo). |
| Opcional U12 (buck 3V3_ETH, también MP1584 desde SYS5V) → AP64350 | Mismo problema de UVLO, pero Ethernet no se usa en batería. Solo si se quiere una sola referencia de buck. |
**Secuencia que habilita esto (firmware V5.6):** despertar → `PWR_CTRL` alto (F9P arranca, riel se asienta) → 3–5 s → `MODEM_EN` alto (el módem arranca solo, sobre riel estable, con 1 V de margen de UVLO) → registro/NTRIP → reporte → `MODEM_EN` bajo → `PWR_CTRL` bajo. El módem se puede apagar y encender solo, sin tocar al F9P: eso es también el «reset duro del módem» que hoy no existe.
## B. Líneas del módem al MCU (R2)
Pines libres del F411 (netlist V5: pads sin conexión): PC1 (9), PC2 (10), PC3 (11), PC4 (24), PC5 (25), PC6 (37), PC7 (38), PC8–PC12, PD2, PB9, PB10, PA7.
| Neta nueva | MCU | Desde | Resistencia | Uso |
|---|---|---|---|---|
| `MODEM_EN` | **PC3** (pad 11) | U7 EN | 10 k serie + 100 k a GND en EN | Encender/apagar el módem (A). |
| `MODEM_RST_MCU` | **PC1** (pad 9) | `MODEM_RST` (J7.5, con SW4G1 en paralelo) | **1 k** serie | MCU en open-drain: baja 500 ms = pulsar SW4G1. SW4G1 se queda. |
| `MODEM_LED_MCU` | **PC2** (pad 10) | `MODEM_LED` (J8.8, antes de Rmled1) | 10 k serie | Leer el patrón del LED del módem (fijo = arrancando, rápido = normal, lento = comandos, irregular = conectando) → «módem vivo» sin adivinar. D4G1 se queda. |
| `MODEM_ON_SLEEP` | **PC4** (pad 24) | J8.3 (XBee pin 13) | 10 k serie, DNP si el módulo no lo usa | Seguro barato: si ArduSimple saca ON/SLEEP, lo tenemos. |
| `MODEM_ASSOC` | **PC5** (pad 25) | J8.5 (XBee pin 15) | 10 k serie, DNP | Ídem (ASSOC). |
| `RTCM_TAP` | **PC7 = USART6_RX** (pad 38) | `DOUT_4G` (J7.2 → MOD1.17, TX del módem hacia el F9P) | **1 k** serie | El MCU cuenta bytes RTCM que el módem entrega al F9P: «módem registrado y NTRIP fluyendo» medido, no inferido. Solo escucha (entrada alta impedancia en paralelo con RX2 del F9P). |
Todas son nets nuevas de señal 3.3 V, sin condensadores; ruteo corto por Top/In2. `MODEM_RST` y `MODEM_LED` ya existen como nets: solo se les cuelga la resistencia hacia el MCU.
## C. Cargador con la SD-15B (R3)
| Cambio | Valor | Efecto |
|---|---|---|
| **RS1 8 mΩ → 10 mΩ** 1206 1 W 1 % (LCSC **C105362**, FMF06FTHR010) | Límite de entrada 25 mV / 10 mΩ = **2.5 A** | Queda por debajo de los 3 A de la fuente: el LTC4040 recorta al cargador antes de que la SD-15B se pliegue. Fin del bucle 10-ago por hardware; el gobernador 0.6.0 queda como segunda capa. |
| **R50 825 Ω → 1.5 kΩ** 0603 1 % (LCSC **C22843**, básica) | I_chg = 2000 / 1500 = **1.33 A** | 12 Ah se llena en un turno (~9 h desde vacío) sin pedirle 2.4 A a una fuente de 3 A que además alimenta la etapa. El safety timer (4.25 h Li-ion) se rearma por firmware (pulso 0.6.0). |
| P2 / SD-15B | Sin cambio (5.3 V) | Con 2.5 A de límite y 1.33 A de carga, la fuente ya no se satura ni con ráfaga LTE. |
## D. Temperatura (R4)
| Cambio | Detalle | Decisión de Leo |
|---|---|---|
| **D1 — Ventana de carga del LTC4040 (`RNTB`)** | Con `RNTB` 10 k y NTC 10 k B3380/B3950 el LTC4040 **pausa la carga por encima de ~40–42 °C** (umbral caliente 34.9 % de Vin). En puerto a 45 °C el paquete no se llena de día. Dos caminos: (a) paquete **LiFePO4 alta temperatura 26650** (carga 0…+60 °C, ≥2000 ciclos) + `JP2` puenteado 2-3 (F2 bajo = LFP, flotación 3.50 V) + **`RNTB` 5.6 k con NTC B3380** (ventana +10…+60 °C); **(b)** seguir con Li-ion 18650 y aceptar la pausa (o `RNTB` 6.6 k = pausa a 55 °C, que castiga la celda). | Hay que decidir la química: la PCB no cambia (JP2 es puente de soldadura, RNTB es valor de BOM), pero el paquete 26650 cambia caja y BOM mecánica. Recomendación: (a). Si no se decide esta semana, pedir la PCB igual y fijar RNTB/JP2 en ensamble. |
| **D2 — Cobre del boost** (= EMC #1 y #2) | `SW_BAT` ≥ 2 mm polígono, `BAT_PLUS` ≥ 1.5 mm + granja de vías, EP de U6 con ≥ 9 vías térmicas a In1. | Obligatorio. |
| **D3 — Sensor de temperatura del módem: U4b TMP102 (0x49)** | Segundo TMP102 SOT-563 (misma pieza que U4), ADD0 a 3V3 → dirección 0x49, colocado entre J7/J8 y el módem. El módem es la fuente de calor que sube con la ráfaga LTE; hoy `tair` (SHT40) está en la tarjeta, lejos. | Recomendado (US$0.50). Firmware: campo nuevo en `$PHLG` (append). |
| **D4 — Ventilador** | Sin cambio de hardware (2 hilos, Q2 en PA6 = TIM3_CH1: el PWM real es firmware). El buck del ventilador U2 es solo de 24 V: en batería no hay ventilador — con el ciclo de 10 min el calor en batería es bajo. | Firmware. |
| **D5 — `P12` NTC (PB1)** | Dos tarjetas con termistor conectado leen `n/c` (pendiente desde 19-sep). Antes de rediseñar, medir V en P12-1 con el NTC puesto; si el divisor R(10k a 3V3) está bien, es cable/conector. | Verificar en banco antes del pedido. |
## E. Lista EMC del segundo lote (auditoría 22-ago) (R5)
1. 🔴 `SW_BAT` U6-SW → L6: polígono ≥ 2 mm F.Cu (hoy 0.3 mm × 15 mm, ~4 A en respaldo).
2. 🔴 `BAT_PLUS` últimos 20 mm a U6: ≥ 1.5 mm + vías (hoy 0.3–0.5 mm).
3. 🟠 Divisor FB del buck del ventilador (R20/R21) al pin 4 de U2 (hoy a 25 mm, `FB_FAN` 60 mm y rozando `SW_FAN`).
4. 🟠 Lazos Cin de los bucks < 3 mm (U2→C11 6.3, U7→Cin nuevo, U12→C101 8.5).
5. 🟠 ESD DFU D14/D15/D16 junto a J11 (hoy a 41 mm, en el MCU). **J9 (USB del módem): añadir USBLC6-2SC6** en el conector.
6. 🟡 Cristales ≤ 5 mm de sus ICs (Y2 del SC16IS752, Y3/Y4 del MCU); par RX Ethernet acoplado; rellenar las 8 celdas de 20 mm sin vías de costura (bajo MOD1).
## F. Varios de robustez (hallazgos 26/27-sep)
| Cambio | Por qué |
|---|---|
| **F1 PPTC 3 A 1812 → PPTC de menor resistencia** (≥ 4 A hold, ≤ 20 mΩ, p. ej. 1812 6 A) o **0 Ω + protección en Q1** | Con 3 A de hold el PPTC mete 50–100 mΩ en serie con el riel del F9P: 100–200 mV de caída en cada ráfaga, justo sobre el boost. El módem ya no pasa por F1 (A). |
| **P11 con puente de soldadura en paralelo** (`JP_CUT`, abierto por defecto) | Unidades sin cable de corte no dependen de un puente volante en el JST. |
| Serigrafía: `SW4G1 = RESET MÓDEM`, `SW1 = RESET MCU`, `JP2 = F2 (Li-ion / LFP)` | Confusiones de banco esta semana. |
| `ETH_RST` (PA15) con **pull-down 100 k** | Hoy flota cuando el MCU está en reset: el W5500 sale de reset y gasta 130 mA en batería durante los ~4 s del reset. |
## G. Tabla BOM delta
| Ref | V5.5 | V5.6 | LCSC | Nota |
|---|---|---|---|---|
| U7 | MP1584EN | **AP64350SP-13** | C2071691 | SO-8-EP, re-layout |
| L7 | 10 µH/2 A SRU8028 | **4.7 µH ≥ 4 A**, huella 8×8 | (elegir en JLC DB) | |
| C43 | 100 µF/6.3 V elco | **220 µF/16 V polímero** 6.3×7.7 | C881921 | |
| C3 | 47 µF elco | **220 µF/16 V polímero** 6.3×7.7 | C881921 | |
| Cin U7 | C40 22 µF (en SW_5V) | 2 × 22 µF 0805 + 10 µF 1206 **en SYS5V** junto a U7 | C86817 (22 µF ya en BOM) | C40 pasa a ser Cin |
| R_EN | — | 10 k 0603 (PC3→EN) + 100 k 0603 (EN→GND) | básicas | |
| R_RSTM | — | 1 k 0603 (PC1→MODEM_RST) | básica | |
| R_LEDM | — | 10 k 0603 (MODEM_LED→PC2) | básica | |
| R_ONS, R_ASC | — | 10 k 0603 ×2 (J8.3→PC4, J8.5→PC5) | básicas, DNP | |
| R_TAP | — | 1 k 0603 (DOUT_4G→PC7) | básica | |
| R_ETHPD | — | 100 k 0603 (ETH_RST→GND) | básica | |
| RS1 | 8 mΩ 1206 | **10 mΩ 1206 1 W** | C105362 | |
| R50 | 825 Ω | **1.5 kΩ** | C22843 | |
| RNTB | 10 k | 10 k (Li-ion) / **5.6 k** (LFP B3380) | básica | ver D1 |
| R53 | 499k | 499k (opcional 511k) | C188257 | ver A |
| U4b | — | TMP102 SOT-563, ADD0→3V3 | = U4 | D3 |
| D_J9 | — | USBLC6-2SC6 | C7519 | E5 |
| F1 | PPTC 3 A 1812 | PPTC ≥ 4 A / ≤ 20 mΩ | (elegir) | F |
| JP_CUT | — | puente de soldadura 2 pads, abierto | — | F |
## H. Firmware para V5.6 (0.7.0, sobre 0.6.0) — lo que desbloquea el hardware
- `board_v56.h`: `PIN_MODEM_EN PC3`, `PIN_MODEM_RST PC1`, `PIN_MODEM_LED PC2`, `PIN_MODEM_ONSLP PC4`, `PIN_MODEM_ASSOC PC5`, `RTCM_TAP` = USART6 RX PC7.
- `ENABLE_DUTY 1` de fábrica en V5.6: ventana = `PWR_CTRL` → 4 s → `MODEM_EN` → registro (LED del módem en «rápido» o primeros bytes RTCM en PC7) → ≥ 2 `$PHLG` con `pwr=BATT` + fix fresco → `MODEM_EN` bajo → `PWR_CTRL` bajo → 10 min. Sin la ceguera actual: el fin de ventana lo decide `RTCM_TAP`/LED, no un temporizador.
- Módem oscuro en 24 V: `MODEM_RST` 500 ms; si no vuelve, `MODEM_EN` OFF 5 s / ON (reset de alimentación real, sin tocar al F9P). El «modem watch» 0.5.9 pasa de diagnóstico a acción con señales reales.
- Cargador: gobernador 0.6.0 sin cambios (con RS1/R50 nuevos casi nunca corta); umbral térmico de celda según química (Li-ion 45 °C / LFP 55–60 °C) y `SLEEP`/rearme por voltaje re-derivados si LFP (curva plana ~3.2 V).
- `$PHLG`: campos append `tmodem` (U4b), `rtcm_bps`, `modem_led`.
## I. Validación del primer lote V5.6 (banco, 1 unidad, 1 día)
1. Riel del módem: `3V3_MODEM` estable con `MODEM_EN`; osciloscopio en VIN de U7 durante el arranque del módem **en batería a 3.5 V**: sin caída bajo 3.8 V. Módem arranca 10/10 en batería (`P`+`Y` con 24 V quitado).
2. Ciclo 10 min en batería 20 ciclos seguidos (módem registra cada vez; `RTCM_TAP` cuenta bytes; posición en el monitor cada 10 min).
3. Carga: paquete a 3.4 V, 24 V con etapa ON: `ltc=CARGANDO`, corriente de entrada en P2 ≤ 2.5 A con ráfagas LTE (pinza), `cortes=0` en 2 h, safety timer rearma.
4. Térmico: cámara/horno a 45 °C: carga sigue (solo LFP+5.6 k); `tmodem` en `$PHLG`; ventilador por firmware.
5. EMC rápido: caída en `SW_BAT` a 2.5 A en respaldo < 50 mV; temperatura de L6/U6 en respaldo continuo 1 h.
## J. Para pedir esta semana — lista de decisiones
1. Química del paquete (D1): LFP-HT 26650 + JP2 2-3 + RNTB 5.6 k/B3380 — sí/no. (Afecta caja y BOM del paquete, no la PCB.)
2. Tamaño del lote V5.6 y si va con ensamble JLC (todo LCSC arriba) — partes «Extended» nuevas: AP64350, polímero 220 µF, RS1, USBLC6 (US$3 c/u de setup).
3. **R53** se queda en 499k (recomendado).
4. **U12 → AP64350** (opcional, uniformidad) — sí/no.
5. Congelar V5.5 como registro «as-fabbed»: copiar `hbox-watchdog-v5.*` → `hbox-watchdog-v55-PROD.*` (como se hizo con v3-PROD) y editar `hbox-watchdog-v5` como V5.6.
## Orden de trabajo propuesto (esta semana)
| Día | Quién | Qué |
|---|---|---|
| L | Leo | Decisiones J1–J5. Congelar V5.5. |
| L–M | Ingeniería (script con diff y respaldo) + Leo (revisión en KiCad) | Esquemático: bloque U7 nuevo (AP64350, Cin/Cout, EN), 7 resistencias y nets a PC1–PC5/PC7, U4b, D_J9, JP_CUT, valores RS1/R50/RNTB/C3/C43/L7/F1. ERC 0. |
| M–J | Michelle / Leo | PCB: re-layout bloque módem, polígonos SW_BAT/BAT_PLUS, mover FB del ventilador y ESD DFU, 7 pistas nuevas, costura. DRC 0. |
| J | Ingeniería | Auditoría pad-a-pad de la netlist V5.6 contra `board_v56.h` (como el 15-sep) + BOM/CPL. |
| V | Leo | Gerbers + BOM + CPL a JLC. |
## Historial de revisiones
| Versión | Fecha | Cambios |
|---|---|---|
| 1.0 | 2026-09-27 | Propuesta de ECO (requisitos R1–R5, secciones A–J). |
| 1.1 | 2026-09-29 | Enlaces a los documentos que la implementan; sin cambios técnicos. Lo aplicado y las decisiones cerradas están en el informe de cambios §9–§10. |

View File

@ -0,0 +1,97 @@
---
title: "EinarBoard V5.6 — del esquemático a la PCB"
project: Project Drogheda
date: 2026-09-29
tags: [project-drogheda, hardware, kicad, v5.6, layout]
---
# EinarBoard V5.6 — del esquemático a la PCB
!!! note "EinarBoard V5.6 (`hbox-watchdog-v5`), lote en pedido"
Esta tarjeta es la evolución de la V5.5 fabricada (STM32F411 a bordo + zócalos simpleRTK2B y 4G NTRIP Master). **No es la v6** (GNSS y 4G soldados a bordo, `hbox-watchdog-v6`, en diseño): la v6 tiene su propia sección en el sitio. Cuando este documento dice «copiado de v6» se refiere solo al origen de un valor de componente.
Para: Michelle (layout) y Leo (revisión). Proyecto KiCad: `03-Architecture-Hardware/kicad/hbox-watchdog-v5.kicad_pro` (KiCad 10). Ya **no existe** un proyecto `-v56`: la V5.6 se edita en el mismo proyecto; el estado fabricado V5.5 es el tag git `v5.5-as-fabbed`.
Referencias: [Informe de cambios al esquemático](../hardware/v56-cambios-esquematico.md) (qué cambió y por qué, §1–§10) · [ECO V5.6](../hardware/v56-eco.md) (requisitos R1–R5, sección E de EMC) · [Hoja de datos V5.6](v56-datasheet.md) · [Pinout V5.6](v56-pinout.md).
!!! warning "Reglas"
- Trabajar solo en `hbox-watchdog-v5.*`; no tocar `hbox-watchdog-v6.*` ni `v3`/`v4`.
- Commit en el submódulo `kicad` primero, luego el gitlink en el repo padre (guía Git del sitio).
- No ejecutar «Update footprints from library» ni marcar «Replace footprints with those specified in schematic» al actualizar la PCB: las huellas colocadas en la V5.5 son las correctas (RJ45, Phoenix, U15 angosto).
## 1. Esquemático (Leo, 15 min)
1. Abrir `hbox-watchdog-v5.kicad_pro` → eeschema → Guardar una vez (KiCad reescribe el archivo generado por script en formato canónico; el diff en git será grande, es normal).
2. ERC: se espera 1 error preexistente (etiqueta `GND` suelta en 50.8, 25.146 — borrarla deja 0 errores) y los mismos avisos de librería que la V5.5. Ningún aviso nuevo.
3. Revisar visualmente el bloque **U7** (x≈433–475, y≈185–210 mm) y el bloque **«V5.6 ECO (2026-09-28)»** (x 70–210, y 362–580 mm, 5 filas). Los componentes nuevos van por etiquetas: se pueden mover junto a su bloque sin rehacer conexiones.
4. Commit del `.kicad_sch`.
## 2. Update PCB from Schematic (F8)
Resultado esperado del diálogo (sin «replace footprints»):
| Acción | Refs |
|---|---|
| Huella sustituida en su sitio (mismo UUID, pinout distinto → re-rutear) | **U7** → `Drogheda-v6:SO-8_L4.9-W3.9-P1.27-LS6.0-BL-EP` (AP64350) |
| Huella cambiada | **JP2** → `Drogheda:SolderJumper-3_P1.3mm_Bridged23_RoundedPad1.0x1.5mm` (huella del proyecto; puente en 2-3 = LFP) |
| Huellas nuevas (caen en el origen) | C119 C120 C121 C122 C123 C124 **C125** · R105 R106 R107 R108 R109(DNP) R110 ya no existe R111 R112 **R113 R114** · U18 (SOT-563) · D19 (SOT-23-6) · JP6 |
| Huella eliminada | **P5** (TEMP_PROBE, JST XH-4) |
| DNP (quedan en placa, sin pieza) | Dbk2, R109 |
| Sin cambio de huella, solo valor/LCSC | RS1, R50, R53, R55, R112, U10, U15 (campo corregido = huella ya colocada), U17, C3, C43, C78, C90, C91, L7, F1, Cbst2, Rcomp2, Ccomp2, Rfreq2, Y2 |
Antes de F8: hacer `git pull` del repositorio HBox_PCB (trae la huella de JP2 y la tabla de librerías corregida). El log de F8 no debe mostrar «footprint not found»; si aparece, la copia local está desactualizada.
## 3. Layout — en este orden
**A. Térmico del LTC4040 (bloqueante, lección F5)**
1. `SW_BAT` (U6.21/22 → L6.1): polígono en F.Cu **≥ 2 mm**, sin cuellos de 0.3 mm más allá del abanico de los pines.
2. `BAT_PLUS` (P4 → L6.2 → U6.23): **≥ 1.5 mm** + ≥ 4 vías por cambio de capa; sensado del pin 23 como Kelvin desde L6.2/C35.
3. **EP de U6: ≥ 9 vías** 0.3/0.6 mm (3×3, paso 0.9×1.2 mm), conexión sólida a la zona.
4. L6 a ≤ 5 mm de U6; C30/C31 ≤ 3 mm del pin 6; C32/C33/C34 ≤ 2 mm de los pines 1/24.
5. **U4 (TMP102, 0x48) se mueve** desde junto al MCU a **≤ 5 mm del EP de U6**, entre U6 y L6 = sensor del cargador (`tchg`). C124 no es su desacoplo (es de U18): usar el 100 nF que ya tiene U4.
6. In1/In2 sólidos ≥ 5 mm alrededor de U6/L6 (mover `VFB_BST`, `IGATE`, `CHRG_*` de In1).
**B. Bloque U7 (AP64350, módem)**
7. Re-rutear: Cin **C119/C120/C121 < 3 mm** del pin 2 (VIN) con GND al EP; **Cbst2** pegado a pines 1/8; **C123/Rcomp2/Ccomp2** y **Rfreq2** junto a pines 4/6 con retorno a GND corto; EP con vías; L7 ≤ 5 mm del pin 8 (SW); `SW3_NODE` ≤ 25 mm².
8. R60/R61 (FB) ≤ 3 mm del pin 5, lejos del pin 8.
9. **C3 y C43** (220 µF polímero, mismo can 6.3×7.7) en su sitio; C122 (22 µF) junto a C43 en 3V3_MODEM.
C. Piezas nuevas
10. **U18 + C124** entre J7/J8 y el módem (fuente de calor). SOT-563: revisar orientación en 3D.
11. **D19** en la salida D+/D− de **J9** (flow-through), ≤ 3 mm de cobre, vía a GND ≤ 1 mm.
12. **R112 (4.7 k)** junto a U11 pin 37. **R107/R108** cerca de J7/J8; **R111** cerca de J7.2; **R105/R106** junto a U7 pin 3.
13. **R113/R114/C125** (divisor NTC → PC5) junto a P4/R55, pista corta a U16 pin 25.
14. **JP6** junto a P11 (silk «CUTOFF BYPASS — abierto»).
15. **P5 fuera**: liberar el área; no dejar pads huérfanos.
D. EMC (sección E de la ECO)
16. Divisor FB del ventilador (R20/R21) junto al pin 4 de U2; ESD DFU (D14/D15/D16) en línea con J11; cristales ≤ 5 mm de sus ICs; costura de vías bajo MOD1 y en cada isla de GND ≥ 20 mm²; ninguna celda de 20×20 mm sin vía de GND.
17. Cin de cada regulador (U2, U12, U7) con lazo < 3 mm.
E. Serigrafía
18. `SW4G1 = RESET MÓDEM`, `SW1 = RESET MCU`, `SW2 = BOOT0 (DFU)`, `JP2 = QUÍMICA 1-2 Li-ion / 2-3 LFP`, `JP5 = TERM RS-485`, `JP6 = CUTOFF BYPASS`, nombre de función en cada conector (P15 RS-485 A/B/G, P16 RS-232 TX/RX/G, J10 ETH sin PoE). Textos ≥ 0.8 mm / 0.15 mm.
## 4. Salida
19. Rellenar zonas → **DRC = 0 errores**; anchos: ningún aviso en `SW_BAT`, `BAT_PLUS`, `MAIN5V`, `SYS5V`.
20. Exportar PDF de esquemático y capas a `03-Architecture-Hardware/` (`hbox-watchdog-v5_V5.6_*.pdf`).
21. BOM y CPL desde el esquemático (`kicad-cli sch export bom` con el campo `LCSC`, no desde la placa); comprobar: sin `TBD`, DNP marcados (Dbk2, R109), U10 = C57156, R53 = C177479, U15 = C15846 sobre huella angosta.
22. Pedido JLC: lote según Leo; ENIG; verificar stock el día del pedido (U10, R53, C25803 ya son los sustitutos con stock).
23. Commit en `kicad` → gitlink en el padre → avisar a Leo.
## 5. Después de la PCB (no bloquea el pedido)
- Banco en una V5.5: Ethernet con el binario `-eth` ([procedimiento](../procedimientos/v5-prueba-ethernet-serie.md)).
- Firmware 0.6.1: umbrales LFP (indicador, corte 3.40 V → LFP), `tcell` en PC5, `tchg` en U4, autoprueba U18 (0x49), lazo de puertos serie.
- Paquete LFP-HT 26650 con NTC B3380 (caja y BOM mecánica).
## Historial de revisiones
| Versión | Fecha | Cambios |
|---|---|---|
| 1.0 | 2026-09-29 | Primera versión. |

332
docs/hardware/v56-pinout.md Normal file
View File

@ -0,0 +1,332 @@
---
title: "HBOX EinarBoard V5.6 — Pinout de arneses y conectores"
project: Project Drogheda
date: 2026-09-29
version: "1.0"
tags: [project-drogheda, hardware, harness, pinout, einarboard, v5.6]
---
# HBOX EinarBoard V5.6 — Pinout de arneses y conectores
!!! note "EinarBoard V5.6 (`hbox-watchdog-v5`), lote en pedido"
Esta tarjeta es la evolución de la V5.5 fabricada (STM32F411 a bordo + zócalos simpleRTK2B y 4G NTRIP Master). **No es la v6** (GNSS y 4G soldados a bordo, `hbox-watchdog-v6`, en diseño): la v6 tiene su propia sección en el sitio. Cuando este documento dice «copiado de v6» se refiere solo al origen de un valor de componente.
Generado automáticamente desde la netlist del esquemático (independiente de la colocación). `GND` = plano de tierra de la tarjeta; su lista completa de pads se omite. Las nets de potencia van marcadas ⚡ para elegir calibre de cable. Se omiten las banderas `PWR_FLAG` (PFx).
| Netlist | Valor |
|---|---|
| Archivo | `03-Architecture-Hardware/kicad/_to_delete/v56-work-20260928/p5ntc-after.xml` (exportada de `kicad/hbox-watchdog-v5.kicad_sch` con la ECO V5.6 aplicada, Eeschema 10.0.4, 2026-09-28 17:43) |
| SHA-256 | `45d3f034a327f8176bd76bf8d95698e21c3e3f914726b2648fcd80cc538e42a7` |
| Aplica a | **V5.6** (lote por pedir). Para V5.5 as-fabbed (lote 22-ago, 15 pzas) ver la sección «Diferencias V5.5 → V5.6» al final. |
## Resumen de conectores
| Conn | Función | Pines | Tipo (huella) |
|---|---|---|---|
| **P1** | GX16-5 | 5 | `TerminalBlock_Phoenix_MKDS-1,5-5_1x05_P5.00mm_Horizontal` |
| **P2** | 5V-IN-SD15B05 | 2 | `JST_XH_B2B-XH-A_1x02_P2.50mm_Vertical` |
| **P4** | BATT-1S4P+NTC | 3 | `JST_XH_B3B-XH-A_1x03_P2.50mm_Vertical` |
| **P6** | FAN 2-pin | 2 | `JST_XH_B2B-XH-A_1x02_P2.50mm_Vertical` |
| **P8** | PANEL_LED | 2 | `JST_XH_B2B-XH-A_1x02_P2.50mm_Vertical` |
| **P10** | RESET-EXT | 2 | `JST_XH_B2B-XH-A_1x02_P2.50mm_Vertical` |
| **P11** | CUTOFF-SW | 2 | `JST_XH_B2B-XH-A_1x02_P2.50mm_Vertical` |
| **P12** | NTC-HOTSPOT | 2 | `JST_XH_B2B-XH-A_1x02_P2.50mm_Vertical` |
| **P14** | RGB_LED_EXT | 4 | `JST_XH_B4B-XH-A_1x04_P2.50mm_Vertical` |
| **P15** | RS485_OUT | 3 | `PhoenixContact_MC_1,5_3-G-3.5_1x03_P3.50mm_Vertical` |
| **P16** | RS232_OUT | 3 | `PhoenixContact_MC_1,5_3-G-3.5_1x03_P3.50mm_Vertical` |
| **H4** | TTL_UARTB | 4 | `PinHeader_1x04_P2.54mm_Vertical` |
| **J11** | USB-C DFU | 15 | `USB_C_Receptacle_GCT_USB4085` |
| **J9** | USB-C | 15 | `USB_C_Receptacle_GCT_USB4085` |
| **J10** | HR911105A | 13 | `RJ45_Hanrun_HR911105A_Horizontal` |
| **J7** | XBEE-ROW-1 (VCC/DOUT/DIN) | 10 | `PinSocket_1x10_P2.00mm_Vertical` |
| **J8** | XBEE-ROW-2 | 10 | `PinSocket_1x10_P2.00mm_Vertical` |
| **MOD1** | simpleRTK2B-Pro on UNO female headers | 32 | `Arduino_UNO_R3` |
## Conectores de arnés (P)
### P1 — GX16-5
| Pin | Net | Conecta con |
|---|---|---|
| 1 | `24V_IN` ⚡potencia | D10.1, Q10.2 |
| 2 | `GND` | plano de tierra |
| 3 | `IGN_IN` | Rig1.1 |
| 4 | `GND` | plano de tierra |
| 5 | — | *(sin net)* |
### P2 — 5V-IN-SD15B05
| Pin | Net | Conecta con |
|---|---|---|
| 1 | `VEH5V` ⚡potencia | C30.1, C31.1, C78.1, JP1.2, R7.1, R51.1, R55.1, RS1.1, U6.16, U6.6 |
| 2 | `GND` | plano de tierra |
### P4 — BATT-1S4P+NTC
| Pin | Net | Conecta con |
|---|---|---|
| 1 | `BAT_PLUS` ⚡potencia | C35.1, L6.2, R5.1, U6.23 |
| 2 | `GND` | plano de tierra |
| 3 | `NTC` | R55.2, R113.1, U6.17 |
### P6 — FAN 2-pin
| Pin | Net | Conecta con |
|---|---|---|
| 1 | `5V_FAN` ⚡potencia | C23.1, D2.1, JP1.1, L2.2, R20.1 |
| 2 | `FAN_RET` | D2.2, Q2.3 |
### P8 — PANEL_LED
| Pin | Net | Conecta con |
|---|---|---|
| 1 | `LED_A` | D1.2, R3.2 |
| 2 | `LED_K` | D1.1, Q4.3 |
### P10 — RESET-EXT
| Pin | Net | Conecta con |
|---|---|---|
| 1 | `NRST` | C104.1, SW1.1, TP5.1, U16.7 |
| 2 | `GND` | plano de tierra |
### P11 — CUTOFF-SW
| Pin | Net | Conecta con |
|---|---|---|
| 1 | `MAIN5V` ⚡potencia | C32.1, C33.1, C34.1, JP2.1, JP3.3, JP4.1, JP6.1, Q7.5, Q7.6, Q7.7, Q7.8, R53.1, U6.1, U6.24 |
| 2 | `SYS5V` ⚡potencia | C101.1, C119.1, C120.1, C121.1, D6.1, D12.2, F1.1, JP6.2, K1.2, R2.2, U7.2, U12.2, U12.7 |
### P12 — NTC-HOTSPOT
| Pin | Net | Conecta con |
|---|---|---|
| 1 | `NTC_TEMP` | C24.1, R42.2, U16.27 |
| 2 | `GND` | plano de tierra |
### P14 — RGB_LED_EXT
| Pin | Net | Conecta con |
|---|---|---|
| 1 | `3V3` ⚡potencia | C80.1, C81.1, C84.1, C89.1, C105.1, C106.1, C107.1, C108.1, C110.1, C118.1, C124.1, Cu3.1, Cu4.1, D5.1, DB1.2, DB2.2, DB3.2, DB4.2, … (+31) |
| 2 | `RGBR_K` | R89.1 |
| 3 | `RGBG_K` | R90.1 |
| 4 | `RGBB_K` | R91.1 |
### P15 — RS485_OUT
| Pin | Net | Conecta con |
|---|---|---|
| 1 | `RS485_A` | R82.1, U14.6 |
| 2 | `RS485_B` | JP5.2, U14.7 |
| 3 | `GND` | plano de tierra |
### P16 — RS232_OUT
| Pin | Net | Conecta con |
|---|---|---|
| 1 | `RS232_TX` | U15.14 |
| 2 | `RS232_RX` | U15.13 |
| 3 | `GND` | plano de tierra |
### H4 — TTL_UARTB
| Pin | Net | Conecta con |
|---|---|---|
| 1 | `3V3` ⚡potencia | C80.1, C81.1, C84.1, C89.1, C105.1, C106.1, C107.1, C108.1, C110.1, C118.1, C124.1, Cu3.1, Cu4.1, D5.1, DB1.2, DB2.2, DB3.2, DB4.2, … (+31) |
| 2 | `SER_TXB` | U10.23, U15.11 |
| 3 | `SER_RXB` | U10.24, U15.12 |
| 4 | `GND` | plano de tierra |
## Puertos de servicio (USB-C, Ethernet)
### J11 — USB-C DFU
| Pin | Señal | Net | Conecta con |
|---|---|---|---|
| A1 | GND_A1 | `GND` | plano de tierra |
| A4 | VBUS_A4 | `DFU_VBUS` ⚡potencia | D13.2, D16.1 |
| A5 | CC1_A5 | `DFU_CC1` | R100.1 |
| A6 | D+_A6 | `DFU_DP` | D14.1, U16.45 |
| A7 | D-_A7 | `DFU_DM` | D15.1, U16.44 |
| A9 | VBUS_A9 | `DFU_VBUS` ⚡potencia | D13.2, D16.1 |
| A12 | GND_A12 | `GND` | plano de tierra |
| B1 | GND_B1 | `GND` | plano de tierra |
| B4 | VBUS_B4 | `DFU_VBUS` ⚡potencia | D13.2, D16.1 |
| B5 | CC2_B5 | `DFU_CC2` | R101.1 |
| B6 | D+_B6 | `DFU_DP` | D14.1, U16.45 |
| B7 | D-_B7 | `DFU_DM` | D15.1, U16.44 |
| B9 | VBUS_B9 | `DFU_VBUS` ⚡potencia | D13.2, D16.1 |
| B12 | GND_B12 | `GND` | plano de tierra |
| SH | SHIELD_SH | `GND` | plano de tierra |
### J9 — USB-C
| Pin | Señal | Net | Conecta con |
|---|---|---|---|
| A1 | GND_A1 | `GND` | plano de tierra |
| A4 | VBUS_A4 | `USB_VBUS` ⚡potencia | D19.5, J7.6 |
| A5 | CC1_A5 | `USB_CC1` | Rcc1.1 |
| A6 | D+_A6 | `USB_DP` | D19.3, D19.4, J7.7 |
| A7 | D-_A7 | `USB_DM` | D19.1, D19.6, J7.8 |
| A9 | VBUS_A9 | `USB_VBUS` ⚡potencia | D19.5, J7.6 |
| A12 | GND_A12 | `GND` | plano de tierra |
| B1 | GND_B1 | `GND` | plano de tierra |
| B4 | VBUS_B4 | `USB_VBUS` ⚡potencia | D19.5, J7.6 |
| B5 | CC2_B5 | `USB_CC2` | Rcc2.1 |
| B6 | D+_B6 | `USB_DP` | D19.3, D19.4, J7.7 |
| B7 | D-_B7 | `USB_DM` | D19.1, D19.6, J7.8 |
| B9 | VBUS_B9 | `USB_VBUS` ⚡potencia | D19.5, J7.6 |
| B12 | GND_B12 | `GND` | plano de tierra |
| SH | SHIELD_SH | `GND` | plano de tierra |
### J10 — HR911105A
| Pin | Señal | Net | Conecta con |
|---|---|---|---|
| 1 | TD+_1 | `ETH_TXP` | R92.1, U11.2 |
| 2 | TD-_2 | `ETH_TXN` | R93.1, U11.1 |
| 3 | RD+_3 | `ETH_RXP` | R94.1, U11.6 |
| 4 | TCT_4 | `3V3_ETH` ⚡potencia | C92.1, C93.1, C94.1, C98.1, C102.1, C103.1, L8.2, R84.1, R87.1, R92.2, R93.2, R96.2, R97.2, U11.11, U11.15, U11.17, U11.21, U11.28, … (+2) |
| 5 | RCT_5 | `ETH_RCT` | C97.1, R94.2, R95.2 |
| 6 | RD-_6 | `ETH_RXN` | R95.1, U11.5 |
| 7 | NC_7 | — | *(sin net)* |
| 8 | 8 | — | *(sin net)* |
| 9 | 9 | `ETH_LNK_A` | R96.1 |
| 10 | 10 | `ETH_LINKLED` | U11.25 |
| 11 | 11 | `ETH_ACT_A` | R97.1 |
| 12 | 12 | `ETH_ACTLED` | U11.27 |
| SH | SH | `GND` | plano de tierra |
## Zócalos de módulos
### J7 — XBEE-ROW-1 (VCC/DOUT/DIN)
Fila 1 del zócalo XBee (pines 1–10 del módulo, en orden). Módem ArduSimple 4G NTRIP Master.
| Pin | Señal | Net | Conecta con |
|---|---|---|---|
| 1 | Pin_1_1 | `3V3_MODEM` ⚡potencia | C41.1, C43.1, C122.1, J8.7, L7.2, R60.1 |
| 2 | Pin_2_2 | `DOUT_4G` | MOD1.17, R111.2 |
| 3 | Pin_3_3 | `DIN_4G` | K1.5, K1.6 |
| 4 | Pin_4_4 | `GND` | plano de tierra |
| 5 | Pin_5_5 | `MODEM_RST` | R107.2, SW4G1.1 |
| 6 | Pin_6_6 | `USB_VBUS` ⚡potencia | D19.5, J9.A4, J9.A9, J9.B4, J9.B9 |
| 7 | Pin_7_7 | `USB_DP` | D19.3, D19.4, J9.A6, J9.B6 |
| 8 | Pin_8_8 | `USB_DM` | D19.1, D19.6, J9.A7, J9.B7 |
| 9 | Pin_9_9 | — | *(sin net)* |
| 10 | Pin_10_10 | `GND` | plano de tierra |
### J8 — XBEE-ROW-2
Fila 2 del zócalo XBee: **pad k = pin XBee (21 − k)** (espejo; regla verificada en el Informe técnico V3+V4 contra el footprint-R00 de ArduSimple: J8.8 = pin 13 LED, J8.6 = pin 15 GND, J8.10 = pin 11 GND). La net `XBEE_ONSLP` en J8.3 (R109 DNP) corresponde por esa regla al pin XBee 18; el ECO la etiqueta «pin 13 ON/SLEEP». <!-- VERIFICAR contra el datasheet del 4G NTRIP Master antes de poblar R109 -->
| Pin | Señal | Net | Conecta con |
|---|---|---|---|
| 1 | Pin_1_1 | `GND` | plano de tierra |
| 2 | Pin_2_2 | — | *(sin net)* |
| 3 | Pin_3_3 | `XBEE_ONSLP` | R109.2 |
| 4 | Pin_4_4 | — | *(sin net)* |
| 5 | Pin_5_5 | — | *(sin net)* |
| 6 | Pin_6_6 | `GND` | plano de tierra |
| 7 | Pin_7_7 | `3V3_MODEM` ⚡potencia | C41.1, C43.1, C122.1, J7.1, L7.2, R60.1 |
| 8 | Pin_8_8 | `MODEM_LED` | R108.2, Rmled1.1 |
| 9 | Pin_9_9 | — | *(sin net)* |
| 10 | Pin_10_10 | `GND` | plano de tierra |
### MOD1 — simpleRTK2B-Pro on UNO female headers
Zócalo UNO del simpleRTK2B Pro (ArduSimple). Solo se usan 5V, IOREF, GND, D0/D1 (UART1) y D2/D8 (UART2); el resto queda sin conectar por indicación de ArduSimple.
| Pin | Señal | Net | Conecta con |
|---|---|---|---|
| 1 | NC_1 | — | *(sin net)* |
| 2 | IOREF_2 | `3V3` ⚡potencia | C80.1, C81.1, C84.1, C89.1, C105.1, C106.1, C107.1, C108.1, C110.1, C118.1, C124.1, Cu3.1, Cu4.1, D5.1, DB1.2, DB2.2, DB3.2, DB4.2, … (+31) |
| 3 | RESET_3 | — | *(sin net)* |
| 4 | 3V3_OUT_4 | — | *(sin net)* |
| 5 | 5V_5 | `SW_5V` ⚡potencia | C3.1, C40.1, Q1.3 |
| 6 | GND_6 | `GND` | plano de tierra |
| 7 | GND_7 | `GND` | plano de tierra |
| 8 | VIN_8 | — | *(sin net)* |
| 9 | A0_9 | — | *(sin net)* |
| 10 | A1_10 | — | *(sin net)* |
| 11 | A2_11 | — | *(sin net)* |
| 12 | A3_12 | — | *(sin net)* |
| 13 | A4_13 | — | *(sin net)* |
| 14 | A5_14 | — | *(sin net)* |
| 15 | TX1_D0_15 | `GNSS_RX` | U16.17 |
| 16 | RX1_D1_16 | `GNSS_TX` | U16.16 |
| 17 | RX2_D2_17 | `DOUT_4G` | J7.2, R111.2 |
| 18 | D3_18 | — | *(sin net)* |
| 19 | D4_19 | — | *(sin net)* |
| 20 | D5_20 | — | *(sin net)* |
| 21 | D6_21 | — | *(sin net)* |
| 22 | D7_22 | — | *(sin net)* |
| 23 | TX2_D8_23 | `USART1_RX` | K1.1, Rdfu1.1, U16.43 |
| 24 | D9_24 | — | *(sin net)* |
| 25 | D10_25 | — | *(sin net)* |
| 26 | FENCE_D11_26 | — | *(sin net)* |
| 27 | EXTINT_D12_27 | — | *(sin net)* |
| 28 | TPS_D13_28 | — | *(sin net)* |
| 29 | GND_29 | `GND` | plano de tierra |
| 30 | AREF_30 | — | *(sin net)* |
| 31 | SDA_31 | — | *(sin net)* |
| 32 | SCL_32 | — | *(sin net)* |
## Puentes de soldadura
| Ref | Valor (estado por defecto) | Pad 1 | Pad 2 | Pad 3 |
|---|---|---|---|---|
| **JP1** | 0R | `5V_FAN` | `VEH5V` | — |
| **JP2** | F2:LFP (2-3) | `MAIN5V` | `F2_SEL` | `GND` |
| **JP3** | F1:0 | `GND` | `F1_SEL` | `MAIN5V` |
| **JP4** | F0:1 | `MAIN5V` | `F0_SEL` | `GND` |
| **JP5** | RS485_TERM | `RS485_T` | `RS485_B` | — |
| **JP6** | JP_CUT | `MAIN5V` | `SYS5V` | — |
## Botones
| Ref | Serigrafía | Pin 1 | Pin 2 |
|---|---|---|---|
| **SW1** | RESET | `NRST` (C104.1, P10.1, TP5.1, U16.7) | `GND` |
| **SW2** | BOOT0 | `3V3` (C80.1, C81.1, C84.1, C89.1, C105.1, C106.1, C107.1, C108.1, C110.1, C118.1, C124.1, Cu3.1, … (+37)) | `BOOT0` |
| **SW4G1** | RESET | `MODEM_RST` (J7.5, R107.2) | `GND` |
## Puntos de prueba
| Ref | Nombre | Net | Conecta con |
|---|---|---|---|
| **TP1** | CLPROG | `CLPROG_TP` | U6.3 |
| **TP2** | PFO | `PFO_TP` | U6.20 |
| **TP3** | SWDIO | `SWDIO` | U16.46 |
| **TP4** | SWCLK | `SWCLK` | U16.49 |
| **TP5** | NRST | `NRST` | C104.1, P10.1, SW1.1, U16.7 |
| **TP6** | GND | `GND` | plano de tierra |
| **TP7** | 3V3 | `3V3` | C80.1, C81.1, C84.1, C89.1, C105.1, C106.1, C107.1, C108.1, C110.1, C118.1, C124.1, Cu3.1, … (+37) |
## Diferencias V5.5 → V5.6 en conectores (lo que cambia para el arnés)
| Conector | V5.5 (lote 22-ago) | V5.6 | Fuente |
|---|---|---|---|
| **P5** TEMP_PROBE (3V3/GND/SDA/SCL) | Presente | Eliminado — ya no hay sonda externa de T/RH; la temperatura del cargador la mide U4 y la del módem U18 en la tarjeta | Informe de cambios §10 / netlist `p5ntc-after.xml` (sin P5) |
| **P4.3** NTC | Solo al LTC4040 (U6.17) con R55 10 k (Li-ion) | Además al MCU **PC5** por R113 100 k / R114 120 k / C125 10 nF (`NTC_CELL`); R55 **5.6 k** para química **LFP-HT** (NTC B3380) | netlist; Informe §9 |
| **JP2** | `F2:Li-ion` puente 1-2 | **`F2:LFP` puente 2-3** (flotación LiFePO4) | Informe §9 |
| **JP6** | No existía | Nuevo, en paralelo con P11 (`MAIN5V`↔`SYS5V`), abierto — puentear solo si la unidad no lleva interruptor de corte | Informe §2 |
| **J7.2** DOUT_4G | Solo a MOD1.17 | Además al MCU **PC7** (USART6_RX) por R111 1 k — escucha RTCM | Informe §3 |
| **J7.5** MODEM_RST | Solo SW4G1 | Además al MCU **PC1** por R107 1 k | Informe §3 |
| **J8.8** MODEM_LED | Solo Rmled1/D4G1 | Además al MCU **PC2** por R108 10 k | Informe §3 |
| **J8.3** | Sin conexión | `XBEE_ONSLP` → PC4 por R109 10 k DNP | Informe §2–3 |
| **J9** USB-C módem | Sin ESD | **D19 USBLC6-2SC6** en D+/D−/VBUS | Informe §2 |
| **J10** RJ45 | Sin cambio (sin PoE) | Sin cambio; U11 con R112 4.7 k pull-down en `ETH_RST`, C90 4.7 µF, C91 10 nF | Informe §10 |
| **P11** CUTOFF-SW | `MAIN5V`/`SYS5V` | Sin cambio (JP6 lo puentea si se desea) | netlist |
| **P1, P2, P6, P8, P10, P12, P14, P15, P16, J11, MOD1** | — | **Sin cambio** eléctrico | diff de netlist v55-baseline → V5.6 (Informe §4) |
!!! note "P13 (MODO-B-UPLINK) y P3 (RTK2B-UART1)"
Existían en la V3 (`harness-connector-pinout.md`) y **no existen en V4/V5.5/V5.6** (eliminados en V4 junto con H3: el Modo B es permanente por K1). No buscarlos en la tarjeta.
## Historial de revisiones
| Versión | Fecha | Cambios |
|---|---|---|
| 1.0 | 2026-09-29 | Primera versión para V5.6 |

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
---
title: HBOX v6 — Auditoría pre-fabricación y lista de trabajo
title: "HBOX v6 — Auditoría pre-fabricación"
tags: [project-drogheda, hardware, hbox, v6, pcb, auditoria, jlcpcb]
project: Project Drogheda
author: Helgen Technologies
@ -11,53 +11,50 @@ audience: Michelle (layout), Leo
# HBOX v6 — Auditoría pre-fabricación
**Tarjeta:** `hbox-watchdog-v6` (repo **HBox_PCB**) · **Pedido previsto:** 5 prototipos en JLCPCB
(PCB + ensamble) · **Fecha:** 25-sep-2026 · [English version](v6-prefab-audit.md)
!!! warning "EinarBoard v6 (`hbox-watchdog-v6`): en diseño, no se pide"
Diseño nuevo con ZED-F9P y módem A7670SA soldados a bordo. **No es la V5.6** que se manda a fabricar esta semana (`hbox-watchdog-v5`, zócalos para simpleRTK2B y 4G NTRIP Master). Los hallazgos marcados «Impacto en V5.6» ya se aplicaron a la V5.6 y están en su informe de cambios.
!!! danger "Veredicto: TODAVÍA NO se ordena"
Lo que dependía de esquemático, BOM y atributos **ya está resuelto** (sección 2).
Faltan **trabajos de layout** (sección 3, Michelle) y **tres decisiones/compras** (sección 4, Leo).
Cuando Michelle suba su trabajo, Claude repite la auditoría completa y da el **GO** final.
Tarjeta: `hbox-watchdog-v6` (repo HBox_PCB) · Pedido previsto: 5 prototipos en JLCPCB
(PCB + ensamble) · Fecha: 25-sep-2026 · [English version](v6-prefab-audit.md)
**Estado hoy:** DRC **0 errores**, 0 sin conectar, 0 pistas colgando · ERC **0 errores** ·
!!! warning "Veredicto: todavía no se ordena"
Lo que dependía de esquemático, BOM y atributos ya está resuelto (sección 2).
Faltan trabajos de layout (sección 3, Michelle) y tres decisiones/compras (sección 4, Leo).
Cuando Michelle suba su trabajo se repite la auditoría completa y se da el GO final.
Estado hoy: DRC **0 errores**, 0 sin conectar, 0 pistas colgando · ERC **0 errores** ·
BOM: todas las piezas pobladas tienen número LCSC verificado.
---
## 1. ¿Por qué "DRC 0" no basta?
## 1. Por qué "DRC 0" no basta
El DRC solo compara la geometría contra las reglas de separación del propio archivo. **No ve**:
- un regulador conmutado con su diodo a 18 mm (debe estar a ≤ 4 mm),
- una pista de 0.25 mm llevando 2.5 A,
- un regulador conmutado con su diodo a 18 mm (debe estar a ≤ 4 mm),
- una pista de 0.25 mm llevando 2.5 A,
- una pieza sin número LCSC (JLC simplemente **no la coloca**),
- un chip de potencia **sin vías** bajo su pad térmico.
Eso es lo que revisó esta auditoría.
---
## 2. Lo que YA quedó resuelto (no hay que hacer nada)
## 2. Lo que ya quedó resuelto (no hay que hacer nada)
| # | Qué | Detalle |
|---|---|---|
| ✅ | **SIM: el porta-SIM físico es ahora el principal** | Telcel no dará la MFF2. **J14** (nano-SIM JAE, LCSC C2977286) + R131–R134 **se montan**; U22 (MFF2) + R127–R130 quedan **sin montar (DNP)**. La huella de la MFF2 se queda en la tarjeta como opción futura. |
| ✅ | SIM: el porta-SIM físico es ahora el principal | Telcel no dará la MFF2. **J14** (nano-SIM JAE, LCSC C2977286) + R131–R134 se montan; U22 (MFF2) + R127–R130 quedan **sin montar (DNP)**. La huella de la MFF2 se queda en la tarjeta como opción futura. |
| ✅ | **U19 (módem) y L22** marcados SMD | Estaban como "through-hole" y JLC los habría dejado fuera de la línea SMT. Corregido también en la librería. |
| ✅ | **64 piezas sin número LCSC** | Todas con número verificado en la base de JLC (Basic cuando se pudo). JP1–JP5 (puentes de soldadura) fuera del BOM. |
| ✅ | **Fusible de entrada F2** | Ahora es **fusible en porta-fusible**: Littelfuse **0154002.DR** (C206910), bloque SMD 9.7 × 5 mm con fusible NANO2 de 2 A / 125 V. En campo se **saca y se cambia el fusible sin soldar**. *(Falta cambiar la huella en el PCB → tarea M2.)* |
| ✅ | **Barrenos de montaje** | Los 4 en un rectángulo exacto de **130.0 × 90.0 mm**, a 5 mm de cada orilla; nombres únicos MH5–MH8. |
| ✅ | **Fusible de entrada F2** | Ahora es fusible en porta-fusible: Littelfuse **0154002.DR** (C206910), bloque SMD 9.7 × 5 mm con fusible NANO2 de 2 A / 125 V. En campo se saca y se cambia el fusible sin soldar. *(Falta cambiar la huella en el PCB → tarea M2.)* |
| ✅ | Barrenos de montaje | Los 4 en un rectángulo exacto de **130.0 × 90.0 mm**, a 5 mm de cada orilla; nombres únicos MH5–MH8. |
| ✅ | Limpieza | 6 tramos de pista colgando borrados; copias "respaldo" fuera de git; reglas de ancho de potencia en el DRC. |
---
## 3. Lo que falta — lista de trabajo de **Michelle**
!!! warning "Antes de empezar — tres reglas"
1. **Primero `git pull`.** Claude cambió el `.kicad_pcb` hoy (atributos, LCSC, barrenos, fusible).
1. **Primero `git pull`.** El `.kicad_pcb` cambió hoy (atributos, LCSC, barrenos, fusible).
Si trabajas sobre una copia vieja y la guardas, se pierde todo eso.
2. **NO usar "Actualizar PCB desde esquemático"** hasta que Leo decida J10/P11/P12 (sección 4):
los volvería a poner como montados.
3. Si KiCad avisa que el archivo **cambió en disco**, elegir **Recargar**. Nunca guardar encima una copia vieja.
3. Si KiCad avisa que el archivo cambió en disco, elegir Recargar. Nunca guardar encima una copia vieja.
Orden recomendado (de mayor a menor impacto):
@ -68,50 +65,50 @@ Orden recomendado (de mayor a menor impacto):
### M2 · Cambiar la huella de F2 (fusible)
- [ ] En el PCB: clic derecho en **F2** → *Change Footprint…* → `Fuse:Fuseholder_Littelfuse_Nano2_154x`.
- [ ] El bloque mide **9.7 × 5 mm** (antes 4.5 × 3.2). Acomodarlo cerca de donde está (159.5, 127),
entre **P1** (entrada 24 V) y **Q23**. Pistas **/24V_IN** y **/VIN_FUSED** de **≥ 1.5 mm**.
- [ ] Dejar **acceso con pinzas** al fusible (se saca hacia arriba): nada alto a menos de 2 mm de sus lados largos.
- [ ] El bloque mide **9.7 × 5 mm** (antes 4.5 × 3.2). Acomodarlo cerca de donde está (159.5, 127),
entre **P1** (entrada 24 V) y **Q23**. Pistas **/24V_IN** y **/VIN_FUSED** de **≥ 1.5 mm**.
- [ ] Dejar acceso con pinzas al fusible (se saca hacia arriba): nada alto a menos de 2 mm de sus lados largos.
### M3 · Rehacer el grupo del regulador U25 (24 V → 5 V) — **la más importante**
### M3 · Rehacer el grupo del regulador U25 (24 V → 5 V) — **la más importante**
**Problema:** U25 (TPS54360B) está 15 mm al norte de sus piezas de potencia:
Problema: U25 (TPS54360B) está 15 mm al norte de sus piezas de potencia:
| Medida | Hoy | Objetivo |
|---|---|---|
| Diodo **D34** (cátodo) → pin 8 (SW) de U25 | **18.2 mm** | **≤ 4 mm** |
| Capacitores de entrada **C149/C150** → pin 2 (VIN) | 5–8 mm | **≤ 3 mm** |
| Inductor **L22** (pad 1) → pin 8 | **25.9 mm** | ≤ 12 mm (L22 es grande; se acepta) |
| Cobre del nodo SW (pin 8 → D34 → L22) | pista 0.5 mm | **polígono ≥ 2 mm**, lo más corto posible |
| Diodo **D34** (cátodo) → pin 8 (SW) de U25 | **18.2 mm** | **≤ 4 mm** |
| Capacitores de entrada **C149/C150** → pin 2 (VIN) | 5–8 mm | **≤ 3 mm** |
| Inductor **L22** (pad 1) → pin 8 | **25.9 mm** | ≤ 12 mm (L22 es grande; se acepta) |
| Cobre del nodo SW (pin 8 → D34 → L22) | pista 0.5 mm | **polígono ≥ 2 mm**, lo más corto posible |
| Vías GND bajo el pad térmico de U25 | **0** | **≥ 6** (a In1 e In2) |
| R120–R123, C155, C156 (compensación/FB/RT) | cerca | ≤ 5 mm de los pines 3–6, **lejos de SW** |
| R120–R123, C155, C156 (compensación/FB/RT) | cerca | ≤ 5 mm de los pines 3–6, lejos de SW |
<figure markdown>
![Orden correcto del grupo U25](img/u25-lazo-caliente.svg){ width="100%" }
</figure>
**Idea clave:** junto a U25 ya no hay lugar (el cargador U6 y sus piezas ocupan el noreste).
Idea clave: junto a U25 ya no hay lugar (el cargador U6 y sus piezas ocupan el noreste).
Entonces **U25 baja a donde están sus piezas grandes**, en vez de subir las piezas grandes.
Pasos:
- [ ] **Paso 1 — Sacar C151** (electrolítico 100 µF, hoy en 173.75, 123.9). Es solo reserva de
energía: funciona igual a 10–20 mm. Sugerencia: rotado 90°, centrado en ≈ **(169.5, 112)**,
- [ ] **Paso 1 — Sacar C151** (electrolítico 100 µF, hoy en 173.75, 123.9). Es solo reserva de
energía: funciona igual a 10–20 mm. Sugerencia: rotado 90°, centrado en ≈ **(169.5, 112)**,
el hueco que deja U25. Sigue conectado a **/VIN_PROT**.
- [ ] **Paso 2 — Poner U25 donde estaba C151**, centro aprox. **(175.5, 124.5)**, girado para que:
el **pin 8 (SW)** quede en la esquina **más cercana al cátodo de D34** (el pad sur de D34, en 182.5, 126.65),
y el **pin 2 (VIN)** mire al **oeste**.
- [ ] **Paso 3 — C149 y C150 pegados al pin 2 (VIN)**, a ≤ 3 mm, con su lado GND hacia el pad
y el **pin 2 (VIN)** mire al oeste.
- [ ] **Paso 3 — C149 y C150 pegados al pin 2 (VIN)**, a ≤ 3 mm, con su lado GND hacia el pad
térmico de U25. Este es el lazo que radia: **entrada → U25 → D34 → GND → entrada**. Chiquito.
- [ ] **Paso 4 — D34 se queda** donde está (182.5, 123.25). Su **ánodo (GND)** va a la misma isla de
- [ ] **Paso 4 — D34 se queda** donde está (182.5, 123.25). Su ánodo (GND) va a la misma isla de
GND que C149/C150 y el pad de U25.
- [ ] **Paso 5 — L22 se queda.** Unir pin 8 → cátodo de D34 → pad 1 de L22 (193.5, 126.9) con **un
polígono de ≥ 2 mm**. No más ancho de lo necesario (es la parte que "grita").
polígono de ≥ 2 mm**. No más ancho de lo necesario (es la parte que "grita").
- [ ] **Paso 6 — Piezas chicas junto con U25:** C152 (BOOT) entre pin 1 y pin 8; R120, R121, R122, R123,
C155, C156 del lado de los pines 3–6 (**lado silencioso**). El divisor FB (R121/R122) toma el 5 V
**en los capacitores de salida** C153/C154, no en el pad del inductor.
C155, C156 del lado de los pines 3–6 (lado silencioso). El divisor FB (R121/R122) toma el 5 V
en los capacitores de salida C153/C154, no en el pad del inductor.
- [ ] **Paso 7 — Tierra:** una sola isla de GND en F.Cu bajo todo el grupo, **≥ 6 vías bajo el pad
térmico de U25** y 2–3 vías junto al GND de cada capacitor y del ánodo de D34.
- [ ] **Paso 8 — /VIN_PROT** desde Q23 hasta C149/C150: **≥ 1.5 mm** (o polígono).
- [ ] **Paso 8 — /VIN_PROT** desde Q23 hasta C149/C150: **≥ 1.5 mm** (o polígono).
!!! tip "Referencia"
Es el mismo acomodo que el diseño de referencia de TI para el TPS54360 y que la
@ -121,12 +118,12 @@ Pasos:
| Medida | Hoy | Objetivo |
|---|---|---|
| L20 (pad SW) → pin 8 (SW) de U20 | 7.6 mm, pista de **23 mm** a 0.25 mm | **≤ 3 mm**, pista corta **≥ 1 mm** |
| C127 (10 µF) → pin 2 (VIN) de U20 | 5.4 mm | **≤ 3 mm** |
| L20 (pad SW) → pin 8 (SW) de U20 | 7.6 mm, pista de **23 mm** a 0.25 mm | **≤ 3 mm**, pista corta **≥ 1 mm** |
| C127 (10 µF) → pin 2 (VIN) de U20 | 5.4 mm | **≤ 3 mm** |
| Vías GND bajo el pad de U20 | 0 | **≥ 4** |
- [ ] Acercar **L20** al pin 8 de U20 y rutear **/SW_MODEM** directo y ancho.
- [ ] Acercar **C127** al pin 2. (C128 ya está bien, a 2 mm.)
- [ ] Acercar **C127** al pin 2. (C128 ya está bien, a 2 mm.)
- [ ] Vías bajo el pad térmico de U20.
### M5 · Vías bajo los otros chips de potencia
@ -140,56 +137,50 @@ Usa esta tabla (la lista de avisos del DRC está incompleta: no marca SW_BAT ni
| Prioridad | Red | Hoy | Objetivo | Por qué |
|---|---|---|---|---|
| 1 | **/SW_BAT** | 0.25 mm, 12 mm | **≥ 1.0 mm** o polígono | ~2.5 A de batería. Ya se marcó crítica en la v5.5 (0.3 mm); en v6 está más delgada. |
| 2 | **/VEH5V** | cuello 0.25 + 0.5 mm, ~110 mm | **≥ 1.0 mm** | Salida de U25, hasta ~3 A |
| 3 | **/MAIN5V**, **/SYS5V** | 0.25–0.5 mm, 100–150 mm c/u | **≥ 1.0 mm** en el tronco | 5 V principal de toda la tarjeta |
| 4 | **/BAT_PLUS** | 0.25–0.5 mm, 118 mm | **≥ 1.0 mm** | Corriente de batería |
| 5 | **/SW_MODEM** | 0.25 mm, 23 mm | ≥ 1.0 mm **y corta** | Se resuelve con M4 |
| 6 | **/VBAT_MODEM** | cuello 0.25 (1 mm), 0.5 (11 mm) | **≥ 1.0 mm** | Picos de 2 A al transmitir |
| 7 | /VIN_MODEM, /SW_IN, /VIN_SW | 0.25–0.5 mm | ≥ 0.8 mm | Entradas de reguladores |
| — | /VIN_PROT, /SW_PWRIN | 0.5 mm | — | Se resuelven con M3 |
| No | /3V3_ETH, /5V_FAN, /SW_FAN, /FAN_RET | 0.25–0.5 mm | dejar | Menos de 0.3 A |
| 1 | **/SW_BAT** | 0.25 mm, 12 mm | **≥ 1.0 mm** o polígono | ~2.5 A de batería. Ya se marcó crítica en la v5.5 (0.3 mm); en v6 está más delgada. |
| 2 | **/VEH5V** | cuello 0.25 + 0.5 mm, ~110 mm | **≥ 1.0 mm** | Salida de U25, hasta ~3 A |
| 3 | **/MAIN5V**, **/SYS5V** | 0.25–0.5 mm, 100–150 mm c/u | **≥ 1.0 mm** en el tronco | 5 V principal de toda la tarjeta |
| 4 | **/BAT_PLUS** | 0.25–0.5 mm, 118 mm | **≥ 1.0 mm** | Corriente de batería |
| 5 | **/SW_MODEM** | 0.25 mm, 23 mm | ≥ 1.0 mm y corta | Se resuelve con M4 |
| 6 | **/VBAT_MODEM** | cuello 0.25 (1 mm), 0.5 (11 mm) | **≥ 1.0 mm** | Picos de 2 A al transmitir |
| 7 | /VIN_MODEM, /SW_IN, /VIN_SW | 0.25–0.5 mm | ≥ 0.8 mm | Entradas de reguladores |
| — | /VIN_PROT, /SW_PWRIN | 0.5 mm | — | Se resuelven con M3 |
| No | /3V3_ETH, /5V_FAN, /SW_FAN, /FAN_RET | 0.25–0.5 mm | dejar | Menos de 0.3 A |
- [ ] Prioridades 1 a 7.
### M7 · Cerrar
- [ ] **Rellenar zonas** (tecla **B**) — los barrenos se movieron y el relleno es viejo.
- [ ] Rellenar zonas (tecla B) — los barrenos se movieron y el relleno es viejo.
- [ ] **DRC → 0 errores.** (Los avisos amarillos de ancho de pista que queden en redes "No" de la tabla están bien.)
- [ ] Revisar en el visor 3D que **J14** (porta-SIM) tenga el frente libre: la tarjeta entra por un
extremo corto; confirmar cuál en el dibujo de JAE y dejar ~6 mm libres enfrente.
- [ ] `git add` + `commit` + `push` (sección 6) y **avisar a Leo**.
---
extremo corto; confirmar cuál en el dibujo de JAE y dejar ~6 mm libres enfrente.
- [ ] `git add` + `commit` + `push` (sección 6) y avisar a Leo.
## 4. Lo que falta — **Leo**
- [ ] **Pre-ordenar J14** (C2977286) en la cuenta de JLC: es parte "Pre-ordered", sin eso no la colocan.
- [ ] **Decidir J10 (RJ45), P11 y P12:** ¿se montan en esta corrida? Hoy están DNP solo en el PCB.
- [ ] **Revisar las piezas donde la elección importa:** L20 Sunlord MWSA0804S-4R7MT (C17700167; checar que sus pads
- [ ] Revisar las piezas donde la elección importa: L20 Sunlord MWSA0804S-4R7MT (C17700167; checar que sus pads
entren en la huella SRU8028), L21 Murata LQG18HN68NJ00D (C162555, choke de la antena GNSS),
C149/C150 2.2 µF 100 V (C153036), C151 Nichicon 100 µF 50 V (C116241), RS1 10 mΩ 1 W (C105362),
C149/C150 2.2 µF 100 V (C153036), C151 Nichicon 100 µF 50 V (C116241), RS1 10 mΩ 1 W (C105362),
F2 0154002.DR (C206910).
---
## 5. Parámetros del pedido en JLCPCB (cuando haya GO)
| Opción | Valor |
|---|---|
| Capas / espesor | 4 capas, 1.6 mm, stackup **JLC04161H-7628** |
| Capas / espesor | 4 capas, 1.6 mm, stackup **JLC04161H-7628** |
| Acabado | **ENIG** (obligatorio por los módulos LGA U19 y U18) |
| Ensamble | **Standard PCBA**, solo lado superior |
| Ensamble | Standard PCBA, solo lado superior |
| Rayos X | Pedir en **U19** (A7670SA) y **U18** (ZED-F9P) |
| Pre-orden | **J14 C2977286** antes del pedido |
| Piezas through-hole | H4, J9, J11, K1, P1–P10, SW1, SW2 (16): soldar a mano en 5 piezas es razonable |
| Archivos | BOM/CPL generados **del PCB** (Fabrication Toolkit). Revisar rotaciones en la vista previa de JLC: U19, U18, J14, SOT-23 |
---
| Archivos | BOM/CPL generados del PCB (Fabrication Toolkit). Revisar rotaciones en la vista previa de JLC: U19, U18, J14, SOT-23 |
## 6. Comandos de git
**Michelle** (clon de HBox_PCB):
Michelle (clon de HBox_PCB):
```bash
git pull
@ -199,20 +190,25 @@ git commit -m "v6 layout: U25/U20 regrouped, thermal vias, power widths, F2 hold
git push
```
**Leo** (proyecto Drogheda, después de que Michelle suba):
Leo (proyecto Drogheda, después de que Michelle suba):
```bash
cd ~/Documents/Claude/Projects/Drogheda/03-Architecture-Hardware/kicad && git pull helgen main
cd ~/Documents/Claude/Projects/Drogheda && git add 03-Architecture-Hardware/kicad && git commit -m "bump kicad" && git push
```
---
## 7. Historial de cambios de esta auditoría (HBox_PCB)
| Commit | Qué |
|---|---|
| `bb78cb8` · `0288bd0` | T14: J14 principal, U22 DNP, errores ERC corregidos, LCSC de J14 |
| `91d2049` · `8a49327` | T15: LCSC en 64 piezas, JP fuera del BOM, SIM + U19/L22 en el PCB, pistas colgando, avisos de ancho; librería |
| `61652cc` | T16: barrenos 130 × 90 mm, MH5–MH8 |
| `61652cc` | T16: barrenos 130 × 90 mm, MH5–MH8 |
| `d2db77f` · `03d83d1` | T17: fusible F2 → porta-fusible 0154002.DR |
## Historial de revisiones
| Versión | Fecha | Cambios |
|---|---|---|
| 1.0 | 2026-09-25 | Auditoría pre-fabricación v6 y lista de trabajo. |
| 1.1 | 2026-09-29 | Presentación: vocabulario de avisos. Sin cambios técnicos. |

View File

@ -0,0 +1,448 @@
---
title: "EinarBoard v6 — Informe de cambios al esquemático"
tags: [project-drogheda, hardware, einarboard, v6, esquematico, auditoria, kicad]
date: 2026-09-28
project: Project Drogheda
author: Helgen Technologies
---
# EinarBoard v6 — Informe de cambios al esquemático
!!! warning "EinarBoard v6 (`hbox-watchdog-v6`): en diseño, no se pide"
Diseño nuevo con ZED-F9P y módem A7670SA soldados a bordo. **No es la V5.6** que se manda a fabricar esta semana (`hbox-watchdog-v5`, zócalos para simpleRTK2B y 4G NTRIP Master). Los hallazgos marcados «Impacto en V5.6» ya se aplicaron a la V5.6 y están en su informe de cambios.
Fecha: 2026-09-28 · Proyecto: `kicad/hbox-watchdog-v6.*`, editado en su lugar (D17) · Implementa: [Auditoría completa v6](v6-auditoria-completa.md) §7.1 (Bloqueantes), §7.2 (Mayores), §7.3 Menores según D19, y las reglas de proyecto F-01 / D18 · Decisiones: `DECISIONS.md` D1–D19 (tomadas por delegación de Leo) · Autor: Helgen Technologies (elaborado con asistencia de Claude; ediciones por script sobre el texto S-expression con guarda de UUID; KiCad MCP solo para netlist, ERC, PDF, BOM, DRC y consultas de librería) · Estado: esquemático, reglas de proyecto y librería listos; **`hbox-watchdog-v6.kicad_pcb` no se tocó** (Michelle ejecuta *Update PCB from Schematic*, §10).
Traducido del original en inglés (28-sep-2026).
## Resumen
Se aplicaron al esquemático de v6 todos los Bloqueantes y Mayores de la auditoría que son de esquemático, y los Menores de la lista D19. El módem (U20) ahora se alimenta sólo de MAIN5V (D20/D21 eliminados), el ventilador sale de VEH5V (bloque U2 y rama Q10 en DNP) y F2 (3 A) queda antes de D10. Se añadieron limitador de antena GNSS (TPS2552), TVS en ignición, sensores TMP102 del cargador (0x48) y del módem (0x49), buffer U27 hacia el F9P, ESD en J9 y en P6/P7/P8, y se corrigieron valores (R50 1.43 k, R121 57.6 k, compensación de U20, cristales). Cada grupo se comprobó con un diff de netlist: lo esperado coincide exactamente con lo obtenido (137 cambios de componentes/campos/pines + 16 cambios de clase de red). ERC: **0 errores** (166 → 134 avisos, todos explicados). El PCB no se tocó; Michelle debe ejecutar *Update PCB* marcando «Delete footprints with no symbols».
## 0. Tabla resumen
| Ítem | Resultado |
|---|---|
| Archivos editados en su lugar | `hbox-watchdog-v6.kicad_sch`, `hbox-watchdog-v6.kicad_pro` (solo clases de red), `hbox-watchdog-v6.kicad_dru`, `Drogheda-v6.pretty/SO-8_L4.9-W3.9-P1.27-LS6.0-BL-EP.kicad_mod` |
| `hbox-watchdog-v6.kicad_pcb` | Byte-idéntico (SHA-256 `6ddec80d…` antes y después) |
| Cambios aplicados | Grupo 1 Bloqueantes: 10 hallazgos · Grupo 2 Mayores: 13 · Grupo 3 Menores: 19 (lista D19) · Grupo 4 reglas/librería: F-01, H-04 |
| Partes | **37 añadidas** (U27–U31, R135–R144, C161–C174, D35–D38, TP9–TP11, JP6), **3 eliminadas** (D20, D21, PWR_FLAG PF15), **17 puestas en DNP**, 1 símbolo sustituido (Y3 → `Device:Crystal_GND24`) |
| Prueba por netlist | En cada grupo: esperado == obtenido (0 inesperados, 0 faltantes). Línea base → final: 37 añadidos / 3 eliminados / 125 campos / 22 pin-net / 16 clases de red; la composición de las expectativas por grupo = netlist final con **0 diferencias** (`netlist_diff_total.md`) |
| ERC (kicad-cli 10.0.4) | **0 errores** antes y después · avisos 166 → 134 (§5) |
| Solapes / cruces de cables | 30 → 30 solapes (todos preexistentes, por caja envolvente) · 8 → 9 cruces de cable (+1 es un artefacto de caja envolvente de la herramienta en U30, comprobado en el PDF) |
| BOM | Toda parte poblada tiene número LCSC salvo los pads de cobre preexistentes TP1–TP8 (sin cambio). Los pads nuevos TP9–TP11 y JP6 quedan fuera del BOM |
| PDF | `03-Architecture-Hardware/hbox-watchdog-v6-schematic.pdf` |
## 1. Integridad de archivos
Los hashes SHA-256 de cada archivo antes y después están en el anexo de trazabilidad. Comprobación previa: los hashes de sch y pro coincidían con la línea base de la auditoría; no había `~hbox-watchdog-v6.*.lck` (solo existen los bloqueos de v5). No se ejecutó `git` en la carpeta montada.
## 2. Cambios por hallazgo
Método: cada edición es un empalme sobre el texto original, acotado a un nodo S-expression (valor de propiedad, átomo de bandera, nombre de etiqueta, punto de cable, o el nodo completo en las eliminaciones). Antes de escribir, una guarda compara el multiconjunto de UUID: ningún UUID preexistente puede desaparecer o cambiar salvo en los elementos eliminados a propósito, y no pueden aparecer duplicados nuevos. Todos los bytes no tocados quedan idénticos. Los símbolos, cables y etiquetas nuevos se escriben en el formato canónico de KiCad; cada parte nueva se cablea con un cable de 2.54 mm a una etiqueta local con el nombre exacto de la net existente (etiquetas `GND` locales, como en el resto de la hoja). El único símbolo de librería no estándar es el TPS2552 (§7).
### 2.1 Bloqueantes (§7.1)
| Hallazgo | Ref | De → A | LCSC | Pines / nets |
|---|---|---|---|---|
| A-01 | D20 | SS34 (C8678) → eliminado | — | sus etiquetas `VIN_MODEM` (K) y `24V` (A) borradas |
| A-01 | D21 | PMEG3050EP (C50603) → eliminado | — | sus etiquetas `VIN_MODEM` (K) y `MAIN5V` (A) borradas |
| A-01 | PF15 | PWR_FLAG en `/VIN_MODEM` → eliminado con su etiqueta | — | la net ya no existe; PF2 ya marca `/MAIN5V` |
| A-01 | U20.2, C127.1, C128.1 | `/VIN_MODEM` → **`/MAIN5V`** (etiquetas renombradas) | — | no queda ninguna etiqueta `VIN_MODEM` (6 de 6 atendidas) |
| A-01 | U2, L2, Dbk1, Cbst1, Rcomp1, Ccomp1, Rfreq1, Ren1, Ren2, R20, R21 | montado → DNP | sin cambio | el ventilador ahora sale de `/VEH5V` vía JP1 |
| A-01 | JP1 | `…SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mm` → **`Jumper:SolderJumper-2_P1.3mm_Bridged_RoundedPad1.0x1.5mm`** | sin parte | `/5V_FAN` = `/VEH5V` en cobre (huella tipo net-tie) |
| A-01 | Q10, DzG1, Rrp1, C10, C11, C22 | montado → DNP | sin cambio | cargas de `/24V` revisadas primero: {C10, C11, C22, D20, DzG1, Q10, Ren1, U2} + PF6 virtual → no queda nada montado |
| A-01 + V1-01 | F2 | `2A/125V-NANO2-in-holder` C206910 → **`3A/125V-NANO2-in-holder`**, MPN 0154003.DR, Littelfuse; misma huella de portafusible | **C206912** | P1.1 → F2 → `/VIN_FUSED` |
| V1-01 | D10 | pin 1 en `/24V_IN` → **`/VIN_FUSED`** | C224019 (sin cambio) | `/VIN_FUSED` = {F2.2, D10.1, Q23.2}; topología en §8 |
| A-03 | R50 | 825R/1% C50214 → **1.43k/1%** | **C22840** | 1.316–1.483 A |
| B-03 | D28 | ESD9L5.0ST5G C82326, SOD-923 → **PESD0402-240**, `Diode_SMD:D_0402_1005Metric`, Littelfuse | **C1975527** | pin 1 `/RF_ANT_LTE`, pin 2 GND (símbolo conservado; pines 1/2 mapean a los pads 0402) |
| C-01 | **U28 (nuevo)** | TPS2552DBVR, SOT-23-6 | **C46506** | 1 IN `/3V3_GNSS` · 2 GND · 3 ~EN `/GNSS_ANT_OFF` · 4 ~FAULT `/GNSS_ANT_SHORT_N` · 5 ILIM `/3V3_GNSS` (75 mA) · 6 OUT **`/ANT_BIAS`** |
| C-01 | **R135 (nuevo)** | 100k, ~EN → GND (antena encendida por omisión) | C25803 | `/GNSS_ANT_OFF` – GND |
| C-01 | **R136 (nuevo)** | 10k, pull-up de FAULT | C25804 | `/3V3_GNSS` – `/GNSS_ANT_SHORT_N` |
| C-01 | L21.2, C144.1, C145.1 | `/VCC_RF_GNSS` → **`/ANT_BIAS`** | sin cambio | |
| C-01 | U18.7 VCC_RF | `/VCC_RF_GNSS` → NC (etiqueta borrada, bandera no-connect añadida) | — | |
| C-01 | U18.5 ANT_OFF | bandera NC → etiqueta **`/GNSS_ANT_OFF`** | — | |
| F-02 | **D35 (nuevo)** | SMBJ33A, `Diode_SMD:D_SMB` (mismo símbolo que D10) | **C224019** | 1 (cátodo) `/IGN_IN`, 2 GND; colocar en P1.3 |
| F-02 | Rig1 | sin cambio (22k C88614); moverlo a P1.3 es layout | — | `/IGN_IN` = {P1.3, Rig1.1, D35.1} |
| H-01 | U15 | `Package_SO:SOIC-16W_7.5x10.3mm_P1.27mm` → **`Package_SO:SOIC-16_3.9x9.9mm_P1.27mm`** | C15846 (sin cambio) | |
| H-02 | U10 | C729142 (SC16IS762) → **C57156**, MPN SC16IS752IPW,128 (el valor ya era SC16IS752IPW; símbolo conservado) | **C57156** | pinout idéntico |
| H-02 | R53 | 499k/1% C131054 → mismo valor, MPN RCT03499KFLF, HKR | **C177479** | |
| H-04 | U25 | sin `LCSC Part` en el símbolo del esquemático; el campo venía de la huella de librería → eliminado ahí (§7) | C524806 | |
| F-01 | proyecto | clases de red + `.kicad_dru` (§6) | — | |
| G-01 | MH4 + par de disipador | **no aplicado** — solo tarjeta (§10) | — | |
### 2.2 Mayores (§7.2)
| Hallazgo | Ref | De → A | LCSC | Pines / nets |
|---|---|---|---|---|
| A-04 | R121 | 53.6k/1% C23074 → **57.6k/1%** | **C23082** | U25 5.18/5.32/5.46 V |
| A-05 | **C161, C162 (nuevos)** | 47uF X7R 1210 | **C5440143** | `/MAIN5V` – GND (en U6 VSYS 1/24) |
| A-08 | U17 | AMS1117-3.3 C6186 → **TLV1117LV33DCYR** (TI); símbolo `Regulator_Linear:AMS1117-3.3` conservado (mismo 1 GND / 2 OUT / 3 IN, lengüeta = OUT) | **C15578** | pines sin cambio |
| A-09 | C78 | 220uF/10V MVG C2827940 → **220uF/16V polímero**, Lelon OVZ221M1CTR-0608, misma CP_Elec_6.3x7.7 | **C881921** | pin 1 `/VEH5V` = pad + |
| B-02 | C130, C131 | igual que C78 → **220uF/16V polímero** | **C881921** | |
| B-02 | R116 | 14k C22803 → **113k/1%** | **C22862** | |
| B-02 | C141 | 3.3nF C1536 → **6.8nF** X7R 0402 | **C1542** | |
| B-02 | C142 | 47pF C1567 → **56pF** C0G 0402 | **C1572** | |
| B-02 | **C166, C167 (nuevos)** | 22uF 16 V X5R 0805 | **C86817** | `/VBAT_MODEM` – GND (en L20.2) |
| F-03 | **C163, C164 (nuevos)** | 22uF 16 V 0805 | **C86817** | `/MAIN5V` – GND (en U20.2) |
| F-03 | **C165 (nuevo)** | 220uF/16V polímero, `Device:C_Polarized`, CP_Elec_6.3x7.7 | **C881921** | 1 (+) `/MAIN5V`, 2 GND |
| F-51 | **U29 (nuevo)** | TMP102AIDRLR, SOT-563, **I²C 0x48** | **C99269** | 1 SCL `/I2C_SCL` · 2 GND · 3 ALERT NC · 4 ADD0 GND · 5 V+ `/3V3` · 6 SDA `/I2C_SDA` |
| F-51 | **C168 (nuevo)** | 100nF 0603 | C14663 | `/3V3` – GND |
| F-51 | **R137 / R138 / C169 (nuevos)** | 100k/1% arriba · 120k/1% abajo · 10nF 0603 | C25803 · **C25808** · C1589 | `/NTC` → R137 → **`/NTC_CELL`** → R138/C169 → GND |
| F-51 | U16.25 PC5 | bandera NC → etiqueta **`/NTC_CELL`** (ADC1_IN15) | — | |
| C-02 | U21 | AP2112K-3.3 C51118 → **TPS7A2033PDBVR** (TI); símbolo `Drogheda-sym:LDO_SOT23-5` conservado (su pinout genérico 1 VIN / 2 GND / 3 EN / 4 NC / 5 VOUT es el del TPS7A20 DBV) | **C2862740** | pines sin cambio |
| E-01 | U12.2 EN | `/SYS5V` → **`/ETH_PWR_EN`** (etiqueta renombrada; U12.7 VIN sigue en `/SYS5V`) | — | |
| E-01 | U16.54 PD2 | bandera NC → etiqueta **`/ETH_PWR_EN`** | — | |
| E-01 | **R139 (nuevo)** | 100k PD | C25803 | `/ETH_PWR_EN` – GND |
| E-02 | **R140 (nuevo)** | 4.7k | **C23162** | `/ETH_RST` – GND (en U11.37) |
| D-01 | **U27 (nuevo)** | 74LVC1G125GV,125 (Nexperia), SOT-753 sobre `Package_TO_SOT_SMD:SOT-23-5` (mismo land SC-74A) | **C12518** | 1 ~OE GND · 2 A `/DOUT_4G` · 3 GND · 4 Y **`/DOUT_4G_F9P`** · 5 VCC `/3V3_GNSS` |
| D-01 | **C170 (nuevo)** | 100nF 0603 | C14663 | `/3V3_GNSS` – GND |
| D-01 | U18.26 RXD2 | `/DOUT_4G` → **`/DOUT_4G_F9P`** | — | PC7/R106 siguen en `/DOUT_4G` |
| D-01 | Rdfu1 | 22k C88614 → **100k** | **C25803** | |
| G-02 | **U30 (nuevo)** | USBLC6-2SC6, SOT-23-6 | **C7519** | 1,6 `/USB_DM` · 3,4 `/USB_DP` · 5 `/USB_VBUS` · 2 GND |
| H-02b | R56, R57, R58, R85, R87, Rgs1 | C103211 (100k 5 %) → **C25803** (100k 1 %) | **C25803** | texto de valor conservado `100k`. R20/Ren1/Rfreq1 sin cambio (el bloque U2 es DNP) |
| V1-01, F-12, F-05, F-06, C-04, A-07, A-02 | — | solo layout → §10 | | |
### 2.3 Menores (lista D19)
| Hallazgo | Ref | De → A | LCSC | Pines / nets |
|---|---|---|---|---|
| A-11 | R56.2 | GND → **`/3V3` (etiqueta renombrada): CHGOFF con pull-up → cargador apagado** sin MCU | C25803 | |
| A-13 | U6.20, TP2.1 | `/PFO_TP` → **`/PFO`** (etiquetas renombradas) | — | |
| A-13 | U16.29 PB10 | bandera NC → etiqueta **`/PFO`** | — | |
| A-13 | **R141 (nuevo)** | 100k PU | C25803 | `/3V3` – `/PFO` |
| B-09 | R132, R133, R134 | 0R C304185 → **22R** | **C23345** | R131 (VDD) sigue en 0R |
| B-09 | **C171 (nuevo)** | 100nF 0402 en J14.C1 | **C1525** | **`/SIMB_VDD`** – GND (J14.C1 está en `/SIMB_VDD`, después de R131; el «(`/SIM_VDD`)» del informe nombra el lado del módem) |
| B-10 | **R142 (nuevo)** | 100k PD | C25803 | `/MODEM_STATUS` – GND |
| B-10 | **R143 (nuevo)** | 100k PU | C25803 | `/3V3` – `/DIN_4G` |
| B-10 | R106 | 100R C22775 → **1k** | **C14676** | |
| C-07 | U18.50 SAFEBOOT_N | bandera NC → etiqueta **`/GNSS_SAFEBOOT_N`** | — | |
| C-07 | **TP10, TP11 (nuevos)** | `TestPoint:TestPoint_Pad_D1.0mm`, fuera del BOM | sin parte | TP10 `/GNSS_SAFEBOOT_N`, TP11 `/GNSS_RESET_N` |
| D-02 | Y3 | `Device:Crystal` HC-49SD C14872 → **`Device:Crystal_GND24`**, `Crystal:Crystal_SMD_3225-4Pin_3.2x2.5mm`, SCTF SX3B25.000F1010F30 (25 MHz, CL 10 pF, ESR 30 Ω) | **C2901684** | pin 1 `/HSE_IN` · **pin 3 `/HSE_OUT`** · pines 2/4 **GND** (cable nuevo + etiqueta GND). Hacía falta cambiar el símbolo: uno de 2 pines sobre el land de 4 pads habría puesto HSE_OUT en el pad 2 de GND. El pin 3 nuevo queda exactamente donde estaba el pin 2 viejo, así que la etiqueta `HSE_OUT` conecta sin cambio |
| D-02 | C113, C114 | 15pF C1644 → **12pF** C0G | **C38523** | |
| D-03 | Y4 | FC-135 CL 12.5 pF C32346 → **FC-135 CL 7 pF** (Epson Q13FC13500002; 7 pF confirmado en listados de distribuidores) | **C48615** | huella sin cambio |
| D-03 | C115, C116 | 12pF C38523 → **6.8pF** C0G | **C1679** | |
| D-05 | Rigb1 | 3.3k C22978 → **2.2k** | **C4190** | relación 0.0833 |
| D-09 | **R144 (nuevo)** | 100k PD en la base de Q5 | C25803 | `/BASE_LS` – GND |
| D-12 | U16.42 PA9 | bandera NC → etiqueta **`/USART1_TX`** | — | |
| D-12 | **TP9 (nuevo)** | `TestPoint:TestPoint_Pad_D1.5mm`, fuera del BOM | sin parte | `/USART1_TX` |
| E-03 | C95, C96 | 18pF C1647 → **33pF** C0G (Y1 conservado) | **C1663** | |
| E-04 | C91 | 4.7uF C1779 0805 → **10nF** X7R, `C_0603_1608Metric` | **C1589** | `/ETH_1V2` |
| E-04 | C90 | 10uF C440198 → **4.7uF** 0805 | **C1779** | `/ETH_TOCAP` |
| E-04 | **C172, C173 (nuevos)** | 100nF 0603 en AVDD 4/8 y 11/21 | C14663 | `/3V3_ETH` – GND |
| F-52 | **U31 (nuevo)** | TMP102AIDRLR, **I²C 0x49** (ADD0 → V+) | **C99269** | 1 `/I2C_SCL` · 2 GND · 3 NC · 4 `/3V3` · 5 `/3V3` · 6 `/I2C_SDA` |
| F-52 | **C174 (nuevo)** | 100nF 0603 | C14663 | `/3V3` – GND |
| G-03 | P11, P12 | `…MC_1,5_3-G-3.5_1x03_P3.50mm_Vertical` (no está en la librería) → **`Connector_Phoenix_MC:PhoenixContact_MC_1,5_3-G-3.5_1x03_P3.50mm_Horizontal`**; poblados (D10) | C5160226 (sin cambio) | |
| G-03 | J10 | `Connector_RJ45:…` (alias no configurado) → **`Connector_RJ:RJ45_Hanrun_HR911105A_Horizontal`**; poblado | C12074 (sin cambio) | |
| G-04 | **JP6 (nuevo)** = JP_CUT | `Jumper:SolderJumper_2_Open`, huella abierta, valor CUTOFF_BYPASS, fuera del BOM | sin parte | 1 `/MAIN5V`, 2 `/SYS5V` |
| G-08 | **D36, D37, D38 (nuevos)** | PESD5V0S1BA, `Diode_SMD:D_SOD-323` (igual que D14–D16) | **C2827694** | pin 1 `/NRST` / `/NTC_TEMP` / `/NTC2`, pin 2 GND |
| H-08 | C22, Y2 | texto de valor "22uF/50V" → **"10uF/50V"**; "1.8432MHz" → **"3.6864MHz"** | sin cambio | |
| B-15 | R107, R108 | valor "0R-DNP" → **"0R-NEVER-FIT"** + campo `Note` (siguen DNP) | — | |
| J-04 | 23 banderas NC huérfanas (x = 453.898 / 484.378) | borradas | — | |
| J-04 | banderas NC en U16.37, U16.38, U10.13, U10.14 | borradas (los pines siguen en sus nets) | — | |
| J-04 | tramos de cable | **2b755f7f borrado** (el tramo colgante sobre P1.4); **7c1dbfc0 recortado** de y 219.71 a 218.948 para que termine en su etiqueta GND (R52.2 sigue en GND); **46f71e27 conservado** (lleva la etiqueta GND de P1.4) y la unión de P1.4 conservada. Ver §12 | — | sin cambio de net |
## 3. Partes nuevas — dónde están en la hoja
Todas las partes nuevas van en espacio libre encontrado con un mapa de ocupación de la hoja (símbolos, pines, etiquetas, cables, textos), en la rejilla de 1.27 mm, cada grupo con una nota azul «v6 audit <ID>: …» que enuncia la regla de colocación física. Coordenadas en mm de esquemático (hoja A1).
| Grupo | Refs | Posición en la hoja | Bloque al que pertenece |
|---|---|---|---|
| C-01 | R135, U28, R136 | (402–475, 196) | debajo del bias-T U18 / L21 |
| F-02 | D35 | (94, 36) | junto a P1 |
| A-05 | C161, C162 | (377–391, 226) | a la derecha de C32–C34 |
| F-03 | C163, C164, C165 | (184–213, 295) | a la izquierda de U20 |
| B-02 | C166, C167 | (401–415, 404) | a la derecha de U19 (capacitores de VBAT) |
| F-51 | U29, C168 | (257–287, 141) | arriba de los pasivos del cargador (R50/R55) |
| F-51 | R137, R138, C169 | (264–298, 220) | junto a R50/R56 |
| E-01 | R139 | (674, 217) | en U12 |
| E-02 | R140 | (692, 60) | en U11 |
| D-01 | U27, C170 | (268–304, 458) | debajo de U23/U24 |
| G-02 | U30 | (489, 307) | junto a J9 |
| A-13 | R141 | (218, 246) | cerca de TP1/TP2 |
| B-09 | C171 | (328, 460) | arriba de J14 |
| B-10 | R142, R143 | (284–298, 498) | debajo de U24 |
| C-07 | TP10, TP11 | (522–538, 104) | a la derecha de U18 |
| D-09 | R144 | (137, 113) | en Q5 |
| D-12 | TP9 | (547, 420) | a la derecha de U16 |
| E-04 | C172, C173 | (730–745, 183) | debajo de C94 |
| F-52 | U31, C174 | (188–218, 414) | a la izquierda de U23/U24 (bloque del módem) |
| G-04 | JP6 | (281, 25) | junto a P5 |
| G-08 | D36 / D37, D38 | (328, 133) / (476–503, 232) | en P6 / cerca de P7–P8 |
## 4. Prueba por netlist
Netlists exportadas con kicad-cli a través del KiCad MCP después de cada grupo confirmado (`kicad/_to_delete/v6-apply-20260928/netlists/00…05.xml`). `tools/ndiff.py` compara refs, valor, huella, lib_id, todos los campos y propiedades, banderas DNP / BOM / posición, ref.pin → net y clase de red. El conjunto de cambios esperado de cada grupo lo escribió el script de edición *antes* de confirmar el archivo y se verificó contra el diff real.
| Grupo | Netlist | Esperado (añadidos / eliminados / campos / pin-net / clase) | Obtenido | Resultado |
|---|---|---|---|---|
| 1 Bloqueantes | 00-baseline → 01-blockers | 4 / 3 / 38 / 9 / 0 = 54 | 4 / 3 / 38 / 9 / 0 | **COINCIDE** |
| 2 Mayores | 01 → 02-majors | 17 / 0 / 36 / 4 / 0 = 57 | 17 / 0 / 36 / 4 / 0 | **COINCIDE** |
| 3 Menores | 02 → 03-minors | 16 / 0 / 51 / 9 / 0 = 76 | 16 / 0 / 51 / 9 / 0 | **COINCIDE** (tras la corrección de J-04, §12) |
| 4 Reglas de proyecto | 03 → 04-rules (esquemático sin tocar) | 0 / 0 / 0 / 0 / 16 | 0 / 0 / 0 / 0 / 16 | **COINCIDE** |
| 5 Cosmético (texto de ref de U30) | 04 → 05-final | 0 | 0 | **COINCIDE** |
| Total | 00 → 05-final | composición de los grupos 1–5 | 37 / 3 / 125 / 22 / 16 | **0 diferencias** en cada ref, atributo, pin y clase |
Los cambios de campo cuentan tanto `footprint` como el campo `Footprint` cuando cambia una huella. Los 22 cambios pin-net: U20.2, C127.1, C128.1 → `/MAIN5V`; D10.1 → `/VIN_FUSED`; L21.2, C144.1, C145.1 → `/ANT_BIAS`; U18.7 → NC; U18.5 → `/GNSS_ANT_OFF`; U12.2 → `/ETH_PWR_EN`; U16.54 → `/ETH_PWR_EN`; U16.25 → `/NTC_CELL`; U18.26 → `/DOUT_4G_F9P`; R56.2 → `/3V3`; U6.20, TP2.1 → `/PFO`; U16.29 → `/PFO`; U16.42 → `/USART1_TX`; U18.50 → `/GNSS_SAFEBOOT_N`; Y3.2 → GND, Y3.3 → `/HSE_OUT`, Y3.4 → GND. Lista completa: `netlist_diff_total.md`; por grupo: `out/0N-*/netlist_diff.md`.
UUID: ningún símbolo existente cambió de UUID (comprobado por grupo); la guarda también se cumplió en cada escritura.
## 5. ERC (kicad-cli 10.0.4 vía KiCad MCP)
Los conteos por categoría salen de copias con severidades de ERC acotadas (`kicad/_to_delete/v6-apply-20260928/erc_work/`), porque el MCP imprime solo 30 elementos. Las categorías de la línea base son las de la auditoría (`evidence/erc_summary.md`, mismo hash de archivo); las finales vienen de corridas sobre el archivo final y suman la corrida completa.
| Categoría | Antes | Después | Por qué |
|---|---|---|---|
| Errores | 0 | **0** | |
| pin_to_pin | 104 | 102 | −2 por D21 eliminado (símbolo easyeda con pines sin tipo); los símbolos nuevos tienen pines tipados |
| no_connect_dangling | 23 | 0 | banderas huérfanas J-04 borradas |
| lib_symbol_mismatch | 22 | 21 | Y3 ahora usa una copia fresca de `Device:Crystal_GND24` |
| lib_symbol_issues (no está en la librería) | 10 | 11 | +1: `Drogheda-sym:TPS2552DBV` solo embebido (§7). Los 10 viejos siguen (re-enlace omitido, §9) |
| footprint_link_issues | 3 | 0 | G-03 (P11, P12, J10) |
| no_connect_connected | 2 | 0 | J-04 |
| unconnected_wire_endpoint | 2 | 0 | J-04 (tramo borrado / cola recortada) |
| Todas las demás comprobaciones (etiquetas sueltas, pines sin conectar, pines de potencia, …) | 0 | 0 | |
| Total de avisos | **166** | **134** | |
Durante el grupo 3 una corrida intermedia mostró 3 errores (etiqueta/pin sin conectar en P1.4 y R52.2) por la primera eliminación de tramos de J-04; el diff de netlist marcó los mismos dos pines. Ambos se corrigieron antes de continuar (§12).
## 6. Reglas de proyecto (F-01, D18)
### 6.1 Clases de red (`hbox-watchdog-v6.kicad_pro`)
Todos los patrones viejos se sustituyeron por nombres completos exactos de net (desaparecen los duplicados sin prefijo y los patrones muertos `3V3_MODEM`, `SW3_NODE`). En la netlist final cada patrón resuelve a una net real.
| Clase | Nets | Clearance | Pista | Vía | Prioridad |
|---|---|---|---|---|---|
| HV24 | `/24V_IN` `/VIN_FUSED` `/VIN_PROT` `/24V` `/IGN_IN` `/Q10_GATE` `/Q23_GATE` `/SW_PWRIN` `/BOOT_PWRIN` `/SW_FAN` `/BST_FAN` | 0.3 (era 0.5) | 1.0 (era 0.5) | 0.8/0.4 | 0 |
| PWR_HI | `/BAT_PLUS` `/SW_BAT` `/MAIN5V` `/VEH5V` `/SYS5V` `/VIN_SW` | 0.15 (era 0.2) | 1.5 | 0.8/0.4 | 1 |
| PWR_MODEM (nueva) | `/VBAT_MODEM` | 0.15 | 1.5 | 0.8/0.4 | 2 |
| PWR_MID | `/SW_5V` `/SW_IN` `/5V_FAN` `/FAN_RET` | 0.15 (era 0.2) | 0.6 (era 1.0) | 0.8/0.4 | 3 |
| RF (nueva) | `/RF_GNSS` `/RF_ANT_GNSS` `/RF_LTE` `/RF_ANT_LTE` | 0.2 (gap CPWG) | 0.3 (ancho CPWG; valor final con la calculadora de JLC) | 0.6/0.3 (no se pretenden vías) | 4 |
| Default | todo lo demás, incl. `/3V3_ETH` (sacada de PWR_MID, J-02), `/EN_FAN`, `/EN_PWRIN`, `/SW_MODEM`, `/BST_MODEM` | 0.15 (era 0.2) | 0.2 | 0.6/0.3 | — |
Cambios de clase en la netlist (16): a HV24 `/VIN_FUSED` `/VIN_PROT` `/24V` `/IGN_IN` `/Q10_GATE` `/Q23_GATE` `/SW_PWRIN` `/BOOT_PWRIN` `/BST_FAN` (desde Default) y `/SW_FAN` (desde PWR_MID); `/3V3_ETH` PWR_MID → Default; `/VBAT_MODEM` → PWR_MODEM; las cuatro nets RF → RF.
**Decisión sobre la lista HV24 (difiere de la tabla del informe, anterior a A-01):** `/VIN_MODEM` ya no existe, y **`/SW_MODEM` y `/BST_MODEM` se dejaron fuera de HV24**. Con A-01, U20 corre desde `/MAIN5V` (≤ 5.5 V), así que son nodos de conmutación/boot de clase 5 V; en HV24 levantarían errores falsos de 0.3/0.5 mm alrededor de U20 (como `/ETH_SW`, se quedan en Default con la regla de ancho T15). `/SW_FAN`, `/BST_FAN`, `/24V` y `/Q10_GATE` **siguen en HV24**: las huellas de U2 y Q10 permanecen en la tarjeta como DNP y llevarían voltaje de vehículo si alguna vez se montaran.
### 6.2 `.kicad_dru` (conjunto corregido por la verificación, textual; sustituye «Minimum clearance 1», «HV24 clearance», «HV24 exception: MP1584EN land pattern»)
```
(rule "Floor 0.15 (non-HV24, non-RF)"
(condition "A.NetClass != 'HV24' && B.NetClass != 'HV24' && A.NetClass != 'RF' && B.NetClass != 'RF'")
(constraint clearance (min 0.15mm))
)
(rule "HV24 to HV24"
(condition "A.NetClass == 'HV24' && B.NetClass == 'HV24'")
(constraint clearance (min 0.2mm))
)
(rule "HV24 outer"
(layer outer)
(condition "A.NetClass == 'HV24' && B.NetClass != 'HV24'")
(constraint clearance (min 0.3mm))
)
(rule "HV24 inner"
(layer inner)
(condition "A.NetClass == 'HV24' && B.NetClass != 'HV24'")
(constraint clearance (min 0.5mm))
)
(rule "HV24 IC land patterns"
(layer outer)
(condition "A.Type == 'Pad' && B.Type == 'Pad' && ((A.memberOfFootprint('U2') && B.memberOfFootprint('U2')) || (A.memberOfFootprint('U20') && B.memberOfFootprint('U20')) || (A.memberOfFootprint('U25') && B.memberOfFootprint('U25')))")
(constraint clearance (min 0.15mm))
)
```
Se añadió un encabezado de comentario de 3 líneas sobre el conjunto. La regla de texto de serigrafía y las tres reglas de aviso de ancho de potencia T15 no cambian (la regla T15 todavía nombra `/VIN_MODEM`, ahora un nombre muerto; inofensivo). La cláusula U20 de la regla de land patterns ya no coincide con nada tras la decisión HV24 de arriba; se conservó para mantener el conjunto textual de la verificación.
## 7. Librería
- **H-04 corregido:** `(property "LCSC Part" "C2071691")` borrado de `Drogheda-v6.pretty/SO-8_L4.9-W3.9-P1.27-LS6.0-BL-EP.kicad_mod` (una línea, acotada; el resto del archivo es byte-idéntico). Esa huella la comparten U20 (AP64350, C2071691) y U25 (TPS54360B, C524806); ambos resuelven ahora por sus campos `LCSC`. La copia de U25 en la tarjeta todavía lleva el campo hasta que Michelle actualice la huella desde la librería (§10).
- **Otros valores `LCSC Part` en `Drogheda-v6.pretty`, cotejados contra sus usuarios (no se quitaron):** IND-SMD_L13.5-W12.5 C840531 = L22 ✓ · LCC-LGA-102 C5120257 = U18 ✓ · LGA-124 C18548276 = U19 ✓ · LGA-12 C5126709 = U26 ✓ · RF-SMD_FRF05002 C88374 = J12, J13 ✓ · SMA_L4.4 C113952 = D22 ✓ · VSSOP-8 C730237 = U23, U24 ✓ · SOD-923 C82326 = D27 ✓ (D28 pasó a 0402) · **SOD-128 C50603 ahora sin uso** (D21 eliminado). Ninguno está mal.
- **Símbolo TPS2552:** KiCad 10 no tiene símbolo TPS2552 (los interruptores MIC2007/2008 SOT-23-6 tienen otro pinout), así que se creó `Drogheda-sym:TPS2552DBV` y se embebió solo en el esquemático: símbolo de caja, 1 IN power_in, 2 GND power_in, 3 ~EN input, 4 ~FAULT open_collector, 5 ILIM passive, 6 OUT power_out, huella SOT-23-6, enlace a la hoja de datos de TI. `Drogheda-sym.kicad_sym` no se editó (fuera del conjunto de archivos de este pase; compartido con v5), que es el +1 aviso ERC «not found in library». Copiarlo a la librería en un pase de librería.
- Símbolos de librería nuevos embebidos desde KiCad 10: `74xGxx:74LVC1G125`, `Power_Protection:USBLC6-2SC6`, `Device:Crystal_GND24`. `Sensor_Temperature:TMP102xxDRL` ya estaba en caché en la hoja y es idéntico en contenido a la librería.
## 8. Topología de polaridad inversa y fusible después de V1-01 / A-01
```
P1.1 ─ /24V_IN ─ F2 (3 A Nano2, en portafusible) ─ /VIN_FUSED ─┬─ D10 SMBJ33A (pad 1 cátodo) ─ GND
└─ Q23 IRFR5305: D=/VIN_FUSED, S=/VIN_PROT, G=/Q23_GATE
D33 zener clamp S→G, R119 gate a GND
/VIN_PROT ─ D32 SMCJ33A, C149–C151, U25 (TPS54360B) → /VEH5V
/24V_IN también ─ Q10.D (rama Q10 DNP: /24V no lleva ninguna parte montada)
```
- Polaridad correcta: la corriente fluye P1 → F2 → diodo de cuerpo de Q23 (drain→source), Q23 se enciende con su gate llevado a GND (V_GS recortado a −15 V por D33) → /VIN_PROT. D10 y D32 recortan transitorios; D10 queda ahora detrás de F2, así que un TVS que falle en corto abre F2 en vez de cargar el arnés.
- **P1 invertido:** /VIN_FUSED se va a negativo; el gate de Q23 (a GND) queda positivo respecto a su source, así que Q23 se mantiene apagado y su diodo de cuerpo en inversa. D10 conduce en directa GND → /VIN_FUSED a través de F2 → **F2 se funde** (en portafusible, reemplazable). Antes de V1-01, D10 estaba en /24V_IN antes de F2 y habría llevado la corriente del fusible del arnés.
- El único cobre sin fusible que queda en /24V_IN es P1.1 → F2.1 y el pad Q10.D del Q10 en DNP. Si la rama Q10 se vuelve a montar algún día, mover primero Q10.D a /VIN_FUSED.
- U20 queda ahora en /MAIN5V, aguas arriba del corte P5 (nota A-01): P5 sigue quitando SYS5V → MCU sin energía → R113 mantiene el EN de U20 en bajo (µA).
## 9. Elementos omitidos y decisiones
**No aplicados**
1. **G-01** (restaurar MH4 en (193.2, 90.3), barrenos de la abrazadera del disipador MH11 + pareja): barrenos de montaje solo de tarjeta; Michelle (D11 lo vuelve Bloqueante).
2. **J-04, re-enlazar los 10 símbolos «not found»** (Q_*MOS_G?S ×7, D_Zener_ANK ×2, PCF8574): requiere escribir sus definiciones en la `Drogheda-sym.kicad_sym` compartida (fuera del conjunto de archivos permitido) y cambiar 10 lib_id. Cosmético; se dejó como avisos. Los 22 desajustes de librería se dejaron como pide el informe (sin actualización masiva).
3. **G-08, resistencia opcional de 100 Ω en serie en NRST:** opcional en el informe; partiría `/NRST`. No aplicada.
4. **D-08** (strap de identificación de tarjeta), **H-03** (land MWSA0804S), **J-03** (tipos de pin de librería): excluidos por D19.
5. Mayores solo de layout (V1-01 layout, F-12, F-05, F-06, C-04, A-07) y A-02: lista de layout, §10.
**Decisiones tomadas al aplicar (más allá de la letra de §7)**
- El marcado DNP sigue la convención existente de la hoja (`(dnp yes)` solamente, como en C146/C147, R107/R108, R124/R125, R127–R130, U22): las huellas se quedan en la tarjeta con el atributo DNP, y KiCad deja las partes DNP fuera de las salidas BOM/CPL.
- U17, U21, U10 conservaron sus símbolos (numeración de pines idéntica) y solo cambiaron campos; el diff de netlist muestra en ellos solo cambios de valor/LCSC/MPN.
- Los pads de prueba nuevos (TP9–TP11) y JP6 quedan fuera del BOM y de los archivos de posición (sin parte comprable). TP1–TP8 se dejaron como estaban.
- Lista de nets HV24: §6.1. Eliminación de PF15: §2.1. Net de C171: §2.3.
## 10. Delta de layout para Michelle
Ejecutar Tools → Update PCB from Schematic sobre `hbox-watchdog-v6.kicad_pcb` con **«Delete footprints with no symbols» marcado** (corridas anteriores no borraban las huellas eliminadas) y «Update footprints» activo para que se sustituyan las huellas cambiadas. Después correr DRC (reglas nuevas, abajo).
**Huellas nuevas por colocar (37)**
| Ref | Huella | Dónde / restricción (de la auditoría) |
|---|---|---|
| U28 | SOT-23-6 | interruptor de polarización GNSS junto a L21/C144/C145 en J12; `/ANT_BIAS` a ≥ 1 mm de la línea RF con una franja de GND cosida (F-06); alimentación corta desde `/3V3_GNSS` |
| R135, R136 | 0603 | en los pines 3 y 4 de U28 |
| D35 | D_SMB | **en P1.3**; con Rig1 movido a ≤ 3 mm de cobre de P1.3 para que `/IGN_IN` mida ≤ 3 mm en F.Cu y el tramo largo pase a ser `/IGN_SENSE` (F-02) |
| C161, C162 | 1210 | a ≤ 2 mm de los pines VSYS 1/24 de U6, GND en el cobre del pad térmico (EP) de U6 (A-05/A-02) |
| C163, C164 | 0805 | a ≤ 2–3 mm de U20.2, GND en el cobre del pad térmico (EP) de U20 (F-03) |
| C165 | CP_Elec_6.3x7.7 | en U20.2 (F-03) |
| C166, C167 | 0805 | a ≤ 3 mm de L20.2 (B-02) |
| U29 + C168 | SOT-563 + 0603 | **entre U6 y L6, a ≤ 5 mm del pad térmico (EP) de U6** (F-51, R4) |
| R137, R138, C169 | 0603 | derivación de la NTC del paquete: R138/C169 en el pad 25 de U16 (PC5); R137 en cualquier punto de `/NTC` |
| R139 | 0603 | en el pin 2 de U12 (EN); pista nueva `/ETH_PWR_EN` al pad 54 de U16 (PD2) |
| R140 | 0603 | en U11.37 (`/ETH_RST`) |
| U27 + C170 | SOT-23-5 (SOT-753) + 0603 | **en U18.26 (RXD2)**; VCC desde `/3V3_GNSS` |
| U30 | SOT-23-6 | **a ≤ 3 mm de cobre de los pads de J9**, D+/D− ruteados a través de los pads del dispositivo, vía a GND a ≤ 1 mm (G-02) |
| R141 | 0603 | pull-up de `/PFO` cerca del pad 29 de U16 (PB10) |
| C171 | 0402 | en J14.C1 |
| R142, R143 | 0603 | en `/MODEM_STATUS` (PC9) y `/DIN_4G`, donde convenga |
| TP10, TP11 | TestPoint_Pad_D1.0mm | cerca de los pines 50 (SAFEBOOT_N) y 49 (RESET_N) de U18, junto a un pad de GND (C-07) |
| R144 | 0603 | en la base de Q5 |
| TP9 | TestPoint_Pad_D1.5mm | pad de TX de depuración PA9 junto a TP3–TP5 (D-12) |
| C172, C173 | 0603 | en los pines AVDD 4/8 y 11/21 del W5500 |
| U31 + C174 | SOT-563 + 0603 | **entre U19 y U20** (F-52) |
| JP6 | SolderJumper de 2 pads, abierto | a través de P5 (`/MAIN5V`–`/SYS5V`), serigrafía «CUTOFF BYPASS» (G-04) |
| D36, D37, D38 | SOD-323 | a ≤ 3 mm de P6.1, P7.1, P8.1 hacia GND (G-08) |
Huellas eliminadas: D20 (D_SMA), D21 (SOD-128). (PF15 es una bandera de potencia virtual, sin huella.)
Cambios de huella: U15 → `SOIC-16_3.9x9.9mm` angosto (recolocar C84–C88, re-ruteo local) · D28 → `D_0402_1005Metric` (con el re-ruteo LTE de F-06) · Y3 → `Crystal_SMD_3225-4Pin_3.2x2.5mm` (pad 1 HSE_IN, pad 3 HSE_OUT, pads 2/4 GND; a ≤ 3–5 mm de PH0/PH1, sin pista interna debajo) · C91 → 0603 · JP1 → Bridged (net-tie) · J10 → alias `Connector_RJ:` (misma geometría) · P11/P12 → Horizontal (ya así en la PCB) · U25 → volver a traer la huella de la librería para que su copia en tarjeta pierda `LCSC Part` (H-04) · Y4 y F2 conservan sus huellas.
Cambios de DNP: poner DNP: U2, L2, Dbk1, Cbst1, Rcomp1, Ccomp1, Rfreq1, Ren1, Ren2, R20, R21, Q10, DzG1, Rrp1, C10, C11, C22. Quitar DNP: J10, P11, P12 (poblados según D10).
Nets que cambian de ruteo
- `/VIN_MODEM` desaparece: U20.2, C127, C128 pasan a **`/MAIN5V`** (≥ 1.5–2 mm hasta U20; borrar el tramo de 48 mm de `/VIN_MODEM`, A-01/A-07).
- `/VIN_FUSED` gana D10.1: P1.1 → F2 → {D10, Q23.D}; `/24V_IN` = P1.1, F2.1, Q10.D solamente.
- `/ANT_BIAS` (U28.6 → L21.2, C144, C145); U18.7 ahora es NC; `/GNSS_ANT_OFF` (U18.5 → U28.3, R135); `/GNSS_ANT_SHORT_N` gana U28.4 y R136.
- `/ETH_PWR_EN` (U12.2, U16.54, R139); U12.2 sale de `/SYS5V`.
- `/DOUT_4G_F9P` (U27.4 → U18.26); U18.26 sale de `/DOUT_4G`; U27.2 entra a `/DOUT_4G`.
- `/PFO` (renombrada desde `/PFO_TP`: U6.20, TP2, más U16.29 y R141).
- `/NTC_CELL` (U16.25, R137, R138, C169); `/NTC` gana R137.
- `/GNSS_SAFEBOOT_N` (U18.50, TP10); `/USART1_TX` (U16.42, TP9).
- R56.2 pasa de GND a `/3V3`; pads de Y3 re-asignados como arriba.
DRC con las reglas nuevas (corrido sobre una copia de la tarjeta actual, todavía sin actualizar): 161 errores de clearance (eran 0). **149 son proximidades de relleno de zona** (rellenos guardados a 0.15 mm de nets HV24 y RF); un refill de zonas los quita. **12 son separaciones de cobre reales:** `/IGN_IN` en In2 vs vía de GND 0.250, `/FAN_PWM` 0.291, vía de `/5V_FAN` 0.300, `/NTC2` 0.305, vía de `/VEH5V` 0.340 (todos F-02, desaparecen con el movimiento a P1.3); `/VIN_PROT` vs `/VEH5V` 0.157 y 0.191 en (175.5, 113.8); `/USB_VBUS` vs Q23.1 `/Q23_GATE` 0.225; `/SW_PWRIN` vs pista de GND 0.270; `/24V` vs `/COMP_FAN` 0.290 ×2 (rama DNP, pero el cobre existe); clase RF: vía de `/RF_LTE` vs `/PWR_CTRL` 0.150 (se va con el re-ruteo F.Cu de F-06). Salvedad: KiCad lista una sola violación entre el segmento largo de `/IGN_IN` en In2 y `/VEH5V` (la vía a 0.340 mm); las pistas paralelas de 1.0 mm de `/VEH5V` a su lado están a 0.221–0.240 mm (recalculado a partir de las coordenadas de las pistas, coincide con los 0.221 mm de la auditoría) y no se listan como elementos separados. Así que no leer el conteo del DRC como la lista completa; el movimiento de F-02 elimina de todos modos todo el tramo de `/IGN_IN` en In2. Los avisos `track_width` bajan 183 → 121 (`/3V3_ETH` ahora en Default, ancho PWR_MID 0.6). Los demás elementos del DRC no cambian (82 lib_footprint_mismatch, 4 lib_footprint_issues, 11 silk_overlap, 2 silk_over_copper, 1 silk_edge). Tras Update PCB, esperar elementos HV24 nuevos en `/VIN_FUSED` en D10 y la desaparición de los de `/VIN_MODEM`. Comprobar una vez con Inspect → Clearance Resolution que las clases sobrevivieron al guardado desde la GUI (protocolo de resincronización §5).
**Notas de pedido (de las consultas de partes):** C2862740 (TPS7A2033PDBVR, U21) aparece en JLC bajo «Pre-ordered Chips»: pre-ordenarlo en la cuenta como J14. P11/P12 C5160226 stock 512 (suficiente para 20 tarjetas). Volver a revisar stock el día del pedido (D14).
## 11. Notas de firmware (para FW 0.7.x `board_v6.h`, D15)
1. **PD2 = `ETH_PWR_EN`**: enable de U12 (3V3_ETH), R139 100 k pull-down → Ethernet APAGADO en reset/DFU/batería; ponerlo en ALTO solo con energía de vehículo cuando se necesite Ethernet; mantener SPI2 y PA15 en bajo mientras esté apagado.
2. **PB10 = `PFO`**: PFO del LTC4040, open-drain, R141 100 k pull-up a 3V3; EXTI10 flanco de bajada = entrada a respaldo (VEH5V < PFI 4.40 V bajando / 4.51 V subiendo). Actualizar `V5_PFI` a 4.40 V.
3. **PC5 = `NTC_CELL`** (ADC1_IN15): NTC del paquete a través de 100 k/120 k (relación 120/220) + 10 nF; Rntc = R55·Vntc/(VEH5V − Vntc) con VEH5V desde PA4; válido solo con VEH5V presente. Alimentar `tcell` a `CHG_CELL_HOT/COOL`.
4. CHGOFF por omisión: R56 ahora es pull-up a 3V3 → PA8 (`CHRG_EN`, maneja CHGOFF del LTC4040) en alto = cargador apagado siempre que el MCU no lo maneje. Polaridad sin cambio: el firmware pone PA8 en BAJO para permitir la carga.
5. **Ignición en PA5 (ADC1_IN5), leer analógico**, sin pull interno: Rigb1 = 2.2 k → relación 2.0 k/24.0 k = **0.0833**: 12 V → 1.00 V, 24 V → 2.00 V, 36 V → 3.00 V, escala completa 39.6 V. Añadir `vign` a `$PHLG`.
6. **TMP102 en 0x48 = sensor del cargador (U29)**, **0x49 = sensor de la zona del módem (U31)**; sin choque de direcciones (0x18 SC7A20, 0x20 PCF8574, 0x44 SHT40, 0x4D SC16IS752). Añadir `tchg`, `tmodem` a `$PHLG`; cortar la carga con `tchg` > 85 °C.
7. Antena GNSS: el ANT_OFF del F9P ahora maneja el ~EN del TPS2552 (poner `CFG-HW-ANT_CFG_VOLTCTRL` = 1, `SHORTDET` = 1). PC2 `GNSS_ANT_SHORT_N` lo maneja el ~FAULT del TPS2552 (open drain, 10 k a 3V3_GNSS): BAJO = corto o riel apagado. PC1 `GNSS_ANT_DETECT` sigue sin manejar (mantener en alta impedancia, inferir antena abierta por C/N0).
8. U27 ahora aísla el RXD2 del F9P: los ciclos de energía solo del F9P con el módem encendido se vuelven seguros en tarjetas que lo tengan; mantener las reglas de retorno de corriente 0.5.5/0.5.6 para PA2/PA10/PC7/PC12. Rdfu1 es 100 k (≤ 27 µA hacia TXD2 con el F9P apagado).
9. `/MODEM_STATUS` (PC9) tiene pull-down de 100 k y `/DIN_4G` pull-up de 100 k en hardware: no hacen falta pulls internos. R106 es 1 k.
10. PA9 es un pad de prueba (TP9, `USART1_TX`): usable como log de depuración solo TX o bootloader USART de ROM.
11. El punto de ajuste de U25 es ahora 5.32 V nominal (R121 57.6 k): mantener `CHG_RAIL_ON` 5.05 V / `CHG_RAIL_OFF` 4.90 V; calcular VDDA desde VREFINT.
12. LSE: Y4 es CL 7 pF → activar `LSEMOD` (alto drive) antes de `LSEON`, respaldo LSI. HSE sigue en 25 MHz (cristal 3225 nuevo); `BOARD_SER_XTAL_HZ` = 3 686 400 (el texto de valor de Y2 ahora coincide).
13. Modo batería (D9): solo LTE (`AT+CNMP=38`), Ethernet apagado.
## 12. Incidentes y sorpresas
1. **No todos los tramos de cable de J-04 estaban colgando.** La auditoría listó tres UUID de tramos. Borrar los tres rompió dos conexiones: en P1.4 la etiqueta GND está en el extremo lejano de 46f71e27 (solo 2b755f7f es el sobrante colgante), y en R52.2 la etiqueta GND está a mitad de segmento en 7c1dbfc0 (solo una cola de 0.76 mm pasada la etiqueta colgaba). ERC mostró 3 errores nuevos y el diff de netlist marcó exactamente P1.4 y R52.2 como inesperados. Se corrigió borrando solo 2b755f7f, conservando 46f71e27 y la unión de P1.4, y recortando 7c1dbfc0 para que termine en su etiqueta. Re-verificado: esperado == obtenido, ERC 0 errores.
2. **Y3 necesitaba un cambio de símbolo**, no de huella: `Device:Crystal` (2 pines) sobre el land 3225-4P habría puesto HSE_OUT en el pad 2 de GND. Se cambió a `Device:Crystal_GND24` en su lugar (UUID conservados, pines 3/4 añadidos), probado por la netlist.
3. **El TPS2552 no tiene símbolo en la librería de KiCad** (se creó uno embebido, §7).
4. **El TPS7A2033PDBVR está en la categoría «Pre-ordered Chips» de JLC** (stock 28 370): pre-ordenar como J14.
5. Queda un cruce de cable en U30: es la caja envolvente de la herramienta MCP para el símbolo USBLC6, verticalmente asimétrico; el PDF muestra el cable de VBUS saliendo del pin hacia afuera.
## 13. Números LCSC nuevos (consulta a la base de datos de JLC vía KiCad MCP, 2026-09-28)
| LCSC | Parte | Encapsulado | Stock | Tipo | Usado en |
|---|---|---|---|---|---|
| C206912 | Littelfuse 0154003.DR 3 A | SMD 9.7×5 (portafusible Nano2) | 2 217 | Ext | F2 |
| C22840 | 1.43 kΩ 1 % | 0603 | 4 965 | Ext | R50 |
| C1975527 | Littelfuse PESD0402-240 | 0402 | 9 394 | Ext | D28 |
| C46506 | TI TPS2552DBVR | SOT-23-6 | 3 002 | Ext | U28 |
| C224019 | Littelfuse SMBJ33A | DO-214AA | 9 624 | Ext | D35 |
| C57156 | NXP SC16IS752IPW,128 | TSSOP-28 | 2 670 | Ext | U10 |
| C177479 | HKR RCT03499KFLF 499 k | 0603 | 26 862 | Ext | R53 |
| C23082 | 57.6 kΩ 1 % | 0603 | 3 673 | Ext | R121 |
| C5440143 | Samwha 47 µF 16 V X7R | 1210 | 242 640 | Ext | C161, C162 |
| C15578 | TI TLV1117LV33DCYR | SOT-223 | 26 999 | Ext | U17 |
| C881921 | Lelon OVZ221M1CTR-0608 220 µF 16 V polímero | 6.3×7.7 | 2 442 | Ext | C78, C130, C131, C165 |
| C22862 | 113 kΩ 1 % | 0603 | 59 728 | Ext | R116 |
| C1542 | 6.8 nF 50 V X7R | 0402 | 128 063 | Pref | C141 |
| C1572 | 56 pF C0G | 0402 | 83 992 | Ext | C142 |
| C86817 | Murata 22 µF 16 V X5R | 0805 | 4 144 | Ext | C163, C164, C166, C167 |
| C99269 | TI TMP102AIDRLR | SOT-563 | 34 854 | Ext | U29, U31 |
| C25808 | 120 kΩ 1 % | 0603 | 773 686 | Basic | R138 |
| C1589 | 10 nF 50 V X7R | 0603 | 6 584 349 | Ext | C169, C91 |
| C2862740 | TI TPS7A2033PDBVR | SOT-23-5 | 28 370 | Ext (categoría pre-orden) | U21 |
| C23162 | 4.7 kΩ 1 % | 0603 | 21 915 184 | Basic | R140 |
| C12518 | Nexperia 74LVC1G125GV,125 | SOT-753 | 5 234 | Ext | U27 |
| C7519 | ST USBLC6-2SC6 | SOT-23-6 | 1 415 | Ext | U30 |
| C25803 | 100 kΩ 1 % | 0603 | 10 814 547 | Basic | resistencias de pull nuevas, Rdfu1, conjunto H-02b |
| C14663 | 100 nF 50 V X7R | 0603 | 37 493 696 | Basic | C168, C170, C172–C174 |
| C23345 | 22 Ω 1 % | 0603 | 4 031 533 | Basic | R132–R134 |
| C1525 | 100 nF 16 V X7R | 0402 | 43 509 060 | Basic | C171 |
| C14676 | 1 kΩ 5 % | 0603 | 757 955 | Ext | R106 |
| C2901684 | SCTF SX3B25.000F1010F30 25 MHz CL 10 pF | 3225-4P | 11 076 | Ext | Y3 |
| C38523 | 12 pF C0G | 0603 | 3 346 489 | Basic | C113, C114 |
| C48615 | Epson Q13FC13500002 FC-135 CL 7 pF | 3215-2P | 101 342 | Ext | Y4 |
| C1679 | 6.8 pF C0G | 0603 | 1 445 998 | Pref | C115, C116 |
| C4190 | 2.2 kΩ 1 % | 0603 | 2 920 710 | Basic | Rigb1 |
| C1663 | 33 pF C0G | 0603 | 2 808 576 | Basic | C95, C96 |
| C1779 | 4.7 µF 25 V X5R | 0805 | 4 715 349 | Basic | C90 |
| C2827694 | PESD5V0S1BA | SOD-323 | 303 975 | Ext | D36–D38 |
| C25804 | 10 kΩ 1 % | 0603 | (Basic existente) | Basic | R136 |
BOM final (`kicad/_to_delete/v6-apply-20260928/bom_final*.csv`, kicad-cli): 306 líneas de BOM pobladas; solo TP1–TP8 no tienen LCSC (pads de cobre, como antes).
## 14. Archivos
- Editados en su lugar: `03-Architecture-Hardware/kicad/hbox-watchdog-v6.kicad_sch`, `.kicad_pro`, `.kicad_dru`, `Drogheda-v6.pretty/SO-8_L4.9-W3.9-P1.27-LS6.0-BL-EP.kicad_mod`.
- PDF: `03-Architecture-Hardware/hbox-watchdog-v6-schematic.pdf`.
- El `.kicad_pcb` no se tocó. Si KiCad estaba abierto en v6 durante este pase, cerrarlo **sin guardar** y reabrir antes de Update PCB (protocolo de resincronización §5).
- Git (lo ejecuta Leo; nada se confirmó desde aquí): commit dentro del submódulo `kicad` (sch, pro, dru, huella SO-8), push a Gitea `HBox_PCB`, después actualizar el gitlink del padre; `_to_delete/` está en gitignore.
Ver también: [manual v6](../manuales/manual-tarjeta-v6.md) · [auditoría completa v6](v6-auditoria-completa.md) · [mapa de pines MCU v6](v6-pinmap.md) · [revisión contra lecciones V5.5](v6-revision-lecciones-v55.md) · [informe de cambios V5.6](v56-cambios-esquematico.md) (lo que de esta auditoría se llevó a la V5.6).
## Historial de revisiones
| Versión | Fecha | Cambios |
|---|---|---|
| 1.0 | 2026-09-28 | Informe original (inglés): aplicación de los hallazgos de la auditoría v6 al esquemático. |
| 1.1 | 2026-09-29 | Traducción al español; hashes, respaldos y notas de proceso al anexo de trazabilidad. Sin cambios técnicos. |
??? note "Anexo técnico — trazabilidad"
**SHA-256 antes / después:**
| Archivo | Antes | Después |
|---|---|---|
| `hbox-watchdog-v6.kicad_sch` | `ecee9fed851f02e74074340bf8361bced7c385b2502b19c368861b9851c2f04a` | `d54e330d189910afd58e18fc7cd498bdb3e6e5b7b3c4472b6cae7f95650b34c4` |
| `hbox-watchdog-v6.kicad_pro` | `25c57f3936b96a4e31cb5947668c172d318189258d6a5d2fa34d230df8958028` | `d577aa43076f5f751c291041dbf3054cb93a87facfe9f339ef91b60e073bd6ce` |
| `hbox-watchdog-v6.kicad_dru` | `47538e6cfadc0c53421ff59dadabc0e7f0ad5f11d9e2250618728788080aca1a` | `31ce0f4f23e8178b4b5e837b452e7bb8647d446ffd420559049eaaae78100831` |
| `Drogheda-v6.pretty/SO-8_L4.9-W3.9-P1.27-LS6.0-BL-EP.kicad_mod` | `0171be85ff9bf1d27232731a9931ad9d6c3c2bcdee2f5f3558ee94d2566413f9` | `3f38f26e435c477a7701636d4d5e1c05b4c7bd523e8dd04f9f57128657736313` |
| `hbox-watchdog-v6.kicad_pcb` | `6ddec80d1c15f79e69dff6c1a850b28345a5d826389f79cee8c61998240b36bf` | sin cambio |
| `hbox-watchdog-v6-schematic.pdf` | — | `a2c94a49…` |
Respaldos (nada se borró): `kicad/_to_delete/v6-apply-20260928/` — `00-pre/` (sch, pro, dru, prl, huella SO-8, archivo lateral de DRC), `01-blockers/`, `02-majors/`, `03-minors/`, `04-rules/`, `05-final/`, `netlists/00-baseline … 05-final.xml`, `erc_work/` (copias de aislamiento de ERC), `drc_work/` (DRC sobre una copia de la tarjeta con las reglas nuevas; reporte + JSON), `scratch/` (PDF intermedios, archivo de extracción de librería), `bom_final.csv`, `bom_final_ungrouped.csv`. Área de trabajo del contenedor: `/home/claude/v6audit/apply/` — este informe, `netlist_diff_total.md`, `out/0N-*/` (logs de edición, conjuntos esperados, diffs por grupo), `tools/` (editor, modelo, diff, scripts por grupo), `drc/`, el PDF.
**Nota de proceso:** durante el grupo 1 una segunda confirmación de archivo reenvió una copia en caché y escribió la primera versión; se detectó por el hash del archivo en la Mac y desde entonces cada confirmación usó una ruta única. Cada estado confirmado en este informe se comprobó por hash en la Mac.

251
docs/hardware/v6-pinmap.md Normal file
View File

@ -0,0 +1,251 @@
---
title: "EinarBoard v6 — Mapa de pines del MCU (U16 STM32F411RET6, LQFP64) para board_v6.h / FW 0.7.x"
tags: [project-drogheda, hardware, einarboard, v6, pinmap, stm32, firmware]
date: 2026-09-28
project: Project Drogheda
author: Helgen Technologies
---
# EinarBoard v6 — Mapa de pines del MCU (U16 STM32F411RET6, LQFP64) para `board_v6.h` / FW 0.7.x
!!! warning "EinarBoard v6 (`hbox-watchdog-v6`): en diseño, no se pide"
Diseño nuevo con ZED-F9P y módem A7670SA soldados a bordo. **No es la V5.6** que se manda a fabricar esta semana (`hbox-watchdog-v5`, zócalos para simpleRTK2B y 4G NTRIP Master). Los hallazgos marcados «Impacto en V5.6» ya se aplicaron a la V5.6 y están en su informe de cambios.
Prosa y encabezados en español; la tabla de 64 pines y el borrador de `board_v6.h` se dejan en inglés (fuente directa para firmware). Fuente: `findings/pinmap-v6.md` de la [auditoría completa v6](v6-auditoria-completa.md) (§4), mismo snapshot del 2026-09-28. La tabla describe **la v6 tal como está dibujada**. Las filas marcadas ▶ audit llevan la consecuencia a nivel de pin de un hallazgo verificado de forma independiente, o de la asignación de pines libres que ambas verificaciones aceptan. Nada de esto se ha aplicado al esquemático (ver el [informe de cambios v6](v6-cambios-esquematico.md) para lo que sí se aplicó); las notas «▶ audit» dicen qué cambia si se adopta la corrección.
**Correcciones aplicadas al texto original (v1.0, 2026-09-28):**
1. **PA15 / ETH_RST:** el pull-down es **4.7 kΩ (C23162)**, no 100 kΩ. El RSTn del W5500 tiene su propio pull-up interno de 62–112 kΩ (DS v1.0.2 §5.3) además del pull-up JTDI de 30–50 kΩ de PA15; 4.7 k da ≤ 0.62 V en el peor caso. La alternativa de D-04 «mover a PD2 + 100 k» falla (1.56–2.04 V) y se retira (verificación, E-02 absorbe D-04).
2. Asignación de pines libres (conflicto (h) de la verificación): PD2 = `ETH_PWR_EN` (E-01), PB10 = `PFO` (A-13, absorbe D-10), PC5 = derivación de la NTC del paquete (F-51), PA9 = libre (pad de prueba D-12). El CLPROG → PC5 de D-10 se descarta. Abierto: el strap de identificación de tarjeta de D-08 también quería PD2; no queda pin libre salvo PA9 (Leo decide).
3. **D-01:** la compuerta aislante es la **Nexperia 74LVC1G125GV, C12518** (Ioff verificado), no el clon TECH PUBLIC C3040595; Rdfu1 22 k → 100 k (C25803). La alternativa de 10 k en serie se retira (≈ 0.28 mA, mismo orden que el retorno de corriente de la V5.5).
4. **D-06 se fusiona en F-02 y queda como Bloqueante** (Rig1 a ≤ 3 mm de cobre de P1.3 + SMBJ33A C224019), no ≤ 5 mm/Mayor.
5. Distancias del HSE: borde a borde de pad **8.32 / 11.30 mm** (los 10.30 / 14.21 mm de abajo son centro a centro) (D-02).
6. **C-01 (Bloqueante, absorbe D-07):** con la alimentación de antena por TPS2552, PC2 (`/GNSS_ANT_SHORT_N`) se vuelve una entrada real de falla por corto (FAULT̅, 10 k a /3V3_GNSS); PC1 sigue sin manejar.
7. **Decodificación de PB4:** citando la tabla de la hoja de datos del LTC4040 (p. 14), «pausa NTC» = CHRG bajo ∧ FAULT bajo y batería mala = CHRG alto ∧ FAULT bajo; esto prevalece sobre el texto de la fila PB4.
**Cobertura: 64 / 64 pines.** Fuentes: `evidence/mcu_pins.csv` (netlist), `evidence/pcb_pads.csv` (distancias centro a centro de pad, misma net), `evidence/firmware_pins.csv` (`board_v5.h` de V5 + `hbox_v5_bringup.ino` 0.6.0), ST DS10314 (DocID026289 Rev 7) tabla 8 (definición de pines, estructura de E/S) y tabla 53 (E/S estática), y la base de datos de funciones alternas de ST (`STM32_open_pin_data`: `mcu/STM32F411R(C-E)Tx.xml` + `mcu/IP/GPIO-STM32F411_gpio_v1_0_Modes.xml`, la fuente de CubeMX para la tabla 9 del DS10314). El símbolo embebido del esquemático se cotejó contra el pinout LQFP64 de ST: **64/64 números y nombres de pin coinciden** (el aviso ERC «symbol differs from library» en U16 es cosmético).
Leyenda. FT = tolerante a 5 V solo en modo digital (DS10314 tabla 8 nota 4: no en modo analógico ni de oscilador; tabla 53 nota 5: el pull-up/down interno debe estar apagado por encima de VDD+0.3 V). TC = solo 3.3 V. En este LQFP64 solo **PA0** y **PB5** son TC; todos los demás GPIO son FT. PC13–PC15 son pines del dominio de respaldo (tabla 8 nota 2: sumidero ≤ 3 mA, ≤ 2 MHz, ≤ 30 pF, nunca fuente). **Ningún pin del MCU en v6 lleva una señal de 5 V ni de 1.8 V**: todas las líneas de 1.8 V del módem pasan por U23/U24 (74LVC2T45) o por Q20/Q21 en open-drain, y todo pull-up es a /3V3. «¿Igual?» = si la macro de V5 en ese pin significa lo mismo en v6.
## 1. Tabla de pines (pines físicos 1–64)
| Pin | Nombre | Net v6 | Partes conectadas (resumen) | Función en v6 | Dir / modo (FW) | Periférico + AF / ADC / EXTI | ¿Necesita 5 V? / pin | Macro V5 en este pin → ¿igual? | Macro v6 propuesta | Notas / conflictos |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | VBAT | /3V3 | 3V3 big net | Backup-domain supply, tied to 3V3 (no coin cell) | power | — | — / S | — | — | RTC + BKP regs + LSE lost whenever /3V3 drops (P5 cut-off open, no USB) |
| 2 | PC13 | /LED_C13 | D17 blue LED (K) ← R102 1 k ← /3V3 | Board status LED, active LOW (sink) | OUT, LOW = on | GPIO, EXTI13 | No / FT backup-domain | `PIN_LED_C13` → same | `PIN_LED_C13` | I = (3.3 − 2.8 V Vf, C125103) / 1 k ≈ 0.5 mA ≤ 3 mA sink limit ✓ (dim) |
| 3 | PC14-OSC32_IN | /LSE_IN | Y4.1 (32.768 kHz C32346, CL 12.5 pF), C115 12 pF | LSE | oscillator | RCC_OSC32_IN | — | `BOARD_LSE_HZ` → same | `BOARD_LSE_HZ 32768UL` | Y4.1 5.54 mm, C115 2.96 mm. Crystal/caps mismatch → D-03 |
| 4 | PC15-OSC32_OUT | /LSE_OUT | Y4.2, C116 12 pF | LSE | oscillator | RCC_OSC32_OUT | — | same | — | Y4.2 7.91 mm, C116 6.49 mm (> 5 mm) |
| 5 | PH0-OSC_IN | /HSE_IN | Y3.1 (25 MHz HC-49S C14872, CL 20 pF), C113 15 pF | HSE (USB, PLL, ROM DFU needs it) | oscillator | RCC_OSC_IN | — | `BOARD_HSE_HZ` → same | `BOARD_HSE_HZ 25000000UL` | Y3.1 **10.30 mm** ctr (**8.32 mm pad edge**, verify_2), C113 13.72 mm, track 14.5 mm → D-02. ▶ audit: Y3 → C2901684 + C113/C114 12 pF C38523 (alt. C9006 + 15 pF C1644) |
| 6 | PH1-OSC_OUT | /HSE_OUT | Y3.2, C114 15 pF | HSE | oscillator | RCC_OSC_OUT | — | same | — | Y3.2 **14.21 mm** ctr (**11.30 mm pad edge**, verify_2), C114 17.02 mm, track 20.7 mm → D-02 |
| 7 | NRST | /NRST | C104 100 nF (3.26 mm), SW1 RESET, P6.1 RESET-EXT, TP5 | MCU reset only | RST (int. pull-up 30–50 kΩ) | — | — | — (V5: P10) | — | NRST reaches only the MCU. Route 108.6 mm (91.9 F.Cu + 16.8 In2). P6 external cable has no ESD → G-08 |
| 8 | PC0 | /ETH_INT | U11.36 ~INT (W5500) | W5500 interrupt, active LOW | IN pull-up | GPIO, ADC1_IN10, **EXTI0** | No / FT | `PIN_ETH_INT` → same | `PIN_ETH_INT` | BOOT1 trap avoided (V4 had it on PB2) ✓ |
| 9 | PC1 | /GNSS_ANT_DETECT | U18.4 ANT_DETECT — **F9P input** | none usable (see D-07) | ANALOG / hi-Z, never drive HIGH while F9P off | GPIO, ADC1_IN11, EXTI1 | No / FT | V5: NC · **V5.6: MODEM_RST_MCU** → different | `PIN_GNSS_ANT_DET` (reserved) | No antenna-current supervisor on v6: MCU cannot learn antenna state here. ▶ audit C-01: stays undriven (open-antenna detect not implemented; infer from C/N0) |
| 10 | PC2 | /GNSS_ANT_SHORT_N | U18.6 ANT_SHORT_N — **F9P input** | none usable (D-07) | ANALOG / hi-Z | GPIO, ADC1_IN12 (SPI2_MISO AF5 unused) | No / FT | V5: NC · **V5.6: MODEM_LED_MCU** → different | `PIN_GNSS_ANT_SHORT_N` (reserved) | as PC1. ▶ audit C-01: TPS2552DBVR (C46506) FAULT̅ drives this net (10 k C25804 to /3V3_GNSS) → LOW = antenna short; input, no MCU pull; valid only while the F9P rail is on |
| 11 | PC3 | /GNSS_RTK_STAT | U18.20 RTK_STAT (output) | RTK status: 0 = fixed, blinking = corrections in use, 1 = none | IN, pull-DOWN while F9P off | GPIO, ADC1_IN13, **EXTI3** (shared with PB3) | No / FT | V5: NC · **V5.6: MODEM_EN (output!)** → different | `PIN_GNSS_RTK_STAT` | A V5.6 binary would drive this against the F9P output → D-08 |
| 12 | VSSA | GND | — | analog ground | power | — | — | — | — | |
| 13 | VDDA | /VDDA | R104 10 Ω ← 3V3, C109 100 nF (3.13 mm), C112 1 µF (4.61 mm) | ADC reference (VREF+ bonded) | power | — | — | `ADC_REF 3.3f` → same | — | ✓ DS10314 recommendation |
| 14 | PA0-WKUP | /BAT_SENSE | R5 10 k ← /BAT_PLUS, R6 10 k → GND, C5 100 nF (5.6 mm) | Pack voltage / 2 | ANALOG | **ADC1_IN0** (WKUP1 spare) | No (≤ 2.10 V at 4.2 V) / TC | `PIN_BAT_SENSE` → same | `PIN_BAT_SENSE` | `DIV_RATIO 2.0` unchanged. 0.21 mA permanent pack drain |
| 15 | PA1 | /PWR_CTRL | R1 1 k → Q5 MMBT3904 base (**no base pull-down**) → /GATE_LS (R2 10 k to SYS5V) → Q1 AO3401A → /SW_5V → U21 AP2112K → /3V3_GNSS | **F9P rail enable**, HIGH = on | OUT PP, LOW at boot | GPIO / TIM2_CH2 AF1 (soft-start PWM) | No / FT | `PIN_PWR_CTRL` → **CHANGED**: V5 = RTK + 4G stack; v6 = F9P only (modem has PC10) | `PIN_GNSS_PWR` (keep `PIN_PWR_CTRL` alias) | Floats in reset/DFU → D-09 (absorbs A-12). ▶ audit: 100 k C25803 `/BASE_LS` → GND next to Q5 |
| 16 | PA2 | /GNSS_TX | U18.43 RXD (F9P UART1 in) | MCU → F9P UART1 (UBX config) | AF PP only while F9P on; INPUT no-pull when off | **USART2_TX AF7** | No / FT | `PIN_GNSS_TX` → same (was simpleRTK2B UART1) | `PIN_GNSS_TX` | 0.5.5 float rule is mandatory (direct into F9P) |
| 17 | PA3 | /GNSS_RX | U18.42 TXD (F9P UART1 out) | F9P → MCU NMEA/UBX | AF; pull-up only while F9P on | **USART2_RX AF7** | No / FT | `PIN_GNSS_RX` → same | `PIN_GNSS_RX` | `GNSS = Serial2` |
| 18 | VSS | GND | — | ground | power | — | — | — | — | |
| 19 | VDD | /3V3 | nearest C106 3.29 mm | supply | power | — | — | — | — | per-pin cap target ≤ 2 mm (Note) |
| 20 | PA4 | /5V_SENSE | R7 10 k ← /VEH5V, R8 10 k, C7 100 nF (5.5 mm) | VEH5V / 2 (now U25 output or bench P2) | ANALOG | **ADC1_IN4** | No (2.50 V at 5.00 V, 2.66 V at 5.32 V) / FT | `PIN_5V_SENSE` → same net; source is now on-board U25 | `PIN_5V_SENSE` | LTC4040 PFI real threshold 1.19 V × 3.7 = 4.40 V (LTC4040 DS pin 19) |
| 21 | PA5 | /IGN_SENSE | Rig1 22 k ← /IGN_IN (P1.3); Rig2 22 k ∥ Rigb1 3.3 k → GND; C9 100 nF (3.09 mm); D5 BAT54 → /3V3 | Ignition present / vehicle-voltage estimate | **ANALOG** on v6 (V5 read it digital) | **ADC1_IN5** (EXTI5 if digital) | No at the pin (3.23 V at 28 V; clamp ≈ 3.55 V above 30.3 V) / FT (not in analog mode) | `PIN_IGN_SENSE` → same net, **digital read no longer adequate** (12 V vehicles) | `PIN_IGN_SENSE` | Divider midpoint, pin and C9 on one net (junction verified) · D-05, D-06. ▶ audit F-02 (Blocker, absorbs D-06): Rig1 moves ≤ 3 mm of copper from P1.3 + SMBJ33A C224019 at P1.3, so the long run becomes the 22 k-limited `/IGN_SENSE`; pin net unchanged. D-05: Rigb1 3.3 k → 2.2 k C4190 → ratio 0.0833 (12 V → 1.00 V, 24 V → 2.00 V, 36 V → 3.00 V) |
| 22 | PA6 | /FAN_PWM | Rg1 100 Ω → Q2 AO3400A gate, Rgs1 100 k | Fan low-side switch, HIGH = on | OUT PP (ON/OFF policy) | GPIO / **TIM3_CH1 AF2** | No / FT | `PIN_FAN_PWM` → same | `PIN_FAN` | TIM3 is also PA7's capture timer (§2.4) |
| 23 | PA7 | /GNSS_TIMEPULSE | U18.53 TIMEPULSE | F9P 1 PPS | IN, pull-down while F9P off | **TIM3_CH2 AF2** input capture / EXTI7 | No / FT | V5: NC → new | `PIN_GNSS_PPS` | |
| 24 | PC4 | /NTC2 | R126 10 k/1 % → 3V3, C157 100 nF (3.11 mm), P8.1 | External NTC probe 2 (10 k B3950) | ANALOG | **ADC1_IN14** | No / FT | V5: NC (V5.6: MODEM_ON_SLEEP, DNP) → new | `PIN_NTC2` | `$PHLG tntc2` (append) |
| 25 | PC5 | unconnected (NC flag) | — | spare | ANALOG (lowest Idd) | ADC1_IN15 | — | V5: NC (V5.6: MODEM_ASSOC, DNP) | `PIN_SPARE_PC5` → `PIN_NTC_CELL` | ▶ audit F-51 (verify_1 (h)): pack-NTC tap, `/NTC` → 100 k (C25803) / 120 k (C25808) + 10 nF → PC5; PC5 ≤ 2.98 V; valid only with VEH5V present. D-10's CLPROG use dropped |
| 26 | PB0 | /EXT_LED | Q4 AO3400A gate, Rled1 10 k → panel LED D1 at **P9** | Panel LED, HIGH = on | OUT PP | GPIO (TIM3_CH3 AF2) | No / FT | `PIN_EXT_LED` → same (connector P8 → P9) | `PIN_EXT_LED` | |
| 27 | PB1 | /NTC_TEMP | R42 10 k/1 % → 3V3, C24 100 nF (6.63 mm), P7.1 | External NTC probe 1 (hot-spot, `tntc`) | ANALOG | **ADC1_IN9** | No / FT | `PIN_NTC` → same (connector P12 → P7) | `PIN_NTC` | |
| 28 | PB2 | /BOOT1_STRAP | R99 10 k → GND (2.84 mm) | BOOT1 = 0 strap (DFU entry) | never reconfigure | BOOT1 | — | — (V4: ETH_INT!) | — | "never repurpose PB2" ✓ |
| 29 | PB10 | unconnected (NC flag) | — | spare | ANALOG | TIM2_CH3 AF1, I2C2_SCL AF4, SPI2_SCK AF5, EXTI10 | — | V5: NC | `PIN_SPARE_PB10` → `PIN_PFO` | ▶ audit A-13 (absorbs D-10): U6.20 PFO → PB10, 100 k C25803 pull-up to /3V3, EXTI10 falling = backup entry at VEH5V < 4.40 V |
| 30 | VCAP1 | /VCAP1 | C111 4.7 µF (3.19 mm) | core regulator cap | power | — | — | — | — | ✓ |
| 31 | VSS | GND | — | ground | power | — | — | — | — | |
| 32 | VDD | /3V3 | nearest C105 3.65 mm | supply | power | — | — | — | — | |
| 33 | PB12 | /ETH_CS | U11.32 SCSn | W5500 chip select | OUT PP (INPUT_PULLUP while W5500 idle) | GPIO (SPI2_NSS AF5 unused) | No / FT | `PIN_ETH_CS` → same | `PIN_ETH_CS` | |
| 34 | PB13 | /ETH_SCK | U11.33 | SPI2 SCK | AF | **SPI2_SCK AF5** | No / FT | `PIN_ETH_SCK` → same | `PIN_ETH_SCK` | |
| 35 | PB14 | /ETH_MISO | U11.34 | SPI2 MISO (W5500 output) | AF in | **SPI2_MISO AF5** | No / FT | `PIN_ETH_MISO` → same | `PIN_ETH_MISO` | |
| 36 | PB15 | /ETH_MOSI | U11.35 | SPI2 MOSI | AF | **SPI2_MOSI AF5** | No / FT | `PIN_ETH_MOSI` → same | `PIN_ETH_MOSI` | |
| 37 | PC6 | /USART6_TX | K1.10 (NO contact) → /DIN_4G → U23 (3.3 → 1.8 V) → U19.10 RXD | MCU → modem (AT, GGA, `$PHLG`) when K1 energised (Mode B) | AF PP while modem on; INPUT otherwise | **USART6_TX AF8** | No / FT | V5: NC. **Takes over V5 PA9 `PIN_USART1_TX` (RELAY TX)** | `PIN_MODEM_TX` | NC flag on a connected pin (cosmetic) → D-11 |
| 38 | PC7 | /USART6_RX | R106 100 Ω ← /DOUT_4G ← U24 (1.8 → 3.3 V) ← U19.9 TXD; /DOUT_4G also → U18.26 F9P RXD2 | modem → MCU (AT replies + RTCM byte count) | AF, **no pull while F9P off** | **USART6_RX AF8** | No / FT | V5: NC (V5.6 RTCM_TAP, same peripheral) | `PIN_MODEM_RX` | NC flag cosmetic (D-11 → J-04). A pull-up here back-feeds the F9P (D-01). ▶ audit D-01: U27 74LVC1G125GV C12518 on /3V3_GNSS isolates U18.26 (new net `/DOUT_4G_F9P`); PC7/R106 stay on `/DOUT_4G`. B-10: R106 100 Ω → 1 kΩ C14676 |
| 39 | PC8 | /MODEM_PWRKEY | Q20 2N7002 gate, R114 100 k PD → U19.1 PWRKEY (int. pull-up to VBAT) | Modem power key; MCU HIGH = key pressed | OUT PP, LOW at boot | GPIO (TIM3_CH3) | No / FT | V5: NC → new | `PIN_MODEM_PWRKEY` | on ≥ 50 ms, off ≥ 2.5 s (Phase-1 spec / Phase-2 delta) |
| 40 | PC9 | /MODEM_STATUS | U24.6 (2B) ← U19.66 STATUS (1.8 V) | Modem powered/ready (≈ 11.2 s after power-on) | IN pull-DOWN (floats when modem off: U24 Ioff) | GPIO, **EXTI9** (shared with PB9) | No / FT | V5: NC → new | `PIN_MODEM_STATUS` | poll it (EXTI9 belongs to the accelerometer) → D-14 (merged into B-10). ▶ audit B-10: 100 k C25803 `/MODEM_STATUS` → GND |
| 41 | PA8 | /CHRG_EN | U6.4 CHGOFF, R56 100 k → GND | Charger disable; HIGH = charge OFF | OUT PP | GPIO (TIM1_CH1 AF1) | No / FT | `PIN_CHRG_EN` → same | `PIN_CHRG_EN` | In reset/DFU R56 → charger ON (as V5). ▶ audit A-11: R56 100 k re-netted to /3V3 → charger OFF by default; polarity unchanged |
| 42 | PA9 | unconnected (NC flag) | — | spare | ANALOG | USART1_TX AF7, OTG_FS_VBUS AF10 | — | `PIN_USART1_TX` → **REMOVED** (role now PC6) | `PIN_DBG_TX` if a pad is added | USART1 is RX-only on v6 (TX alternates PA15/PB6 are taken). Add a test pad → D-12. ▶ audit: only remaining spare after (h); also the only candidate left for D-08's board-ID strap (open) |
| 43 | PA10 | /USART1_RX | U18.27 TXD2 (F9P UART2 out), K1.1 (NC → modem DIN), Rdfu1 22 k → /3V3 (2.28 mm) | Passive tap on the F9P → modem stream (fail-safe path through K1 NC) | AF RX, **no internal pull** (PA10 pull-up is 7–14 kΩ, DS Table 53) | **USART1_RX AF7** | No / FT | `PIN_USART1_RX` → same (tap), now RX-only | `PIN_F9P_TX2_TAP` | `Uart RELAY(PA10, PA9)` → RX-only instance. ▶ audit D-01: Rdfu1 22 k → 100 k C25803 (back-feed ≤ 27 µA) |
| 44 | PA11 | /DFU_DM | J11 A7/B7, D15 PESD5V0S1BA (6.74 mm from J11) | USB FS D− (ROM DFU + CDC console) | AF | **OTG_FS_DM AF10** | No / FT | `CON SerialUSB` → same | — | route 55.1 mm |
| 45 | PA12 | /DFU_DP | J11 A6/B6, D14 (3.19 mm) | USB FS D+ | AF | **OTG_FS_DP AF10** | No / FT | same | — | route 50.1 mm |
| 46 | PA13 | /SWDIO | TP3 (6.04 mm) | SWD data | AF0 (pull-up at reset) | SYS_JTMS-SWDIO AF0 | — | — | — | |
| 47 | VSS | GND | — | ground | power | — | — | — | — | |
| 48 | VDD | /3V3 | C107 2.10 mm | supply | power | — | — | — | — | ✓ |
| 49 | PA14 | /SWCLK | TP4 (5.43 mm) | SWD clock | AF0 (pull-down at reset) | SYS_JTCK-SWCLK AF0 | — | — | — | |
| 50 | PA15 | /ETH_RST | U11.37 RSTn | W5500 reset, LOW = held | OUT PP, drive LOW first thing | GPIO (**JTDI AF0 at reset, 30–50 kΩ pull-up**) | No / FT | `PIN_ETH_RST` → same | `PIN_ETH_RST` | W5500 is released during MCU reset/boot → E-02 (absorbs D-04). ▶ audit (verified): **4.7 k C23162 `/ETH_RST` → GND at U11.37** → ≤ 0.62 V worst case (W5500 internal 62–112 kΩ pull-up + PA15 30–50 kΩ); 100 k gives 2.75 V and fails |
| 51 | PC10 | /MODEM_PWR_EN | U20.3 EN (AP64350), R113 100 k PD | Modem buck enable, HIGH = on | OUT PP, LOW at boot | GPIO | No / FT | V5: NC (**V5.6 used PC3**) → new | `PIN_MODEM_PWR_EN` | any MCU reset power-cycles the modem (by design). ▶ audit A-01: U20 input moves to /MAIN5V only (D20 removed, no D21); EN control unchanged (R113 100 k PD, EN pull-up 1.5 µA → 0.15 V = OFF) |
| 52 | PC11 | /MODEM_RST | Q21 2N7002 gate, R115 100 k PD → U19.16 RESET | Modem reset; MCU HIGH = asserted | OUT PP, LOW at boot | GPIO | No / FT | V5: NC (**V5.6 used PC1**) → new | `PIN_MODEM_RST` | |
| 53 | PC12 | /GNSS_RESET_N | U18.49 RESET_N, R105 10 k → /3V3_GNSS | F9P hard reset, LOW = reset | **OUTPUT_OPEN_DRAIN** (or INPUT); never push HIGH | GPIO | No / FT | V5: NC → new | `PIN_GNSS_RESET_N` | push-HIGH with F9P off = back-feed |
| 54 | PD2 | unconnected (NC flag) | — | spare | ANALOG | TIM3_ETR AF2, EXTI2 | — | V5: NC | `PIN_ETH_PWR_EN` (▶ audit) | ▶ audit E-01 (verify_1 (h)): `/ETH_PWR_EN` → U12.2 EN, 100 k C25803 → GND; HIGH = 3V3_ETH on. D-08's 10 k board-ID strap on this pin conflicts and is unresolved |
| 55 | PB3 | /CHRG_STAT | U6.8 CHRG (open-drain), R57 100 k → /3V3 | LOW = charging | IN, no pull | GPIO, **EXTI3** (JTDO/SWO AF0 at reset; TIM2_CH2) | No (3V3 pull-up) / FT | `PIN_CHRG_STAT` → same | `PIN_CHRG_STAT` | SWO trace unavailable |
| 56 | PB4 | /CHRG_FAULT | U6.9 FAULT (open-drain), R58 100 k → /3V3 | LOW = fault / NTC pause | IN | GPIO, EXTI4 (NJTRST pull-up at reset) | No / FT | `PIN_CHRG_FAULT` → same | `PIN_CHRG_FAULT` | "pausa NTC" = EN allowed ∧ STAT idle ∧ FAULT low. ▶ audit: the power auditor decodes from the LTC4040 datasheet table (p.14) "pausa NTC" = CHRG low ∧ FAULT low, bad battery = CHRG high ∧ FAULT low; use that decode |
| 57 | PB5 | /BYP_CTRL | R40 1 k → Q6 MMBT3904 (R41 10 k B–E) → K1 coil (/SYS5V) | K1 Mode B; HIGH = energised = modem DIN ← PC6 | OUT PP, LOW at boot | GPIO (TIM3_CH2 AF2) | No / TC (output only ✓) | `PIN_BYP_CTRL` → same pin; NO contact now = PC6 (was PA9) | `PIN_BYP_CTRL` | K1 0.15 W while held |
| 58 | PB6 | /I2C_SCL | R30 4.7 k; U3 SHT40, U10 SC16IS752, U13 PCF8574, U26 SC7A20 | I2C1 SCL | AF OD | **I2C1_SCL AF4** | No / FT | `PIN_I2C_SCL` → same | `PIN_I2C_SCL` | Map: 0x18 SC7A20 (new), 0x20 PCF8574, 0x44 SHT40, 0x4D SC16IS752. **No TMP102** (0x48/0x49) on v6 as drawn. ▶ audit F-51: TMP102 C99269 at 0x48 (ADD0 → GND) between U6 and L6; F-52 option: second TMP102 at 0x49 |
| 59 | PB7 | /I2C_SDA | R31 4.7 k; same devices | I2C1 SDA | AF OD | **I2C1_SDA AF4** | No / FT | `PIN_I2C_SDA` → same | `PIN_I2C_SDA` | |
| 60 | BOOT0 | /BOOT0 | R98 10 k → GND (3.65 mm), SW2 → 3V3 | Boot select | I (B) | — | — | — | — | route 73.2 mm (61.4 mm on In1) |
| 61 | PB8 | /SER_IRQ | U10.15 IRQ (open-drain), R81 10 k → 3V3 | SC16IS752 IRQ | IN | GPIO, **EXTI8** | No / FT | `PIN_SER_IRQ` → same | `PIN_SER_IRQ` | |
| 62 | PB9 | /ACC_INT1 | U26.5 INT1 (push-pull, active HIGH default) | Motion interrupt / STOP wake | IN, EXTI rising | GPIO, **EXTI9** (TIM4_CH4, TIM11_CH1) | No / FT | V5: NC → new | `PIN_ACC_INT1` | owns EXTI9 |
| 63 | VSS | GND | — | ground | power | — | — | — | — | |
| 64 | VDD | /3V3 | C110 3.90 mm (shared with pin 1), C108 4.63 mm | supply | power | — | — | — | — | |
Count check: 50 GPIO pads (PA0–PA15 = 16, PB0–PB10 + PB12–PB15 = 15, PC0–PC15 = 16, PD2 = 1, PH0/PH1 = 2) + NRST, BOOT0, VBAT, VCAP1, VDDA, VSSA (6) + VDD ×4 + VSS ×4 = **64**. 60 pins are connected; the 4 truly unconnected spares are **PA9, PB10, PC5, PD2**.
## 2. Conflictos y banderas
### 2.1 Pines de firmware que desaparecen o cambian de significado en v6
| Ítem V5 | Estado en v6 | Sustituto / acción |
|---|---|---|
| `PIN_USART1_TX` PA9 + `Uart RELAY(PA10, PA9)` | PA9 sin conexión (bandera NC) | La **consola nunca estuvo en PA9**: `CON = SerialUSB` (PA11/PA12, J11) no cambia. PA9 era el camino de inyección del Modo B hacia el módem por K1 NO. En v6 ese camino es **PC6 USART6_TX → K1.10 (NO)**, y el MCU ahora también escucha al módem en **PC7 USART6_RX**. USART1 queda como derivación **solo RX** en PA10 (TXD2 del F9P). En v6 no existe pin TX de depuración por UART (D-12). |
| `PIN_PWR_CTRL` PA1 | Solo riel del GNSS | La alimentación del módem es `PIN_MODEM_PWR_EN` PC10. Los ciclos de etapa nunca deben usarse para recuperar el módem. |
| Puente PCF8574 P7 → SW4G1 `MODEM_RST` (`PCF_MODEM_RST_BIT 0x80`, `ENABLE_MODEM_RST`) | U13.12 (P7) sin conexión; no hay SW4G1 | Eliminar el camino del puente; usar PC11 (reset) / PC8 (PWRKEY) / PC10 (alimentación). |
| TMP102 0x48 (`I2C_ADDR_TMP102`, fuente de `CHG_CELL_HOT/COOL`) | **no hay TMP102 en v6** | La temperatura de celda para el gobernador no tiene fuente en la tarjeta. ▶ audit F-51 (Mayor, verificado): TMP102 C99269 en 0x48 junto a U6 (`tchg`) + derivación de la NTC del paquete en PC5 (`tcell`, válida con VEH5V presente). |
| `PIN_ETH_INT` V4 = PB2 | PC0 en v6 (como V5) | ✓ |
| `board_v56.h` de V5.6 (ECO §H): MODEM_EN PC3, MODEM_RST PC1, MODEM_LED PC2, ONSLP PC4, ASSOC PC5, RTCM_TAP PC7 | v6: PC1/PC2 = entradas del F9P, **PC3 = salida RTK_STAT del F9P**, PC4 = NTC2 | `board_v56.h` y `board_v6.h` nunca deben compartir binario: un build V5.6 maneja PC3 en ALTO contra el RTK_STAT push-pull del F9P. Se propuso un strap de identificación de tarjeta (D-08); su pin PD2 ahora lo reclama E-01, así que el pin del strap queda abierto (PA9 es el único libre). |
### 2.2 Nets de v6 sin contraparte en firmware (nuevas para 0.7.x)
PA7 GNSS_TIMEPULSE · PC1/PC2 ANT_DETECT/ANT_SHORT_N (entradas del F9P, reserva) · PC3 GNSS_RTK_STAT · PC4 NTC2 · PC6/PC7 USART6 · PC8 PWRKEY · PC9 STATUS · PC10 MODEM_PWR_EN · PC11 MODEM_RST · PC12 GNSS_RESET_N · PB9 ACC_INT1 (SC7A20 en 0x18).
### 2.3 Comprobaciones de ADC y de 5 V
- Toda net analógica está en un pad con ADC: BAT_SENSE PA0/IN0, 5V_SENSE PA4/IN4, IGN_SENSE PA5/IN5, NTC_TEMP PB1/IN9, NTC2 PC4/IN14. Pad ADC libre: PC5/IN15. ✅
- Ninguna señal de 5 V en ningún pin; los dos pines TC llevan PA0 ≤ 2.10 V y PB5 (salida). ✅
- IGN_SENSE es el único pin que puede exceder VDD: llega a 3.23 V con 28 V, y el clamp BAT54 lo sostiene en ≈ 3.55–3.65 V por encima de ≈ 30.3 V (0.24 mA a 36 V, 1.2 mA a 58 V hacia /3V3). En modo analógico se pierde la tolerancia FT, así que el clamp es lo que lo protege. No hay clamp negativo (D-06).
### 2.4 Asignación de funciones alternas, temporizadores y EXTI
- **Sin conflictos de AF.** USART2 PA2/PA3 AF7 · USART6 PC6/PC7 AF8 · USART1_RX PA10 AF7 (sin TX) · SPI2 PB13/PB14/PB15 AF5 (CS PB12 como GPIO) · I2C1 PB6/PB7 AF4 · OTG_FS PA11/PA12 AF10 · SWD PA13/PA14 AF0. Cada periférico usa un conjunto de AF consistente.
- El TX de USART1 no se puede recuperar: sus alternativas son PA9 (NC), PA15 (ETH_RST) y PB6 (I2C1_SCL).
- Temporizadores: ventilador PA6 = TIM3_CH1 y PPS PA7 = TIM3_CH2 comparten la base de tiempo de TIM3. La política del ventilador es ON/OFF (GPIO, `drogheda-fan-policy`), así que TIM3 queda libre para capturar el PPS. Si algún día se restaura el PWM del ventilador, marcar el tiempo del PPS por EXTI7 (contador de ciclos DWT). El arranque suave de PA1 usa TIM2_CH2 (libre).
- Colisiones EXTI (un puerto por línea, SYSCFG_EXTICR): **EXTI3** = PC3 RTK_STAT y PB3 CHRG_STAT; **EXTI9** = PB9 ACC_INT1 y PC9 MODEM_STATUS. Asignar EXTI9 al acelerómetro (despertar por movimiento) y sondear STATUS. Asignar EXTI3 a RTK_STAT solo si se quiere medir el parpadeo, y sondear CHRG_STAT. EXTI0 (ETH_INT), EXTI7 (PPS) y EXTI8 (SER_IRQ) son únicos.
### 2.5 Pines que tocan al ZED-F9P (regla de retorno de corriente, lección 0.5.5/0.5.6)
Mientras `PIN_GNSS_PWR` esté en BAJO: PA2 INPUT sin pull; PA10 sin pull (su pull-up interno es de 7–14 kΩ); PC7 sin pull-up; PC12 liberado (open-drain); PA7/PC3 sin pull-up; PC1/PC2 analógicos. **El camino de hardware U24 → /DOUT_4G → U18.26 no se puede corregir por firmware** salvo manteniendo el módem apagado siempre que el F9P esté apagado (D-01, Mayor, absorbe C-06). ▶ audit (corrección verificada): U27 = Nexperia 74LVC1G125GV **C12518** (Ioff ±2 µA) alimentado de /3V3_GNSS, OE̅ = GND, 100 nF C14663; Rdfu1 → 100 k C25803. Comprobación de banco: /3V3_GNSS < 0.3 V con PA1 en BAJO y el módem encendido.
## 3. Arranque y depuración
| Ítem | v6 | Veredicto |
|---|---|---|
| BOOT0 | R98 10 k → GND a 3.65 mm; SW2 a 3V3 (serigrafía «BOOT») | ✅ |
| BOOT1 / trampa DFU en PB2 | PB2 solo en R99 10 k → GND (2.84 mm); ETH_INT en PC0 | ✅ (memoria `drogheda-einarboard-30-mcu-integration`) |
| El DFU de ROM necesita HSE | Y3 25 MHz está soportado, pero la colocación del cristal y el margen de gm son pobres | ⚠ D-02 |
| NRST | C104 100 nF (3.26 mm, valor del DS10314) · SW1 (táctil 6 mm, NRST en el par de pads de 6.5 mm, GND en el otro) · P6 RESET-EXT (JST-XH, era P10 en V5) · TP5. Llega solo al MCU. | ✅ circuito / ⚠ sin ESD en P6 (G-08) |
| SWD | TP3 SWDIO (6.04 mm), TP4 SWCLK (5.43 mm), TP5 NRST, TP6 GND (a 17.6 mm), TP7 3V3. Sin header. SWO imposible (PB3 = CHRG_STAT). | ⚠ usable con pinzas; D-12 |
| USB DFU | PA11/PA12 → J11 (USB-C, CC 5.1 k ×2), D14/D15/D16 PESD5V0S1BA a 3.19 / 6.74 / 6.83 mm de J11; VBUS → D13 → AMS1117 (OR con SYS5V vía D12, sin retorno hacia SYS5V) | ✅ ECO E.5 (parte DFU) cumplida |
| HSE | Y3 C14872 YXC HC-49S 25 MHz, **CL 20 pF**, −20…+70 °C, con C113/C114 15 pF → CL_eff = 7.5 + (5…10) pF parásitos = 12.5–17.5 pF. Pads a 8.32/11.30 mm borde (10.30/14.21 mm centro) de PH0/PH1 (objetivo ≤ 5). | ❌ D-02 (Menor, verificado) |
| LSE | Y4 C32346 Epson FC-135, **CL 12.5 pF, ESR 70 kΩ**, con capacitores de 12 pF → CL_eff ≈ 9 pF. Pads a 5.54/7.91 mm. | ⚠ D-03 |
## 4. Señales específicas
- **CHRG_STAT PB3 / CHRG_FAULT PB4:** open-drain del LTC4040 (máx. absoluto 6 V), R57/R58 100 k a /3V3 (riel del MCU siempre encendido, así que no hay retorno). ✅ PFO (U6.20) va solo a TP2, sin pull-up y sin pin del MCU. RST (U6.11) sin conexión. **CLPROG** va solo a TP1 (D-10). ▶ audit: PFO → PB10 (A-13); CLPROG se queda en TP1 (no queda pin ADC una vez que PC5 toma la NTC del paquete).
- **IGN_SENSE:** 22 k / (22 k ∥ 3.3 k = 2.870 k) → relación 0.1154 (partes ±1 %: 0.1134–0.1174). Voltaje en el pin: **12 V → 1.385 V** (1.30 V con el pull-down interno que habilita el firmware V5), **24 V → 2.769 V**, **28 V → 3.231 V**, **36 V → 4.154 V en circuito abierto, recortado a ≈ 3.55 V** (BAT54 0.24 mA). 58 V: 1.2 mA de corriente de clamp; Rig1 disipa 0.135 W (> 0.1 W del 0603, solo transitorio). La escala completa del ADC se alcanza a 28.6 V. Umbrales digitales (DS10314 tabla 53, probados en producción VIL 0.3 VDD = 0.99 V, VIH 0.7 VDD = 2.31 V): un ALTO está garantizado solo por encima de **20.0 V**. **Una ignición de 12–14.4 V queda en la banda indefinida.** Comprobación de unión: /IGN_SENSE = {Rig1.2, Rig2.1, Rigb1.1, C9.1, D5.2 (A), U16.21}, una sola net en la netlist y en la PCB (6 pads, 1 grupo conectado, 14.2 mm en F.Cu). **La pérdida de unión de la V5.6 no está presente en v6.** ✅ ▶ audit F-02 (Bloqueante): el `/IGN_IN` crudo corre 106.47 mm en In2 a 0.221 mm de `/VEH5V`; mover Rig1 a P1.3 convierte ese tramo en `/IGN_SENSE` limitado en corriente (≤ 1.4 mA a 36 V, 2.5 mA a 58 V); C9 en el MCU mantiene τ = 0.25 ms. D-05 cambia la relación a 0.0833 si Rigb1 = 2.2 k.
- Control del módem: PC10 → U20 EN (R113 100 k PD); PC8 → Q20 → PWRKEY (R114 PD); PC11 → Q21 → RESET (R115 PD); PC9 ← U24 ← STATUS 1.8 V. Todos apagados o liberados por omisión en reset/DFU. ✅
- **GNSS:** RESET_N PC12 con R105 10 k a /3V3_GNSS (manejo open-drain) ✅; TIMEPULSE PA7 ✅; RTK_STAT PC3 ✅; ANT_DETECT/ANT_SHORT_N son entradas del receptor sin nada que las maneje (D-07).
- **INT1 del acelerómetro (T11):** PB9 EXTI9, push-pull ✅.
- **NTC2:** PC4, R126 10 k/1 % + C157 100 nF (3.11 mm), P8 ✅.
- **USART6 PC6/PC7:** AF8 en ambos ✅. TX va por K1 NO (solo Modo B). RX va por R106 100 Ω y siempre está conectado.
- **Banderas NC de ERC en U16.37/38 y U10.13/14:** cosméticas. Los cuatro pines están en sus nets en la netlist (U16.37 ∈ /USART6_TX {K1.10}; U16.38 ∈ /USART6_RX {R106.2}; U10.13/14 ∈ /I2C_SCL/SDA), los pads de la PCB llevan las mismas nets (verificado por IPC-356) y las cuatro nets están ruteadas. Las banderas deben borrarse de todos modos (D-11).
## 5. Lista de cambios de firmware — `board_v6.h` / FW 0.7.x
**Pines cuyo significado cambia respecto a V5:** PA1 (solo GNSS), PA9 (desaparece), PA10 (derivación solo RX, F9P directo), PB5 (el NO de K1 ahora es PC6), PA5 (leer analógico), PC1/PC2/PC3/PC4/PC6–PC12/PA7/PB9 (nuevos), TMP102 y el reset por P7 del PCF (desaparecen).
Periféricos nuevos por inicializar: USART6 (PC7 RX, PC6 TX, 115200, AT + contador de bytes RTCM); USART1 solo RX en PA10; captura TIM3_CH2 o EXTI7 en PA7 (PPS); EXTI9 en PB9 y el SC7A20 en 0x18 (compatible LIS3DH: CTRL_REG1/3, INT1_CFG/THS/DURATION); canales ADC IN5 (IGN) e IN14 (NTC2); LSE en modo de alto drive (`LSEMOD`) con respaldo LSI para el despertar por RTC; W5500 como en V5.
**En BAJO por omisión en las primerísimas líneas de `setup()`** (antes de cualquier delay o inicialización de USB): PC10 MODEM_PWR_EN, PC8 PWRKEY, PC11 MODEM_RST, PA1 GNSS_PWR, PB5 BYP_CTRL, **PA15 ETH_RST** (sale del reset en ALTO por el pull-up JTDI; el 4.7 k de E-02 lo mantiene bajo hasta entonces), PA6 FAN, PB0 EXT_LED y **PD2 ETH_PWR_EN** si se adopta E-01. PA8 CHRG_EN pertenece al gobernador (ALTO hasta que decida).
Entradas nuevas si se adoptan las correcciones de la auditoría: PB10 PFO (EXTI10 flanco de bajada, A-13); PC5 ADC1_IN15 NTC del paquete, relación 120/220 (F-51); TMP102 en 0x48 (F-51) y opcionalmente 0x49 (F-52); PC2 falla de corto de antena desde el TPS2552 (C-01).
Dejar en alta impedancia / analógico: PA9, PB10, PC5, PD2 (salvo que se adopten E-01 / A-13 / F-51, que toman PD2 / PB10 / PC5), PC1, PC2; todos los pines hacia el F9P mientras el F9P esté apagado (§2.5); PC7/PC9 mientras el módem esté apagado (PC9 con pull-down).
Open-drain: PC12. Los drivers de PC8/PC11 son FET externos, así que los pines del MCU son push-pull.
Secuencia: PA1 ALTO → ≥ 4 s → PC10 ALTO → 100 ms → pulso PC8 ALTO ≥ 50 ms → esperar PC9 ALTO (≈ 11.2 s) o `RDY` por AT → trabajo → apagado por AT o PC8 ALTO ≥ 2.5 s → PC10 BAJO → PA1 BAJO. **Nunca** dejar PC10 en ALTO con PA1 en BAJO (D-01) salvo que esté montada la corrección de hardware de D-01. Cualquier reset del MCU apaga y enciende el módem (R113) y el F9P (PA1 flota), así que la lógica de recuperación debe asumir un módem frío después de cada reset.
Borrador del encabezado:
```c
// board_v6.h — EinarBoard v6 (hbox-watchdog-v6), STM32F411RET6 LQFP64
#define HBOX_BOARD_NAME "EinarBoard v6 (HBOX v6)"
#define HBOX_BOARD_MCU "STM32F411RET6 LQFP64"
#define BOARD_HSE_HZ 25000000UL
#define BOARD_LSE_HZ 32768UL
#define BOARD_SER_XTAL_HZ 3686400UL // Y2 = C2238 (3.6864 MHz; schematic value text says 1.8432 MHz)
// power / analog
#define PIN_BAT_SENSE PA0 // ADC1_IN0, /2
#define PIN_GNSS_PWR PA1 // HIGH = F9P rail on (Q5->Q1->SW_5V->U21). Was PIN_PWR_CTRL (stack)
#define PIN_PWR_CTRL PIN_GNSS_PWR
#define PIN_5V_SENSE PA4 // ADC1_IN4, /2 (VEH5V = U25 or P2)
#define PIN_IGN_SENSE PA5 // ADC1_IN5 — READ ANALOG (12 V: 1.39 V, 24 V: 2.77 V)
#define PIN_NTC PB1 // ADC1_IN9, P7 probe 1
#define PIN_NTC2 PC4 // ADC1_IN14, P8 probe 2
#define PIN_CHRG_EN PA8 // HIGH = charger OFF (R56 PD -> ON in reset)
#define PIN_CHRG_STAT PB3 // LOW = charging (OD, R57 100k)
#define PIN_CHRG_FAULT PB4 // LOW = fault / NTC pause (OD, R58 100k)
#define PIN_FAN PA6 // HIGH = fan on (TIM3_CH1 if PWM)
#define PIN_LED_C13 PC13 // active LOW
#define PIN_EXT_LED PB0 // HIGH = panel LED (P9)
// GNSS (ZED-F9P U18)
#define PIN_GNSS_TX PA2 // USART2_TX AF7 -> F9P RXD (hi-Z when F9P off!)
#define PIN_GNSS_RX PA3 // USART2_RX AF7 <- F9P TXD
#define PIN_F9P_TX2_TAP PA10 // USART1_RX AF7 <- F9P TXD2 (RX-only, no pull)
#define PIN_GNSS_PPS PA7 // TIM3_CH2 AF2 / EXTI7
#define PIN_GNSS_RTK_STAT PC3 // 0 fixed / blink corrections / 1 none
#define PIN_GNSS_RESET_N PC12 // OPEN-DRAIN only
#define PIN_GNSS_ANT_DET PC1 // F9P INPUT — keep analog/hi-Z
#define PIN_GNSS_ANT_SHORT_N PC2 // F9P INPUT — keep analog/hi-Z
// modem (A7670SA U19)
#define PIN_MODEM_TX PC6 // USART6_TX AF8 -> K1 NO -> U23 -> RXD (Mode B)
#define PIN_MODEM_RX PC7 // USART6_RX AF8 <- R106 <- U24 <- TXD
#define PIN_MODEM_PWRKEY PC8 // HIGH = key pressed (Q20)
#define PIN_MODEM_STATUS PC9 // INPUT_PULLDOWN, HIGH = modem on
#define PIN_MODEM_PWR_EN PC10 // HIGH = U20 on (R113 PD)
#define PIN_MODEM_RST PC11 // HIGH = reset asserted (Q21)
#define PIN_BYP_CTRL PB5 // HIGH = K1 energised (modem DIN <- PC6)
// I2C1 / expanders / sensors
#define PIN_I2C_SCL PB6
#define PIN_I2C_SDA PB7
#define PIN_SER_IRQ PB8 // SC16IS752 IRQ, EXTI8
#define PIN_ACC_INT1 PB9 // SC7A20 INT1, EXTI9
#define I2C_ADDR_SC7A20 0x18
#define I2C_ADDR_PCF8574 0x20
#define I2C_ADDR_SHT40 0x44
#define I2C_ADDR_SC16IS 0x4D
// Ethernet (W5500 U11, SPI2)
#define PIN_ETH_CS PB12
#define PIN_ETH_SCK PB13
#define PIN_ETH_MISO PB14
#define PIN_ETH_MOSI PB15
#define PIN_ETH_INT PC0
#define PIN_ETH_RST PA15 // JTDI pull-up at reset: drive LOW first (E-02: 4.7k PD C23162)
// spare as drawn: PA9 (USART1_TX), PB10, PC5 (ADC1_IN15), PD2
// --- only if the audit fixes are adopted (verify_1 conflict (h)) ---
// #define PIN_ETH_PWR_EN PD2 // E-01: HIGH = 3V3_ETH on (100k PD)
// #define PIN_PFO PB10 // A-13: LTC4040 PFO, LOW = backup, EXTI10 falling
// #define PIN_NTC_CELL PC5 // F-51: ADC1_IN15, /NTC * 120/220, valid with VEH5V
// #define I2C_ADDR_TMP102_CHG 0x48 // F-51: charger die area (U6/L6)
// #define I2C_ADDR_TMP102_MODEM 0x49 // F-52 option
// PA9 stays spare (D-12 test pad); board-ID strap (D-08) pin unresolved
```
Ver también: [manual v6](../manuales/manual-tarjeta-v6.md) · [auditoría completa v6](v6-auditoria-completa.md) · [informe de cambios al esquemático v6](v6-cambios-esquematico.md) · [revisión contra lecciones V5.5](v6-revision-lecciones-v55.md).
## Historial de revisiones
| Versión | Fecha | Cambios |
|---|---|---|
| 1.0 | 2026-09-28 | Mapa de pines de la auditoría v6, republicado con 7 correcciones editoriales (inglés). |
| 1.1 | 2026-09-29 | Prosa y encabezados en español; tabla y borrador de `board_v6.h` sin cambios. |
??? note "Anexo técnico — trazabilidad"
Snapshot: sch `ecee9fed…` / pcb `6ddec80d…` (paquete de evidencia 2026-09-28). Los archivos `evidence/*.csv` citados arriba están en `03-Architecture-Hardware/kicad/_to_delete/v6-audit-20260928/evidence/`.

View File

@ -1,9 +1,9 @@
---
title: HBOX v6 — Pre-fabrication audit and work list
title: "HBOX v6 — Auditoría pre-fabricación y lista de trabajo (versión en inglés)"
tags: [project-drogheda, hardware, hbox, v6, pcb, audit, jlcpcb]
date: 2026-09-25
project: Project Drogheda
author: Helgen Technologies
date: 2026-09-25
version: 1.0
status: ACTIVE — do NOT order until section 3 is closed
audience: Michelle (layout), Leo
@ -11,13 +11,19 @@ audience: Michelle (layout), Leo
# HBOX v6 — Pre-fabrication audit
!!! note "Versión en inglés"
Versión en inglés — la versión en español es [Auditoría pre-fabricación v6](v6-auditoria-prefab.md).
!!! warning "Tarjeta: EinarBoard **v6** — proyecto KiCad `hbox-watchdog-v6` (EN DISEÑO, no se pide todavía) / Board: v6, in design"
Diseño nuevo con ZED-F9P y módem A7670SA soldados a bordo. **No es la V5.6** que se manda a fabricar esta semana (`hbox-watchdog-v5`, zócalos para simpleRTK2B y 4G NTRIP Master). Los hallazgos marcados «Impacto en V5.6» ya se aplicaron a la V5.6 y están en su informe de cambios.
**Board:** `hbox-watchdog-v6` (repo **HBox_PCB**) · **Planned order:** 5 prototypes at JLCPCB
(PCB + assembly) · **Date:** 25-Sep-2026 · [Versión en español](v6-auditoria-prefab.md)
!!! danger "Verdict: NOT ready to order yet"
!!! warning "Verdict: not ready to order yet"
Everything that depended on the schematic, BOM and attributes **is already fixed** (section 2).
What's left is **layout work** (section 3, Michelle) and **three decisions/purchases** (section 4, Leo).
When Michelle pushes her work, Claude re-runs the full audit and gives the final **GO**.
When Michelle pushes her work, the full audit is re-run and the final **GO** is given.
**Status today:** DRC **0 errors**, 0 unconnected, 0 dangling tracks · ERC **0 errors** ·
BOM: every populated part has a verified LCSC number.
@ -28,8 +34,8 @@ BOM: every populated part has a verified LCSC number.
DRC only compares geometry against the file's own clearance rules. It **cannot see**:
- a switching regulator with its diode 18 mm away (it must be ≤ 4 mm),
- a 0.25 mm track carrying 2.5 A,
- a switching regulator with its diode 18 mm away (it must be ≤ 4 mm),
- a 0.25 mm track carrying 2.5 A,
- a part with no LCSC number (JLC simply **doesn't place it**),
- a power chip with **no vias** under its thermal pad.
@ -44,8 +50,8 @@ That's what this audit checked.
| ✅ | **SIM: the physical SIM holder is now the primary SIM** | Telcel won't supply the MFF2. **J14** (JAE nano-SIM, LCSC C2977286) + R131–R134 are **fitted**; U22 (MFF2) + R127–R130 are **not fitted (DNP)**. The MFF2 footprint stays on the board as a future option. |
| ✅ | **U19 (modem) and L22** set to SMD | They were marked "through-hole", so JLC would have left them off the SMT line. Also fixed in the library. |
| ✅ | **64 parts with no LCSC number** | All given verified numbers from the JLC database (Basic where possible). JP1–JP5 (solder jumpers) removed from the BOM. |
| ✅ | **Input fuse F2** | Now a **fuse in a holder**: Littelfuse **0154002.DR** (C206910), 9.7 × 5 mm SMD block with a 2 A / 125 V NANO2 fuse. In the field the **fuse pulls out and is replaced without soldering**. *(The PCB footprint still has to be swapped → task M2.)* |
| ✅ | **Mounting holes** | All 4 on an exact **130.0 × 90.0 mm** rectangle, 5 mm from each edge; unique names MH5–MH8. |
| ✅ | **Input fuse F2** | Now a **fuse in a holder**: Littelfuse **0154002.DR** (C206910), 9.7 × 5 mm SMD block with a 2 A / 125 V NANO2 fuse. In the field the **fuse pulls out and is replaced without soldering**. *(The PCB footprint still has to be swapped → task M2.)* |
| ✅ | **Mounting holes** | All 4 on an exact **130.0 × 90.0 mm** rectangle, 5 mm from each edge; unique names MH5–MH8. |
| ✅ | Cleanup | 6 dangling track pieces deleted; "respaldo" copies out of git; power-width rules added to DRC. |
---
@ -53,7 +59,7 @@ That's what this audit checked.
## 3. What's left — **Michelle's** work list
!!! warning "Before you start — three rules"
1. **`git pull` first.** Claude changed the `.kicad_pcb` today (attributes, LCSC, holes, fuse).
1. **`git pull` first.** The `.kicad_pcb` changed today (attributes, LCSC, holes, fuse).
If you work on an old copy and save it, all of that is lost.
2. **Do NOT use "Update PCB from Schematic"** until Leo decides J10/P11/P12 (section 4):
it would set them back to fitted.
@ -68,22 +74,22 @@ Recommended order (highest impact first):
### M2 · Swap the F2 (fuse) footprint
- [ ] In the PCB: right-click **F2** → *Change Footprint…* → `Fuse:Fuseholder_Littelfuse_Nano2_154x`.
- [ ] The block is **9.7 × 5 mm** (was 4.5 × 3.2). Keep it near its current spot (159.5, 127),
between **P1** (24 V input) and **Q23**. Tracks **/24V_IN** and **/VIN_FUSED** **≥ 1.5 mm**.
- [ ] Leave **tweezer access** to the fuse (it pulls straight up): nothing tall within 2 mm of its long sides.
- [ ] The block is **9.7 × 5 mm** (was 4.5 × 3.2). Keep it near its current spot (159.5, 127),
between **P1** (24 V input) and **Q23**. Tracks **/24V_IN** and **/VIN_FUSED** **≥ 1.5 mm**.
- [ ] Leave **tweezer access** to the fuse (it pulls straight up): nothing tall within 2 mm of its long sides.
### M3 · Rebuild the U25 regulator group (24 V → 5 V) — **the most important one**
### M3 · Rebuild the U25 regulator group (24 V → 5 V) — **the most important one**
**Problem:** U25 (TPS54360B) sits 15 mm north of its power parts:
**Problem:** U25 (TPS54360B) sits 15 mm north of its power parts:
| Measurement | Now | Target |
|---|---|---|
| Diode **D34** (cathode) → U25 pin 8 (SW) | **18.2 mm** | **≤ 4 mm** |
| Input capacitors **C149/C150** → pin 2 (VIN) | 5–8 mm | **≤ 3 mm** |
| Inductor **L22** (pad 1) → pin 8 | **25.9 mm** | ≤ 12 mm (L22 is big; acceptable) |
| SW node copper (pin 8 → D34 → L22) | 0.5 mm track | **polygon ≥ 2 mm**, as short as possible |
| Diode **D34** (cathode) → U25 pin 8 (SW) | **18.2 mm** | **≤ 4 mm** |
| Input capacitors **C149/C150** → pin 2 (VIN) | 5–8 mm | **≤ 3 mm** |
| Inductor **L22** (pad 1) → pin 8 | **25.9 mm** | ≤ 12 mm (L22 is big; acceptable) |
| SW node copper (pin 8 → D34 → L22) | 0.5 mm track | **polygon ≥ 2 mm**, as short as possible |
| GND vias under U25's thermal pad | **0** | **≥ 6** (to In1 and In2) |
| R120–R123, C155, C156 (compensation/FB/RT) | nearby | ≤ 5 mm from pins 3–6, **away from SW** |
| R120–R123, C155, C156 (compensation/FB/RT) | nearby | ≤ 5 mm from pins 3–6, **away from SW** |
<figure markdown>
![Correct U25 part order](img/u25-lazo-caliente.svg){ width="100%" }
@ -94,24 +100,24 @@ So **U25 moves down to its big parts**, instead of moving the big parts up.
Steps:
- [ ] **Step 1 — Move C151 out** (100 µF electrolytic, now at 173.75, 123.9). It's only an energy
reservoir and works the same 10–20 mm away. Suggestion: rotated 90°, centred at ≈ **(169.5, 112)**,
- [ ] **Step 1 — Move C151 out** (100 µF electrolytic, now at 173.75, 123.9). It's only an energy
reservoir and works the same 10–20 mm away. Suggestion: rotated 90°, centred at ≈ **(169.5, 112)**,
the gap U25 leaves behind. It stays on **/VIN_PROT**.
- [ ] **Step 2 — Put U25 where C151 was**, centre ≈ **(175.5, 124.5)**, rotated so that
**pin 8 (SW)** is the corner **closest to D34's cathode** (D34's south pad, at 182.5, 126.65)
and **pin 2 (VIN)** faces **west**.
- [ ] **Step 3 — C149 and C150 right against pin 2 (VIN)**, ≤ 3 mm, with their GND end toward U25's
- [ ] **Step 3 — C149 and C150 right against pin 2 (VIN)**, ≤ 3 mm, with their GND end toward U25's
thermal pad. This is the loop that radiates: **input → U25 → D34 → GND → input**. Keep it tiny.
- [ ] **Step 4 — D34 stays** where it is (182.5, 123.25). Its **anode (GND)** goes to the same GND
island as C149/C150 and U25's pad.
- [ ] **Step 5 — L22 stays.** Join pin 8 → D34 cathode → L22 pad 1 (193.5, 126.9) with **one polygon
≥ 2 mm wide**. No wider than needed (this is the node that "shouts").
≥ 2 mm wide**. No wider than needed (this is the node that "shouts").
- [ ] **Step 6 — Small parts go with U25:** C152 (BOOT) between pin 1 and pin 8; R120, R121, R122, R123,
C155, C156 on the pin 3–6 side (**quiet side**). The FB divider (R121/R122) senses 5 V **at the
C155, C156 on the pin 3–6 side (**quiet side**). The FB divider (R121/R122) senses 5 V **at the
output capacitors** C153/C154, not at the inductor pad.
- [ ] **Step 7 — Ground:** one GND island on F.Cu under the whole group, **≥ 6 vias under U25's thermal
pad**, and 2–3 vias next to each capacitor GND and D34's anode.
- [ ] **Step 8 — /VIN_PROT** from Q23 to C149/C150: **≥ 1.5 mm** (or a polygon).
- [ ] **Step 8 — /VIN_PROT** from Q23 to C149/C150: **≥ 1.5 mm** (or a polygon).
!!! tip "Reference"
This is the same arrangement as TI's reference layout for the TPS54360 and the
@ -121,12 +127,12 @@ Steps:
| Measurement | Now | Target |
|---|---|---|
| L20 (SW pad) → U20 pin 8 (SW) | 7.6 mm, **23 mm** track at 0.25 mm | **≤ 3 mm**, short track **≥ 1 mm** |
| C127 (10 µF) → U20 pin 2 (VIN) | 5.4 mm | **≤ 3 mm** |
| L20 (SW pad) → U20 pin 8 (SW) | 7.6 mm, **23 mm** track at 0.25 mm | **≤ 3 mm**, short track **≥ 1 mm** |
| C127 (10 µF) → U20 pin 2 (VIN) | 5.4 mm | **≤ 3 mm** |
| GND vias under U20's pad | 0 | **≥ 4** |
- [ ] Move **L20** next to U20 pin 8 and route **/SW_MODEM** short and wide.
- [ ] Move **C127** next to pin 2. (C128 is already fine, at 2 mm.)
- [ ] Move **C127** next to pin 2. (C128 is already fine, at 2 mm.)
- [ ] Vias under U20's thermal pad.
### M5 · Vias under the other power chips
@ -140,15 +146,15 @@ Use this table (the DRC warning list is incomplete: it misses SW_BAT and the mod
| Priority | Net | Now | Target | Why |
|---|---|---|---|---|
| 1 | **/SW_BAT** | 0.25 mm, 12 mm | **≥ 1.0 mm** or polygon | ~2.5 A battery path. Already flagged critical in v5.5 (0.3 mm); v6 is thinner. |
| 2 | **/VEH5V** | 0.25 neck + 0.5 mm, ~110 mm | **≥ 1.0 mm** | U25 output, up to ~3 A |
| 3 | **/MAIN5V**, **/SYS5V** | 0.25–0.5 mm, 100–150 mm each | **≥ 1.0 mm** on the trunk | Main 5 V for the whole board |
| 4 | **/BAT_PLUS** | 0.25–0.5 mm, 118 mm | **≥ 1.0 mm** | Battery current |
| 5 | **/SW_MODEM** | 0.25 mm, 23 mm | ≥ 1.0 mm **and short** | Solved by M4 |
| 6 | **/VBAT_MODEM** | 0.25 neck (1 mm), 0.5 (11 mm) | **≥ 1.0 mm** | 2 A bursts when transmitting |
| 7 | /VIN_MODEM, /SW_IN, /VIN_SW | 0.25–0.5 mm | ≥ 0.8 mm | Regulator inputs |
| — | /VIN_PROT, /SW_PWRIN | 0.5 mm | — | Solved by M3 |
| No | /3V3_ETH, /5V_FAN, /SW_FAN, /FAN_RET | 0.25–0.5 mm | leave | Under 0.3 A |
| 1 | **/SW_BAT** | 0.25 mm, 12 mm | **≥ 1.0 mm** or polygon | ~2.5 A battery path. Already flagged critical in v5.5 (0.3 mm); v6 is thinner. |
| 2 | **/VEH5V** | 0.25 neck + 0.5 mm, ~110 mm | **≥ 1.0 mm** | U25 output, up to ~3 A |
| 3 | **/MAIN5V**, **/SYS5V** | 0.25–0.5 mm, 100–150 mm each | **≥ 1.0 mm** on the trunk | Main 5 V for the whole board |
| 4 | **/BAT_PLUS** | 0.25–0.5 mm, 118 mm | **≥ 1.0 mm** | Battery current |
| 5 | **/SW_MODEM** | 0.25 mm, 23 mm | ≥ 1.0 mm **and short** | Solved by M4 |
| 6 | **/VBAT_MODEM** | 0.25 neck (1 mm), 0.5 (11 mm) | **≥ 1.0 mm** | 2 A bursts when transmitting |
| 7 | /VIN_MODEM, /SW_IN, /VIN_SW | 0.25–0.5 mm | ≥ 0.8 mm | Regulator inputs |
| — | /VIN_PROT, /SW_PWRIN | 0.5 mm | — | Solved by M3 |
| No | /3V3_ETH, /5V_FAN, /SW_FAN, /FAN_RET | 0.25–0.5 mm | leave | Under 0.3 A |
- [ ] Priorities 1 to 7.
@ -157,7 +163,7 @@ Use this table (the DRC warning list is incomplete: it misses SW_BAT and the mod
- [ ] **Refill zones** (key **B**) — the holes moved and the fill is stale.
- [ ] **DRC → 0 errors.** (Yellow track-width warnings left on the "No" nets in the table are fine.)
- [ ] Check in the 3D viewer that **J14** (SIM holder) has a clear front: the card enters from one
short end; confirm which on the JAE drawing and leave ~6 mm clear in front of it.
short end; confirm which on the JAE drawing and leave ~6 mm clear in front of it.
- [ ] `git add` + `commit` + `push` (section 6) and **tell Leo**.
---
@ -168,7 +174,7 @@ Use this table (the DRC warning list is incomplete: it misses SW_BAT and the mod
- [ ] **Decide J10 (RJ45), P11 and P12:** fitted on this run? Today they're DNP on the PCB only.
- [ ] **Review the parts where the choice matters:** L20 Sunlord MWSA0804S-4R7MT (C17700167; check its pads fit the
SRU8028 footprint), L21 Murata LQG18HN68NJ00D (C162555, GNSS antenna choke),
C149/C150 2.2 µF 100 V (C153036), C151 Nichicon 100 µF 50 V (C116241), RS1 10 mΩ 1 W (C105362),
C149/C150 2.2 µF 100 V (C153036), C151 Nichicon 100 µF 50 V (C116241), RS1 10 mΩ 1 W (C105362),
F2 0154002.DR (C206910).
---
@ -177,7 +183,7 @@ Use this table (the DRC warning list is incomplete: it misses SW_BAT and the mod
| Option | Value |
|---|---|
| Layers / thickness | 4 layers, 1.6 mm, stackup **JLC04161H-7628** |
| Layers / thickness | 4 layers, 1.6 mm, stackup **JLC04161H-7628** |
| Finish | **ENIG** (required for the LGA modules U19 and U18) |
| Assembly | **Standard PCBA**, top side only |
| X-ray | Request on **U19** (A7670SA) and **U18** (ZED-F9P) |
@ -214,5 +220,14 @@ cd ~/Documents/Claude/Projects/Drogheda && git add 03-Architecture-Hardware/kica
|---|---|
| `bb78cb8` · `0288bd0` | T14: J14 primary, U22 DNP, ERC errors fixed, J14 LCSC |
| `91d2049` · `8a49327` | T15: LCSC on 64 parts, JP out of BOM, SIM + U19/L22 on the PCB, dangling tracks, width warnings; library |
| `61652cc` | T16: holes 130 × 90 mm, MH5–MH8 |
| `61652cc` | T16: holes 130 × 90 mm, MH5–MH8 |
| `d2db77f` · `03d83d1` | T17: fuse F2 → 0154002.DR holder |
---
## Historial de revisiones
| Versión | Fecha | Autor | Cambios |
|---|---|---|---|
| 1.0 | 2026-09-25 | Helgen Technologies | Pre-fabrication audit v6 and work list (English). |
| 1.1 | 2026-09-29 | Helgen Technologies | Nota de versión en inglés y vocabulario de avisos. Sin cambios técnicos. |

View File

@ -0,0 +1,251 @@
---
title: "EinarBoard v6 — Revisión contra las lecciones de la V5.5 (26–27 sep 2026)"
tags: [project-drogheda, hardware, einarboard, v6, v5.5, revision, lecciones]
date: 2026-09-28
project: Project Drogheda
author: Helgen Technologies
---
# EinarBoard v6 — Revisión contra las lecciones de la V5.5 (26–27 sep 2026)
!!! warning "EinarBoard v6 (`hbox-watchdog-v6`): en diseño, no se pide"
Diseño nuevo con ZED-F9P y módem A7670SA soldados a bordo. **No es la V5.6** que se manda a fabricar esta semana (`hbox-watchdog-v5`, zócalos para simpleRTK2B y 4G NTRIP Master). Los hallazgos marcados «Impacto en V5.6» ya se aplicaron a la V5.6 y están en su informe de cambios.
Fecha: 2026-09-28 · Diseño revisado: `kicad/hbox-watchdog-v6.kicad_sch` / `.kicad_pcb` (estado del 25-sep, después de T15) · Documentos de referencia: [ECO V5.6](v56-eco.md), [informe de cambios V5.6](v56-cambios-esquematico.md), [auditoría pre-fabricación v6](v6-auditoria-prefab.md), `CHANGELOG.md` del firmware 0.5.8 → 0.6.0 · Autor: Helgen Technologies (elaborado con asistencia de Claude) · Alcance: revisión de solo lectura; no se modificó ningún archivo de KiCad. La [auditoría completa v6](v6-auditoria-completa.md) del mismo día profundiza y supera esta revisión; lo aplicado está en el [informe de cambios v6](v6-cambios-esquematico.md).
## Resumen ejecutivo
1. La v6 ya resuelve por arquitectura el hallazgo más grave de la semana (F1): el módem A7670SA tiene su propio buck AP64350 (U20) con `MODEM_PWR_EN` en PC10, `PWRKEY` en PC8, `STATUS` en PC9 y `RST` en PC11, y su UART llega al MCU por USART6 (PC6/PC7). El módem se puede arrancar solo, sobre riel asentado, y se sabe si está vivo.
2. Con eso, el ciclo de 10 min en batería (F2) y la recuperación de enlace sin matar el módem (F3) son posibles en v6: falta solo el firmware (`ENABLE_DUTY 1` con la secuencia `PWR_CTRL` → 4 s → `MODEM_PWR_EN`).
3. Cargador (F4): `RS1` ya es 10 mΩ (C105362, límite 2.5 A) ✅, pero **`R50` sigue en 825 Ω (2.4 A)** ❌ → 1.5 kΩ (C22843).
4. Térmico del LTC4040 (F5): **`/SW_BAT` es una pista de 0.25 mm** (peor que los 0.3 mm de la V5.5), `/BAT_PLUS` 0.25–0.5 mm, el EP de U6 **no tiene vías térmicas**, L6 está a 15 mm de U6 y no hay ningún sensor de temperatura junto a U6/L6 (el TMP102 se eliminó; el SHT40 U3 está a 71 mm). ❌ — es el cambio nº 1.
5. Ventana NTC (F6): `R55` (RNTB) 10 k y `JP2` puenteado a Li-ion, igual que la V5.5; la pausa a ~40–42 °C se repite en v6 hasta decidir la química (LFP-HT + JP2 2-3 + 5.6 k). `CHRG_FAULT` sí llega al MCU (PB4) para mostrar «pausa NTC».
6. Fuente de 5 V (F7): **U25 TPS54360B está fijada a 5.00 V** (R121 53.6 k / R122 10.2 k) → solo 0.56 V sobre el PFI (4.44 V) y **0.10 V sobre la línea de corte del gobernador (4.90 V)**: el cargador se cortaría en cada ráfaga LTE. ❌ → R121 57.6 k (5.32 V).
7. Robustez (F8): ESD del DFU ya está junto a J11 (3–7 mm) ✅ y `ETH_INT` va a PC0 (sin trampa BOOT1) ✅; pero **J9 (USB del módem) no tiene ESD**, **`ETH_RST` (PA15) no tiene pull-down** y no hay puente en paralelo a P5 (corte). F1 PPTC 3 A queda solo en el riel del F9P (inocuo, sobredimensionado). Sin PoE en J10 por diseño.
8. Software (F9): la v6 pierde el `$GPTXT H00xx` del NTRIP Master de ArduSimple (el módem ahora es nuestro) → la identidad debe generarla el MCU (`$PHID` por UID, ya existe en 0.6.0-eth) también por 4G.
9. Veredicto: **3 ✅ (F1, F2, F3) · 4 ⚠ (F4, F6, F8, F9) · 2 ❌ (F5, F7)**. Todos los ❌ y ⚠ son cambios de valor de BOM o de layout; ninguno cambia la arquitectura.
10. Los cinco cambios por riesgo: (1) cobre + vías + sensor en U6/L6; (2) U25 a 5.3 V; (3) R50 1.5 k; (4) condensadores de VBAT_MODEM pegados a U19 y pistas del módem ≥ 0.8 mm; (5) pull-down en `ETH_RST` + USBLC6 en J9 + decidir RNTB/JP2.
## Índice del cuerpo del informe
El cuerpo está en inglés. Vocabulario: *finding* = hallazgo · *footprint* = huella · *track* = pista · *via* = vía · *pour* = vertido de cobre · *EP* = pad térmico.
| Sección | Qué contiene |
|---|---|
| 0. Method | Cómo se extrajeron los datos de la tarjeta y del esquemático; mapa pad → pin del LQFP-64. |
| 1. Lesson-by-lesson review (F1–F9) | Cada lección de banco de la V5.5 contra lo que hace la v6 tal como está dibujada: módem en batería, ciclo de 10 min, recuperación de enlace, cargador, térmico del LTC4040, ventana NTC, margen de la fuente de 5 V, robustez, software. |
| 2. Specific v6 checks requested | Comprobaciones puntuales pedidas por Leo. |
| 3. What to carry from V5.6 into v6 | Qué cambios de la V5.6 deben llevarse a la v6. |
| 4. Checklist ordered by risk | Checklist por riesgo con responsable. |
| 5. Notes and non-findings | Notas y lo que se revisó y no resultó hallazgo. |
## Cuerpo del informe (inglés)
## 0. Method
- Board: pad→net dump of every footprint (`padnets2.py`), track widths/lengths per net, via positions, footprint positions and pad-to-pad distances computed from `hbox-watchdog-v6.kicad_pcb`.
- Schematic: symbol values, `LCSC` and `Note` properties and block texts from `hbox-watchdog-v6.kicad_sch`.
- STM32F411RET6 LQFP-64 pad → pin mapping used throughout (pad 15 = PA1, 24 = PC4, 25 = PC5, 37 = PC6, 38 = PC7, 39 = PC8, 40 = PC9, 41 = PA8, 43 = PA10, 50 = PA15, 51 = PC10, 52 = PC11, 55 = PB3, 56 = PB4, 57 = PB5, 8 = PC0, 28 = PB2).
- Ground truth for the lessons: the bench findings of 26–27 Sep on V5.5 with firmware 0.5.7–0.6.0 (F1–F9 below).
Where a fact could not be found in the v6 files, it is stated as such.
---
## 1. Lesson-by-lesson review
### F1 — Modem never cold-starts on battery (shared Q1 switch, MP1584 UVLO, no MCU visibility)
**What v6 does today (found in the files):**
| Item | v6 |
|---|---|
| Modem power path | `U20` AP64350SP-13 (C2071691), `L20` 4.7 µH/5 A (C17700167), output `/VBAT_MODEM` = 0.8 V × (1 + R110 75 k / R111 20 k) = **3.80 V**. Input `/VIN_MODEM` fed by **`D20` SS34 from `/24V`** (vehicle side, via Q10) **or `D21` PMEG3050EP from `/MAIN5V`** (LTC4040 boost output on battery). The modem no longer hangs from Q1, F1 or `/SW_5V`. |
| Modem enable | `U20.3 EN` = `/MODEM_PWR_EN` = **U16 pad 51 = PC10**, with `R113` 100 k to GND (modem OFF while the MCU is in reset/DFU). No series resistor (direct drive; fine for the AP64350 EN pin). |
| PWRKEY / RST / STATUS | `/MODEM_PWRKEY` = **PC8** (pad 39) → `Q20` 2N7002 open-drain → `U19.1 PWRKEY`, `R114` 100 k pull-down on the gate. `/MODEM_RST` = **PC11** (pad 52) → `Q21` 2N7002 → `U19.16 RESET`, `R115` 100 k. `U19.66 STATUS` (1.8 V) → `U24` 74LVC2T45 → `/MODEM_STATUS` = **PC9** (pad 40). `U19.52 NETLIGHT` only drives `D4G1` via `R109`/`Q22` — not read by the MCU (STATUS covers the need). |
| Modem UART visibility | `U19.9 TXD` → `U24` → `/DOUT_4G` → **`U18.26` (ZED-F9P UART2 RXD, RTCM in)** *and* `R106` 100 Ω → **`/USART6_RX` = PC7 (pad 38)**. `U19.10 RXD` ← `U23` ← `/DIN_4G` ← `K1` relay common: NC = `/USART1_RX` (ZED-F9P `U18.27` TXD2 → also MCU PA10), NO = **`/USART6_TX` = PC6 (pad 37)**. So the MCU always hears the modem's TX (RTCM byte count = "modem registered and NTRIP flowing"), and talks to it on USART6 when K1 is in Mode B. This is the RTCM_TAP of V5.6 built in. |
| F9P power | `Q1` AO3401A (gate via `Q5`/`R1` from `/PWR_CTRL` = **PA1**, pad 15) → `/SW_5V` → `U21` AP2112K-3.3 → `/3V3_GNSS` → `U18`. Independent of the modem. |
| UVLO margin on battery | `/MAIN5V` (boost, R53 499 k / R54 100 k → 4.79 V nominal, 4.6 V measured under load on V5.5) − `D21` forward drop (≈0.3–0.45 V at 1–2 A) ≈ **4.2–4.5 V at U20 VIN** vs AP64350 VIN(min) 3.8 V → ≈ **0.4–0.7 V margin** (V5.5 had ≈ 0.1 V). Adequate but not generous: the buck runs at ~90 % duty (3.8 V out of 4.3 V in) during a 2 A burst. |
| Input capacitance at U20 | `C127` 10 µF (5.4 mm from U20.2) + `C128` 1 µF (2.0 mm). The V5.6 ECO specifies 2 × 22 µF + 10 µF at VIN (< 3 mm). |
| Output bulk at U19 | `C130` 220 µF, `C131` 220 µF, `C132` 22 µF, `C133` 1 µF, `C134` 100 nF, `C135` 33 pF, `C136` 10 pF, `D22` SMAJ5.0A. Distances from the VBAT pads (U19.55/56/57): **C130 17.8–19.7 mm, C131 10.5–12.4 mm**, C132 5.6–7.3 mm, C133 4.1–5.5 mm, D22 23–25 mm. The 440 µF sits 10–20 mm away, behind `/VBAT_MODEM` tracks of 0.25–3.0 mm (58.9 mm total, 6.3 mm on In1 at 0.5 mm). |
**Verdict: ✅ covered (architecture) — 4 layout/value follow-ups.**
**Changes:**
1. Move `C131` (and ideally `C130`) to ≤ 5 mm of U19 pads 55–57; pour `/VBAT_MODEM` on F.Cu from L20 to U19 (≥ 1.5 mm, no 0.25/0.5 mm necks; the T15 DRC rule already flags ≥ 0.8 mm).
2. Add 2 × 22 µF 0805 (C86817) at `U20.2 VIN` (< 3 mm), keep `C127`/`C128`; widen `/VIN_MODEM` (0.25/0.5 mm today) and `/SW_MODEM` (0.25 mm, 23 mm long) to ≥ 0.8 mm.
3. Battery-mode headroom (choose one, bench-decided): (a) `R53` 499 k → 511 k (C188257) → boost 4.89 V (+0.1 V at U20 VIN); (b) replace `D21` with a low-Vf Schottky in a bigger package or a P-FET ideal-diode; (c) lower `/VBAT_MODEM` to 3.6 V (`R110` 75 k → 70 k) — A7670SA VBAT range is 3.4–4.2 V, 3.8 V typical; 3.6 V keeps the buck out of dropout. Not required to order; required before the 20-cycle battery test.
4. Firmware (v6 `board_v6.h`): `PIN_MODEM_PWR_EN PC10`, `PIN_MODEM_PWRKEY PC8`, `PIN_MODEM_STATUS PC9`, `PIN_MODEM_RST PC11`, modem UART = **USART6 (PC6 TX / PC7 RX)**; K1 Mode B via `BYP_CTRL` = PB5 (pad 57, `R40` → `Q6` → `K1` coil).
Note on behaviour: because `R113` is a pull-down, **any MCU reset (DFU, IWDG, `NVIC_SystemReset`) drops `MODEM_PWR_EN` and power-cycles the modem**. That is the intended V5.6 policy (modem OFF while the MCU is not in control), but firmware must re-run the settled-rail sequence after every reset, and a watchdog reset costs a ~30 s re-registration.
### F2 — 10-min duty cycle on battery impossible on V5.5
**What v6 does today:** `/PWR_CTRL` (PA1) switches only the F9P rail (`Q1` → `/SW_5V` → `U21`); `/MODEM_PWR_EN` (PC10) switches only the modem buck. `/MODEM_STATUS` (PC9) and the RTCM tap on PC7 give a real "modem up" signal. `NRST` reaches only the MCU (`SW1`, `P6` RESET-EXT, `TP5`, `C104`), as on V5.5.
**Verdict: ✅ covered (hardware).** Firmware: `ENABLE_DUTY 1` on the v6 build with the V5.6 window — `PWR_CTRL` high → ≥ 4 s → `MODEM_PWR_EN` high → PWRKEY pulse → wait `STATUS` high / first RTCM bytes on PC7 → ≥ 2 `$PHLG` with `pwr=BATT` and fresh fix → `MODEM_PWR_EN` low → `PWR_CTRL` low → sleep 10 min. End of window decided by STATUS/RTCM, not by a timer. Note `K1` (G5V-1, coil on `/SYS5V` via `Q6`) draws its 0.15 W whenever Mode B is held on battery.
### F3 — Link-recovery stack cycles on battery kill the modem
**What v6 does today:** the modem can be reset (`MODEM_RST` PC11), PWRKEY-cycled (PC8) or power-cycled alone (`MODEM_PWR_EN` PC10) without touching the F9P, and `MODEM_STATUS` (PC9) confirms the result.
**Verdict: ✅ covered (hardware).** Firmware rule for v6 stays as 0.5.9: no stack cycle on battery, ever; recovery escalates modem-only — `MODEM_RST` 500 ms → PWRKEY off/on → `MODEM_PWR_EN` OFF 5 s / ON — and only after `PWR_CTRL` has been high ≥ 4 s. Never cycle `PWR_CTRL` for a link problem.
### F4 — Charger input limit above the supply (RS1 8 mΩ), charge current 2.4 A (R50 825 Ω)
**What v6 does today:** `RS1` = **10 mΩ/1 % 1206 (C105362)** between `/VEH5V` and `/VIN_SW` → LTC4040 input limit 25 mV / 10 mΩ = **2.5 A** ✅, below U25's 3 A. **`R50` = 825 Ω/1 % (C50214)** on `PROG` → 2000/825 = **2.42 A** charge ❌. `CHRG_EN` = PA8 (pad 41) with `R56` 100 k pull-down — the 0.6.0 governor works unchanged. `CHRG_STAT` = PB3, `CHRG_FAULT` = PB4 (pull-ups `R57`/`R58` 100 k).
**Verdict: ⚠ partial.** Change: **`R50` 825 Ω → 1.5 kΩ 0603 1 % (C22843)** → 1.33 A (12 Ah in ~9 h). Governor 0.6.0 stays as the second layer. On v6 the supply is U25 (3 A rated, 3.5 A switch) — same reasoning as the SD-15B.
### F5 — Slow charge on H0008: LTC4040 die-temperature cycling from thin copper / no thermal vias
**What v6 does today (measured on the board file):**
| Item | v6 | Target (ECO D2 / Copper Plan) |
|---|---|---|
| `/SW_BAT` (U6.21/22 → L6.1) | **4 segments, 0.25 mm, 12.3 mm total, F.Cu, no pour** | ≥ 2 mm polygon |
| `/BAT_PLUS` (P3.1 → L6.2 → U6.23, C35, R5) | 0.25 mm (5.4 mm) + 0.5 mm (42 mm F.Cu + 70.5 mm In2) + 1.0 mm (4.9 mm); 2 vias; no pour | ≥ 1.5 mm + via farm |
| U6 exposed pad (pad 25, 2.65 × 3.65 mm) | footprint `QFN-24-1EP_4x5mm_P0.5mm_EP2.65x3.65mm` (no ThermalVias variant); **0 vias inside the EP**; nearest GND via 4.4 mm away | ≥ 9 thermal vias to In1 GND |
| `L6` 2.2 µH/8 A distance to U6 | 15.2 mm (pad-to-pad 10.2–11.1 mm) | ≤ 5 mm |
| Input cap `C30` 10 µF / `C31` 2.2 µF to U6 | 11.2 mm / 10.0 mm | ≤ 3 mm |
| Temperature sensor at U6/L6 | **None.** `U4` TMP102 was deleted in v6 (schematic note); `U3` SHT40 is at (122.4, 77.3), **71 mm** from U6; `P7` NTC-HOTSPOT / `P8` NTC-PROBE-2 are JST jacks for external probes (PB1 / PC4) at 100 mm. | On-board sensor at U6/L6 |
**Verdict: ❌ missing.** This is the highest-risk item: v6 repeats the V5.5 boost copper and makes it slightly worse (0.25 vs 0.3 mm), and the charger will run its ~2.5 A input / 1.3–2.4 A charge through it at 45 °C ambient.
**Changes:**
1. Re-cluster U6: `L6` ≤ 5 mm from pads 21/22, `C30`/`C31` ≤ 3 mm from pads 6/16, `C35` at pad 23 (pre-fab audit B5).
2. `/SW_BAT` as an F.Cu polygon ≥ 2 mm wide; `/BAT_PLUS` ≥ 1.5 mm F.Cu from P3 to L6/U6 with a via farm to an In2 copper area (drop the 70 mm 0.5 mm inner run).
3. Replace the U6 footprint with the `…_ThermalVias` variant or add ≥ 9 × 0.3 mm vias in the EP to the In1 GND plane; keep the In1 plane solid under U6 (it is split into islands today — pre-fab audit §7).
4. Add a temperature sensor at U6/L6: **TMP102 SOT-563 (C99269, address 0x48 — free on v6; SC16IS752 is 0x4D, SHT40 0x44, SC7A20 0x18) placed between U6 and L6**, or an on-board 10 k NTC to **PC5 (pad 25, ADC1_IN15, free)** with the same 10 k/100 nF network as `R42`/`C24`. Firmware: `tchg` append field in `$PHLG`; governor uses it instead of the V5 `U4` cell sensor. Also log `tmax`.
5. Bench: thermal camera on U6/L6 during 1 h of charge at 1.3 A and 1 h of backup at 2.5 A; the 60 mV/30 s pulsing seen on H0008 must not appear.
### F6 — NTC pause invisible; charge window with RNTB 10 k pauses above ~40–42 °C
**What v6 does today:** `R55` (= RNTB) **10 k/1 % (C25804)** from `/VEH5V` to `/NTC` (`U6.17`, `P3.3`). `JP2` value `F2:Li-ion`, bridged 1-2 → `/F2_SEL` = `/MAIN5V` (high) = Li-ion 4.0/4.1 V float. `JP3` F1:0, `JP4` F0:1 as on V5.5. `CHRG_FAULT` → PB4 with pull-up: the firmware can show `cflt=1` as "pausa NTC" (LTC4040 keeps CHRG low during an NTC pause; only FAULT goes low).
**Verdict: ⚠ partial** (visibility ✅, window ❌ until the chemistry decision).
**Changes (BOM/solder-jumper only, PCB unchanged):** if LFP-HT 26650 is chosen (ECO D1a): `JP2` 2-3 (F2 low, 3.50 V float) + `R55` **5.6 k** with a B3380 NTC (window +10…+60 °C). If Li-ion stays: keep 10 k and accept the pause (or 6.6 k = pause at 55 °C, hard on the cell). Firmware/monitor: `ltc=PAUSA NTC` when `CHRG_EN` allowed ∧ `CHRG_STAT` idle ∧ `CHRG_FAULT` low; cell-temperature inhibit threshold per chemistry (Li-ion 45 °C / LFP 55–60 °C). Silkscreen `JP2 = F2 (Li-ion / LFP)`.
### F7 — Power-supply margin: 5.25–5.57 V trimmed units vs PFI 4.44 V / warning 4.60 V / shed 4.90 V
**What v6 does today:** `U25` TPS54360B (C524806), feedback `R121` **53.6 k/1 %** / `R122` **10.2 k/1 %** → V_out = 0.8 V × (1 + 53.6/10.2) = **5.00 V** (pre-fab audit: "5.00 V, ~620 kHz"; `R120` 162 k). `R124` 523 k / `R125` 84.5 k (EN UVLO divider) are DNP → EN floats high (internal pull-up), U25 runs from ≈ 4.5 V input. LTC4040: PFI `R51` 270 k / `R52` 100 k → 1.2 V × 3.7 = **4.44 V**; boost `R53` 499 k / `R54` 100 k → 0.8 V × 5.99 = **4.79 V**. `5V_SENSE` = `/VEH5V` × 10 k/(10 k + 10 k) (`R7`/`R8`) → PA4, so the ADC scale is fine up to 6.6 V. `P2` (bench SD-15B) is in parallel on `/VEH5V` ("one source at a time").
Margins with 5.00 V: to PFI **0.56 V**; to the 0.6.0 governor shed line (4.90 V) **0.10 V**; to the governor start line (5.05 V) **−0.05 V** — the charger would never be enabled, and a 100–200 mV LTE sag (V5.5 measured) would hit the shed line on every burst.
**Verdict: ❌ missing.**
**Changes:** `R121` 53.6 k → **57.6 k/1 % 0603** → 0.8 × (1 + 57.6/10.2) = **5.32 V** (56.2 k → 5.21 V is the minimum acceptable). Within LTC4040 VIN range (3.5–5.5 V) and U25 rating; `5V_SENSE` unchanged. Pick the LCSC number in the sourcing pass (basic 0603 1 %). Governor thresholds (5.05 start / 4.90 shed / 4.60 warn / 4.44 PFI) then have the same 0.3–0.9 V ladder as the field units. Also re-cluster U25 (`L22` 25.9 mm, `D34` 18–23 mm, `C149`/`C150` 5.4–8.8 mm from pins today) — pre-fab audit B5.
### F8 — Robustness items (F1 PPTC, ETH_RST float, J9 ESD, DFU ESD placement, BOOT1 trap, PoE)
| Item | v6 today | Verdict | Change |
|---|---|---|---|
| F1 PPTC 3 A (C20627123) | `F1` between `/SYS5V` and `/SW_IN` → `Q1` → `/SW_5V` → `U21` LDO → F9P only (`/SW_5V` nodes: Q1.3, C3, C40, C119, U21). The modem is not behind it. | ⚠ | Harmless (≈ 15 mV at 150 mA) but pointless at 3 A; resize to 1–1.5 A hold so it actually protects the F9P/LDO, or keep and note. Not a blocker. |
| `ETH_RST` (PA15, pad 50 → `U11.37`) | Only two nodes; **no pull resistor**. `U12` (3V3_ETH buck) has EN tied to VIN (`U12.2` = `/SYS5V`) → `/3V3_ETH` is always up, on battery too. During an MCU reset PA15 floats, the W5500 leaves reset and draws ~130 mA for the ~4 s. | ❌ | Add 100 k 0603 (C103211) `ETH_RST` → GND (= V5.6 `R112`). Optional: drive `U12` EN from a free MCU pin (PD2 pad 54 or PB10 pad 29) with a 100 k pull-down so `/3V3_ETH` is fully off on battery and in reset. |
| J9 modem USB-C ESD | `/USB_DP`, `/USB_DM`, `/USB_VBUS` nodes: J9 and U19 only. **No ESD device.** `Rcc1`/`Rcc2` 5.1 k present. | ❌ | Add USBLC6-2SC6 SOT-23-6 (C7519) at J9 (= V5.6 `D19`): I/O1 → USB_DM, I/O2 → USB_DP, VBUS → USB_VBUS. |
| DFU ESD at J11 | `D14` (DFU_DP) 3.0 mm, `D15` (DFU_DM) 3.7 mm, `D16` (DFU_VBUS) 6.6 mm from J11 centre. | ✅ | — |
| BOOT1 trap | `ETH_INT` = **PC0** (pad 8); PB2 (pad 28) = `/BOOT1_STRAP` with `R99` 10 k to GND; schematic note "never repurpose PB2". | ✅ | — |
| PoE on J10 | `J10` HR911105A pins 7/8 unconnected; no PoE PD circuit. Firmware 0.6.0-eth documents "sin PoE". | ⚠ (decision) | Keep no PoE (external splitter). Record the decision; if PoE is ever wanted it is a v6.1 feature (PD controller + isolated DC-DC), not a patch. |
| Cutoff bypass | `P5` CUTOFF-SW between `/MAIN5V` and `/SYS5V`; no solder-jumper in parallel (JP1 = fan, JP5 = RS-485 term). | ⚠ | Add `JP_CUT` (SolderJumper_2_Open) across P5, open by default (= V5.6 `JP6`). |
| Silkscreen | Not checked here (pre-fab audit: all labels 0.5 mm/0.1 mm). | — | `SW1 = RESET MCU`, `JP2 = F2 (Li-ion / LFP)`, `P5 = CUTOFF`, labels ≥ 0.8/0.15 mm. |
**Verdict: ⚠ partial.**
### F9 — Software/process lessons
| Lesson | v6 implication | Verdict |
|---|---|---|
| Unit identity = modem `$GPTXT H00xx` | **v6 has no ArduSimple NTRIP Master**: the A7670SA is driven by the MCU, so nobody emits `$GPTXT H00xx`. The MCU must generate the identity on every path (4G and Ethernet) — `$PHID,<uid>,<fw>,<board>,<mac>,<up_s>` from 0.6.0-eth is the right vehicle; the server (`retranslator`) needs to accept `$PHID` as the primary ID before v6 ships. | ⚠ |
| `$PHLG` append-only fields | New v6 fields (`tchg`, `rtcm_bps`, `modem_status`, `tmodem` if read from the module) go at the end. | ✅ (rule) |
| Deploy with conflict markers broke the dashboard | Process: pre-deploy syntax check (`node --check` / `python -m py_compile`) in the deploy script; never `git stash pop` on the production tree. Not a board item. | ⚠ (process) |
| Monitor shows power source and charger state explicitly; history stores `pwr`, `v5min`, `vbat_min` | v6 adds `MODEM_STATUS` and `CHRG_FAULT` (PB4) → columns "Módem" and "pausa NTC". | ✅ (rule) |
| Modem temperature | v6 can read it from the module over USART6 (`AT+CPMUTEMP` on SIMCom A76xx, to be confirmed on the A7670SA firmware) — no extra sensor needed for the modem; the charger sensor (F5) is still needed. | — |
**Verdict: ⚠ partial** (identity path must change for v6).
---
## 2. Specific v6 checks requested
| Check | Found in v6 | Assessment |
|---|---|---|
| U25 output divider and margin to PFI / VSYS | `R121` 53.6 k / `R122` 10.2 k → 5.00 V; PFI 4.44 V (`R51` 270 k / `R52` 100 k); boost 4.79 V (`R53` 499 k / `R54` 100 k) | ❌ 0.56 V to PFI, 0.10 V to the 4.90 V shed line → `R121` 57.6 k (5.32 V) |
| Modem buck input on battery and UVLO margin | `/VIN_MODEM` ← `D21` PMEG3050EP ← `/MAIN5V` (boost) on battery; ← `D20` SS34 ← `/24V` on vehicle power | ⚠ ≈ 4.2–4.5 V at U20 VIN vs 3.8 V min → 0.4–0.7 V; improve with R53 511 k, lower-Vf D21 or VBAT_MODEM 3.6 V |
| MODEM_PWR_EN / PWRKEY / STATUS / RST to MCU | PC10 (pad 51) / PC8 (39, via Q20) / PC9 (40, via U24) / PC11 (52, via Q21); pull-downs R113/R114/R115 100 k | ✅ |
| Modem UART to MCU | USART6: PC7 RX ← `R106` 100 Ω ← `/DOUT_4G` (always); PC6 TX → `K1` NO → `/DIN_4G` (Mode B) | ✅ |
| Modem VBAT bulk near U19 | 440 µF (`C130`/`C131`) at 10.5–19.7 mm from pads 55–57; `C132` 22 µF at 5.6–7.3 mm | ⚠ move to ≤ 5 mm, pour VBAT_MODEM |
| `/SW_BAT` and `/BAT_PLUS` copper | 0.25 mm × 12.3 mm; 0.25–0.5 mm (+70 mm on In2); no pours | ❌ |
| LTC4040 EP thermal vias | 0 in the EP; footprint has no ThermalVias variant | ❌ |
| RNTB and JP2 default | `R55` 10 k; `JP2` 1-2 = Li-ion | ⚠ pending D1 |
| F1 / F2 fuses | `F1` PPTC 3 A on the F9P rail only; `F2` 2 A/125 V nano fuse in holder on `/24V_IN` (LCSC still TBD per pre-fab audit) | ⚠ resize F1 (optional); pick F2 part |
| ETH_RST pull | none | ❌ 100 k to GND |
| J9 / J11 ESD | J11 ✅ (D14/D15/D16 at 3–7 mm); J9 ❌ none | add USBLC6-2SC6 at J9 |
| W5500 PoE | none (J10 pins 7/8 open) | decision: stay without PoE |
| Switcher EP vias (U20, U25) | 0 vias within 3 mm of either EP | add thermal vias (secondary to U6) |
---
## 3. What to carry from V5.6 into v6
| V5.6 item | Already in v6? | Action for v6 |
|---|---|---|
| `MODEM_EN` sequencing (F9P first, modem 4 s later on a settled rail) | Hardware ✅ (`MODEM_PWR_EN` PC10 + `PWR_CTRL` PA1) | Firmware `board_v6.h` + `ENABLE_DUTY 1`; identical window logic to V5.6 0.7.0, plus PWRKEY pulse and `STATUS` wait. |
| RTCM / modem-UART visibility (`RTCM_TAP` PC7 = USART6_RX) | ✅ built in (`R106` → PC7; `K1` → PC6) | Byte counter on USART6 RX = "NTRIP flowing"; `rtcm_bps` field. |
| Thermal copper for U6 (ECO D2 / EMC #1 #2) | ❌ | `/SW_BAT` ≥ 2 mm pour, `/BAT_PLUS` ≥ 1.5 mm + vias, EP ≥ 9 vias, L6/C30 re-clustered. |
| `RS1` 10 mΩ (C105362) | ✅ | — |
| `R50` 1.5 k (C22843) | ❌ (825 Ω) | Change value. |
| `RNTB` 5.6 k + `JP2` 2-3 (if LFP) | ❌ (10 k, Li-ion) | Decide chemistry (D1); BOM/jumper only. |
| PSU set-point ≥ 5.2 V | ❌ (5.00 V) | `R121` 57.6 k → 5.32 V. |
| ESD at connectors | J11 ✅ / J9 ❌ | USBLC6-2SC6 (C7519) at J9. |
| Fuse in the F9P rail | ⚠ (3 A PPTC) | Resize to 1–1.5 A or leave; document. |
| `ETH_RST` pull-down 100 k | ❌ | Add (C103211). |
| PoE decision | none by design | Keep; write it in the schematic block-N note. |
| Second TMP102 / NTC at U6 | ❌ (no sensor near U6; TMP102 deleted in v6) | TMP102 SOT-563 (C99269, 0x48) between U6 and L6, or NTC → PC5. |
| `JP_CUT` across the cutoff connector | ❌ | Solder jumper across `P5`. |
| 220 µF polymer on the F9P rail (`C3`) | `C3` 47 µF elco on `/SW_5V` | Optional on v6: `/SW_5V` only feeds the AP2112K LDO now. |
| 2 × 22 µF + 10 µF at the modem buck input | `C127` 10 µF + `C128` 1 µF | Add 2 × 22 µF (C86817) at `U20.2`. |
| AP64350 compensation (Rcomp 14 k, Ccomp 3.3 nF, 47 pF, RT 200 k, BST 100 nF) | v6 is the source (`R116` 14 k, `C141` 3.3 nF, `C142` 47 pF, `R117` 200 k, `C129` 100 nF) | Verify against the AP64350 datasheet application table for 3.8 V / 4.7 µH / 2 × 220 µF + 22 µF (same open point as V5.6 §6.1). |
---
## 4. Checklist ordered by risk
| # | Risk | Lesson | Item | Refdes / value / net | Owner |
|---|---|---|---|---|---|
| 1 | 🔴 | F5 | LTC4040 copper + thermal vias + re-cluster | `/SW_BAT` 0.25 → ≥ 2 mm pour; `/BAT_PLUS` ≥ 1.5 mm + via farm; `U6` EP ≥ 9 × 0.3 mm vias; `L6` ≤ 5 mm; `C30`/`C31` ≤ 3 mm | Michelle |
| 2 | 🔴 | F7 | Vehicle PSU set-point | `R121` 53.6 k → **57.6 k/1 %** (5.32 V); re-cluster `L22`/`D34`/`C149`/`C150` | Leo (value) / Michelle (layout) |
| 3 | 🔴 | F4 | Charge current | `R50` 825 Ω → **1.5 k/1 %** (C22843) | Leo |
| 4 | 🟠 | F1 | Modem rail integrity on battery | `C130`/`C131` ≤ 5 mm from U19.55–57; pour `/VBAT_MODEM`; `/VIN_MODEM`, `/SW_MODEM` ≥ 0.8 mm; + 2 × 22 µF at `U20.2`; optional `R53` 511 k / D21 low-Vf / VBAT 3.6 V | Michelle / Leo |
| 5 | 🟠 | F5 | Temperature sensor at the charger | TMP102 SOT-563 (C99269, 0x48) between U6 and L6 + 100 nF, or NTC → PC5 | Leo |
| 6 | 🟠 | F8 | W5500 in reset while MCU resets | 100 k (C103211) `/ETH_RST` → GND; optional `U12` EN from PD2/PB10 | Leo |
| 7 | 🟠 | F8 | Modem USB ESD | USBLC6-2SC6 (C7519) at `J9` | Leo |
| 8 | 🟠 | F6 | NTC window / chemistry | `R55` 10 k → 5.6 k + `JP2` 2-3 if LFP-HT; else keep and display "pausa NTC" | Leo (decision D1) |
| 9 | 🟡 | F8 | Cutoff bypass | `JP_CUT` solder jumper across `P5` | Michelle |
| 10 | 🟡 | F8 | F9P rail fuse | `F1` 3 A PPTC → 1–1.5 A hold (or document) ; `F2` part number (TBD) | Leo |
| 11 | 🟡 | F9 | Identity without `$GPTXT` | `$PHID` from MCU UID on 4G too; server accepts it | Firmware / backend |
| 12 | 🟡 | F1/F2/F3 | Firmware v6 | `board_v6.h` pins (PC10/PC8/PC9/PC11, USART6, PB5 K1), duty window, modem-only recovery, no stack cycle on battery | Firmware |
| 13 | 🟡 | F8 | PoE | Record "no PoE, external splitter" in block N | Leo |
| 14 | ⚪ | F1 | AP64350 compensation vs datasheet table | `R116`/`C141`/`C142`/`R117`/`C129` | Leo |
| 15 | ⚪ | F5 | Bench validation | Thermal camera U6/L6 at 1.3 A charge and 2.5 A backup, 1 h each; 20 battery duty cycles; U20 VIN scope at 3.5 V cell | Jesús / Leo |
**Tally: ✅ 3 (F1, F2, F3) · ⚠ 4 (F4, F6, F8, F9) · ❌ 2 (F5, F7).**
---
## 5. Notes and non-findings
- The v5.5 `DzG1` gate-clamp fix, the `R51` 270 k PFI choice (E-PFI 24-Jul) and the `RS1` 10 mΩ are already in v6.
- `U12` (3V3_ETH, MP1584EN from `/SYS5V`) keeps the MP1584 UVLO issue but Ethernet is not used on battery; firmware 0.6.0-eth holds the W5500 in reset without 5 V. Combined with the `ETH_RST` pull-down that is acceptable for v6.
- `C3` 47 µF and `C40` 22 µF on `/SW_5V` now only buffer the AP2112K LDO input; the V5.6 polymer upgrade is optional here.
- Free MCU pins after this review: PC5 (25, ADC), PB10 (29), PA9 (42), PD2 (54). PC5 is the natural home for an on-board charger NTC; PD2/PB10 for a `U12` EN.
- Nothing in this review changes the v6 architecture; every item is a value, a footprint or a layout change, so the pre-fab audit's B5/B6 pass (Michelle) can absorb items 1, 2 (layout part), 4 and 9 in one go.
Ver también: [manual v6](../manuales/manual-tarjeta-v6.md) · [mapa de pines MCU v6](v6-pinmap.md).
## Historial de revisiones
| Versión | Fecha | Cambios |
|---|---|---|
| 1.0 | 2026-09-28 | Revisión original (inglés) con resumen ejecutivo en español. |
| 1.1 | 2026-09-29 | Resumen en español al frente, índice del cuerpo, enlaces. Sin cambios técnicos. |

BIN
docs/img/favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
docs/img/helgen-logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

View File

@ -1,180 +1,136 @@
---
title: "HBOX — Documentación técnica"
hide:
- toc
---
# HBOX — Documentación técnica
Sitio interno de Helgen Technologies. **Busca abajo lo que vas a hacer hoy.**
<div class="buscar-aviso" markdown>
La lupa busca por unidad (H00xx), conector (P15, J10), evento (MODEM_DARK) o procedimiento.
</div>
## 🔧 Trabajo de campo y taller
## Tareas
<div class="grid cards" markdown>
- ### 🚜 Una unidad falla en la máquina
- ### Llegaron tarjetas nuevas V5.6
---
Diagnóstico paso a paso **en sitio**, con el gabinete todavía montado. Empieza por el
permiso de acceso y termina con la unidad clasificada.
Inspección, flasheo con el binario vigente y autoprueba, tarjeta por tarjeta.
[**▶ Llenar el acta de diagnóstico en campo**](formularios/diagnostico.html){ .md-button .md-button--primary }
[**Acta de tarjeta V5**](formularios/v5.html){ .md-button .md-button--primary }
[Procedimiento: prueba y flasheo](procedimientos/v5-prueba-y-flasheo.md)
[Leer el procedimiento primero](diagnostico/procedimiento-diagnostico-campo.md)
- ### 🔬 Una unidad ya está en la mesa
- ### Armar y configurar una unidad
---
Diagnóstico **en banco** con fuente y multímetro: continuidad, rampa de corriente,
rieles y las tres capturas por USB.
Módulos RTK/4G, ensamble en gabinete, prueba final y parámetros de la unidad.
[**▶ Llenar el acta de diagnóstico en banco**](formularios/banco.html){ .md-button .md-button--primary }
[Acta de ensamble](formularios/ensamble.html){ .md-button .md-button--primary }
[Ensamble](procedimientos/v5-ensamble.md) · [Configuración](procedimientos/v5-configuracion-unidad.md) · [Flujo completo](produccion/index.md)
[Leer el procedimiento primero](procedimientos/diagnostico-banco.md)
- ### ⚡ Reflashear una unidad
- ### El cliente usa Ethernet o puertos serie
---
Solo en taller y **solo después** de subir la captura del diagnóstico.
Prueba de banco con el binario `-eth`, cable directo a la laptop.
[Procedimiento de reflasheo](procedimientos/reflasheo-unidades.md)
[Acta: Ethernet y serie](formularios/ethernet-serie.html){ .md-button .md-button--primary }
[Procedimiento](procedimientos/v5-prueba-ethernet-serie.md)
- ### 🧪 Probar una tarjeta V4 con 0.5.6
- ### Una unidad falla en la máquina
---
Puente de reset del módem, flasheo y las pruebas con 24 V, en batería y regreso de 24 V.
Un acta por tarjeta.
Diagnóstico en sitio con el gabinete montado. No reinicies nada antes de capturar la evidencia.
[**▶ Llenar el acta de prueba V4**](formularios/v4.html){ .md-button .md-button--primary }
[Acta de diagnóstico en campo](formularios/diagnostico.html){ .md-button .md-button--primary }
[Procedimiento](diagnostico/procedimiento-diagnostico-campo.md)
[Leer el procedimiento primero](procedimientos/v4-prueba-fw-0.5.6.md)
- ### 🚨 Algo se dañó
- ### Una unidad está en la mesa
---
Tarjeta con corto, módulo golpeado, unidad mojada. Registra el daño y la serie queda
**marcada**: cualquier acta que la elija mostrará el aviso.
Diagnóstico en banco: continuidad, rampa de corriente, rieles y capturas por USB.
[**▶ Acta de daño o incidente**](formularios/dano.html){ .md-button .md-button--primary }
[Acta de diagnóstico en banco](formularios/banco.html){ .md-button .md-button--primary }
[Procedimiento](procedimientos/diagnostico-banco.md)
- ### 📦 Sale o llega una unidad
- ### Reflashear una unidad
---
Qué salió en la caja y en qué estado llegó, antes de entrar al puerto.
Solo en taller y solo después de subir la captura del diagnóstico.
[Acta de envío](formularios/envio.html) · [Acta de recepción](formularios/recepcion.html) · [Ciclo de vida](procedimientos/ciclo-de-vida.md)
[Acta de reflasheo](formularios/reflasheo.html){ .md-button .md-button--primary }
[Procedimiento](procedimientos/reflasheo-unidades.md)
- ### 🗂 Todo sobre una unidad
- ### Instalar en el puerto
---
El expediente completo de un número de serie: cada acta, cada foto y cada archivo de log
que se ha subido, en una sola línea de tiempo.
Checklist de puesta en marcha de una página: imprimir y llevar, una hoja por unidad.
[**▶ Abrir expediente**](unidad.html){ .md-button }
[Checklist de puesta en marcha](procedimientos/v5-checklist-puesta-en-marcha.md){ .md-button .md-button--primary }
[Manual del cliente](manuales/manual-cliente.md)
- ### 📊 ¿Qué se ha revisado?
- ### Enviar, recibir o reportar un daño
---
Todas las visitas, sus fotos y sus archivos, unidad por unidad.
Qué salió en la caja, en qué estado llegó y qué se dañó. La serie queda marcada.
[Tablero de campo](diagnostico/tablero-campo.html)
[Acta de envío](formularios/envio.html){ .md-button .md-button--primary }
[Recepción](formularios/recepcion.html) · [Daño](formularios/dano.html) · [Ciclo de vida](procedimientos/ciclo-de-vida.md)
- ### Consultar pinout u hoja de datos
---
Conectores, puentes, LEDs y límites eléctricos de cada tarjeta.
[**Pinout V5.6**](hardware/v56-pinout.md){ .md-button .md-button--primary }
[Hoja de datos V5.6](hardware/v56-datasheet.md) · [Todas las tarjetas](hardware/index.md)
- ### Descargar firmware
---
Binario por tarjeta (nunca por número de versión), SHA-256, parámetros 4G y ZED-F9P.
[Descargas](descargas/index.md){ .md-button .md-button--primary }
[README bring-up v5](descargas/hbox-v5-bringup-README.md)
- ### Todo sobre una unidad
---
Expediente de un número de serie: cada acta, foto y log en una línea de tiempo.
[Abrir expediente](unidad.html){ .md-button .md-button--primary }
[Tablero de producción](tablero.html) · [Tablero de campo](diagnostico/tablero-campo.html)
- ### Primera vez en el sitio
---
Reglas de trabajo, acceso y cómo se llenan las actas.
[Guía del ingeniero](guia-ingeniero.md){ .md-button .md-button--primary }
[Índice de actas](actas/index.md)
</div>
## 🏭 Producción — lote v5
## Estado
<div class="grid cards" markdown>
| Tarjeta / firmware | Estado |
|---|---|
| <span class="badge-v55">V5.5</span> | 15 unidades en campo · fw 0.6.0 |
| <span class="badge-v56">V5.6</span> | Esquemático cerrado · PCB en layout · pedido pendiente |
| <span class="badge-v6">v6</span> | En diseño (GNSS + 4G a bordo) — no pedir |
| <span class="badge-fw">firmware 0.6.1</span> | En desarrollo |
- ### 🔌 Probar y flashear tarjetas
---
Las 15 tarjetas EinarBoard v5, una por una.
[Procedimiento](procedimientos/v5-prueba-y-flasheo.md) · [Acta V5](formularios/v5.html)
- ### 📡 Módulos RTK y 4G
---
simpleRTK2B Pro, módem 4G NTRIP Master y la integración de la pareja.
[Procedimiento](procedimientos/v5-modulos-integracion.md) · [ArduSimple](formularios/ardusimple.html) · [4G](formularios/modem4g.html) · [Integración](formularios/integracion.html)
- ### 🧰 Ensamblar la unidad
---
Armado, energizado y prueba final antes de embarcar.
[Ensamble](procedimientos/v5-ensamble.md) · [Prueba final](procedimientos/v5-prueba-final-unidad.md) · [Acta de ensamble](formularios/ensamble.html)
- ### 🔩 Arneses y gabinete
---
Pinout de conectores, BOM dividido y guía de ensamble.
[Pinout](montaje/pinout-arneses.md) · [BOM](montaje/bom-split.md) · [Guía](montaje/assembly-guide.md)
</div>
## 📥 Archivos y referencia
<div class="grid cards" markdown>
- ### 💾 Descargas
---
Firmware por generación de tarjeta, parámetros del módem 4G y configuración del ZED-F9P.
[Ir a Descargas](descargas/index.md)
- ### 📋 Todas las actas
---
Índice completo de formularios y cómo se usan.
[Índice de actas](actas/index.md) · [Tablero de producción](tablero.html)
- ### 👤 Mi cuenta
---
Cambiar tu contraseña del sitio. Si la olvidaste, Leo te la restablece desde ahí mismo.
[Cambiar mi contraseña](cuenta.html)
- ### 🌿 Git y archivos de diseño
---
Para quien toque KiCad o el repositorio.
[Guía en español](git/guia-git-es.md) · [English](git/git-guide-en.md)
</div>
---
## Reglas de la casa
1. Los procedimientos se siguen **en orden y completos**; una tarjeta que falla una sección no
avanza a la siguiente.
2. Toda medición fuera de rango se anota **con su valor**, no solo "FALLA".
3. En campo, **no reinicies ni desconectes nada** antes de capturar la evidencia: el estado en que
encontraste la unidad es el dato que no se puede recuperar después.
4. Si algo del documento no coincide con lo que ves en la tarjeta, **detente y pregunta** a
ingeniería antes de continuar.
*La fuente de verdad es el repositorio **Drogheda**: no edites estas páginas a mano, se regeneran
con el script de sincronización. Contacto: leo@helgen.tech*
Reglas de trabajo: [Guía del ingeniero](guia-ingeniero.md). Fuente: repositorio Drogheda. Contacto: leo@helgen.tech

Binary file not shown.

29
docs/manuales/index.md Normal file
View File

@ -0,0 +1,29 @@
---
title: "Manuales por tarjeta"
project: Project Drogheda
date: 2026-09-29
version: "1.1"
tags: [project-drogheda, hardware, einarboard, manual, indice]
author: Helgen Technologies
---
# Manuales por tarjeta
Cada manual cubre cómo reconocer la tarjeta, conectores, puentes, botones, LEDs, flasheo y limitaciones. El binario lleva la tarjeta en el nombre; reglas en [Descargas](../descargas/index.md#firmware-del-hbox-que-binario-va-en-que-tarjeta).
| Tarjeta | Nombre | Estado (sep-2026) | Firmware | Proyecto KiCad | Manual |
|---|---|---|---|---|---|
| V3 | EinarBoard 1.0 (Blackpill en zócalo) | 10 pzas jul-2026; 3 unidades en campo (RTK-003/006/014); registro congelado | `hbox-tarjetaV3_4.0.0.bin` | `hbox-watchdog-v3-PROD` | [Manual V3](manual-tarjeta-V3.md) |
| V4 | EinarBoard 2.0 (Blackpill + Ethernet + serie) | Fabricada ago-2026; en prueba con 0.6.0 | `hbox-tarjetaV4_0.6.0.bin` | `hbox-watchdog-v4` | [Manual V4](manual-tarjeta-V4.md) |
| V5.5 | EinarBoard 4.0 (serigrafía) / HBOX v5, MCU soldado | 15 pzas 22-ago-2026; en ensamble y campo | `hbox-v5-bringup_0.6.0.bin` | `hbox-watchdog-v5` (tag `v5.5-as-fabbed`) | [Manual V5](manual-tarjeta-V5.md) |
| V5.6 | HBOX v5 + ECO 27/28-sep (módem controlado por MCU, LFP, sensores) | Esquemático cerrado; PCB en layout; pedido pendiente | `hbox-v5-bringup_0.6.0.bin` (0.6.x para las funciones nuevas) | `hbox-watchdog-v5` | [Manual V5](manual-tarjeta-V5.md) §9 |
| v6 | GNSS + 4G a bordo | En diseño; no pedir | — | `hbox-watchdog-v6` | [Manual v6](manual-tarjeta-v6.md) |
Documentos de ingeniería: [Tarjetas y hardware](../hardware/index.md).
## Historial de revisiones
| Versión | Fecha | Cambios |
|---|---|---|
| 1.0 | 2026-09-29 | Primera versión. |
| 1.1 | 2026-09-29 | Edición breve; estado V5.6 alineado con la portada. |

View File

@ -0,0 +1,21 @@
---
title: "Manuales para el cliente — HBOX V5.5 / V5.6"
project: Project Drogheda
date: 2026-09-29
tags: [project-drogheda, hbox, manual, cliente, datasheet, v5.6]
---
# Manuales para el cliente — HBOX V5.5 / V5.6
- [Manual de instalación y operación v2.0 (PDF)](Drogheda-Manual-Instalacion-Operacion_v2.0.pdf){:target="_blank"}: DRG-MAN-001, 29-sep-2026, para personal de instalación y mantenimiento en sitio.
- [Ficha técnica HBOX v2.0 (PDF)](Drogheda-HBOX-Datasheet_v2.0.pdf){:target="_blank"}: 2 páginas, unidad V5.6.
Cambios de la v2.0 frente a la v1.0 de junio: unidad V5.5/V5.6 con EinarBoard (STM32 a bordo, LTC4040, LiFePO₄ en V5.6); conexión por GX16-5 con tabla de pines y fusible; red opcional (Ethernet sin PoE, RS-485, RS-232); secuencia de encendido; tablas de LEDs por grupo (panel, RGB, batería, módem) según el firmware 0.6.0; batería de respaldo (carga ≈ 8 h, autonomía, cuándo es normal que deje de reportar); solución de problemas con "módem apagado en batería" (V5.5). Las líneas `% VERIFICAR` del `.tex` son pendientes de ingeniería antes de entregarlo.
Fuentes: `03-Architecture-Hardware/Manual-Instalacion-Operacion/` y `Marketing/HBOX-Datasheet/` (XeLaTeX, estilo Helgen).
## Historial de revisiones
| Versión | Fecha | Cambios |
|---|---|---|
| 1.0 | 2026-09-29 | Índice de manuales de cliente (PDF v2.0 y ficha técnica v2.0). |

View File

@ -0,0 +1,101 @@
---
title: "Manual de tarjeta — EinarBoard V3 (EinarBoard 1.0)"
project: Project Drogheda
date: 2026-09-29
version: "1.1"
tags: [project-drogheda, hardware, einarboard, v3, manual, tecnicos, blackpill]
author: Helgen Technologies
audience: técnicos de banco y de campo
---
# Manual de tarjeta — EinarBoard V3 (EinarBoard 1.0)
Primera tarjeta de producción del HBOX, Blackpill en zócalo. Registro congelado como se fabricó (`kicad/hbox-watchdog-v3-PROD.*`, no editar). Fuente: *Informe técnico interno V3+V4* v1.5 (§4 y §5), `harness-connector-pinout.md` (netlist V3) y `reflasheo-unidades.md`.
| Ítem | Valor |
|---|---|
| Proyecto KiCad | `kicad/hbox-watchdog-v3-PROD.*` (cuadro de título *EINARBoard HBOX* rev. 1.1, 2026-07-07) |
| Tamaño / capas | 135 × 100 mm · 4 capas (In1 = plano GND) · ENIG · máscara azul |
| MCU | WeAct Blackpill STM32F411CEU6 en zócalos J1/J2 |
| Fabricación | JLCPCB orden `W2026070815023249` (08-jul-2026): 10 PCB + 10 PCBA (J1/J2 soldados a mano con el módulo como escantillón) |
| Unidades en campo | RTK-003, RTK-006, RTK-014 |
| Firmware | `hbox-tarjetaV3_4.0.0.bin` (`blackpillrtkcode_v4`: lógica v3.0.3 + telemetría en banda). Publicado sin prueba de banco (sep-2026) |
| Paquete | Li-ion 18650 1S4P ≈ 12 Ah · JP2 1-2 (`F2:Li-ion`, 4.00 V) · carga 2.42 A (R50 825 Ω) |
<!-- foto: vista superior V3 — MOD1 a la izquierda, J1/J2 al centro, J7/J8 + J9 a la derecha, P1 abajo -->
## 1. Cómo reconocerla
| Rasgo | V3 |
|---|---|
| Blackpill en zócalo, sin RJ45, sin clemas verdes, sin P14 | Sí (la V4 tiene RJ45 y clemas; la V5 no tiene Blackpill) |
| Un solo USB-C en la tarjeta (J9, módem); consola por el USB del Blackpill | Sí |
| Medidor DB1–DB4 cableado directo a PB12–PB15 (sin expansor) | Sí |
| Serigrafía | `Advanced Engineering Division · www.helgen.tech`, `STM32F411 BLACKPILL`, `ArduSimple simpleRTK2B Pro`, `4G NTRIP MASTER`, `BP3.0`; etiquetas de J1/J2 `G-TX G-RX U-TX U-RX CHEN CSTA CFLT PCTL BSNS FPWM ELED FTAC` |
| Conectores DNP con huella vacía | P3 (RTK2B-UART1), P13 (MODO-B-UPLINK), H3 (USART1-RSV) |
## 2. Conectores
Pinout pin a pin (generado de la netlist V3): [Pinout de arneses y conectores (V3)](../montaje/pinout-arneses.md).
| Ref | Qué se conecta | Pines |
|---|---|---|
| P1 | Vehículo GX16-5 | 1 = +24 V · 2 = GND · 3 = ignición cruda 12–24 V · 4–5 = n/c |
| P2 | SD-15B-05 | 1 = +5 V · 2 = GND. Ajustar a 5.2–5.4 V en P2 (errata E-PFI) |
| P4 | Paquete Li-ion | 1 = BAT+ · 2 = GND · 3 = NTC |
| P5 | Sonda T/RH externa I²C | 1 = 3V3 · 2 = GND · 3 = SDA · 4 = SCL |
| P6 | Ventilador | 1 = +5V_FAN · 2 = retorno · 3 = GND · 4 = tach (no usado) |
| P8 | LED de panel | 1 = ánodo · 2 = cátodo |
| P10 | Reset externo | 1 = NRST · 2 = GND |
| P11 | Interruptor de corte | 1 = MAIN5V · 2 = SYS5V (abierto = todo apagado salvo el cargador) |
| P12 | NTC de punto caliente | 1 = NTC · 2 = GND |
| J9 | USB del módem | Configuración del 4G NTRIP Master |
| MOD1 · J7/J8 | simpleRTK2B · 4G NTRIP Master | J8 pad k = pin XBee 21−k |
| J1 / J2 | Blackpill | Errata E-J1 (§3) |
## 3. Erratas de la V3
!!! warning "Erratas E-J1 y E-CLR"
E-J1, zócalo J1 espejado. Con el Blackpill sentado de la única forma posible, J2 queda correcto y J1 invertido extremo por extremo (J1.k → pin 21−k del módulo). J1.20 (5 V) cae en VBAT del módulo: nunca energices una V3 con el Blackpill sentado directamente. En banco: módulo fuera del zócalo + arnés "adaptador inversor" Dupont en J1 (5→NRST · 6→A0 · 7→A1 · 8→A2 · 9→A3 · 10→A4 · 11→A5 · 12→A6 · 14→B0 · 15→B1 · 18→3V3 · 19→GND · 20→5V; 1–4/13/16 sin conectar; 17 se omite); J2 directo pad n → pin n. No hay parche por software.
E-CLR, prueba de recepción obligatoria (corto interno de 24 V). Sin energía, continuidad P2.1 ↔ P1.1 y P11.1 ↔ P1.1: en una tarjeta sana ambas abiertas. Un bip = puente interno 24 V → 5 V = tarjeta chatarra (no retrabajable).
E-PFI — hipo del módem en banco sin batería: con menos de 5.2 V en P2 y sin paquete, las ráfagas del módem cruzan el PFI (4.60 V en V3) y el LTC4040 desconecta la entrada en bucle. Fuente a 5.2–5.4 V medidos en P2 (nunca > 5.4) o paquete conectado ([reglas de banco](../procedimientos/diagnostico-banco.md#reglas-de-banco)).
## 4. Puentes, botones y LEDs
| Ref | Default / función |
|---|---|
| JP2 / JP3 / JP4 | F2:Li-ion (1-2) / F1:0 / F0:1 → 4.00 V. No tocar |
| JP1 | Abierto (5V_FAN ↔ VEH5V). Nunca cerrar |
| SW1 | Reset del MCU (= P10 = NRST del Blackpill) |
| SW4G1 | Reset del módem |
| KEY (Blackpill) | BOOT0 para DFU |
| DB1–DB4 | Medidor de batería, directo en PB12–PB15 (330 Ω) |
| LED de panel (P8) | PB0 vía Q4 |
| D4G1 | Actividad del módem (tenue) |
| TP1 / TP2 | CLPROG / PFO del LTC4040 |
## 5. Flasheo
Solo el USB-C del Blackpill; KEY (BOOT0) + NRST → `0483:DF11`; `hbox-tarjetaV3_4.0.0.bin` en `0x08000000`. Verifica en consola la versión 4.0.0 y que llega telemetría al monitor. Procedimiento: [reflasheo](../procedimientos/reflasheo-unidades.md). Solo binarios `hbox-tarjetaV3_…` ([Descargas](../descargas/index.md#firmware-del-hbox-que-binario-va-en-que-tarjeta)).
## 6. Limitaciones conocidas
- Sin Ethernet, sin RS-485/RS-232, sin LED RGB, sin expansor I²C.
- Módem oscuro en batería (igual que V4/V5.5); sin puente de reset posible (no hay PCF8574): solo SW4G1 o 24 V.
- PFI 4.60 V (más alto que V4/V5: 4.40–4.44 V) → más sensible a caídas de la fuente.
- Firmware 4.0.0 (blackpillrtkcode_v4) con consola y comandos propios, distintos de `hbox_v5_bringup`; la ventilación sigue la política v3.0.3 ([prueba de banco](../procedimientos/fan-policy-bench-test.md)).
## 7. Referencias
[Diagnóstico en campo](../diagnostico/procedimiento-diagnostico-campo.md) · [Diagnóstico en banco](../procedimientos/diagnostico-banco.md) · [Pinout V3](../montaje/pinout-arneses.md) · [Bring-up EinarBoard 1.0](../procedimientos/einarboard-1.0-bringup.md) · [Reflasheo](../procedimientos/reflasheo-unidades.md) · Informe técnico V3+V4 (PDF, repo `03-Architecture-Hardware/Informe-Tecnico-V3-V4/`).
## Historial de revisiones
| Versión | Fecha | Cambios |
|---|---|---|
| 1.0 | 2026-09-29 | Primera versión. |
| 1.1 | 2026-09-29 | Edición breve; flasheo remite al reflasheo. |
Versiones anteriores en git.

View File

@ -0,0 +1,118 @@
---
title: "Manual de tarjeta — EinarBoard V4 (EinarBoard 2.0)"
project: Project Drogheda
date: 2026-09-29
version: "1.1"
tags: [project-drogheda, hardware, einarboard, v4, manual, tecnicos, blackpill]
author: Helgen Technologies
audience: técnicos de banco y de campo
---
# Manual de tarjeta — EinarBoard V4 (EinarBoard 2.0)
Blackpill en zócalo + Ethernet y puertos serie. Es el diseño de la V5 con el MCU en un módulo Blackpill enchufado: mismas redes, pines y direcciones I²C. Fuente: `board_v4.h` (verificado pad a pad contra `hbox-watchdog-v4.kicad_pcb` el 21-sep-2026) y el *Informe técnico interno V3+V4* (`03-Architecture-Hardware/Informe-Tecnico-V3-V4/…_v1.5.pdf`, §6).
| Ítem | Valor |
|---|---|
| Proyecto KiCad | `kicad/hbox-watchdog-v4.*` (cuadro de título rev. 2.0) |
| Serigrafía | `EINARBoard 2.0` · `HBOX v4 - 2026-07` · `Advanced Engineering` · `www.helgen.tech`; etiquetas `STM32F411 BLACKPILL`, `ArduSimple simpleRTK2B Pro`, `4G NTRIP MASTER`, `MASTER RESET`, `4G NTRIP RESET` |
| Tamaño | 155 × 100 mm (20 mm más ancha que la V3, lado derecho) |
| MCU | WeAct Blackpill STM32F411CEU6 en zócalos J1/J2 (J1 con pads renumerados: corrige la errata E-J1 de la V3) |
| Fabricación | JLCPCB, orden preparada 02/03-ago-2026 (lote Y5) <!-- VERIFICAR: número de tarjetas fabricadas y fecha de entrega --> |
| Firmware | `hbox-tarjetaV4_0.6.0.bin` (mismo sketch `hbox_v5_bringup` compilado con `-DHBOX_BOARD_V4` para Blackpill). SHA-256 `1458470bbdd95b49…` |
| Paquete | Li-ion 18650 1S4P · JP2 en 1-2 (`F2:Li-ion`) · R55 10 k |
<!-- foto: vista superior V4 con Blackpill sentado, RJ45 arriba-izquierda, clemas P15/P16 abajo, P14 a la derecha -->
## 1. Cómo reconocerla
| Rasgo | V4 | Comparar con |
|---|---|---|
| Blackpill enchufado + RJ45 + clemas verdes P15/P16 | Sí | V3: Blackpill sin RJ45 ni clemas. V5: RJ45 y clemas sin Blackpill |
| USB-C en la tarjeta | Solo J9 (módem); consola y DFU por el USB-C del Blackpill | V5 tiene J11 |
| Botones | SW1 RESET (`MASTER RESET`), SW4G1 (`4G NTRIP RESET`) + los dos del Blackpill (NRST y KEY = BOOT0) | — |
| Silk de J1/J2 | `E-CS / E-SCK / E-MISO / E-MOSI`, `CHEN`, `U-TX / U-RX`, `CSTA / CFLT / BYP / SCL / SDA`… | — |
## 2. Conectores
Como la V5.5 ([pinout V5.6](../hardware/v56-pinout.md), tabla de diferencias al final) más P5 (sonda T/RH externa, JST 4) y P6 de 4 pines. Sin J11. `P3`, `P13` y `H3` de la V3 ya no existen.
| Ref | Qué se conecta | Pines |
|---|---|---|
| P1 | Vehículo (GX16-5) | 1 = +24 V · 2 = GND · 3 = ignición 12–24 V · 4 = GND · 5 = n/c |
| P2 | SD-15B-05 | 1 = +5 V · 2 = GND (ajustar a 5.2–5.4 V en P2) |
| P4 | Paquete Li-ion | 1 = BAT+ · 2 = GND · 3 = NTC |
| P5 | Sonda externa I²C (opcional) | 1 = 3V3 · 2 = GND · 3 = SDA · 4 = SCL |
| P6 | Ventilador | 1 = +5V_FAN · 2 = retorno · 3 = GND · 4 = tacómetro (no usado) |
| P8 / P10 / P11 / P12 | LED de panel / reset externo / interruptor de corte / NTC de punto caliente | Como en V5 |
| P14 | LED RGB externo | 1 = 3V3 · 2 = R · 3 = G · 4 = B |
| P15 / P16 / H4 | RS-485 / RS-232 / TTL del canal B | Como en V5 (no usar P16 y H4 a la vez) |
| J9 | USB del módem | Solo configuración del 4G NTRIP Master |
| J10 | Ethernet (sin PoE) | Solo con 5 V presente |
| MOD1 · J7/J8 | simpleRTK2B · 4G NTRIP Master | Como en V5 |
| J1 / J2 | Blackpill | J1 = fila VBAT…5V; J2 = fila PB12…3V3. Módulo con el USB hacia J2 |
## 3. Puentes y botones
| Ref | Default | Función |
|---|---|---|
| JP2 | 1-2 (`F2:Li-ion`) | Química: Li-ion 4.00 V. Solo cambia con paquete LFP (2-3 + R55 5.6 k) |
| JP3 / JP4 | 1-2 | Straps F1/F0 — no tocar |
| JP1 | abierto | Nunca cerrar |
| JP5 | abierto | Terminación 120 Ω RS-485 ([regla](../procedimientos/v5-prueba-ethernet-serie.md#conexion-en-la-instalacion)) |
| SW1 | — | Reset del MCU (= NRST del Blackpill = P10) |
| SW4G1 | — | Reset del módem. Con el puente U13-P7 el firmware lo pulsa solo (tecla `M` y 3 s después de cada STACK ON) |
| KEY (Blackpill) | — | BOOT0: para entrar en DFU |
Puente de reset del módem (necesario para que el MCU resetee el módem): diodo Schottky de señal del pin 12 de U13 (P7, SOIC-16 ancho) al pad 1 de SW4G1 (`MODEM_RST`), cátodo en U13. Diodo, soldadura y prueba con `M`: [V4 — preparación 1](../procedimientos/v4-prueba-fw-0.5.6.md#preparacion-1-puente-de-reset-del-modem).
## 4. LEDs
| LED | Significado |
|---|---|
| DB1–DB4 (medidor, vía PCF8574) | Batería 3.60 / 3.75 / 3.90 / 3.97 V |
| RGB (P14, vía PCF8574) | Verde RTK fix · Azul etapa ON sin RTK · Magenta sin NMEA · Amarillo en batería · Rojo etapa OFF |
| LED azul del Blackpill (PC13) | Lo maneja el firmware (parpadeo rápido = esperando consola) |
| LED de panel (P8) | Respaldo cableado en duro (PB0) |
| D4G1 | Actividad del módem (tenue) |
| J10 LINK / ACT | Ethernet |
## 5. Flasheo
Solo el USB-C del Blackpill, nada en P2 (con el W5500 alimentado, `ETH_INT` = PB2 = BOOT1 puede impedir el DFU). KEY (BOOT0) + NRST (o SW1) → `0483:DF11`. Solo `hbox-tarjetaV4_…` ([Descargas](../descargas/index.md#firmware-del-hbox-que-binario-va-en-que-tarjeta)). La consola debe decir `board=EinarBoard v4 (HBOX v4)`; si dice `v5`, es el binario equivocado. Procedimiento: [V4 — flasheo](../procedimientos/v4-prueba-fw-0.5.6.md#flasheo-de-060).
## 6. Consola y autotest
Iguales a la V5 (mismo firmware): teclas `h l r s t i g v P Y n A B M R C`, línea `STAT` cada 5 s, `$PHLG` cada 10 s, autotest con `CLOCK_HSE`, `LSE`, I²C (0x20 / 0x44 / 0x48 / 0x4D), `SC16IS752`, `GAUGE_WALK`. Ver el [manual V5](manual-tarjeta-V5.md) §7–§8.
## 7. Diferencias eléctricas frente a la V5.5
| Tema | V4 | V5.5 |
|---|---|---|
| MCU | Blackpill F411CE en zócalo (cristales del módulo) | F411RET6 soldado, Y3/Y4 en tarjeta |
| `ETH_INT` | **PB2** (J1.16) — es BOOT1: DFU solo con USB | PC0 |
| Consola/DFU | USB-C del Blackpill | J11 |
| Sonda externa | P5 presente | P5 presente (se elimina en V5.6) |
| Ventilador | P6 de 4 pines (tach sin uso) | P6 de 2 pines |
| Ignición | Divisor 22 k / 3.3 k (nodo ≈ 3.1 V a 24 V) | Igual |
| PFI / amortiguación | 4.40 V (R51 270 k) + C78 220 µF | Igual |
| Lo demás | Mismo cargador, mismo módem (MP1584 desde `SW_5V`), mismo Ethernet/serie/expansor | — |
## 8. Limitaciones conocidas (iguales a V5.5)
- Módem oscuro en batería: no arranca sobre el boost; solo SW4G1 (o el puente 0.5.6 + `M`) o los 24 V lo reviven. Firmware ≥ 0.5.9: sin ciclos de etapa en batería; reset del MCU al volver el 5 V.
- Cargador: apagado en firmware < 0.6.0; el gobernador de 0.6.0 lo habilita con 24 V y riel estable.
- Ethernet y serie sin prueba en hardware real.
## 9. Procedimientos relacionados
[V4 — preparación y prueba con firmware 0.6.0](../procedimientos/v4-prueba-fw-0.5.6.md) · [Política de ventilador (banco)](../procedimientos/fan-policy-bench-test.md) · [Acta V4](../formularios/v4.html) · [Reflasheo de unidades](../procedimientos/reflasheo-unidades.md) · [Prueba módem en batería](../procedimientos/prueba-bateria-modem.md) · [Manual V5](manual-tarjeta-V5.md).
## Historial de revisiones
| Versión | Fecha | Cambios |
|---|---|---|
| 1.0 | 2026-09-29 | Primera versión. |
| 1.1 | 2026-09-29 | Edición breve; puente y flasheo remiten al procedimiento V4 (el manual listaba 1N5819, que el procedimiento prohíbe). |
Versiones anteriores en git.

View File

@ -0,0 +1,174 @@
---
title: "Manual de tarjeta — EinarBoard V5 (V5.5 y V5.6)"
project: Project Drogheda
date: 2026-09-29
version: "1.1"
tags: [project-drogheda, hardware, einarboard, v5, v5.5, v5.6, manual, tecnicos]
author: Helgen Technologies
audience: técnicos de banco y de campo
---
# Manual de tarjeta — EinarBoard V5 (V5.5 y V5.6)
Valores de ingeniería: [hoja de datos V5.6](../hardware/v56-datasheet.md). Pin a pin: [pinout V5.6](../hardware/v56-pinout.md).
| | V5.5 | V5.6 |
|---|---|---|
| Estado | 15 tarjetas fabricadas (JLCPCB, 22-ago-2026), en ensamble y en campo | Esquemático listo (ECO 27/28-sep); PCB y pedido pendientes |
| Proyecto KiCad | `kicad/hbox-watchdog-v5.*` (etiqueta git `v5.5-as-fabbed`) | `kicad/hbox-watchdog-v5.*` (ECO aplicada) |
| Firmware | `hbox-v5-bringup_0.6.0.bin` | `hbox-v5-bringup_0.6.0.bin` (0.6.x añadirá el control del módem) |
| Paquete de batería | Li-ion 18650 1S4P · JP2 en 1-2 · R55 10 k | LFP-HT 26650 · JP2 en 2-3 · R55 5.6 k · NTC B3380 |
## 1. Identificación
<!-- foto: vista superior V5.5 con J11, SW1/SW2, J10, MOD1 y J7/J8 señalados -->
<!-- foto: serigrafía "EINARBoard 4.0 / HBOX v5 - 2026-08" -->
| Rasgo | Cómo reconocerla |
|---|---|
| Serigrafía | `EINARBoard 4.0` · `HBOX v5 - 2026-08` · `www.helgen.tech` (la serigrafía dice 4.0; la tarjeta es V5) |
| MCU | STM32F411 soldado (LQFP-64, U16), sin Blackpill. Con Blackpill es V3 o V4 |
| Dos USB-C | J11 DFU/consola (junto a SW1/SW2 y al RJ45) y J9 USB del módem (junto al zócalo XBee) |
| RJ45 | J10 con LEDs integrados, sin PoE |
| Clemas verdes | P15 RS-485 y P16 RS-232 (Phoenix 3.5 mm) |
| Cristales | Y3 25 MHz (MCU), Y1 25 MHz (W5500), Y2 3.6864 MHz (SC16IS752), Y4 32.768 kHz |
| V5.5 vs V5.6 | V5.6: U7 en SO-8 con exposed pad (AP64350), tres 220 µF polímero (C3, C43, C78), sin P5, JP6 junto a P11, U18 (SOT-563) junto al zócalo XBee (§9) |
## 2. Conectores
V5.5 igual al [pinout V5.6](../hardware/v56-pinout.md) salvo lo listado en §9.
| Ref | Qué va | Pines | Cuidado |
|---|---|---|---|
| P1 | Arnés del vehículo (GX16-5) | 1 = +24 V · 2 = GND · 3 = ignición (12–24 V cruda) · 4 = GND · 5 = n/c | Solo alimenta el ventilador y la lectura de ignición |
| P2 | Mean Well SD-15B-05 | 1 = +5 V · 2 = GND | Ajustar a 5.2–5.4 V medidos en P2; cable corto, ≥ 3 A |
| P4 | Paquete de batería | 1 = BAT+ · 2 = GND · 3 = NTC | Química = JP2 ([ensamble §2](../procedimientos/v5-ensamble.md#2-tarjeta-sin-energia)). Nunca en pruebas de tarjeta desnuda |
| P6 | Ventilador 5 V, 2 hilos | 1 = +5V_FAN · 2 = retorno conmutado | — |
| P8 | LED de panel | 1 = ánodo · 2 = cátodo | — |
| P10 | Botón de reset externo | 1 = NRST · 2 = GND | Solo reinicia el MCU |
| P11 | Interruptor de corte | 1 = MAIN5V · 2 = SYS5V | Abierto = tarjeta apagada. En banco, jumper |
| P12 | NTC de punto caliente (opcional) | 1 = NTC · 2 = GND | Sin sonda, `tntc=n/c` |
| P14 | LED RGB externo (ánodo común) | 1 = 3V3 · 2 = R · 3 = G · 4 = B | — |
| P15 | RS-485 | 1 = A · 2 = B · 3 = GND | JP5 = terminación 120 Ω |
| P16 | RS-232 | 1 = TX · 2 = RX · 3 = GND | No usar a la vez que H4 (TTL) |
| J11 | USB-C DFU + consola | — | Alimenta solo el 3.3 V (MCU + sensores); no enciende módem ni F9P |
| J9 | USB-C del módem | — | Solo para configurar el módem desde la laptop |
| J10 | Ethernet RJ45 | — | Sin PoE; solo con 5 V (con USB solo el W5500 queda en reset) |
| MOD1 | simpleRTK2B (zócalo UNO) | — | Interruptores del módulo: [módulos RTK y 4G](../procedimientos/v5-modulos-integracion.md) |
| J7/J8 | Módem (zócalo XBee) | — | Pin 1 (VCC) en J7.1 |
| P5 | Sonda T/RH externa | 1 = 3V3 · 2 = GND · 3 = SDA · 4 = SCL | Solo V5.5 |
## 3. Puentes de soldadura
| Ref | V5.5 | V5.6 | Función |
|---|---|---|---|
| JP2 | 1-2 (`F2:Li-ion`) | 2-3 (`F2:LFP`) | Química del paquete: Li-ion flota a 4.00 V, LFP a 3.50 V. Regla: [ensamble §2](../procedimientos/v5-ensamble.md#2-tarjeta-sin-energia) |
| JP3 / JP4 | 1-2 / 1-2 | Igual | Straps F1/F0 del LTC4040; no tocar |
| JP1 | Abierto | Abierto | Une el 5 V del ventilador con el de la SD-15B; nunca cerrar |
| JP5 | Abierto | Abierto | Terminación 120 Ω del RS-485 ([regla](../procedimientos/v5-prueba-ethernet-serie.md#conexion-en-la-instalacion)) |
| JP6 | — | Abierto | Puentea P11; cerrar solo en unidades sin interruptor de corte |
## 4. Botones
| Ref | Serigrafía | Función |
|---|---|---|
| SW1 | RESET | Reinicia el MCU (igual que P10); no apaga módem ni F9P |
| SW2 | BOOT / BOOT0 | SW2 pulsado + SW1 → modo DFU |
| SW4G1 | 4G NTRIP RESET | Reinicia el módem. Con los 24 V, lo único que revive un módem oscuro en una V5.5 en batería |
## 5. LEDs
| LED | Estado | Significado |
|---|---|---|
| D18 PWR (verde) | Encendido | Hay 3.3 V (USB en J11, o 5 V en P2 con P11 cerrado) |
| D17 C13 (azul) | Parpadeo rápido al arrancar | Espera la consola USB (máx. 4 s). Chip virgen: apagado |
| DB1–DB4 (medidor) | 1–4 encendidos | Batería 3.60 / 3.75 / 3.90 / 3.97 V (umbrales Li-ion; LFP en 0.6.x) |
| RGB (P14) | Verde | RTK FIX |
| | Azul | Etapa ON, sin RTK FIX |
| | Magenta | Etapa ON, sin NMEA (el F9P no habla) |
| | Amarillo | En batería (sin 5 V en P2) |
| | Rojo | Etapa OFF (sin 5 V, batería < 3.40 V, > 60 °C o apagada por operador) |
| D4G1 (junto al XBee) | Parpadeo tenue | Actividad del módem (tenue por diseño) |
| J10 LINK / ACT | Verde / amarillo | Enlace y actividad Ethernet |
## 6. Flasheo
DFU por J11, solo USB, sin P1/P2 ni batería: mantén SW2, pulsa y suelta SW1, suelta SW2 (`STM32 BOOTLOADER`, `0483:DF11`). Procedimiento completo: [prueba y flasheo §5](../procedimientos/v5-prueba-y-flasheo.md#5-flasheo-por-usb-dfu-j11-5-min). Binario: [Descargas](../descargas/index.md). La consola debe decir `hbox_v5_bringup 0.6.0` y `board=EinarBoard v5 (HBOX v5)`.
Nunca flashees `blackpillrtkcode` (V3) en una V5: usa PB12–PB15 como LEDs y en la V5 son el SPI del W5500.
## 7. Consola
USB CDC en J11 a 115200 (CoolTerm, `screen`, monitor de Arduino), CR+LF. `h` = ayuda, `l` = leyenda. Cada 5 s sale `STAT …` y cada 10 s `$PHLG,…`. Para reportar: líneas `EVT` + la última `STAT`.
| Tecla | Uso |
|---|---|
| `r` | Repetir el autotest (§8) |
| `s` / `t` | `STAT` / `$PHLG` ahora |
| `i` / `g` | Escaneo I²C / recorrido de LEDs (DB1→DB4, R, G, B) |
| `v` | Puntos de medición (SYS5V, PWR_CTRL, GATE_LS, SW_5V, 3V3_MODEM, MODEM_RST) |
| `P` → `Y` | Encender la etapa RTK (solo con 5 V en P2); `P` otra vez apaga |
| `n` | NMEA 20 s (fix 4 = RTK FIX) |
| `A` | AUTO ↔ MANUAL (de fábrica AUTO: la etapa enciende sola con 5 V) |
| `M` | Pulso de reset al módem (V5.5: requiere el puente U13-P7 → SW4G1) |
| `R` | Reset por software del MCU |
| `C` | Bloquear/permitir el cargador |
## 8. Autotest
Al arrancar y con `r`. Termina en `>>> BOARD OK` o `>>> BOARD CHECK FAILED`.
| Línea | PASS significa | Si FAIL |
|---|---|---|
| `[PASS] CLOCK_HSE` | Y3 25 MHz y PLL a 96 MHz | Y3 / C113 / C114 |
| `[PASS] LSE_Y4` | Y4 32.768 kHz oscila | Y4 / C115 / C116 (no impide operar) |
| `[PASS] I2C PCF8574 U13 @0x20` | Expansor de LEDs | U13, pull-ups R30/R31 |
| `[PASS] I2C SHT40 U3 @0x44` | Sensor de aire | U3 |
| `[PASS] I2C TMP102 U4 @0x48` | Sensor de temperatura | U4 |
| `[PASS] I2C SC16IS752 U10 @0x4D` | Puente serie | U10, Y2 |
| `[PASS] TMP102` / `[PASS] SHT40` | Lecturas entre −20 y 85 °C | Sensor o bus |
| `[PASS] SC16IS752` | Scratchpad OK | U10 |
| `[PASS] GAUGE_WALK` | Visual: DB1→DB4 y R, G, B en orden | LED, RB1–4 / R89–91, U13 |
| `[PASS] ADC` | Informativo: `vbat v5 ntc mcu` | Con solo USB, `v5≈0` y `vbat≈0` es normal |
| `[PASS] DIN` | Informativo: `ign chrg fault ser_irq eth_int` | — |
En V5.6 el escaneo I²C (`i`) muestra además 0x49 (U18, sensor del módem).
## 9. Diferencias V5.5 → V5.6
| Tema | V5.5 | V5.6 |
|---|---|---|
| Módem en batería | Cuelga del riel de la etapa; apagado en batería no vuelve hasta SW4G1 o 24 V | Regulador propio (U7 AP64350) desde SYS5V; el MCU lo enciende (`MODEM_EN`) y resetea (`MODEM_RST`) sin puente |
| Puente U13 pin 12 → SW4G1 | Necesario para `M` | No hace falta (PC1 hace el reset) |
| Paquete | Li-ion 18650 1S4P, JP2 1-2 | LFP-HT 26650, JP2 2-3, R55 5.6 k |
| Corriente de carga | 2.4 A (la fuente se plegaba) | 1.4 A, límite de entrada 2.5 A |
| Sonda externa | P5 (JST 4) | No existe. U4 mide el cargador, U18 (0x49) el módem; el MCU también lee el NTC del paquete |
| Interruptor de corte | Solo P11 | P11 o JP6 puenteado |
| USB del módem J9 | Sin ESD | Con ESD (D19) |
| Ethernet | El W5500 puede salir de reset solo (130 mA en batería) | Queda en reset hasta que el MCU lo levante (R112) |
| Regulador 3.3 V | AMS1117 | TLV1117LV (funciona con batería baja) |
## 10. Ethernet y puertos serie
- Ethernet (J10): solo con el build de banco `0.6.0-eth`; DHCP o `192.168.7.2/24`, TCP a `192.168.7.1:5010` con NMEA + `$PHLG` + `$PHEV` + `$PHID`. Tecla `E`.
- RS-485 (P15) / RS-232 (P16): 0.6.0 solo comprueba que el SC16IS752 responde; loopback previsto en 0.6.1.
- Procedimiento: [Ethernet y puertos serie](../procedimientos/v5-prueba-ethernet-serie.md), obligatorio en una V5.5 antes de pedir la V5.6.
## 11. Limitaciones de la V5.5
- Módem oscuro en batería: si el módem se apaga en batería (ciclo de etapa, brown-out) no arranca sobre el boost del LTC4040; solo lo reviven SW4G1 o los 24 V. Por eso el firmware ≥ 0.5.9 nunca cicla la etapa en batería y resetea el MCU al volver el 5 V ([hallazgos](../procedimientos/prueba-bateria-modem.md#3-hallazgos-2527-sep)).
- Hasta 0.5.9 el cargador estaba apagado por firmware. 0.6.0 carga con 24 V, etapa ON > 120 s y riel ≥ 5.05 V, y corta bajo 4.90 V. Reflashea unidades con firmware anterior.
- La consola no sabe si el módem está vivo: `modem=vivo|SOSPECHOSO|?` es una inferencia por RTCM y caídas del riel.
- Ethernet y serie no se han probado en hardware real (sep-2026).
- Y2: la pieza dice 3.6864; el esquemático V5.6 dice `1.8432MHz` <!-- VERIFICAR el campo Value en KiCad; la pieza LCSC C2238 es de 3.6864 MHz -->.
Procedimientos V5: [Producción](../produccion/index.md) · [Taller](../taller/index.md).
## Historial de revisiones
| Versión | Fecha | Cambios |
|---|---|---|
| 1.0 | 2026-09-29 | Primera versión (V5.5 fabricada + V5.6 en esquemático). |
| 1.1 | 2026-09-29 | Edición breve; flasheo, química/JP2 y JP5 remiten a su procedimiento. |
Versiones anteriores en git.

View File

@ -0,0 +1,22 @@
---
title: "Manual de tarjeta — EinarBoard v6 (en diseño)"
project: Project Drogheda
date: 2026-09-29
version: "0.2"
tags: [project-drogheda, hardware, einarboard, v6, manual, placeholder]
author: Helgen Technologies
---
# Manual de tarjeta — EinarBoard v6 (en diseño)
En diseño (`kicad/hbox-watchdog-v6.*`). No hay tarjetas fabricadas y no aplica a ningún procedimiento de técnicos. Este manual se escribe con el primer lote.
- Qué cambia: GNSS (u-blox ZED-F9P) y módem 4G (A7670SA) soldados en la tarjeta, sin zócalos MOD1/J7-J8; fuente de 5 V a bordo (U25) en lugar de la Mean Well externa.
- Referencia técnica: [auditoría pre-fabricación](../hardware/v6-auditoria-prefab.md) ([inglés](../hardware/v6-prefab-audit.md)) · [plan de cobre y colocación EMC](../hardware/EinarBoard-v6_Plan-de-Cobre_ES.html) · [revisión contra lecciones V5.5](../hardware/v6-revision-lecciones-v55.md) · [auditoría completa](../hardware/v6-auditoria-completa.md) · [cambios al esquemático](../hardware/v6-cambios-esquematico.md) · [mapa de pines del MCU](../hardware/v6-pinmap.md).
## Historial de revisiones
| Versión | Fecha | Cambios |
|---|---|---|
| 0.1 | 2026-09-29 | Marcador de posición. |
| 0.2 | 2026-09-29 | Edición breve. |

View File

@ -1,8 +1,17 @@
# Guía de ensamble (PDF)
---
title: "Guía de ensamble del gabinete (PDF)"
tags: [project-drogheda, hbox, montaje, gabinete, pdf]
date: 2026-09-19
project: Project Drogheda
author: Helgen Technologies
---
La guía de ensamble completa del gabinete HBOX es un PDF:
# Guía de ensamble del gabinete (PDF)
**[Abrir 0007-1000_Assembly_Guide.pdf](0007-1000_Assembly_Guide.pdf){:target="_blank"}** (≈9 MB)
[0007-1000_Assembly_Guide.pdf](0007-1000_Assembly_Guide.pdf){:target="_blank"} (≈ 9 MB). Descárgala en la tablet o laptop del banco antes de empezar. Orden de trabajo y reglas de calidad: [guía de ensamble y QC](guia-ensamble-qc.md).
Se recomienda descargarla en la tablet o laptop del banco antes de empezar, para no
depender de la red durante el armado.
## Historial de revisiones
| Versión | Fecha | Cambios |
|---|---|---|
| 1.0 | 2026-09-19 | Página de descarga del PDF 0007-1000. |

View File

@ -1,32 +1,35 @@
---
title: HBOX Watchdog v3 PROD — Assembly BOM Split
title: "HBOX Watchdog V3 (PROD) — BOM dividido para ensamble"
project: Project Drogheda
date: 2026-07-05
tags: [project-drogheda, hardware, pcb, assembly, jlcpcb, bom]
status: Board routed, DRC fab-clean — assembly reference for JLCPCB PCBA order
tags: [project-drogheda, hardware, pcb, assembly, jlcpcb, bom, v3]
author: Helgen Technologies
status: HISTÓRICO — referencia de ensamble del pedido PCBA V3 en JLCPCB (jul-2026)
---
# HBOX Watchdog v3 PROD — Assembly BOM Split
# HBOX Watchdog V3 (PROD) — BOM dividido para ensamble
Audit of the routed board (`kicad/hbox-watchdog-v3-PROD.kicad_pcb`, 126 footprints)
for the JLCPCB assembly order. Three buckets: **(A)** what JLC solders onto the
board, **(B)** the plug-in modules that sit on top (you install), and **(C)** what
lives off-board and connects through the JST harness.
Tarjeta: V3 (EinarBoard 1.0, `kicad/hbox-watchdog-v3-PROD`, 126 huellas).
| Bucket | Count | JLC assembles? |
!!! note "Solo V3 — para V5.6 usa [Pinout V5.6](../hardware/v56-pinout.md)"
El BOM de la V5.6 (94 LCSC) se exporta desde el esquemático `hbox-watchdog-v5`; ver [hoja de datos V5.6 §11](../hardware/v56-datasheet.md).
Traducido del original en inglés (05-jul-2026).
Auditoría de la tarjeta ruteada (`kicad/hbox-watchdog-v3-PROD.kicad_pcb`, 126 huellas) para el pedido de ensamble en JLCPCB. Tres grupos: (A) lo que JLC suelda en la tarjeta, (B) los módulos enchufables que van encima (los instala Helgen) y (C) lo que vive fuera de la tarjeta y se conecta por el arnés JST.
| Grupo | Cantidad | ¿JLC lo ensambla? |
|---|---|---|
| A. On-board parts (SMD + THT) | 103 parts + 12 connectors + 5 sockets | **Yes** |
| B. Plug-in modules (on top) | 3 modules | No — you install |
| C. External via JST harness | wired to 12 connectors | No — off-board |
| Fab features (2 test points, 4 mounting holes) | 6 | n/a |
| A. Partes en la tarjeta (SMD + THT) | 103 partes + 12 conectores + 5 zócalos | Sí |
| B. Módulos enchufables (encima) | 3 módulos | No — los instala Helgen |
| C. Externos por el arnés JST | cableados a 12 conectores | No — fuera de la tarjeta |
| Elementos de fabricación (2 puntos de prueba, 4 barrenos de montaje) | 6 | n/a |
---
## A. Ensamblado por JLC — en la PCB
## A. Assembled by JLC — on the PCB
### A1 · Partes SMD (PCBA estándar — 98 partes)
### A1 · SMD parts (standard PCBA — 98 parts)
| Qty | Value | Package | Refs |
| Cant. | Valor | Encapsulado | Refs |
|---|---|---|---|
| 10 | 10k | R0603 | R2, R5, R6, R7, R8, R41, Rigb, Rled, Rrp, Rtp |
| 8 | 100k | R0603 | R20, R56, R57, R58, Ren1, Rfreq, Rfreq2, Rgs |
@ -37,7 +40,7 @@ lives off-board and connects through the JST harness.
| 3 | SS34 | D_SMA | D2, Dbk, Dbk2 |
| 3 | 22uF | C0805 | C35, C40, C41 |
| 3 | 100k/1% | R0603 | R52, R54, R60 |
| 2 | MP1584EN | SOIC-8-EP | U2 (fan buck), U7 (modem buck) |
| 2 | MP1584EN | SOIC-8-EP | U2 (buck del ventilador), U7 (buck del módem) |
| 2 | 2.2nF | C0603 | Ccomp, Ccomp2 |
| 2 | 100R | R0603 | Rg, Rig |
| 2 | 10uF | C0805 | C30, C34 |
@ -48,7 +51,7 @@ lives off-board and connects through the JST harness.
| 2 | AO3400A | SOT-23 | Q2, Q4 |
| 2 | 10k/1% | R0603 | R42, R55 |
| 2 | 47uF | C1210 | C32, C33 |
| 1 | **LTC4040EUFD** | QFN-24 | U6 (backup-supply/charger) |
| 1 | **LTC4040EUFD** | QFN-24 | U6 (respaldo/cargador) |
| 1 | AO4406A | SOIC-8 | Q7 |
| 1 | AO3401A | SOT-23 | Q1 |
| 1 | IRFR5305 | TO-252 | Q10 |
@ -56,85 +59,81 @@ lives off-board and connects through the JST harness.
| 1 | BAT54 | SOD-123 | D5 |
| 1 | 1N4148W | SOD-123 | D6 |
| 1 | SMBJ33A | D_SMB | D10 |
| 1 | **SHT40-AD1B** | DFN-4 | U3 (humidity/temp) |
| 1 | **TMP102** | SOT-563 | U4 (temp) |
| 1 | 8mR/1% | R1206 | RS1 (current sense) |
| 1 | **SHT40-AD1B** | DFN-4 | U3 (humedad/temperatura) |
| 1 | **TMP102** | SOT-563 | U4 (temperatura) |
| 1 | 8mR/1% | R1206 | RS1 (sensado de corriente) |
| 1 | PPTC 3A | Fuse1812 | F1 |
| 3 | 2.2uH / 10uH / 10uH-2A | SRU8028 8×8 | L6, L2, L7 |
| 1 | 22uF/50V | C1210 | C22 |
| 1 | 22uF/16V | C0805 | C23 |
| 1 | 2.2uF | C0603 | C31 |
| — | *(single-value R's)* | R0603 | Ren2 20k, Rdfu 22k, R21 19.1k, R50 825R, R51 287k, R53 499k, R61 31.6k |
| 4 | jumpers | SolderJumper | JP1 (0R), JP2 (F2), JP3 (F1), JP4 (F0) |
| — | *(resistencias de un solo valor)* | R0603 | Ren2 20k, Rdfu 22k, R21 19.1k, R50 825R, R51 287k, R53 499k, R61 31.6k |
| 4 | puentes | SolderJumper | JP1 (0R), JP2 (F2), JP3 (F1), JP4 (F0) |
### A2 · Through-hole parts (THT — JLC "through-hole assembly" surcharge, or hand-solder)
### A2 · Partes through-hole (THT — recargo de JLC por «through-hole assembly», o soldar a mano)
| Ref | Part | Note |
| Ref | Parte | Nota |
|---|---|---|
| K1 | Omron G5V-1 DC5 relay | Modo-B fail-safe bypass |
| SW1 | 6 mm push (RESET) | |
| C3, C10, C43 | Radial electrolytics (47µF, 47µF/50V, 100µF) | |
| K1 | Relevador Omron G5V-1 DC5 | Bypass fail-safe del Modo B |
| SW1 | Botón de 6 mm (RESET) | |
| C3, C10, C43 | Electrolíticos radiales (47 µF, 47 µF/50 V, 100 µF) | |
### A3 · Connectors & module sockets (THT — soldered to board)
### A3 · Conectores y zócalos de módulos (THT — soldados a la tarjeta)
| Ref | Part | Purpose |
| Ref | Parte | Propósito |
|---|---|---|
| P1 | Phoenix MKDS 1.5-5 (5-pos terminal) | GX16 machine power in |
| P2, P8, P10, P11, P12 | JST-XH 2-pin | see bucket C |
| P1 | Phoenix MKDS 1.5-5 (terminal de 5 posiciones) | Entrada de energía de la máquina (GX16) |
| P2, P8, P10, P11, P12 | JST-XH 2-pin | ver grupo C |
| P4, P13 | JST-XH 3-pin | |
| P3, P5, P6 | JST-XH 4-pin | |
| H3 | 1×3 pin header | USART1 reserved |
| **J1, J2** | 1×20 female 2.54 | **Blackpill socket** |
| **J7, J8** | 1×10 female 2.00 | **4G XBee socket** |
| **MOD1** | Arduino-UNO-form female headers | **simpleRTK2B Pro socket** |
| H3 | Header de 1×3 pines | USART1 reservado |
| **J1, J2** | Hembra 1×20 de 2.54 mm | Zócalo del Blackpill |
| **J7, J8** | Hembra 1×10 de 2.00 mm | **Zócalo XBee del 4G** |
| **MOD1** | Headers hembra formato Arduino UNO | **Zócalo del simpleRTK2B Pro** |
> ⚠️ **Confirm before ordering:** engineering notes flag **P3 / P13 / H3 as DNP**
> (Modo-B + K1 NC bypass makes them redundant), but they are **not** marked DNP in
> the board file — so JLC would populate them. Decide per-connector.
!!! warning "Confirmar antes de pedir"
Las notas de ingeniería marcan **P3 / P13 / H3 como DNP** (Modo B + el bypass NC de K1 los vuelven redundantes), pero **no** están marcados DNP en el archivo de la tarjeta — JLC los poblaría. Decidir conector por conector.
---
## B. Módulos enchufables — montados encima (los instala Helgen; no van en el pedido a JLC)
## B. Plug-in modules — mounted ON TOP (you install, NOT in the JLC order)
Son tarjetas completas que se asientan en los zócalos de arriba. **No** añadirlos al BOM de JLC — se colocan a mano cuando llega el PCBA.
These are complete boards that seat into the sockets above. Do **not** add them to
the JLC BOM — they're hand-fitted after the PCBA arrives.
| Module | Seats into | Notes |
| Módulo | Se asienta en | Notas |
|---|---|---|
| **simpleRTK2B Pro** (ZED-F9P) | MOD1 (Arduino headers) | GNSS RTK receiver |
| **STM32F411 Blackpill** | J1 + J2 (2×20) | watchdog MCU |
| **4G NTRIP Master** (XBee LTE) | J7 + J8 (2×10, 2 mm) | modem, 3V3 socket |
| **simpleRTK2B Pro** (ZED-F9P) | MOD1 (headers Arduino) | receptor GNSS RTK |
| **STM32F411 Blackpill** | J1 + J2 (2×20) | MCU del watchdog |
| **4G NTRIP Master** (XBee LTE) | J7 + J8 (2×10, 2 mm) | módem, zócalo a 3V3 |
---
## C. Externos — conectados por el arnés JST (NO en la tarjeta)
## C. External — connected via the JST harness (NOT on the board)
Todo lo que se enchufa en los conectores de borde y vive fuera del HBOX (o en el gabinete). Cablear según el [pinout de arneses](pinout-arneses.md).
Everything that plugs into the edge connectors and lives outside the HBOX (or in the
cabinet). Wire per the harness pinout (`harness-connector-pinout.md`).
| Conn | Wires to (external) | Key pins |
| Conector | Se cablea a (externo) | Pines clave |
|---|---|---|
| **P1** GX16-5 | Machine power + ignition from the cabinet | 1 = 24V_IN ⚡, 3 = IGN_IN, 2 = GND |
| **P2** 5V-IN | Mean Well SD-15B-05 5 V supply (VEH5V rail) | 1 = VEH5V ⚡, 2 = GND |
| **P3** RTK2B-UART1 | RTK2B UART1 tap (GNSS TX/RX) | 1 = SW_5V ⚡, 3 = GNSS_TX, 4 = GNSS_RX |
| **P4** BATT | 1S4P 12 Ah pack + NTC | 1 = BAT_PLUS ⚡, 3 = NTC, 2 = GND |
| **P5** TEMP_PROBE | External I²C temp/probe header | 1 = 3V3, 3 = SDA, 4 = SCL |
| **P6** FAN | Cooling fan (5 V, tach) | 1 = 5V_FAN ⚡, 2 = FAN_RET, 4 = TACH |
| **P8** PANEL_LED | Panel status LED | 1 = LED_A, 2 = LED_K |
| **P10** RESET-EXT | External reset button | 1 = NRST, 2 = GND |
| **P11** CUTOFF-SW | Power cutoff switch (SYS→MAIN 5 V) | 1 = MAIN5V ⚡, 2 = SYS5V ⚡ |
| **P12** NTC-HOTSPOT | Cabinet hotspot NTC | 1 = NTC_TEMP, 2 = GND |
| **P13** MODO-B-UPLINK | Modo-B uplink to 4G | 1 = USART1_RX, 2 = DIN_4G, 3 = GND |
| **P1** GX16-5 | Energía de la máquina + ignición desde el gabinete | 1 = 24V_IN ⚡, 3 = IGN_IN, 2 = GND |
| **P2** 5V-IN | Fuente Mean Well SD-15B-05 de 5 V (riel VEH5V) | 1 = VEH5V ⚡, 2 = GND |
| **P3** RTK2B-UART1 | Derivación del UART1 del RTK2B (GNSS TX/RX) | 1 = SW_5V ⚡, 3 = GNSS_TX, 4 = GNSS_RX |
| **P4** BATT | Paquete 1S4P 12 Ah + NTC | 1 = BAT_PLUS ⚡, 3 = NTC, 2 = GND |
| **P5** TEMP_PROBE | Header externo de sonda I²C de temperatura | 1 = 3V3, 3 = SDA, 4 = SCL |
| **P6** FAN | Ventilador de enfriamiento (5 V, tacómetro) | 1 = 5V_FAN ⚡, 2 = FAN_RET, 4 = TACH |
| **P8** PANEL_LED | LED de estado del panel | 1 = LED_A, 2 = LED_K |
| **P10** RESET-EXT | Botón de reset externo | 1 = NRST, 2 = GND |
| **P11** CUTOFF-SW | Interruptor de corte de energía (SYS→MAIN 5 V) | 1 = MAIN5V ⚡, 2 = SYS5V ⚡ |
| **P12** NTC-HOTSPOT | NTC de punto caliente del gabinete | 1 = NTC_TEMP, 2 = GND |
| **P13** MODO-B-UPLINK | Enlace de subida Modo B al 4G | 1 = USART1_RX, 2 = DIN_4G, 3 = GND |
---
## Pendientes antes del pedido a JLCPCB
## Action items before the JLCPCB order
1. Añadir números de parte LCSC al BOM (`fab-jlcpcb/…-BOM.csv`) — exporta solo valor + huella; el PCBA de JLC empareja por número LCSC. Cuidado con los raros: **LTC4040EUFD, SHT40-AD1B, TMP102, MP1584EN, AO4406A, Bourns SRU8028** — verificar stock en JLC/LCSC.
2. Decidir el ensamble THT — JLC cobra extra por through-hole (K1, SW1, C3/C10/C43, todos los conectores/zócalos). Enfoque común: JLC hace SMD y los conectores + zócalos se sueldan a mano (también evita pagarle a JLC las partes grandes Phoenix/JST).
3. **Resolver la pregunta DNP de P3 / P13 / H3** de arriba.
4. **No** poner en el BOM los tres módulos enchufables (grupo B).
1. **Add LCSC part numbers** to the BOM (`fab-jlcpcb/…-BOM.csv`) — it exports value +
footprint only; JLC PCBA matches on LCSC part #. Watch the odd ones:
**LTC4040EUFD, SHT40-AD1B, TMP102, MP1584EN, AO4406A, Bourns SRU8028** — verify JLC/LCSC stock.
2. **Decide THT assembly** — JLC charges extra for through-hole (K1, SW1, C3/C10/C43,
all connectors/sockets). Common approach: JLC does SMD, you hand-solder the
connectors + sockets (also avoids paying JLC for the big Phoenix/JST parts).
3. **Resolve the P3 / P13 / H3 DNP question** above.
4. Do **not** BOM the three plug-in modules (bucket B).
Ver también: [manual V3](../manuales/manual-tarjeta-V3.md) · [guía de ensamble y QC](guia-ensamble-qc.md).
## Historial de revisiones
| Versión | Fecha | Cambios |
|---|---|---|
| 1.0 | 2026-07-05 | Auditoría original (inglés). |
| 1.1 | 2026-09-29 | Traducción al español, nota de alcance V3 / V5.6 y enlaces. Tablas sin cambios. |

View File

@ -1,52 +1,54 @@
---
title: "Guía de ensamble y control de calidad — HBOX"
tags: [project-drogheda, hbox, procedimiento, ensamble, qc, v3, borrador]
date: 2026-09-19
project: Project Drogheda
author: Helgen Technologies
version: 0.9.2
---
# Guía de ensamble y control de calidad — HBOX
!!! warning "Borrador para revisión"
Esta guía es un **borrador** basado en el BOM de ensamble y el pinout de arneses.
Ingeniería debe validarla antes de adoptarla como procedimiento oficial. El
**checklist interactivo** que la acompaña está en
[Actas → Checklist de ensamble](../actas/index.md).
El objetivo es que cada HBOX se arme siempre igual y quede un registro firmado por
unidad. El ensamble parte de una **PCBA ya probada y aprobada** en su acta de prueba
(V4 o V5); esta guía cubre lo que ocurre *después* de esa prueba: montaje de módulos,
mecánica, arnés y energizado final.
!!! abstract "Para quién · Cuándo · Tiempo · Necesitas"
- Estado: borrador V3 basado en el BOM de ensamble y el pinout de arneses; ingeniería debe validarlo. Para V5.5/V5.6: [Ensamble de la unidad](../procedimientos/v5-ensamble.md) y [pinout V5.6](../hardware/v56-pinout.md).
- Para quién: técnicos de banco.
- Cuándo: después de la prueba eléctrica aprobada de la tarjeta y antes del energizado final.
- Tiempo: 45–60 min por unidad.
- Necesitas: PCBA aprobada, módulos, gabinete y arnés, cautín, separadores, etiquetas, actas de [prueba](../formularios/v5.html) y [ensamble](../formularios/ensamble.html).
## Orden de trabajo
1. **Recepción de la PCBA.** Inspección visual de la tarjeta que llega de JLCPCB:
componentes completos, sin soldadura fría ni puentes, conectores rectos.
2. **Soldadura manual** (si el lote la requiere): terminal de potencia P1, conectores
JST, relevador K1, botón SW1, electrolíticos radiales y zócalos de módulos. Cuidar
polaridad de diodos y electrolíticos.
3. **Prueba eléctrica de la tarjeta** → se registra en su acta de prueba
([V5](../formularios/v5.html) / [V4](../formularios/v4.html)). **No se montan módulos
hasta que la tarjeta pase.**
4. **Módulos enchufables** sobre la tarjeta aprobada: MCU, simpleRTK2B en MOD1, módulo
4G. Verificar orientación **antes** de energizar.
5. **Mecánica:** fijar la tarjeta con separadores en sus barrenos, montar ventilador
(dirección de flujo), alinear conectores de panel con el gabinete.
6. **Arnés:** conectar cada JST contra el pinout, sin intercambiar conectores.
7. **Etiquetado:** número de serie del equipo, visible y legible.
8. **Energizado final** del equipo armado y registro del acta de ensamble.
1. Recepción de la PCBA: componentes completos, sin soldadura fría ni puentes, conectores rectos.
2. Soldadura manual si el lote la requiere: P1, JST, K1, SW1, electrolíticos radiales y zócalos. Cuida la polaridad de diodos y electrolíticos.
3. Prueba eléctrica de la tarjeta en su acta ([V5](../formularios/v5.html) / [V4](../formularios/v4.html)). Sin PASS no se montan módulos.
4. Módulos: MCU, simpleRTK2B en MOD1, módem. Verifica orientación antes de energizar.
5. Mecánica: separadores en los barrenos, ventilador (dirección de flujo), conectores alineados con el panel.
6. Arnés: cada JST contra el pinout, sin intercambiar conectores.
7. Etiqueta con el número de serie, visible.
8. Energizado final y acta de ensamble.
## Referencia de conectores (arnés)
## Conectores del arnés (V3)
| Conector | Función | Puntos clave |
| Conector | Función | Pines |
|---|---|---|
| **P1** GX16-5 | Alimentación de máquina + ignición | 1 = 24V ⚡, 3 = ignición, 2 = GND |
| **P2** | Entrada 5 V (Mean Well SD-15B) | 1 = VEH5V ⚡, 2 = GND |
| **P4** | Batería 1S4P + NTC | 1 = BAT+ ⚡, 3 = NTC, 2 = GND |
| **P6** | Ventilador | 1 = 5V_FAN ⚡, 2 = retorno, 4 = tacómetro |
| **P11** | Corte de energía (SYS→MAIN 5 V) | 1 = MAIN5V ⚡, 2 = SYS5V ⚡ |
| **MOD1** | Zócalo simpleRTK2B Pro | pin "5V" debe estar en 0 V con la tarjeta virgen |
| P1 GX16-5 | Alimentación de máquina + ignición | 1 = 24V ⚡, 3 = ignición, 2 = GND |
| P2 | Entrada 5 V (Mean Well SD-15B) | 1 = VEH5V ⚡, 2 = GND |
| P4 | Batería 1S4P + NTC | 1 = BAT+ ⚡, 3 = NTC, 2 = GND |
| P6 | Ventilador | 1 = 5V_FAN ⚡, 2 = retorno, 4 = tacómetro |
| P11 | Corte de energía (SYS→MAIN 5 V) | 1 = MAIN5V ⚡, 2 = SYS5V ⚡ |
| MOD1 | Zócalo simpleRTK2B Pro | Pin "5V" en 0 V con la tarjeta virgen |
*(Pinout completo en [Pinout de arneses](pinout-arneses.md). La guía de ensamble
detallada del gabinete es el [PDF 0007-1000](assembly-guide.md).)*
Completo: [pinout V3](pinout-arneses.md). Gabinete: [PDF 0007-1000](assembly-guide.md).
## Reglas de calidad
## Calidad
- Cada unidad lleva **dos actas**: la de **prueba de la tarjeta** y la de **ensamble**.
La de ensamble anota el número de serie de la tarjeta usada, para trazabilidad.
- Una tarjeta con FALLA **no se ensambla**; va a la bolsa de rechazos con su nota.
- Cualquier diferencia entre lo que ves y lo que dice el documento: **detente y
pregunta** a ingeniería antes de continuar.
- Cada unidad lleva dos actas: prueba de la tarjeta y ensamble (con la serie de la tarjeta usada).
- Una tarjeta con FALLA no se ensambla; va a la bolsa de rechazos con su nota.
## Historial de revisiones
| Versión | Fecha | Cambios |
|---|---|---|
| 0.9 | 2026-09-19 | Borrador para revisión de ingeniería. |
| 0.9.1 | 2026-09-29 | Encabezado uniforme y nota de alcance V3 / V5.6. |
| 0.9.2 | 2026-09-29 | Edición breve. |

View File

@ -1,15 +1,21 @@
---
title: HBOX Watchdog v3 PROD — Harness / Connector Pinout
title: "HBOX Watchdog V3 (PROD) — Pinout de arneses y conectores"
project: Project Drogheda
date: 2026-07-04
tags: [project-drogheda, hardware, harness, pinout]
tags: [project-drogheda, hardware, harness, pinout, v3]
author: Helgen Technologies
---
# HBOX Watchdog v3 PROD — Harness / Connector Pinout
# HBOX Watchdog V3 (PROD) — Pinout de arneses y conectores
Auto-generated from the PCB netlist (placement-independent). `GND` = the board ground plane (In1.Cu); its full pad list is omitted. Power nets flagged for wire gauge.
Tarjeta: V3 (EinarBoard 1.0, `kicad/hbox-watchdog-v3-PROD`).
| Conn | Function | Pins |
!!! note "Solo V3 — para V5.6 usa [Pinout V5.6](../hardware/v56-pinout.md)"
Este pinout es de la tarjeta V3 (registro congelado tal como se fabricó). La V4 comparte conectores con la V5 salvo lo indicado en el [manual V4](../manuales/manual-tarjeta-V4.md).
Generado automáticamente desde la netlist de la PCB (independiente de la colocación). `GND` = plano de tierra de la tarjeta (In1.Cu); se omite su lista completa de pads. Las nets de potencia van marcadas ⚡ para elegir el calibre del cable.
| Conector | Función | Pines |
|---|---|---|
| **P1** | GX16-5 | 5 |
| **P2** | 5V-IN-SD15B05 | 2 |
@ -25,88 +31,97 @@ Auto-generated from the PCB netlist (placement-independent). `GND` = the board g
## P1 — GX16-5
| Pin | Net | Ties to |
| Pin | Net | Conecta con |
|---|---|---|
| 1 | `24V_IN` ⚡power | D10.1, Q10.2 |
| 2 | `GND` | board ground plane |
| 1 | `24V_IN` ⚡ potencia | D10.1, Q10.2 |
| 2 | `GND` | plano de tierra de la tarjeta |
| 3 | `IGN_IN` | Rig.1 |
| 4 | — | *(no net)* |
| 5 | — | *(no net)* |
| 4 | — | *(sin net)* |
| 5 | — | *(sin net)* |
## P2 — 5V-IN-SD15B05
| Pin | Net | Ties to |
| Pin | Net | Conecta con |
|---|---|---|
| 1 | `VEH5V` ⚡power | C30.1, C31.1, JP1.2, R51.1, R55.1, R7.1, RS1.1, U6.6, U6.16 |
| 2 | `GND` | board ground plane |
| 1 | `VEH5V` ⚡ potencia | C30.1, C31.1, JP1.2, R51.1, R55.1, R7.1, RS1.1, U6.6, U6.16 |
| 2 | `GND` | plano de tierra de la tarjeta |
## P3 — RTK2B-UART1
| Pin | Net | Ties to |
| Pin | Net | Conecta con |
|---|---|---|
| 1 | `SW_5V` ⚡power | C3.1, C40.1, MOD1.5, Q1.3, U7.2, U7.7 |
| 2 | `GND` | board ground plane |
| 1 | `SW_5V` ⚡ potencia | C3.1, C40.1, MOD1.5, Q1.3, U7.2, U7.7 |
| 2 | `GND` | plano de tierra de la tarjeta |
| 3 | `GNSS_TX` | J1.8, MOD1.16 |
| 4 | `GNSS_RX` | J1.9, MOD1.15 |
## P4 — BATT-1S4P+NTC
| Pin | Net | Ties to |
| Pin | Net | Conecta con |
|---|---|---|
| 1 | `BAT_PLUS` ⚡power | C35.1, L6.2, R5.1, U6.23 |
| 2 | `GND` | board ground plane |
| 1 | `BAT_PLUS` ⚡ potencia | C35.1, L6.2, R5.1, U6.23 |
| 2 | `GND` | plano de tierra de la tarjeta |
| 3 | `NTC` | R55.2, U6.17 |
## P5 — TEMP_PROBE
| Pin | Net | Ties to |
| Pin | Net | Conecta con |
|---|---|---|
| 1 | `3V3` ⚡power | Cu3.1, Cu4.1, D5.1, J1.18, J2.20, MOD1.2, R3.1, R30.1, R31.1, R42.1, R57.1, R58.1, Rdfu.2, Rtp.1, U3.3, U4.5 |
| 2 | `GND` | board ground plane |
| 1 | `3V3` ⚡ potencia | Cu3.1, Cu4.1, D5.1, J1.18, J2.20, MOD1.2, R3.1, R30.1, R31.1, R42.1, R57.1, R58.1, Rdfu.2, Rtp.1, U3.3, U4.5 |
| 2 | `GND` | plano de tierra de la tarjeta |
| 3 | `I2C_SDA` | J2.15, R31.2, U3.1, U4.6 |
| 4 | `I2C_SCL` | J2.14, R30.2, U3.2, U4.1 |
## P6 — FAN
| Pin | Net | Ties to |
| Pin | Net | Conecta con |
|---|---|---|
| 1 | `5V_FAN` ⚡power | C23.1, D2.1, JP1.1, L2.2, R20.1 |
| 1 | `5V_FAN` ⚡ potencia | C23.1, D2.1, JP1.1, L2.2, R20.1 |
| 2 | `FAN_RET` | D2.2, Q2.3 |
| 3 | `GND` | board ground plane |
| 3 | `GND` | plano de tierra de la tarjeta |
| 4 | `FAN_TACH_RAW` | Rts.1 |
## P8 — PANEL_LED
| Pin | Net | Ties to |
| Pin | Net | Conecta con |
|---|---|---|
| 1 | `LED_A` | D1.2, R3.2 |
| 2 | `LED_K` | D1.1, Q4.3 |
## P10 — RESET-EXT
| Pin | Net | Ties to |
| Pin | Net | Conecta con |
|---|---|---|
| 1 | `NRST` | J1.5, SW1.1 |
| 2 | `GND` | board ground plane |
| 2 | `GND` | plano de tierra de la tarjeta |
## P11 — CUTOFF-SW
| Pin | Net | Ties to |
| Pin | Net | Conecta con |
|---|---|---|
| 1 | `MAIN5V` ⚡power | C32.1, C33.1, C34.1, JP2.1, JP3.3, JP4.1, Q7.1, Q7.2, Q7.3, R53.1, U6.1, U6.24 |
| 2 | `SYS5V` ⚡power | D6.1, F1.1, J1.20, J2.18, K1.2, R2.2 |
| 1 | `MAIN5V` ⚡ potencia | C32.1, C33.1, C34.1, JP2.1, JP3.3, JP4.1, Q7.1, Q7.2, Q7.3, R53.1, U6.1, U6.24 |
| 2 | `SYS5V` ⚡ potencia | D6.1, F1.1, J1.20, J2.18, K1.2, R2.2 |
## P12 — NTC-HOTSPOT
| Pin | Net | Ties to |
| Pin | Net | Conecta con |
|---|---|---|
| 1 | `NTC_TEMP` | C24.1, J1.15, R42.2 |
| 2 | `GND` | board ground plane |
| 2 | `GND` | plano de tierra de la tarjeta |
## P13 — MODO-B-UPLINK
| Pin | Net | Ties to |
| Pin | Net | Conecta con |
|---|---|---|
| 1 | `USART1_RX` | H3.2, J2.7, K1.1, MOD1.23, Rdfu.1 |
| 2 | `DIN_4G` | J7.3, K1.5, K1.6 |
| 3 | `GND` | board ground plane |
| 3 | `GND` | plano de tierra de la tarjeta |
Ver también: [manual V3](../manuales/manual-tarjeta-V3.md) · [BOM dividido para ensamble (V3)](bom-split.md) · [guía de ensamble y QC](guia-ensamble-qc.md).
## Historial de revisiones
| Versión | Fecha | Cambios |
|---|---|---|
| 1.0 | 2026-07-04 | Generado desde la netlist V3 PROD (inglés). |
| 1.1 | 2026-09-29 | Encabezados en español, nota de alcance V3 / V5.6 y enlaces. Tablas sin cambios. |

View File

@ -1,125 +1,92 @@
# El ciclo de vida de una unidad HBOX — qué acta en qué momento
**Versión:** 1.0 · 19-sep-2026 · **Responsable:** Leo Rodríguez
Una unidad pasa por nueve momentos entre la tarjeta desnuda y la máquina en el patio. Cada uno
tiene su procedimiento y su acta, y **todas las actas cuelgan del número de serie**, así que el
[expediente](../unidad.html) de cualquier tarjeta, módulo o unidad cuenta la historia completa —
incluidos los daños.
## El mapa
| # | Momento | Dónde | Procedimiento | Acta | Estado |
|---|---|---|---|---|---|
| 1 | **Tarjeta desnuda** llega de fábrica | Banco QRO | [Prueba y flasheo](v5-prueba-y-flasheo.md) | [Tarjeta V5](../formularios/v5.html) | ✅ |
| 2 | **Módulos** RTK y 4G, uno por uno | Banco QRO | [Módulos §2–3](v5-modulos-integracion.md) | [ArduSimple](../formularios/ardusimple.html) · [Módem 4G](../formularios/modem4g.html) | ✅ |
| 3 | **Pre-ensamble**: la pareja que irá junta | Banco QRO | [Módulos §4](v5-modulos-integracion.md) | [Integración](../formularios/integracion.html) | ✅ |
| 4 | **Ensamble** de la unidad | Banco QRO | [Ensamble](v5-ensamble.md) | [Ensamble](../formularios/ensamble.html) — no acepta módulos sin acta aprobada ni ya usados | ✅ |
| 5 | **Prueba final** antes de embarcar | Banco QRO | [Prueba final](v5-prueba-final-unidad.md) | *(se registra en la de ensamble)* | ✅ |
| 6 | **Envío** | QRO → terminal | [abajo](#6-envio) | [Envío](../formularios/envio.html) | 🆕 |
| 7 | **Recepción e inspección**, cada caja, antes de entrar al puerto | Taller Veracruz | [abajo](#7-recepcion-e-inspeccion-cada-caja-antes-de-entrar-al-puerto) | [Recepción](../formularios/recepcion.html) — inspección + multímetro + prueba de vida | 🆕 |
| 8 | **Instalación** en la máquina | Patio | ⬜ pendiente | ⬜ `instalacion-campo` (el servidor ya lo acepta) | ⬜ |
| 9 | **Vida en campo**: falla, diagnóstico, reflasheo | Patio / taller | [Campo](../diagnostico/procedimiento-diagnostico-campo.md) · [Banco](diagnostico-banco.md) · [Reflasheo](reflasheo-unidades.md) | [Campo](../formularios/diagnostico.html) · [Banco](../formularios/banco.html) · [Reflasheo](../formularios/reflasheo.html) | ✅ |
| ⚡ | **Daño o incidente**, en cualquier momento | Donde sea | [abajo](#dano-en-cualquier-momento) | [Daño](../formularios/dano.html) — **marca la serie** | 🆕 |
Lo único que falta del ciclo es el **8 · Instalación**. Se escribe con el mismo motor cuando
lo decidas: checklist de gabinete, GX16, antenas, foto final y primera posición vista en el servidor.
## Las tres reglas que cruzan todo el ciclo
**1 · Nada avanza sin acta.** Un módulo sin acta aprobada no entra al ensamble (el formulario lo
impide). Una unidad sin prueba final aprobada no se envía (el acta de envío lo pide). Una unidad
que no coincide con su acta de envío no entra al puerto (la de recepción lo pide).
**2 · Una serie dañada se ve desde cualquier acta.** Registrar un daño **marca** la serie. Desde
ese momento, todo formulario que la elija —banco, campo, ensamble, envío— muestra el aviso en
amarillo, con la fecha y el resumen. Así una tarjeta con un corto no puede acabar dentro de un
ensamble sin que alguien lo vea. La marca se levanta con otra acta de daño cuya disposición sea
**«Reparada»**, o se vuelve permanente con **«Baja»** (aviso en rojo).
**3 · La serie es la llave.** Tarjeta (`V5-06`), módulo (`ARD-010`, `RTK-0006`), unidad de campo
(`RTK-014`) o unidad ensamblada (`HBOX5-E06-A010-R0006`): todo lo que se registre contra una serie
aparece en su expediente, y un módulo además aparece en el expediente de la unidad que lo lleva.
---
title: "Ciclo de vida de una unidad HBOX — qué acta en qué momento"
tags: [project-drogheda, hbox, procedimiento, ciclo-de-vida, actas, envio, recepcion]
date: 2026-09-19
project: Project Drogheda
author: Helgen Technologies
version: 1.2
---
## 6 · Envío
# Ciclo de vida de una unidad HBOX — qué acta en qué momento
Se llena **al cerrar la caja**, no después. Fija el estado exacto en que salió la unidad para que
la recepción tenga contra qué comparar.
!!! abstract "Para quién · Cuándo · Tiempo · Necesitas"
- Para quién: técnicos de banco (QRO), taller Veracruz y operaciones.
- Cuándo: cada vez que una unidad cambia de manos: envío, recepción, instalación, daño.
- Tiempo: acta de envío o recepción 15–30 min por unidad.
- Necesitas: los [formularios](../actas/index.md); para recepción, fuente de 24 V (≥ 1 A; límite en 1 A si lo tiene), multímetro, cable USB con datos y laptop.
Requisitos que el acta exige antes de dejar enviar:
Todas las actas cuelgan del número de serie; el [expediente](../unidad.html) de cualquier tarjeta, módulo o unidad cuenta la historia completa, daños incluidos.
- Acta de **prueba final aprobada** en el sitio.
- **Sin marca de daño** en la serie.
- Firmware que trae (línea `BOOT`), **ICCID** de la SIM, ID de estación del módem.
- Configuración del ZED-F9P guardada en **FLASH**.
## Mapa
Contenido de la caja (cada punto es una casilla): unidad etiquetada · antena GNSS · 2 antenas LTE ·
arnés GX16 · material de gabinete si aplica · hoja impresa con serie, máquina destino y contacto.
| # | Momento | Dónde | Procedimiento | Acta |
|---|---|---|---|---|
| 1 | Tarjeta desnuda llega de fábrica | Banco QRO | [Prueba y flasheo](v5-prueba-y-flasheo.md) | [Tarjeta V5](../formularios/v5.html) |
| 2 | Módulos RTK y 4G, uno por uno | Banco QRO | [Módulos §1–2](v5-modulos-integracion.md) | [ArduSimple](../formularios/ardusimple.html) · [Módem 4G](../formularios/modem4g.html) |
| 3 | Pareja que irá junta | Banco QRO | [Módulos §3](v5-modulos-integracion.md) | [Integración](../formularios/integracion.html) |
| 4 | Ensamble | Banco QRO | [Ensamble](v5-ensamble.md) | [Ensamble](../formularios/ensamble.html) (rechaza módulos sin acta aprobada o ya usados) |
| 5 | Prueba final | Banco QRO | [Prueba final](v5-prueba-final-unidad.md) | Se registra en la de ensamble |
| 6 | Envío | QRO → terminal | [§6](#6-envio) | [Envío](../formularios/envio.html) |
| 7 | Recepción e inspección, cada caja | Taller Veracruz | [§7](#7-recepcion-e-inspeccion) | [Recepción](../formularios/recepcion.html) |
| 8 | Instalación en la máquina | Patio | [Checklist de puesta en marcha](v5-checklist-puesta-en-marcha.md) | Impreso, subido al expediente (acta digital `instalacion-campo` pendiente; el servidor ya la acepta) |
| 9 | Falla, diagnóstico, reflasheo | Patio / taller | [Campo](../diagnostico/procedimiento-diagnostico-campo.md) · [Banco](diagnostico-banco.md) · [Reflasheo](reflasheo-unidades.md) | [Campo](../formularios/diagnostico.html) · [Banco](../formularios/banco.html) · [Reflasheo](../formularios/reflasheo.html) |
| — | Daño o incidente, en cualquier momento | Donde sea | [Abajo](#dano-o-incidente) | [Daño](../formularios/dano.html) (marca la serie) |
!!! warning "Batería"
Una batería de litio **no viaja en avión** como carga normal. Si va por paquetería, confirmar
que va por tierra, y anotar su voltaje al empacar.
## Reglas del ciclo
Fotos: la caja abierta con todo adentro, la unidad con su etiqueta legible, la caja cerrada y rotulada.
1. Nada avanza sin acta. Un módulo sin acta aprobada no entra al ensamble; una unidad sin prueba final aprobada no se envía; una unidad que no coincide con su acta de envío no entra al puerto. Los formularios lo impiden.
2. Una serie dañada se ve desde cualquier acta. El acta de daño marca la serie y todo formulario que la elija muestra el aviso en amarillo con fecha y resumen. La marca se levanta con otra acta de daño con disposición "Reparada", o queda permanente con "Baja" (aviso rojo).
3. La serie es la llave: tarjeta (`V5-06`), módulo (`ARD-010`, `RTK-0006`), unidad de campo (`RTK-014`) o unidad ensamblada (`HBOX5-E06-A010-R0006`). Un módulo aparece también en el expediente de la unidad que lo lleva.
## 7 · Recepción e inspección — cada caja, antes de entrar al puerto
## 6. Envío
Se llena **al abrir la caja, antes de entrar al puerto** — la última oportunidad de regresar por un
cable o de detectar un golpe de transporte. **Una acta por unidad, sin excepción**, aunque lleguen diez
en el mismo envío. Se compara contra el acta de envío de esa unidad (está en su expediente).
Se llena al cerrar la caja: fija el estado exacto en que salió para que la recepción compare.
**Kit del técnico:** fuente de 24 V (≥ 1 A; si tiene límite de corriente, en 1 A) · multímetro · cable
USB con datos · laptop. No hace falta osciloscopio: lo que puede romperse en un camión se ve con el
multímetro y con los ojos.
El acta exige antes de enviar: prueba final aprobada, serie sin marca de daño, firmware (línea `BOOT`), ICCID de la SIM, ID de estación del módem y configuración del ZED-F9P guardada en FLASH.
**Orden obligatorio:** inspección → multímetro sin energía → energizar → prueba de vida. Nunca al revés.
Caja: unidad etiquetada · antena GNSS · 2 antenas LTE · arnés GX16 · material de gabinete si aplica · hoja impresa con serie, máquina destino y contacto.
1. **Paquete, antes de abrir:** foto tal como llegó; si viene golpeado, mojado o abierto, foto del daño.
2. **Contenido contra el envío:** misma serie, mismas piezas. Lo que falte o sobre, se anota.
3. **Inspección física, tapa abierta, sin energía.** Sacudir la unidad junto al oído (nada suelto).
Gabinete y prensaestopas sin golpes. **Módulos asentados en sus zócalos** — el Blackpill, el
simpleRTK2B en los headers UNO y el módem en el zócalo XBee viajan enchufados, y la vibración los
saca: empujar cada uno con el dedo. Prueba de meneo en conectores, Dupont y SMA. Tarjeta sin
componentes desprendidos ni marcas de quemado. Batería normal (hinchada, con fuga o caliente → se
desconecta, no entra, acta de daño). Foto del interior.
4. **Multímetro sin energía — continuidad a tierra.** Entrada 24 V a GND > 10 kΩ · riel 5 V a GND >
1 kΩ · riel 3.3 V a GND > 1 kΩ · voltaje de batería en vacío 3.0 – 4.2 V (comparar con el del
envío). **Cualquier lectura fija entre 0 y 20 Ω es un corto: no se energiza**, acta de daño.
5. **Energizar y medir.** 24 V al GX16 (pines 1-2), antenas conectadas. LED de estado parpadea ·
entrada 23 – 26 V · **riel 5 V 4.9 – 5.4 V** (por debajo de 4.8 V el módem se cae con cada ráfaga
LTE) · 3.3 V 3.20 – 3.40 V · corriente a los 60 s 150 – 400 mA si la fuente la muestra. Si la fuente
entra en límite o algo se calienta: apagar, no entra.
6. **Prueba de vida (5 min):** `BOOT` reporta el **mismo firmware** que el envío · el módem registra
(LED lento o fijo a los 3 min) · la SIM es la misma (ICCID) · si hay cielo, ve satélites · alguien
con acceso confirma que **aparece en el monitor**. Apagar, cerrar la tapa, apretar prensaestopas.
7. **Veredicto:** lista para entrar · entra con observaciones · se queda en el taller · rechazada.
!!! danger "Batería de litio"
No viaja en avión como carga normal. Por paquetería, confirma envío terrestre y anota su voltaje al empacar.
!!! danger "Corto, no enciende, 5 V bajo o firmware distinto: no entra"
Instalarla y descubrirlo arriba de una máquina cuesta una visita más y un permiso más de ICAVE. Si
no entra, además del veredicto se registra un **acta de daño**: así la serie queda marcada y nadie la
instala por error.
Fotos: caja abierta con todo adentro, unidad con etiqueta legible, caja cerrada y rotulada.
## ⚡ Daño en cualquier momento
## 7. Recepción e inspección
Para cualquier cosa con número de serie: tarjeta, módulo, unidad completa, o incluso un cable o
antena. No es para asignar culpas; es para que el daño **no se pierda de vista**.
Al abrir la caja y antes de entrar al puerto: última oportunidad de regresar por un cable o detectar un golpe de transporte. Una acta por unidad, aunque lleguen diez juntas. Se compara con el acta de envío (en el expediente). Orden obligatorio: inspección → multímetro sin energía → energizar → prueba de vida.
Qué registra: qué es y dónde ocurrió · tipo de daño (corto, sobrevoltaje, quemado, golpe, agua,
batería, error de ensamble, sin causa aparente) · si estaba energizada y con qué · **resumen en
una línea** (es lo que ven los demás formularios) · descripción · foto del daño · componentes
afectados · **disposición**.
1. Paquete sin abrir: foto como llegó; si viene golpeado, mojado o abierto, foto del daño.
2. Contenido contra el envío: misma serie, mismas piezas; anota lo que falte o sobre.
3. Inspección sin energía, tapa abierta: sacude junto al oído (nada suelto); gabinete y prensaestopas sin golpes; empuja con el dedo el Blackpill, el simpleRTK2B (headers UNO) y el módem (zócalo XBee), que la vibración saca; meneo de conectores, Dupont y SMA; sin componentes desprendidos ni quemados; batería normal (hinchada, con fuga o caliente: se desconecta, no entra, acta de daño). Foto del interior.
4. Continuidad a GND sin energía: entrada 24 V > 10 kΩ · 5 V > 1 kΩ · 3.3 V > 1 kΩ · batería en vacío 3.0–4.2 V (compara con el envío). Lectura fija de 0–20 Ω = corto: no se energiza; acta de daño.
5. 24 V al GX16 (pines 1-2), antenas puestas: LED parpadea · entrada 23–26 V · 5 V en 4.9–5.4 V (bajo 4.8 V el módem se cae con cada ráfaga LTE) · 3.3 V en 3.20–3.40 V · corriente a 60 s 150–400 mA si la fuente la muestra. Fuente en límite o algo caliente: apaga; no entra.
6. Prueba de vida (5 min): `BOOT` con el mismo firmware del envío · módem registrado (LED lento o fijo a los 3 min) · mismo ICCID · satélites si hay cielo · alguien confirma que aparece en el monitor. Apaga, cierra la tapa, aprieta prensaestopas.
7. Veredicto: lista para entrar · entra con observaciones · se queda en el taller · rechazada.
La disposición es lo que marca:
Corto, no enciende, 5 V bajo o firmware distinto: no entra, y además se levanta un acta de daño para marcar la serie. Descubrirlo arriba de una máquina cuesta otra visita y otro permiso de ICAVE.
## Daño o incidente
Para cualquier cosa con número de serie: tarjeta, módulo, unidad, cable o antena. No asigna culpas; evita que el daño se pierda de vista.
Registra: qué es y dónde ocurrió · tipo (corto, sobrevoltaje, quemado, golpe, agua, batería, error de ensamble, sin causa aparente) · si estaba energizada y con qué · resumen en una línea (lo que ven los demás formularios) · descripción · foto · componentes afectados · disposición.
| Disposición | Efecto en la serie |
|---|---|
| Marcada como dañada — en espera | ⚠ aviso amarillo en todos los formularios |
| Enviada a Querétaro para evaluación | ⚠ aviso amarillo |
| Canibalizada — sus módulos buenos pasan a otra unidad | ⚠ aviso amarillo; anotar qué módulos quedan libres |
| **Reparada** — vuelve a servicio | levanta la marca |
| **Baja** definitiva | ⛔ aviso rojo, permanente |
| Marcada como dañada — en espera | Aviso amarillo en todos los formularios |
| Enviada a Querétaro para evaluación | Aviso amarillo |
| Canibalizada — sus módulos buenos pasan a otra unidad | Aviso amarillo; anota qué módulos quedan libres |
| Reparada — vuelve a servicio | Levanta la marca |
| Baja definitiva | Aviso rojo permanente |
Y una casilla que conviene no saltarse: **la pieza quedó etiquetada físicamente** (cinta roja) y
separada de las buenas. El sitio marca la serie; la cinta marca la tarjeta que alguien tiene en la mano.
Etiqueta la pieza con cinta roja y sepárala de las buenas: el sitio marca la serie, la cinta marca la pieza.
## Historial de revisiones
| Versión | Fecha | Cambios |
|---|---|---|
| 1.0 | 2026-09-19 | Primera versión: mapa, reglas, envío, recepción y daño. |
| 1.1 | 2026-09-29 | Encabezado uniforme y enlaces cruzados. |
| 1.2 | 2026-09-29 | Edición breve; el momento 8 apunta al checklist de puesta en marcha. |
Versiones anteriores en git.

View File

@ -1,136 +1,100 @@
---
title: "Diagnóstico en banco — unidad HBOX sobre la mesa"
tags: [project-drogheda, hbox, procedimiento, diagnostico, banco, v3]
date: 2026-09-18
project: Project Drogheda
author: Helgen Technologies
version: 1.2
---
# Diagnóstico en banco — unidad HBOX sobre la mesa
**Para:** Alan y Daniel · **Versión:** 1.0 · 18-sep-2026 · **Responsable:** Leo Rodríguez
!!! abstract "Para quién · Cuándo · Tiempo · Necesitas"
- Para quién: técnicos de banco (Alan y Daniel).
- Cuándo: una unidad de campo desmontada llega a la mesa. Escrito para V3 (EinarBoard 1.0: RTK-003 en RTG `RT-ZPMC-20`, RTK-006 en tractoplana `HS-WES-62`); el orden vale para V4 y V5.5. Antes: [diagnóstico en campo](../diagnostico/procedimiento-diagnostico-campo.md) (unidad aún montada). Después, si procede: [reflasheo](reflasheo-unidades.md).
- Tiempo: 60–90 min (tres capturas de 3 min y 10 min de estabilización).
- Necesitas: fuente de banco con límite de corriente, multímetro, laptop con cables USB, antena GNSS y 2 antenas LTE de prueba, cielo abierto o ventana (sin cielo no hay fix y parece falla), cámara para las fotos del acta y el [acta de diagnóstico en banco](../formularios/banco.html).
Acta que se llena mientras trabajas:
**[▶ Abrir el acta de diagnóstico en banco](../formularios/banco.html)**
## Reglas de banco
Aplica a las unidades que ya están desmontadas: **RTK-003** (RTG `RT-ZPMC-20`) y **RTK-006**
(tractoplana `HS-WES-62`). Para una unidad todavía montada en la máquina, el procedimiento es
otro: [Diagnóstico en campo](../diagnostico/procedimiento-diagnostico-campo.md).
1. No energices antes del paso 2 (continuidad).
2. Batería de litio hinchada, caliente, con fuga u olor: desconéctala primero y trabaja sin ella. No la perfores, no la cargues, no la guardes en un cajón. Foto y aviso.
3. Empieza con el límite de corriente en 500 mA.
4. Tarjetas con LTC4040 (V3, V4, V5): fuente de 5 V ≥ 5.2 V o paquete conectado. Sin batería y por debajo de 4.60 V (PFI del LTC4040) el módem se apaga solo.
5. Anota toda medición fuera de rango con su valor, no solo "FALLA".
6. El firmware se elige por la tarjeta, nunca por el número de versión ([Descargas](../descargas/index.md)).
---
## Límites del banco
## 1. Qué podemos y qué ya no podemos saber
- Perdido al desmontar: temperatura máxima, cuenta de recuperaciones y causa del último arranque. El firmware v3 los guarda en RAM. En RTK-003 y RTK-006 la hipótesis térmica solo se prueba con lo que se vea físicamente.
- Se puede saber: cortos, consumo, arranque, rieles, satélites, registro en Telcel, estado de la batería y si la falla sigue después de reflashear.
- Por eso en RTK-014 (montacargas, todavía instalada) primero se captura por USB en sitio y después se desmonta.
Sé honesto con lo que el banco puede dar, para no perseguir fantasmas.
Las tres unidades desplegadas son EinarBoard 1.0 con firmware v2/v3 (`V4-PLAN.md` del repo de firmware): les toca el binario V3, nunca el bring-up V5, y el control de carga usa la polaridad de producción (`CHRG_EN` alto = carga apagada). Conectores y LEDs: [manual V3](../manuales/manual-tarjeta-V3.md).
**Ya se perdió** (y no se recupera): la temperatura máxima, la cuenta de recuperaciones y la causa
del último arranque. El firmware v3 guarda esos tres datos en memoria RAM, así que se borraron al
desconectar la unidad para desmontarla. Por eso en estas dos unidades **no vamos a poder probar la
hipótesis térmica con datos del propio equipo** — solo con lo que se vea físicamente.
## Paso 1 — Inspección sin energía
**Sí podemos saber:** si hay un corto, cuánta corriente consume, si arranca, si los rieles están
donde deben, si el GNSS ve satélites, si el módem registra en Telcel, en qué estado está la
batería, y si el problema sigue después de reflashear.
Unidad desconectada de todo, antes de mover nada:
> De ahí la regla que aplica a la unidad del montacargas (**RTK-014**, todavía instalada):
> primero la captura por USB en sitio, y hasta después se desmonta.
- [ ] Fotos del exterior, cuatro lados.
- [ ] Abre. Foto del interior completo antes de tocar cables.
- [ ] Olor a quemado; partes oscurecidas, derretidas o abombadas.
- [ ] Agua, marcas de agua, sarro blanco o corrosión verde en conectores.
- [ ] Batería hinchada, caliente, con manchas o fuga. Foto de los dos lados.
- [ ] Meneo suave de cada conector, Dupont y SMA: alguno flojo o fuera.
- [ ] Centro de los SMA doblado o faltante.
!!! info "Qué tarjeta traen estas unidades"
Las tres unidades desplegadas son **EinarBoard 1.0** corriendo firmware **v2/v3** (así lo
documenta `V4-PLAN.md` del repositorio de firmware). Eso importa para dos cosas: el binario que
les toca es el de generación **V3** —nunca el de bring-up del v5—, y el control de carga usa la
polaridad de producción (`CHRG_EN` en alto = carga **apagada**).
Todo hallazgo se fotografía y se anota aunque después la unidad encienda.
## 2. Equipo necesario
## Paso 2 — Continuidad a tierra
| Equipo | Para qué |
|---|---|
| **Fuente de banco con límite de corriente** | Energizar sin quemar nada y **leer el consumo** |
| Multímetro | Continuidad y rieles |
| Laptop + cables USB | Las tres capturas (Blackpill, 4G, ArduSimple) |
| Antena GNSS y 2 antenas LTE de prueba | Para que el receptor y el módem puedan funcionar |
| Cielo abierto o ventana | Sin vista al cielo el GNSS nunca dará fix y parecerá falla |
| Cámara | Fotos obligatorias del acta |
Multímetro en ohms, punta negra en el negativo/chasis. La lectura sube mientras cargan los capacitores; espera a que se estabilice.
## 3. Seguridad
1. **Nunca energices antes del paso 5 (continuidad).** Si hay un corto, la fuente lo va a encontrar
quemando algo.
2. **Batería de litio:** si está hinchada, caliente, con fuga o huele, **desconéctala primero** y
trabaja sin ella. No la perfores, no la cargues, no la metas en un cajón. Foto y aviso.
3. Empieza siempre con el **límite de corriente bajo** (500 mA). Subirlo es fácil; deshacer un
componente quemado, no.
---
## 4. Paso 1 — Inspección sin energía
Con la unidad **desconectada de todo**, y antes de mover nada:
- [ ] Foto del exterior de la caja, de los cuatro lados.
- [ ] Abrir. **Foto del interior completo antes de tocar cables.**
- [ ] ¿Huele a quemado? ¿Hay partes oscurecidas, derretidas o abombadas?
- [ ] ¿Hay agua, marcas de agua, sarro blanco o **corrosión verde** en conectores?
- [ ] Batería: ¿hinchada, caliente, con manchas o fuga? Foto de los dos lados.
- [ ] Prueba de meneo suave en cada conector, Dupont y SMA: ¿alguno se mueve o se sale?
- [ ] Conectores de antena: ¿el centro del SMA está doblado o falta?
Cualquier hallazgo aquí ya es un resultado: fotografíalo y anótalo aunque después todo encienda.
## 5. Paso 2 — Continuidad a tierra, **antes** de energizar
Multímetro en ohms, **punta negra en el negativo/chasis**. La lectura sube lentamente (los
capacitores se están cargando con la pila del multímetro): eso es normal, espera a que se estabilice.
| Punto | Esperado | Lectura mala |
| Punto | Esperado | Mala |
|---|---|---|
| Entrada 24 V (pines 1-2 del GX16) | **> 10 kΩ** | Fija en 0–20 Ω = **corto: no energizar** |
| Riel de 5 V (salida de la Mean Well) | **> 1 kΩ** | Fija en 0–20 Ω = corto |
| Riel de 3.3 V | **> 1 kΩ** | Fija en 0–20 Ω = corto |
| Alimentación del simpleRTK2B (riel conmutado) | **> 1 kΩ** | Fija en 0–20 Ω = corto |
| Batería (bornes, con la batería **desconectada**) | — | Anota su voltaje en vacío |
| Entrada 24 V (GX16 pines 1-2) | > 10 kΩ | Fija en 0–20 Ω: corto, no energices |
| Riel 5 V (salida de la Mean Well) | > 1 kΩ | Fija en 0–20 Ω |
| Riel 3.3 V | > 1 kΩ | Fija en 0–20 Ω |
| Alimentación del simpleRTK2B (riel conmutado) | > 1 kΩ | Fija en 0–20 Ω |
| Batería desconectada | — | Anota su voltaje en vacío |
!!! danger "Si encuentras un corto"
**No energices.** Anótalo, fotografía la zona, marca la unidad como *corto a tierra* y déjala
aparte. Energizar un corto convierte una reparación de un componente en una tarjeta perdida.
Con corto: no energices. Foto de la zona, marca la unidad como "corto a tierra" y apártala.
## 6. Paso 3 — Energizado con rampa de corriente
## Paso 3 — Energizado con rampa de corriente
Este paso es el que más información da por minuto invertido.
1. Fuente a 24.0 V, límite 500 mA, salida apagada.
2. Conecta solo la entrada de 24 V, sin antenas.
3. Enciende y mira el amperímetro los primeros 3 s.
1. Fuente a **24.0 V**, límite de corriente en **500 mA**, salida **apagada**.
2. Conecta solo la entrada de 24 V (sin antenas todavía).
3. Enciende la salida y **mira el amperímetro en los primeros 3 segundos**.
| Lo que hace la corriente | Qué significa | Qué haces |
| Corriente | Significa | Acción |
|---|---|---|
| **0 mA**, la fuente no entrega nada | Circuito abierto: fusible, conector o etapa de entrada muerta | Revisa fusible y cableado de entrada |
| **Se pega al límite** (500 mA) y el voltaje se cae | **Corto** | **Apaga de inmediato.** Regresa al paso 2 |
| **50–150 mA** estables, sin LED | Vive el MCU pero la etapa RTK no enciende | Sigue al paso 4 y a la captura del Blackpill |
| **150–400 mA** y el LED parpadea | Arranca normal | Sigue al paso 4 |
| Sube despacio y **algo se calienta** | Componente en corto parcial | Apaga y busca con el dorso de la mano qué quema |
| 0 mA | Abierto: fusible, conector o entrada muerta | Revisa fusible y cableado |
| Pegada a 500 mA, el voltaje cae | Corto | Apaga ya; vuelve al paso 2 |
| 50–150 mA estable, sin LED | MCU vivo, etapa RTK apagada | Paso 4 y captura del Blackpill |
| 150–400 mA, LED parpadea | Arranque normal | Paso 4 |
| Sube despacio y algo se calienta | Corto parcial | Apaga y localiza con el dorso de la mano |
Anota **el pico de arranque** y **la corriente estable a los 60 segundos**. Son dos números
distintos y los dos importan.
Anota el pico de arranque y la corriente estable a los 60 s.
## 7. Paso 4 — Rieles
Con la unidad energizada y estable:
## Paso 4 — Rieles
| Punto | Esperado |
|---|---|
| Entrada 24 V | 23 – 26 V |
| Riel 5 V (salida Mean Well) | 4.8 – 5.2 V |
| Riel 3.3 V | 3.20 – 3.40 V |
| Alimentación del simpleRTK2B **al arrancar** | **0 V** — el firmware enciende la etapa RTK solo cuando decide que es seguro |
| Batería de respaldo | 3.0 – 4.2 V |
| Entrada 24 V | 23–26 V |
| 5 V (salida Mean Well) | 4.8–5.2 V |
| 3.3 V | 3.20–3.40 V |
| simpleRTK2B al arrancar | 0 V (el firmware enciende la etapa cuando decide) |
| Batería de respaldo | 3.0–4.2 V |
!!! tip
5 V en la etapa RTK **en el instante de arrancar** es un defecto, no una buena señal: el
invariante del producto dice *apagado es el estado seguro*. Si aparece energía ahí antes de que
el MCU la pida, anótalo.
5 V en la etapa RTK en el instante de arrancar es un defecto (apagado es el estado seguro): anótalo.
## 8. Paso 5 — Captura del Blackpill (la principal)
## Paso 5 — Captura del Blackpill
1. Conecta el **USB del Blackpill** a la laptop.
2. Abre el puerto serie nuevo a **115200 baudios** (PuTTY, TeraTerm o el monitor de Arduino).
3. Activa **guardar a archivo**.
4. Deja correr **3 minutos**. Luego presiona **RESET** y graba también el arranque.
5. Guarda el archivo como `RTK-0NN_blackpill_AAAA-MM-DD.log` y **súbelo en el acta**.
1. USB del Blackpill a la laptop; puerto serie a 115200 (PuTTY, TeraTerm o monitor de Arduino) grabando a archivo.
2. Graba 3 min; luego pulsa RESET y graba también el arranque.
3. Guarda `RTK-0NN_blackpill_AAAA-MM-DD.log` y súbelo al acta.
Qué vas a ver (firmware v3.0.x):
Firmware v3.0.x:
```
BOOT,1240,fw=3.0.3,reset=PIN
@ -138,91 +102,81 @@ COLS,ms,state,link,fix,sat,rx,rate,vbat,v5v,veh,ign,tc,tmax,der,rec,limp,…
TLM,182000,RUN,DEGR,1,11,4210,1HZ,3.92,5.02,1,1,58,81,0,3,1,900,…
```
| Campo | Léelo así |
| Campo | Lectura |
|---|---|
| `state` | `RUN` trabajando · `BOOT` arrancando · `SLEEP` dormida · `PWRCYC` reiniciando la etapa RTK |
| `state` | `RUN` trabajando · `BOOT` arrancando · `SLEEP` dormida · `PWRCYC` reiniciando la etapa |
| `link` | `OK` con correcciones · `DEGR` intermitentes · `LIMP` casi sin ellas · `SRCH` buscando |
| `fix` | 4 o 5 = RTK · 1 = GPS solo · 0 = sin posición |
| `vbat` / `v5v` | Voltajes que mide el propio equipo — compáralos con tu multímetro |
| `veh` / `ign` | 1 = presente. En banco, `veh` debe ser 1 y `ign` 0 si no conectaste ignición |
| `tc` / `tmax` | Temperatura actual y máxima **desde este arranque** |
| `rec` / `limp` | Recuperaciones y si quedó enganchada en modo limitado |
| `vbat` / `v5v` | Voltajes medidos por el equipo; compáralos con el multímetro |
| `veh` / `ign` | 1 = presente. En banco `veh=1` e `ign=0` si no conectaste ignición |
| `tc` / `tmax` | Temperatura actual y máxima desde este arranque |
| `rec` / `limp` | Recuperaciones y si quedó en modo limitado |
Si en vez de estas líneas ves un tablero que se redibuja, la unidad trae otro firmware: **anótalo y
avísale a ingeniería antes de seguir**.
Si ves un tablero que se redibuja en lugar de estas líneas, es otro firmware: anótalo y avisa a ingeniería antes de seguir.
## 9. Paso 6 — Captura del módem 4G NTRIP Master
## Paso 6 — Captura del módem 4G
El módem se configura y se escucha por el **puerto USB "XBEE"** del simpleRTK2B Pro (el módulo 4G va
montado sobre el receptor y ese USB es su consola).
El módem va sobre el simpleRTK2B y su consola es el USB XBEE.
1. **Sin energía**, verifica que el módulo 4G esté bien asentado en el zócalo XBee y que las
**dos antenas LTE** estén conectadas.
2. Conecta el USB **POWER+GPS** (alimenta todo) **y** el USB **XBEE** (consola del módem).
3. Terminal serie en el puerto **XBEE** a **115200 baudios**, con **guardar a archivo**.
4. Deja grabar **3 minutos** desde el arranque, sin escribir nada. Anota qué hace el **LED de red**
del módulo: parpadeo rápido = buscando; lento o fijo = registrado.
5. Para leer su configuración: `$$$AS+I=1111` entra a modo configuración. Anota el **ID de estación**
(`AS+K`) y el mountpoint.
6. Guarda como `RTK-0NN_modem4g_AAAA-MM-DD.log` y súbelo al acta.
1. Sin energía: módem asentado en el zócalo XBee y las dos antenas LTE conectadas.
2. Conecta USB POWER+GPS (alimenta todo) y USB XBEE (consola).
3. Terminal en XBEE a 115200, grabando a archivo.
4. Graba 3 min desde el arranque sin escribir. LED de red: rápido = buscando; lento o fijo = registrado.
5. `$$$AS+I=1111` para leer la configuración; anota `AS+K` y el mountpoint.
6. Guarda `RTK-0NN_modem4g_AAAA-MM-DD.log` y súbelo al acta.
!!! warning "Esta consola miente por omisión"
Una unidad **sana** imprime en esta consola prácticamente lo mismo que una **averiada**: unas
pocas líneas de registro y nada más. Ya nos pasó — en junio dimos por muerto un módem sano
leyendo solo esta consola. **La consola del 4G no prueba que las correcciones estén llegando ni
que los datos se estén enviando.** Eso solo se confirma con el `link` del Blackpill, con un fix
≥4 en el ArduSimple, o viendo el tráfico en el servidor.
!!! warning "Esta consola no prueba el enlace"
Un módem sano y uno averiado imprimen casi lo mismo. En junio se dio por muerto un módem sano leyendo solo esta consola. Las correcciones y el envío de datos se confirman con el `link` del Blackpill, un fix ≥ 4 en el ArduSimple o el tráfico en el servidor. Esta consola solo demuestra que el módem enciende, registra en Telcel y con qué configuración quedó.
Úsala para lo que sí demuestra: que el módem enciende, que registra en Telcel y con qué
configuración quedó.
## Paso 7 — Captura del simpleRTK2B
## 10. Paso 7 — Captura del simpleRTK2B Pro (ArduSimple)
1. Antena GNSS con cielo.
2. USB POWER+GPS a la laptop.
3. Rápido: terminal a 115200, graba 3 min de NMEA como `RTK-0NN_ardusimple_AAAA-MM-DD.nmea`.
4. Completo (u-center, Receiver → Connect): UBX-MON-VER (anota la versión), Fix Mode 3D en < 2 min a cielo abierto, satélites y señal; con correcciones sube a 3D/DGNSS/FIXED.
1. Antena GNSS conectada y **con vista al cielo** (ventana abierta o afuera; dentro del taller no
habrá fix y parecerá falla).
2. Conecta el USB **POWER+GPS** a la laptop.
3. **Opción rápida (terminal):** abre el puerto serie a **115200 baudios** y graba 3 minutos de
NMEA. Guarda como `RTK-0NN_ardusimple_AAAA-MM-DD.nmea`.
4. **Opción completa (u-center):** *Receiver → Connect*, y revisa:
- **UBX-MON-VER** → versión de firmware del ZED-F9P (anótala en el acta).
- **Fix Mode** → debe llegar a **3D** en menos de 2 minutos a cielo abierto.
- Número de satélites y su nivel de señal.
- Si hay correcciones llegando, el fix sube a **3D/DGNSS/FIXED**.
Cómo leer el NMEA sin u-center: busca líneas `$GNGGA` y mira el **sexto campo** (calidad):
Sin u-center: en `$GNGGA`, sexto campo:
| Calidad | Significa |
|---|---|
| `0` | Sin posición |
| `1` | GPS normal, **sin correcciones** |
| `1` | GPS sin correcciones |
| `2` | Corregido básico |
| **`4`** | **RTK fijo** — es el objetivo |
| **`5`** | RTK flotante — casi |
| `4` | RTK fijo (objetivo) |
| `5` | RTK flotante |
Un receptor que da `1` con buenos satélites **no está roto**: está diciendo que las correcciones no
le llegan, y eso apunta al módem o al servidor, no al GNSS.
Calidad `1` con buenos satélites no es falla del GNSS: no llegan correcciones (módem o servidor).
## 11. Paso 8 — Batería
## Paso 8 — Batería
| Medida | Esperado | Lectura mala |
| Medida | Esperado | Mala |
|---|---|---|
| Voltaje en vacío (desconectada) | 3.0 – 4.2 V | < 2.5 V = celda muy descargada o dañada |
| Voltaje con la unidad encendida | Sube lentamente si está cargando | Baja = no está cargando |
| Aspecto | Plana, sin marcas | Hinchada, con fuga o caliente = **fuera de servicio** |
| En vacío (desconectada) | 3.0–4.2 V | < 2.5 V: celda muy descargada o dañada |
| Con la unidad encendida | Sube lentamente si carga | Baja: no carga |
| Aspecto | Plana, sin marcas | Hinchada, con fuga o caliente: fuera de servicio |
Una batería hinchada **no se reinstala, no se carga y no viaja en avión**. Sepárala, foto, aviso.
Una batería hinchada no se reinstala, no se carga y no viaja en avión. Sepárala, foto, aviso.
## 12. Paso 9 — Veredicto
## Paso 9 — Veredicto
| Hallazgo | Disposición |
|---|---|
| Corto a tierra | No reparar en sitio → enviar a Querétaro |
| No enciende, sin corto | Enviar a Querétaro |
| Enciende y todo normal en banco | Reflashear ([procedimiento](reflasheo-unidades.md)) y volver a probar |
| Enciende pero el módem no registra | Probar la SIM en otro módulo antes de culpar al módem |
| GNSS con fix `1` y módem registrado | Revisar servidor/caster — no es hardware |
| Batería dañada | Retirar la batería, anotarlo, y decidir con ingeniería si se reinstala sin ella |
| Daño por calor visible | Enviar a Querétaro **con las fotos** — es evidencia del rediseño térmico |
| Corto a tierra | No se repara en sitio: a Querétaro |
| No enciende, sin corto | A Querétaro |
| Enciende y todo normal | [Reflasheo](reflasheo-unidades.md) y nueva prueba |
| El módem no registra | Prueba la SIM en otro módem antes de culpar al módem |
| GNSS con fix `1` y módem registrado | Servidor/caster; no es hardware |
| Batería dañada | Retírala, anótalo y decide con ingeniería si se reinstala sin ella |
| Daño por calor visible | A Querétaro con las fotos (evidencia para el rediseño térmico) |
Al terminar, **sube al acta los tres archivos de captura** (Blackpill, 4G y ArduSimple). Son el
insumo del análisis en Querétaro: sin ellos, el diagnóstico se queda en tu memoria.
Sube al acta las tres capturas (Blackpill, 4G, ArduSimple). Si la unidad se envía: [acta de envío](../formularios/envio.html) según el [ciclo de vida](ciclo-de-vida.md).
## Historial de revisiones
| Versión | Fecha | Cambios |
|---|---|---|
| 1.0 | 2026-09-18 | Primera versión. |
| 1.1 | 2026-09-29 | Encabezado uniforme; enlaces al manual V3, reflasheo y ciclo de vida. |
| 1.2 | 2026-09-29 | Edición breve; recibe las reglas de banco que antes estaban en la portada de Taller. |
Versiones anteriores en git.

View File

@ -1,102 +1,80 @@
---
title: EinarBoard 1.0 (rev 1.1) — Bring-Up Runbook & Anticipated-Trouble Register
tags: [project-drogheda, hardware, einarboard, bringup, testing, runbook]
project: Project Drogheda
author: Helgen CTO
title: "EinarBoard 1.0 — Runbook de bring-up"
tags: [project-drogheda, hardware, einarboard, v3, bringup, testing, runbook, historico]
date: 2026-07-08
status: ACTIVE — execute in order when boards arrive
project: Project Drogheda
author: Helgen Technologies
status: HISTÓRICO — se ejecutó en orden cuando llegaron las tarjetas (jul-2026)
---
# EinarBoard 1.0 — Bring-Up Runbook
# EinarBoard 1.0 — Runbook de bring-up
**Order (FINAL — replacement of 2026-07-08):** original PCBA SMT026070860564 cancelled (2 BOM
lines lost at matching); replacement placed 2026-07-08, **live-verified complete: 53 lines,
116/118 designators assembled** incl. D2/DBK2/DBK1 and all six LEDs. Rotations confirmed by Leo
in the placement viewer. Deltas vs the original parts map: LEDs = **C2295 KT-0805R (RED — all
indicators red by choice)** · RS1 = **C2988654** (HoLLR1206-1W-8mR-1%, spec-compliant alternate) ·
100nF = C1591 · 22µF ×4 = C76637 · R51 = C22972 · 22k = C31850. **J1/J2 NOT assembled (the only
unselected parts)** → bench jig-solder; buy two 1×20 2.54 female sockets locally (the C50984 reel
is locked in JLC inventory for future PCBA). Setpoints re-derived from ordered values 2026-07-08: fan 4.99 V · modem 3.33 V ·
I_chg 2.42 A · input limit 3.12 A · PFI 4.61 V · backup 4.79 V — all on target.
Tarjeta: V3 (EinarBoard 1.0, rev 1.1, Blackpill en zócalo).
---
!!! abstract "Para quién · Cuándo · Tiempo · Necesitas"
- Para quién: ingeniería (banco QRO)
- Cuándo: documento histórico — se aplicó a la primera tarjeta V3 al llegar de JLCPCB (jul-2026). Para las V3 que hoy están en campo, usa [diagnóstico en banco](diagnostico-banco.md) y [reflasheo](reflasheo-unidades.md)
- Tiempo: medio día para la tarjeta #1 (secciones C–D); 1 h por tarjeta en la réplica (F)
- Necesitas: fuente de banco con límite de corriente, multímetro, lupa, Blackpill, simpleRTK2B Pro, módem 4G, paquete 1S4P o celda de banco, resistencia de 10 kΩ (emulación de NTC)
## A. NOW — before production starts (the $479 gate)
Traducido del original en inglés (08-jul-2026).
- [ ] **DFM Analysis check (4–6 h after ordering, Order History → DFM Analysis).** Verify the
polarity dozen against the answer sheet: **U6 pin-1 TOP-LEFT · U2/U7 pin-1 BOTTOM-RIGHT ·
Q7 pin-1 TOP-LEFT · bands: D2/Dbk2/D5/D10 LEFT, Dbk1 TOP, D6 RIGHT · electrolytics "+":
C3 BOTTOM, C10/C43 LEFT · LED cathodes LEFT (D1, D4G1, DB1–4)**. The preview already caught
U6 and U2 turned 180° once — assume nothing.
- [ ] **Confirm Production File is set to Yes with 48 h auto-confirm** — an unwatched weekend
approves itself. Approve only after the DFM check passes.
- [ ] Answer every JLC review email **same day** (schedule protection).
**Pedido (FINAL — reemplazo del 2026-07-08):** el PCBA original SMT026070860564 se canceló (2 líneas del BOM se perdieron en el emparejamiento); el reemplazo se colocó el 2026-07-08, **verificado completo en vivo: 53 líneas, 116/118 designadores ensamblados**, incluidos D2/DBK2/DBK1 y los seis LEDs. Rotaciones confirmadas por Leo en el visor de colocación. Diferencias contra el mapa de partes original: LEDs = **C2295 KT-0805R (ROJO — todos los indicadores rojos por decisión)** · RS1 = **C2988654** (HoLLR1206-1W-8mR-1%, alterno conforme a especificación) · 100 nF = C1591 · 22 µF ×4 = C76637 · R51 = C22972 · 22 k = C31850. **J1/J2 NO ensamblados (las únicas partes no seleccionadas)** → soldar en banco con escantillón; comprar localmente dos zócalos hembra 1×20 de 2.54 mm (el carrete C50984 quedó bloqueado en el inventario de JLC para PCBA futuros). Puntos de ajuste re-derivados de los valores pedidos el 2026-07-08: ventilador 4.99 V · módem 3.33 V · I_chg 2.42 A · límite de entrada 3.12 A · PFI 4.61 V · respaldo 4.79 V — todos en objetivo.
## B. Reception (day of delivery)
## A. Ahora — antes de que arranque la producción (la compuerta de US$479)
- [ ] Visual vs the ordered renders: DNPs bare (P3/P13/H3, MOD1 field), all sockets present,
P1 wire-entry toward the edge, J9 opening at the edge.
- [ ] Polarity dozen again, on physical boards, one board, 5 minutes with a loupe.
- [ ] Measure J1↔J2 socket spacing on one board (decision record says 15.00 mm) and test-insert
a Blackpill — expect light preload if the module measures wider; note insertion force.
- [ ] **Revisión del análisis DFM (4–6 h después de pedir, Order History → DFM Analysis).** Verificar la «docena de polaridad» contra la hoja de respuestas: **U6 pin 1 ARRIBA-IZQUIERDA · U2/U7 pin 1 ABAJO-DERECHA · Q7 pin 1 ARRIBA-IZQUIERDA · bandas: D2/Dbk2/D5/D10 IZQUIERDA, Dbk1 ARRIBA, D6 DERECHA · «+» de electrolíticos: C3 ABAJO, C10/C43 IZQUIERDA · cátodos de LED IZQUIERDA (D1, D4G1, DB1–4)**. La vista previa ya atrapó una vez U6 y U2 girados 180°: no dar nada por sentado.
- [ ] **Confirmar que Production File está en Yes con autoconfirmación a 48 h** — un fin de semana sin vigilancia se aprueba solo. Aprobar solo después de que pase la revisión DFM.
- [ ] Contestar cada correo de revisión de JLC el mismo día (protección del calendario).
## C. Board #1 electrical bring-up — NO modules socketed, current-limited bench supply
## B. Recepción (día de entrega)
1. **Resistance sanity (unpowered):** 24V_IN→GND, MAIN5V→GND, 3V3_MODEM→GND — no shorts (>1 kΩ).
2. **24 V path:** bench supply 24 V, limit 200 mA → P1 pins 1/2. Check: 24V rail after Q10 ≈ 24 V
(reverse-protection FET conducting), **5V_FAN = 5.0 V** (U2 running), fan header P6 pin 1.
3. **Vehicle 5 V path:** 5 V, limit 500 mA → P2. Check: **MAIN5V ≈ 5 V** (LTC4040 input FET
passing), SYS5V after P11 jumpered/switched ON, Blackpill socket pins J1-20/J2-18 = 5 V.
4. **Load switch default-OFF (invariant #1):** with no MCU, SW_5V must be **0 V**. Then short
J1-7 (PWR_CTRL) to 3V3 momentarily → SW_5V = 5 V, **3V3_MODEM = 3.33 V** (U7 up).
5. **Ignition sense:** 12 V and 24 V through P1-3 → IGN_SENSE (J1-11) clamps ≈ 3.5–3.6 V; 0 V → <0.3 V.
6. **⚠ CHARGER NTC TRAP (this WILL look like a dead charger):** with no battery-harness NTC on
P4-3, the LTC4040's NTC pin is pulled to VIN by R55 → reads "battery too cold" → **charging
silently paused**. For bench charge tests, connect **10 kΩ from P4-3 to P4-2 (GND)** to emulate
25 °C. Do not debug the charger without it.
7. **Charger (with NTC emulation + real 1S4P pack or bench cell):** connect pack to P4 →
CHRG (J2-11) low while charging; charge current ramps ≤ 2.42 A; input current never exceeds
~3.1 A (watch the bench meter — this validates RS1/CLPROG behavior).
8. **Backup event (THE LTC4040 validation — this block never saw a proto):** system running on
P2 5 V with pack connected → pull P2 → **VSYS holds ≈ 4.79 V** from boost, board keeps running.
Measure: no back-feed voltage appearing on the disconnected P2 pins (validates Q7 orientation
fix). Restore P2 → seamless return + recharge. **Do this before any fleet commitment.**
9. **K1 fail-safe:** unpowered board: continuity K1 pin 1 ↔ pins 5/6 (NC closed = corrections
path exists with dead MCU). Powered + PB5 high: path opens to NO (pin 10).
- [ ] Visual contra los renders pedidos: DNP vacíos (P3/P13/H3, campo de MOD1), todos los zócalos presentes, entrada de cable de P1 hacia el borde, apertura de J9 en el borde.
- [ ] La docena de polaridad otra vez, sobre tarjetas físicas, una tarjeta, 5 minutos con lupa.
- [ ] Medir la separación de zócalos J1↔J2 en una tarjeta (el registro de decisiones dice 15.00 mm) e insertar de prueba un Blackpill — esperar una precarga ligera si el módulo mide más ancho; anotar la fuerza de inserción.
## D. Module integration (board #1 only, then replicate)
## C. Bring-up eléctrico de la tarjeta #1 — sin módulos en zócalos, fuente de banco con límite de corriente
- [ ] **MOD1 socket strips: solder using the simpleRTK2B Pro as the jig** (strips on module →
insert → solder → remove). Same jig trick for any stiff J1/J2 fit.
- [ ] Blackpill in (USB end toward board-left / VB-B12 corner at pads-1 — sockets don't key!).
Flash bench firmware via module USB.
- [ ] **Firmware flag: PROD `CHRG_EN` (PA8) is HIGH = charge OFF** — the proto TP4056 logic was
INVERTED (`CHRG_RUN` HIGH = ON). Port the flag before flashing, or units will disable charging
when they mean to enable it.
- [ ] Pro into MOD1 (antenna top-left, USBs bottom, per the validated orientation). **Old-rev
Pros: XBee switch → UART1. All revs: Pro's own XBee socket stays EMPTY; never plug the Pro's
"USB XBee" port in service** (its FTDI sits on the RTCM3 downlink on new revs).
- [ ] **F9P config: write to FLASH, not RAM** (Jun-20 finding — RAM-only config dies at power
cycle). Verify with a power cycle before shipping any unit.
- [ ] 4G NTRIP Master into J7/J8 (VCC row = J7). Telcel micro-SIM installed first. Board USB-C
(J9) enables the modem's USB only when a host provides VBUS — bench console via J9 is safe;
it does not fight the uplink.
- [ ] End-to-end: open sky, corrections from caster → **GGA quality 4 (RTK fixed)** — the
fleet's first-ever verified fix ≥4 per the Jun-20 gap.
1. Verificación de resistencias (sin energía): 24V_IN→GND, MAIN5V→GND, 3V3_MODEM→GND — sin cortos (> 1 kΩ).
2. **Camino de 24 V:** fuente de banco a 24 V, límite 200 mA → P1 pines 1/2. Verificar: riel de 24 V después de Q10 ≈ 24 V (FET de protección inversa conduciendo), **5V_FAN = 5.0 V** (U2 funcionando), header del ventilador P6 pin 1.
3. **Camino de 5 V del vehículo:** 5 V, límite 500 mA → P2. Verificar: **MAIN5V ≈ 5 V** (FET de entrada del LTC4040 pasando), SYS5V después de P11 con puente o interruptor en ON, pines del zócalo del Blackpill J1-20/J2-18 = 5 V.
4. **Interruptor de carga apagado por omisión (invariante #1):** sin MCU, SW_5V debe ser **0 V**. Después, cortocircuitar momentáneamente J1-7 (PWR_CTRL) a 3V3 → SW_5V = 5 V, **3V3_MODEM = 3.33 V** (U7 arriba).
5. Sensado de ignición: 12 V y 24 V por P1-3 → IGN_SENSE (J1-11) recorta a ≈ 3.5–3.6 V; 0 V → < 0.3 V.
6. **⚠ Trampa de la NTC del cargador (esto VA a parecer un cargador muerto):** sin la NTC del arnés de batería en P4-3, el pin NTC del LTC4040 queda llevado a VIN por R55 → lee «batería demasiado fría» → carga pausada en silencio. Para pruebas de carga en banco, conectar **10 kΩ de P4-3 a P4-2 (GND)** para emular 25 °C. No depurar el cargador sin esto.
7. **Cargador (con emulación de NTC + paquete 1S4P real o celda de banco):** conectar el paquete a P4 → CHRG (J2-11) en bajo mientras carga; la corriente de carga sube hasta ≤ 2.42 A; la corriente de entrada nunca pasa de ~3.1 A (observar el amperímetro de la fuente — esto valida el comportamiento de RS1/CLPROG).
8. **Evento de respaldo (LA validación del LTC4040 — este bloque nunca pasó por un prototipo):** sistema corriendo con los 5 V de P2 y el paquete conectado → quitar P2 → **VSYS se sostiene en ≈ 4.79 V** desde el boost, la tarjeta sigue funcionando. Medir: no aparece voltaje de retorno en los pines desconectados de P2 (valida la corrección de orientación de Q7). Restaurar P2 → regreso sin interrupción + recarga. Hacer esto antes de cualquier compromiso de flota.
9. **Fail-safe de K1:** tarjeta sin energía: continuidad K1 pin 1 ↔ pines 5/6 (NC cerrado = el camino de correcciones existe con el MCU muerto). Energizada + PB5 en alto: el camino se abre hacia NO (pin 10).
## E. Known-accepted risks (decision register — watch, don't re-litigate)
## D. Integración de módulos (solo tarjeta #1, después replicar)
| Risk | Decision/owner | Watch for |
- [ ] **Tiras del zócalo MOD1: soldar usando el simpleRTK2B Pro como escantillón** (tiras en el módulo → insertar → soldar → retirar). Mismo truco para cualquier ajuste rígido de J1/J2.
- [ ] Blackpill puesto (extremo USB hacia la izquierda de la tarjeta / esquina VB-B12 en los pads 1 — ¡los zócalos no tienen guía!). Flashear el firmware de banco por el USB del módulo.
- [ ] **Bandera de firmware: en PROD `CHRG_EN` (PA8) en ALTO = carga APAGADA** — la lógica del TP4056 del prototipo estaba INVERTIDA (`CHRG_RUN` en ALTO = ENCENDIDA). Portar la bandera antes de flashear, o las unidades desactivarán la carga cuando quieran activarla.
- [ ] Pro en MOD1 (antena arriba a la izquierda, USB abajo, según la orientación validada). **Pros de revisión vieja: interruptor XBee → UART1. Todas las revisiones: el zócalo XBee propio del Pro se queda VACÍO; nunca conectar el puerto «USB XBee» del Pro en servicio** (su FTDI queda sobre el enlace de bajada RTCM3 en las revisiones nuevas).
- [ ] **Configuración del F9P: escribir en FLASH, no en RAM** (hallazgo del 20-jun — la configuración solo en RAM muere con el ciclo de energía). Verificar con un ciclo de energía antes de embarcar cualquier unidad.
- [ ] 4G NTRIP Master en J7/J8 (fila VCC = J7). Micro-SIM Telcel instalada primero. El USB-C de la tarjeta (J9) habilita el USB del módem solo cuando un host entrega VBUS — la consola de banco por J9 es segura; no pelea con el enlace de subida.
- [ ] Extremo a extremo: cielo abierto, correcciones desde el caster → **calidad GGA 4 (RTK fijo)** — el primer fix ≥ 4 verificado de la flota, según la brecha del 20-jun.
## E. Riesgos conocidos y aceptados (registro de decisiones — vigilar, no reabrir)
| Riesgo | Decisión / responsable | Qué vigilar |
|---|---|---|
| J1/J2 rows at 15.00 mm vs 15.24 reading of module | Leo, vernier-verified, 2026-07-07 | Insertion force; pin preload; use jig-solder trick if stiff |
| LTC4040 block fab'd without proto validation | Gate waived consciously (boards cheap) | Step C.8 is the validation — run it FIRST |
| C22 = 35 V part on 24 V node (spec said 50 V) | Accepted at order | Nothing expected; note for rev 1.2 BOM |
| C778721/C90142 ceramic bias derating | Within design margins | — |
| D4G1 modem LED driven from 1.8 V pin | Known-dim (audit L4) | Don't debug as a fault |
| Backup boost budget 1.93 A of 2.5 A at modem TX burst | Margin accepted; 104 µF VSYS bank | Brownout during TX only if budget exceeded — scope VSYS during TX test |
| Filas J1/J2 a 15.00 mm vs lectura de 15.24 del módulo | Leo, verificado con vernier, 2026-07-07 | Fuerza de inserción; precarga de pines; usar el truco del escantillón si queda rígido |
| Bloque LTC4040 fabricado sin validación en prototipo | Compuerta omitida a conciencia (tarjetas baratas) | El paso C.8 es la validación — correrlo PRIMERO |
| C22 = parte de 35 V en el nodo de 24 V (la especificación decía 50 V) | Aceptado al pedir | No se espera nada; nota para el BOM de la rev 1.2 |
| Derating por polarización de cerámicos C778721/C90142 | Dentro de los márgenes de diseño | — |
| LED del módem D4G1 manejado desde un pin de 1.8 V | Se sabe que es tenue (auditoría L4) | No depurarlo como falla |
| Presupuesto del boost de respaldo 1.93 A de 2.5 A en ráfaga TX del módem | Margen aceptado; banco de 104 µF en VSYS | Brownout durante TX solo si se excede el presupuesto — osciloscopio en VSYS durante la prueba de TX |
## F. Fleet replication (after board #1 passes everything)
## F. Réplica en flota (después de que la tarjeta #1 pase todo)
Per-unit checklist: NTC harness populated (removes the C.6 emulation) · module orientations ·
switch-to-UART1 on old Pros · F9P FLASH config verified by power cycle · jig-soldered strips ·
GGA≥4 open-sky check · then HBOX integration per the enclosure docs (fit verified 2026-07-07).
Checklist por unidad: arnés con NTC poblado (elimina la emulación de C.6) · orientación de módulos · interruptor a UART1 en Pros viejos · configuración del F9P en FLASH verificada con ciclo de energía · tiras soldadas con escantillón · verificación de GGA ≥ 4 a cielo abierto · después integración en el HBOX según los documentos del gabinete (ajuste verificado el 2026-07-07).
Ver también: [manual V3](../manuales/manual-tarjeta-V3.md) · [pinout V3](../montaje/pinout-arneses.md) · [BOM dividido V3](../montaje/bom-split.md).
## Historial de revisiones
| Versión | Fecha | Cambios |
|---|---|---|
| 1.0 | 2026-07-08 | Runbook original (inglés). |
| 1.1 | 2026-09-29 | Traducción al español, encabezado uniforme y enlaces. Sin cambios técnicos. |

View File

@ -1,33 +1,40 @@
---
title: "Procedimiento de banco — Validación de la política de ventilador FW v3.0.3"
project: Project Drogheda
title: "Validación en banco — política de ventilador por potencia (FW v3.0.3)"
tags: [project-drogheda, testing, ventilador, firmware, banco, v3, v4, procedimiento]
date: 2026-08-18
project: Project Drogheda
version: v1.0
audience: ingeniería (banco)
target: EinarBoard 1.0 / 2.0 (V4) + firmware blackpillrtkcode_v3 v3.0.3
tags: [project-drogheda, testing, ventilador, firmware, banco]
---
# Validación en banco — política de ventilador por potencia (FW v3.0.3)
Tarjeta: V3 (EinarBoard 1.0) y V4 (EinarBoard 2.0) con firmware `blackpillrtkcode_v3` v3.0.3.
!!! abstract "Para quién · Cuándo · Tiempo · Necesitas"
- Para quién: ingeniería (banco)
- Cuándo: al validar un binario V3/V4 con la política de ventilador por potencia (v3.0.3 o posterior que la conserve)
- Tiempo: ~30 min por unidad (incluye 5 min al 100 % y el ciclo de calentamiento)
- Necesitas: fuente 24 V, fuente 5 V a 5.2 V, fuente de ignición 12–24 V, multímetro, laptop con terminal 115200, pistola de aire caliente y osciloscopio opcional
## 0. Qué se está probando
Desde v3.0.3 el ventilador **ya no se modula**: solo tiene dos estados.
| Condición | Ventilador |
|---|---|
| VEH5V presente **Y** ignición ON | **100 % fijo (DC), a cualquier temperatura** |
| Falta VEH5V **o** falta ignición ("modo batería") | Termostato: **enciende ≥ 48 °C, apaga < 45 °C** (temperatura de control = la más alta de aire SHT40 / batería TMP102 / MCU) |
| VEH5V presente Y ignición ON | **100 % fijo (DC), a cualquier temperatura** |
| Falta VEH5V o falta ignición ("modo batería") | Termostato: **enciende ≥ 48 °C, apaga < 45 °C** (temperatura de control = la más alta de aire SHT40 / batería TMP102 / MCU) |
La lógica reacciona en ≤ 2 s (cadencia térmica) más el debounce de entradas (~0.75 s). No hay sensado de 24 V: la **ignición es el testigo** de que el riel de 24 V existe.
La lógica reacciona en ≤ 2 s (cadencia térmica) más el debounce de entradas (~0.75 s). No hay sensado de 24 V: la ignición es el testigo de que el riel de 24 V existe.
> ⚠️ **PELIGRO:** hay 24 V en P1. Verifique polaridad antes de energizar. No conecte ni desconecte el ventilador (P6) con la tarjeta energizada.
> 🛑 **ALTO:** en banco sin batería, el riel de 5 V debe estar en **≥ 5.2 V** o con el pack conectado (disparo PFI 4.60 V del LTC4040 bajo ráfaga LTE — nota 24-jul). Si la unidad se reinicia sola durante la prueba, revise esto primero.
!!! danger "24 V en P1 y riel de 5 V"
Verifica la polaridad antes de energizar. No conectes ni desconectes el ventilador (P6) con la tarjeta energizada. En banco sin batería, 5 V ≥ 5.2 V o paquete conectado ([reglas de banco](diagnostico-banco.md#reglas-de-banco)); si la unidad se reinicia sola, revisa esto primero.
## 1. Equipo
Fuente de 24 V (≥ 1 A), fuente de 5 V ajustada a 5.2 V (o el SD-15B de la unidad), fuente o puente de 12–24 V para ignición, multímetro, laptop con terminal serie (USB del Blackpill, **115200 8N1**), pistola de aire caliente (a baja, < 70 °C), osciloscopio (opcional, para confirmar DC).
Fuente de 24 V (≥ 1 A), fuente de 5 V ajustada a 5.2 V (o el SD-15B de la unidad), fuente o puente de 12–24 V para ignición, multímetro, laptop con terminal serie (USB del Blackpill, **115200 8N1**), pistola de aire caliente (a baja, < 70 °C), osciloscopio (opcional, para confirmar DC).
## 2. Puntos de medición
@ -35,18 +42,18 @@ Fuente de 24 V (≥ 1 A), fuente de 5 V ajustada a 5.2 V (o el SD-15B de la unid
|---|---|---|---|
| **P1** (GX16-5 / Phoenix) | 1 | `24V_IN` | Alimenta SOLO el buck del ventilador (U2 → `5V_FAN`) |
| | 2 | `GND` | Retorno común |
| | 3 | `IGN_IN` | Ignición cruda 12–24 V (divisor Rig 22k / Rigb 10k → PA5) |
| **P2** | 1 | `VEH5V` | 5 V del SD-15B (= "vehículo presente" para el firmware, umbral ON > 4.2 V / OFF < 3.8 V) |
| **P6** (ventilador) | 1 | `5V_FAN` | +5 V del buck — debe medir ~5 V siempre que haya 24 V en P1.1 |
| | 2 | `FAN_RET` | Drenaje de Q2 (lado bajo). **Fan ON → ~0 V; fan OFF → ~5 V** |
| | 3 | `IGN_IN` | Ignición cruda 12–24 V (divisor Rig 22k / Rigb 10k → PA5) |
| **P2** | 1 | `VEH5V` | 5 V del SD-15B (= "vehículo presente" para el firmware, umbral ON > 4.2 V / OFF < 3.8 V) |
| **P6** (ventilador) | 1 | `5V_FAN` | +5 V del buck — debe medir ~5 V siempre que haya 24 V en P1.1 |
| | 2 | `FAN_RET` | Drenaje de Q2 (lado bajo). **Fan ON → ~0 V; fan OFF → ~5 V** |
| | 4 | `FAN_TACH_RAW` | No usado (ventilador de 2 hilos) — debe quedar al aire |
| **PA6** (Blackpill / Rg) | — | `FAN_PWM` | Comando del MCU vía Rg (100 Ω) → gate de Q2. **ON → 3.3 V DC plano; OFF → 0 V** |
| **PA6** (Blackpill / Rg) | — | `FAN_PWM` | Comando del MCU vía Rg (100 Ω) → gate de Q2. **ON → 3.3 V DC plano; OFF → 0 V** |
La medición que decide es **P6.2 respecto a GND** (o la tensión P6.1↔P6.2 a través del ventilador: ~5 V girando, ~0 V parado). PA6 confirma qué está comandando el firmware; P6.2 confirma que Q2 y el ventilador obedecen.
La medición que decide es **P6.2 respecto a GND** (o la tensión P6.1↔P6.2 a través del ventilador: ~5 V girando, ~0 V parado). PA6 confirma qué está comandando el firmware; P6.2 confirma que Q2 y el ventilador obedecen.
## 3. Telemetría de referencia
Abra la terminal serie antes de empezar. Cada 2 s sale una línea `TLM`; las columnas relevantes (ver línea `COLS` al arranque):
Abra la terminal serie antes de empezar. Cada 2 s sale una línea `TLM`; las columnas relevantes (ver línea `COLS` al arranque):
`...,veh,ign,...,tair,rh,tbat,fan_rpm,fan_pwm,fan_fault,...`
@ -56,30 +63,40 @@ Abra la terminal serie antes de empezar. Cada 2 s sale una línea `TLM`; las col
## 4. Procedimiento
Estado inicial: P1 con 24 V, P2 con 5.2 V, **ignición desconectada**, ventilador en P6, unidad a temperatura ambiente (< 40 °C).
Estado inicial: P1 con 24 V, P2 con 5.2 V, ignición desconectada, ventilador en P6, unidad a temperatura ambiente (< 40 °C).
| # | Acción | Resultado esperado | Verificar |
|---|---|---|---|
| 1 | Energizar la unidad (arranque en frío) | **Self-test**: los 4 LEDs de gauge encienden en secuencia y el ventilador da un soplo de ~0.8 s | Confirma que Q2 + ventilador funcionan, independiente de la lógica |
| 2 | Esperar 10 s, sin ignición | Ventilador **apagado** | P6.2 ≈ 5 V · PA6 = 0 V · TLM: `veh=1 ign=0 fan_pwm=0` |
| 3 | Aplicar 12–24 V a P1.3 (ignición) | En ≤ 3 s el ventilador arranca al **100 %**, aun frío | P6.2 ≈ 0 V · PA6 = 3.3 V **DC plano** (sin PWM en el osciloscopio) · TLM: `ign=1 fan_pwm=100` |
| 4 | Mantener 5 min | Sigue al 100 % sin interrupciones; `fan_fault=0` | Sin parpadeos en P6.2 |
| 5 | Quitar ignición (24 V y 5 V se quedan) | En ≤ 3 s el ventilador **se apaga** (modo batería, unidad fría) | P6.2 ≈ 5 V · `ign=0 fan_pwm=0` |
| 6 | Sin ignición: calentar el sensor SHT40 (sonda P5) con aire caliente, gradual | Al llegar `tair` a **48 °C** el ventilador arranca al 100 % | TLM: `tair≥48 → fan_pwm=100`. **No** debe arrancar a 45–47 °C (histéresis) |
| 7 | Retirar el calor y dejar enfriar | Sigue girando entre 45–47 °C; **se apaga solo por debajo de 45 °C** | `tair=46 → fan_pwm=100` · `tair=44 → fan_pwm=0` |
| 8 | Reconectar ignición con la unidad aún tibia | 100 % inmediato sin importar la temperatura | `fan_pwm=100` |
| 9 | (Opcional, con pack conectado) Quitar el 5 V de P2 dejando 24 V + ignición | El firmware pasa a modo batería (gate incompleto): manda termostato, no el 100 % fijo | `veh=0 → fan_pwm` según temperatura |
| 1 | Energizar la unidad (arranque en frío) | Self-test: los 4 LEDs de gauge encienden en secuencia y el ventilador da un soplo de ~0.8 s | Confirma que Q2 + ventilador funcionan, independiente de la lógica |
| 2 | Esperar 10 s, sin ignición | Ventilador apagado | P6.2 ≈ 5 V · PA6 = 0 V · TLM: `veh=1 ign=0 fan_pwm=0` |
| 3 | Aplicar 12–24 V a P1.3 (ignición) | En ≤ 3 s el ventilador arranca al **100 %**, aun frío | P6.2 ≈ 0 V · PA6 = 3.3 V DC plano (sin PWM en el osciloscopio) · TLM: `ign=1 fan_pwm=100` |
| 4 | Mantener 5 min | Sigue al 100 % sin interrupciones; `fan_fault=0` | Sin parpadeos en P6.2 |
| 5 | Quitar ignición (24 V y 5 V se quedan) | En ≤ 3 s el ventilador se apaga (modo batería, unidad fría) | P6.2 ≈ 5 V · `ign=0 fan_pwm=0` |
| 6 | Sin ignición: calentar el sensor SHT40 (sonda P5) con aire caliente, gradual | Al llegar `tair` a **48 °C** el ventilador arranca al 100 % | TLM: `tair≥48 → fan_pwm=100`. **No** debe arrancar a 45–47 °C (histéresis) |
| 7 | Retirar el calor y dejar enfriar | Sigue girando entre 45–47 °C; **se apaga solo por debajo de 45 °C** | `tair=46 → fan_pwm=100` · `tair=44 → fan_pwm=0` |
| 8 | Reconectar ignición con la unidad aún tibia | 100 % inmediato sin importar la temperatura | `fan_pwm=100` |
| 9 | (Opcional, con pack conectado) Quitar el 5 V de P2 dejando 24 V + ignición | El firmware pasa a modo batería (gate incompleto): manda termostato, no el 100 % fijo | `veh=0 → fan_pwm` según temperatura |
> ℹ️ **NOTA sobre el paso 6:** apunte el aire caliente a la **sonda SHT40 (P5)**, no a la tarjeta completa — así el resultado es reproducible. No exceda ~65 °C: arriba de 45 °C en la celda el firmware además corta la carga (`Cell hot -> charge OFF` en el log); es comportamiento esperado, no una falla.
!!! note "Sobre el paso 6"
Apunte el aire caliente a la **sonda SHT40 (P5)**, no a la tarjeta completa — así el resultado es reproducible. No exceda ~65 °C: arriba de 45 °C en la celda el firmware además corta la carga (`Cell hot -> charge OFF` en el log); es comportamiento esperado, no una falla.
## 5. Criterios de aceptación
La unidad PASA si: (1) `fw=3.0.3` en BOOT; (2) `fan_pwm` solo toma valores 0 y 100 durante toda la prueba; (3) con ignición + VEH5V el ventilador gira al 100 % en frío (paso 3 — este es el cambio de comportamiento clave vs. versiones anteriores); (4) la histéresis 48/45 °C del modo batería se cumple en ambos sentidos (pasos 6–7); (5) PA6 es DC plano en ON (sin portadora de 25 kHz); (6) `fan_fault=0` al final.
La unidad PASA si: (1) `fw=3.0.3` en BOOT; (2) `fan_pwm` solo toma valores 0 y 100 durante toda la prueba; (3) con ignición + VEH5V el ventilador gira al 100 % en frío (paso 3 — este es el cambio de comportamiento clave vs. versiones anteriores); (4) la histéresis 48/45 °C del modo batería se cumple en ambos sentidos (pasos 6–7); (5) PA6 es DC plano en ON (sin portadora de 25 kHz); (6) `fan_fault=0` al final.
Cualquier desviación: capture el log serie completo (es append-only, basta guardar la sesión de terminal) y repórtelo con el número de paso.
## 6. Registro
| Unidad | Fecha | Ingeniero | P3 (100 % frío) | P6/P7 (histéresis) | fan_fault | PASA/FALLA |
| Unidad | Fecha | Ingeniero | P3 (100 % frío) | P6/P7 (histéresis) | fan_fault | PASA/FALLA |
|---|---|---|---|---|---|---|
| H____ | | | | | | |
Detalle de la política en el firmware: [manual V3](../manuales/manual-tarjeta-V3.md) · [manual V4](../manuales/manual-tarjeta-V4.md). Binarios: [Descargas](../descargas/index.md).
## Historial de revisiones
| Versión | Fecha | Cambios |
|---|---|---|
| 1.0 | 2026-08-18 | Primera versión. |
| 1.1 | 2026-09-29 | Encabezado uniforme, avisos en formato del sitio y enlaces a manuales y descargas. |

View File

@ -1,196 +1,136 @@
---
title: Watchdog v3 — Proto Bench Bring-up & Build-Readiness (DEV board)
tags: [project-drogheda, hardware, watchdog, prototype, breadboard, bring-up, readiness]
project: Project Drogheda
author: Helgen CTO
title: "Watchdog v3 — Preparación y bring-up del prototipo en protoboard"
tags: [project-drogheda, hardware, watchdog, prototype, breadboard, bring-up, readiness, historico]
date: 2026-06-24
status: Active — tomorrow's bench guide (supersedes the procedure half of watchdog-protoboard-bringup.md for v3)
project: Project Drogheda
author: Helgen Technologies
status: HISTÓRICO — guía de banco del 25-jun-2026 (sustituyó la mitad de procedimiento de la lista de compras para v3)
---
# Watchdog v3 — Proto Build Readiness & Bench Bring-up
# Watchdog v3 — Preparación y bring-up del prototipo en protoboard
> **Scope:** breadboard the **DEV** watchdog on the existing Blackpill and prove the state
> machine + sensing + load switch + fan/temp loop. **PCB layout is explicitly out of scope
> for tomorrow** (do it after the proto works). Authority: [[watchdog-electrical-design-state]]
> (canonical) · firmware `04-Source-Code/firmware/blackpillrtkcode_v2/` (v2.3) ·
> schematic `kicad/hbox-watchdog-v3.kicad_sch`.
Tarjeta: V3 en protoboard (prototipo DEV sobre Blackpill, antes de la EinarBoard 1.0).
> **⚠ UPDATE 2026-07-03 — sensor suite changed to parts in hand.** Proto sensors are now
> **AHT10** (0x38, I²C1 **alone**, 3V3) + **LM35 → PA7** + **NTC → PB1** (no SHT40/TMP102 on
> proto — PCB-only). The kit's TP4056 has **no TEMP pin** → charge cutoff is **PA8 `CHRG_RUN`**
> (IRF9540N on TP4056 IN+, **inverted vs PROD CHRG_EN**). Cutoff switch wired: nodo SYS → SPST
> → MAIN5V. **The fan in hand is 2-wire** → PB10 tach test drops. §1/§3 rows below are patched;
> the authoritative wiring = ledger xlsx + `Drogheda_Guia-Conexion-Protoboard_ES_v2.2.pdf`.
> **Firmware v2.3 still reads SHT40 (0x44)** — the AHT10 driver / LM35 channel / CHRG_RUN flag
> are a pending firmware pass; until then the I²C and charge-cut rows are wire-now/test-later.
!!! abstract "Para quién · Cuándo · Tiempo · Necesitas"
- Para quién: ingeniería (banco QRO)
- Cuándo: documento histórico — bring-up del prototipo en protoboard del watchdog v3 (jun-2026), antes de la primera PCB. El paso siguiente fue el [bring-up de la EinarBoard 1.0](einarboard-1.0-bringup.md)
- Tiempo: un día de banco
- Necesitas: la [lista de compras del protoboard](historico-protoboard.md), Blackpill, fuente de 5 V, multímetro, fuente de calor
---
Traducido del original en inglés (24-jun-2026, actualizado 03-jul-2026).
## 0. Verdict — are you ready to build? **Yes, with three caveats**
Alcance: armar en protoboard el watchdog DEV sobre el Blackpill existente y probar la máquina de estados + sensado + interruptor de carga + lazo ventilador/temperatura. El layout de la PCB queda explícitamente fuera del alcance (se hace después de que el prototipo funcione). Autoridad: `watchdog-electrical-design-state` (canónico, repo) · firmware `04-Source-Code/firmware/blackpillrtkcode_v2/` (v2.3) · esquemático `kicad/hbox-watchdog-v3.kicad_sch`.
You can build and bring up the **core watchdog** tomorrow. Nothing about the schematic or its
ERC state blocks a breadboard build. The caveats are about *firmware coverage* and *scope
discipline*, not readiness:
!!! warning "Actualización 2026-07-03 — el conjunto de sensores cambió a las partes en mano"
Los sensores del prototipo ahora son **AHT10** (0x38, I²C1 solo, 3V3) + **LM35 → PA7** + **NTC → PB1** (sin SHT40/TMP102 en el prototipo — solo en PCB). El TP4056 del kit **no tiene pin TEMP** → el corte de carga es **PA8 `CHRG_RUN`** (IRF9540N en IN+ del TP4056, **invertido respecto a `CHRG_EN` de PROD**). Interruptor de corte cableado: nodo SYS → SPST → MAIN5V. **El ventilador en mano es de 2 hilos** → la prueba de tacómetro en PB10 se elimina. Las filas de §1/§3 están parchadas; el cableado autoritativo = libro de conexiones xlsx + `Drogheda_Guia-Conexion-Protoboard_ES_v2.2.pdf`. **El firmware v2.3 todavía lee el SHT40 (0x44)** — el driver del AHT10, el canal LM35 y la bandera CHRG_RUN quedaron pendientes de un pase de firmware; hasta entonces las filas de I²C y corte de carga son «cablear ahora / probar después».
1. **ERC "issues" are cosmetic — not a blocker.** File-based ERC on `hbox-watchdog-v3.kicad_sch`
= **0 errors, 1 warning** (a `Q_NPN_BCE` symbol-cache mismatch). The ground net is unified
(4 `GND` symbols, **0** placed `GNDREF` instances — the GNDREF you may see is just an orphaned
library-cache entry, not a real second ground). None of this affects a breadboard. *(Clean it
only before you go to PCB layout — see §2.)*
2. **Two v3 sub-circuits aren't in firmware yet.** The flashed v2.3 build does **not** drive the
4-LED battery gauge (PB12–15) or `CHRG_EN` (PA8). You can wire them, but they'll sit dark/idle
until a firmware pass. Decide per §4 whether to build them now or defer.
3. **v2.3 has never been hardware-validated.** Repo invariant: *bench-test before flash.*
Tomorrow is its first real bench test — treat step 1 (flash + confirm telemetry) as the gate
before trusting any later step.
## 0. Veredicto: se puede construir, con tres salvedades
**The one thing I couldn't verify:** your exact purchased parts. The two proto BOM `.xlsx`
(`watchdog-protoboard-BOM-3boards.xlsx`, `watchdog-LISTA-DE-COMPRAS-ES.xlsx`) are locked open in
LibreOffice, so I rebuilt the checklist (§3) from the design docs. Close LibreOffice and I'll diff
your actual list against it.
Se puede construir y arrancar el núcleo del watchdog. Nada del esquemático ni de su estado de ERC bloquea un armado en protoboard. Las salvedades son de *cobertura de firmware* y *disciplina de alcance*, no de preparación:
---
1. **Los «problemas» de ERC son cosméticos — no bloquean.** ERC sobre el archivo `hbox-watchdog-v3.kicad_sch` = **0 errores, 1 aviso** (un símbolo `Q_NPN_BCE` que no coincide con la caché). La red de tierra está unificada (4 símbolos `GND`, **0** instancias `GNDREF` colocadas — el GNDREF que se ve es solo una entrada huérfana de la caché de librería, no una segunda tierra real). Nada de esto afecta al protoboard. *(Limpiarlo solo antes de pasar al layout — ver §2.)*
2. **Dos subcircuitos de v3 todavía no están en firmware.** El build v2.3 flasheado **no** maneja el indicador de batería de 4 LEDs (PB12–15) ni `CHRG_EN` (PA8). Se pueden cablear, pero quedarán apagados hasta un pase de firmware. Decidir según §4 si se arman ahora o después.
3. **v2.3 nunca se ha validado en hardware.** Invariante del repositorio: *probar en banco antes de flashear.* Este es su primer banco real — tratar el paso 1 (flash + confirmar telemetría) como la compuerta antes de confiar en cualquier paso posterior.
## 1. What you can prove tomorrow (firmware v2.3 supports it) vs. not
**Lo que no se pudo verificar:** las partes compradas exactas. Los dos BOM del prototipo en `.xlsx` (`watchdog-protoboard-BOM-3boards.xlsx`, `watchdog-LISTA-DE-COMPRAS-ES.xlsx`) estaban abiertos en LibreOffice, así que el checklist (§3) se reconstruyó desde los documentos de diseño; se compara con la lista real al cerrarlos.
| Sub-circuit | Pins | v2.3 firmware | Testable tomorrow? |
## 1. Qué se puede probar (el firmware v2.3 lo soporta) y qué no
| Subcircuito | Pines | Firmware v2.3 | ¿Se prueba? |
|---|---|---|---|
| Boot + `$PHLG`/STREAM telemetry (USB) | USB-C | ✅ `ENABLE_PHLG=1` | **Yes** — this is the gate |
| Status LED (blink codes) | PB0 | ✅ | **Yes** |
| **RTK-stack load switch** (the recovery heart) | PA1 → 2N3904 → IRF9540 | ✅ OFF-at-reset, MCU-asserts-ON | **Yes** |
| Sense: battery / 5 V / ignition | PA0 / PA4 / PA5 | ✅ hysteresis + debounce | **Yes** |
| Smart fan (PWM) | PA6 · *(PB10 tach = DNP, fan in hand is 2-wire)* | ✅ 25 kHz PWM · RPM/stall **n/a** | **Yes** (PWM ramp; no tach) |
| I²C temp/RH — **AHT10 0x38, alone on the bus** [2026-07-03] | PB6/PB7 | ❌ v2.3 reads SHT40 0x44 → **AHT10 driver pending** (+ MCU-temp fallback works) | wire OK, **reads after firmware patch** |
| Analog temp ×2 — NTC→PB1 + **LM35→PA7** [2026-07-03] | PB1 / PA7 | ❌ channels not coded | wire OK, verify with multimeter meanwhile |
| 4-LED battery gauge | PB12–15 | ❌ not coded | wire OK, **stays dark** |
| Temp-qualified charge cut — **`CHRG_RUN`** [2026-07-03] | PA8 → 2N3904 → IRF9540N on TP4056 IN+ | ❌ not coded (**inverted vs PROD `CHRG_EN`** — needs flag) | wire OK; hand-test by jumpering PA8 high/low |
| Reset (hardware) | NRST | n/a (HW only) | **Yes** — button just works |
| Arranque + telemetría `$PHLG`/STREAM (USB) | USB-C | ✅ `ENABLE_PHLG=1` | Sí — es la compuerta |
| LED de estado (códigos de parpadeo) | PB0 | ✅ | Sí |
| Interruptor de carga de la etapa RTK (el corazón de la recuperación) | PA1 → 2N3904 → IRF9540 | ✅ OFF al reset, el MCU lo enciende | Sí |
| Sensado: batería / 5 V / ignición | PA0 / PA4 / PA5 | ✅ histéresis + debounce | Sí |
| Ventilador inteligente (PWM) | PA6 · *(PB10 tacómetro = DNP, el ventilador en mano es de 2 hilos)* | ✅ PWM 25 kHz · RPM/atasco n/a | Sí (rampa PWM; sin tacómetro) |
| Temperatura/HR por I²C — **AHT10 0x38, solo en el bus** [2026-07-03] | PB6/PB7 | ❌ v2.3 lee SHT40 0x44 → **driver AHT10 pendiente** (+ el respaldo de temperatura del MCU funciona) | cablear OK, lee después del parche de firmware |
| Temperatura analógica ×2 — NTC→PB1 + **LM35→PA7** [2026-07-03] | PB1 / PA7 | ❌ canales no codificados | cablear OK, verificar con multímetro mientras tanto |
| Indicador de batería de 4 LEDs | PB12–15 | ❌ no codificado | cablear OK, queda apagado |
| Corte de carga por temperatura — **`CHRG_RUN`** [2026-07-03] | PA8 → 2N3904 → IRF9540N en IN+ del TP4056 | ❌ no codificado (**invertido respecto a `CHRG_EN` de PROD** — necesita bandera) | cablear OK; probar a mano puenteando PA8 alto/bajo |
| Reset (hardware) | NRST | n/a (solo HW) | Sí — el botón simplemente funciona |
**Fan note [updated 2026-07-03]:** the fan in hand is **2-wire** → no tach; PB10 stays DNP and
v2.3's RPM/stall check reads nothing (harmless). Fan-fault will be inferred from temperature in
the firmware pass. PWM drive on PA6 through the IRLZ44N tests exactly the same.
**Nota del ventilador [actualizada 2026-07-03]:** el ventilador en mano es de **2 hilos** → sin tacómetro; PB10 queda DNP y la comprobación de RPM/atasco de v2.3 no lee nada (inofensivo). La falla de ventilador se inferirá por temperatura en el pase de firmware. El manejo PWM en PA6 a través del IRLZ44N se prueba exactamente igual.
---
## 2. La situación del ERC
## 2. The ERC situation (so you can stop worrying about it tonight)
- Lo que ERC reporta en el archivo DEV: 0 errores, 1 aviso (`Q_NPN_BCE` no encontrado en la librería `Device`). Ese aviso significa que el símbolo del esquemático viene de la caché del proyecto y la librería `Device` instalada tiene un nombre/pines ligeramente distintos — puramente cosmético, de enlace de librería.
- El GNDREF: **no hay símbolos GNDREF colocados** — solo la *definición* sobrante en la caché embebida. La tierra es una sola red.
- **Por qué no bloquea el protoboard:** ERC valida una *netlist para fabricación*. En protoboard todas las tierras se unen físicamente; la colocación fuera de rejilla y un nombre de caché distinto son invisibles para el cobre que se cablea a mano.
- Antes del layout (después), limpiar en KiCad: Tools → *Update Symbols from Library* (quita el aviso de caché de `Q_NPN_BCE`), después *Annotate* y volver a correr ERC; mover cualquier parte fuera de rejilla a la rejilla de 1.27 mm. No editar el esquemático por script mientras KiCad lo tiene abierto (conflicto de bloqueo de archivo).
- **What ERC actually reports on the DEV file:** 0 errors, 1 warning (`Q_NPN_BCE` not found in
lib `Device`). That warning means the symbol in your schematic is from the project cache and the
installed `Device` lib has a slightly different name/pins — **purely a library-link cosmetic**.
- **The GNDREF you may have seen:** there are **no placed GNDREF symbols** — only the leftover
symbol *definition* in the embedded cache. Your ground is one net.
- **Why it doesn't block the breadboard:** ERC validates a *netlist for fabrication*. On a
breadboard you tie all grounds together physically; off-grid placement and a cache-name mismatch
are invisible to copper you wire by hand.
- **Before PCB layout (later), clean these in KiCAD:** Tools → *Update Symbols from Library*
(clears the `Q_NPN_BCE` cache warning), then *Annotate* and re-run ERC; nudge any off-grid parts
onto the 1.27 mm grid. **Don't let me edit the schematic while you have KiCAD open** (file-lock
conflict) — close it first and I'll do the cleanup pass.
## 3. Checklist de partes antes de armar (reconstruido — confirmar contra la caja)
---
**Ya se tiene (no comprar):** Blackpill STM32F411, cable USB-C, 18650 + PowerBoost (o fuente de banco), Mean Well SD-15B-05 (o 5 V de banco), multímetro, una fuente de calor (secadora / taza de agua caliente) para la prueba del ventilador. *F9P + 4G master NO se necesitan para este bring-up.*
## 3. Pre-build parts checklist (reconstructed — confirm against your box)
Núcleo (los «cerebros» — indispensable):
**Already have (don't buy):** Blackpill STM32F411, USB-C cable, 18650 + PowerBoost (or bench PSU),
Mean Well SD-15B-05 (or bench 5 V), multimeter, a heat source (hair-dryer/cup of hot water) for the
fan test. *F9P + 4G master are NOT needed for this bring-up.*
- [ ] Protoboard ×2 (830 puntos) + kits de jumpers (M-M y M-F)
- [ ] Surtido de resistencias incl. **330 Ω, 1 k, 4.7 k, 10 k, 100 k, 220 Ω**
- [ ] **2N3904** ×3 (driver del interruptor de carga, TO-92)
- [ ] **IRF9540 / IRF9540N** ×2 (P-FET lado alto para 5 V, TO-220)
- [ ] LED ×5 (estado) · **100 nF** cerámico ×10 (filtros ADC/desacoplo) · 100 µF ≥ 16 V ×4 (bulk)
- [ ] **Potenciómetro de 10 kΩ** ×2 + botón táctil/interruptor deslizante ×2 (barrer VBAT / simular ignición)
- [ ] Tira de header macho 1×40 (para pinar cualquier módulo sin pines)
**Core (the "brains" — must-have):**
**Térmico (nuevo en v3):**
- [ ] Breadboard ×2 (830-pt) + jumper kits (M-M and M-F)
- [ ] Resistor assortment incl. **330 Ω, 1 k, 4.7 k, 10 k, 100 k, 220 Ω**
- [ ] **2N3904** ×3 (load-switch driver, TO-92)
- [ ] **IRF9540 / IRF9540N** ×2 (P-FET high-side 5 V switch, TO-220)
- [ ] LED ×5 (status) · **100 nF** ceramic ×10 (ADC filters/decoupling) · 100 µF ≥16 V ×4 (bulk)
- [ ] **10 kΩ trim pot** ×2 + tactile button/slide switch ×2 (sweep VBAT / simulate ignition)
- [ ] Male header strip 1×40 (to pin any bare module)
- [x] Ventilador 5 V, 40–60 mm — **2 hilos, en mano** [2026-07-03] (sin tacómetro; PB10 DNP)
- [ ] **IRLZ44N** ×2 (N-FET de nivel lógico, lado bajo del ventilador) — *un IRF540/IRFZ44 común no enciende con 3.3 V; si no hay IRLZ44N usar 2N2222A/TIP120 + 1 kΩ en base*
- [ ] **1N5819** ×3 (flyback del ventilador; 1N4007 aceptable)
- [x] Breakout I²C **AHT10** (0x38) — en mano [2026-07-03]; **solo en el bus**, 3V3 únicamente; parche de lectura de firmware pendiente (v2.3 habla SHT40)
- [x] **LM35** (TO-92) — en mano [2026-07-03]; temperatura analógica #2 en **PA7**, alimentado de 5 V
**Thermal (v3 new):**
**Adiciones de v3 (armar solo si se quieren cableadas ahora — ver §4):**
- [x] 5 V fan, 40–60 mm — **2-wire, in hand** [2026-07-03] (no tach; PB10 DNP)
- [ ] **IRLZ44N** ×2 (logic-level N-FET, fan low-side) — *plain IRF540/IRFZ44 won't turn on from
3.3 V; if out of IRLZ44N use 2N2222A/TIP120 + 1 kΩ base*
- [ ] **1N5819** ×3 (fan flyback; 1N4007 acceptable)
- [x] I²C **AHT10** breakout (0x38) — **in hand** [2026-07-03]; **alone on the bus**, 3V3 only;
firmware read patch pending (v2.3 speaks SHT40)
- [x] **LM35** (TO-92) — **in hand** [2026-07-03]; analog temp #2 on **PA7**, powered from 5 V
- [ ] Reset: botón táctil → NRST↔GND (+ header de 2 pines opcional para reset externo)
- [ ] Indicador de batería: **4× LED + 4× 330 Ω** en PB12–15 *(quedan apagados hasta el firmware)*
- [ ] Sustituto del respaldo de batería: módulo **TP4056** + boost **MT3608** + **2× 1N5819** (OR-ing) *(reproduce carga / pérdida de energía→respaldo / BAT_SENSE)*. **[2026-07-03]** El TP4056 del kit **no tiene pin TEMP** → la NTC de 10 kΩ del cargador no se usa; el corte por temperatura ahora está en el prototipo en hardware: PA8 `CHRG_RUN` → 1 k → 2N3904 → IRF9540N (pull-up 10 k) en IN+ del TP4056 (ALTO = carga; sin MCU = sin carga — invertido respecto a PROD). Más el interruptor de corte: nodo SYS → SPST → MAIN5V (corta vehículo y batería)
**v3 additions (build only if you want them wired now — see §4):**
## 4. Decisión antes de sentarse: cuánto de v3 cablear
- [ ] Reset: tactile button → NRST↔GND (+ optional 2-pin header for external reset)
- [ ] Battery gauge: **4× LED + 4× 330 Ω** on PB12–15 *(will stay dark until firmware)*
- [ ] Battery-backup stand-in: **TP4056** module + **MT3608** boost + **2× 1N5819** (OR-ing)
*(reproduces charge / power-loss→backup / BAT_SENSE)*. **[2026-07-03]** The kit's TP4056 has
**no TEMP pin** → the 10 kΩ charger-NTC is unused; the temp-qualified cutoff **is now on the
proto in hardware**: PA8 `CHRG_RUN` → 1 k → 2N3904 → IRF9540N (10 k pull-up) on TP4056 IN+
(HIGH = charge; MCU absent = no charge — inverted vs PROD). Plus the **cutoff switch**:
nodo SYS → SPST → MAIN5V (kills vehicle **and** battery)
- Recomendado — armar el núcleo probable + térmico (todo lo marcado *Sí* en §1). Prueba toda la lógica del watchdog y el nuevo lazo ventilador/temperatura, que es el objetivo del prototipo. Añadir el botón de reset (gratis — funciona sin firmware).
- **Indicador (PB12–15):** cablearlo si se quiere el layout/sensación, pero no encenderá hasta que exista el driver del indicador. *Más barato añadirlo después.*
- **Sustituto del respaldo de batería (TP4056+MT3608):** vale la pena si se quiere observar específicamente la transferencia pérdida de energía → respaldo y que `BAT_SENSE` siga a la celda. Omitir si el día es solo para la lógica del watchdog.
---
## 5. Secuencia de bring-up (correr en orden — cada paso habilita el siguiente)
## 4. Decision before you sit down: how much of v3 to wire
1. **Solo USB — flashear y compuerta.** Compilar v2.3 (Arduino IDE / STM32duino, tarjeta = Blackpill F411CE), flashear por DFU (mantener BOOT0). Abrir serie a 115200. **Confirmar líneas `BOOT` / `COLS` / `TLM` y un `$PHLG,...*CS` cada 30 s.** Si falla, detenerse y corregir el firmware antes de cablear nada.
2. LED de estado — PB0 → 330 Ω → LED → GND. Observar que los códigos de parpadeo cambien con el estado.
3. Interruptor de carga (el corazón de la recuperación) — PA1 → 1 kΩ → base del 2N3904; colector → gate del IRF9540; 10 kΩ gate→5 V; drain → 5 V conmutado; poner un LED+330 Ω en la salida conmutada. **Confirmar: OFF al reset, ON cuando PA1 lo pide.** (Apagado es el estado seguro.)
4. Divisores de sensado — 10 k/10 k ÷2 hacia **PA0** (batería vía 18650/pot) y **PA4** (riel 5 V); pot de 10 kΩ hacia **PA5** (ignición). Barrer y observar que `veh`/`ign`/`vbat` cambien en TLM con histéresis (V5V_ON 4.20 / V5V_OFF 3.80; BAT_CRIT 3.40 / BAT_REC 3.70).
5. Ventilador + tacómetro — PA6 → 220 Ω → gate del IRLZ44N; ventilador(−) en el drain; 1N5819 ∥ ventilador; 100 kΩ gate→GND. Tacómetro de 3 hilos → pull-up 10 kΩ a 3V3 → PB10. Verlo girar/rampar; **desconectar el ventilador → `fan_fault`** en telemetría.
6. Temperatura I²C — SHT40/TMP102 en PB6/PB7 (+4.7 kΩ pull-up cada uno). Calentarlo → el ventilador rampa en la curva 45→70 °C. *¿Sin sensor? El respaldo de temperatura del MCU también rampa el ventilador — calentar toda la tarjeta.*
7. (Opcional) botón de reset — NRST↔GND momentáneo; presionar → reinicio limpio, línea de causa de reset en el log.
8. (Opcional) sustituto del respaldo de batería — 5 V del vehículo → IN del TP4056; celda en BAT del TP4056; TP4056/celda → MT3608 → 5 V vía OR-ing 1N5819 al riel; NTC junto a la celda. Quitar los 5 V del vehículo → observar que el respaldo sostenga el riel y `BAT_SENSE` siga.
- **Recommended for tomorrow — build the testable core + thermal** (everything in §1 marked
*Yes*). It proves the whole watchdog logic and the new fan/temp loop, which is the point of the
proto. Add the **reset button** (free — works with no firmware).
- **Gauge (PB12–15):** wire it if you want the layout/feel, but it won't light until I write the
gauge driver. *Cheaper to add later.* — **I can write that firmware pass tonight/tomorrow if you
want the LEDs live.**
- **Battery-backup stand-in (TP4056+MT3608):** worth wiring if you specifically want to watch
power-loss → backup hand-off and `BAT_SENSE` track the cell. Skip if tomorrow is about the
watchdog logic only.
---
## 5. Bring-up sequence (run in order — each step gates the next)
1. **USB only — flash & gate.** Compile v2.3 (Arduino IDE / STM32duino, board = Blackpill F411CE),
flash via DFU (hold BOOT0). Open serial @115200. **Confirm `BOOT` / `COLS` / `TLM` lines and a
`$PHLG,...*CS` every 30 s.** If this fails, stop and fix firmware before wiring anything.
2. **Status LED** — PB0 → 330 Ω → LED → GND. Watch blink codes change with state.
3. **Load switch (the recovery heart)** — PA1 → 1 kΩ → 2N3904 base; collector → IRF9540 gate;
10 kΩ gate→5 V; drain → switched 5 V; put an LED+330 Ω on the switched output.
**Confirm: OFF at reset, ON when PA1 asserts.** (Power-off is the safe state.)
4. **Sense dividers** — 10 k/10 k ÷2 into **PA0** (battery via 18650/pot) and **PA4** (5 V rail);
10 kΩ pot into **PA5** (ignition). Sweep and watch `veh`/`ign`/`vbat` flip in TLM with
hysteresis (V5V_ON 4.20 / V5V_OFF 3.80; BAT_CRIT 3.40 / BAT_REC 3.70).
5. **Fan + tach** — PA6 → 220 Ω → IRLZ44N gate; fan(−) at the drain; 1N5819 ∥ fan; 100 kΩ
gate→GND. 3-wire tach → 10 kΩ pull-up to 3V3 → PB10. Watch it spin/ramp; **unplug fan →
`fan_fault`** in telemetry.
6. **I²C temp** — SHT40/TMP102 on PB6/PB7 (+4.7 kΩ pull-ups each). Heat it → fan ramps on the
45→70 °C curve. *No sensor? The MCU-temp fallback still ramps the fan — warm the whole board.*
7. **(Optional) reset button** — NRST↔GND momentary; press → clean reboot, reset-cause line in log.
8. **(Optional) battery-backup stand-in** — vehicle 5 V → TP4056 IN; cell on TP4056 BAT; TP4056/cell
→ MT3608 → 5 V via 1N5819 OR-ing into the rail; NTC by the cell. Pull vehicle 5 V → watch backup
hold the rail and `BAT_SENSE` track.
---
## 6. Wiring cheat-sheet (Blackpill side, v3)
## 6. Hoja de cableado (lado Blackpill, v3)
```
PA0 ← BAT ÷2 (10k/10k) from 18650+ / pot PA6 → 220Ω → IRLZ44N gate; fan(−); 1N5819 ∥ fan
PA4 ← 5V ÷2 (10k/10k) from 5V rail PB10 ← fan tach, 10k pull-up → 3V3
PA5 ← IGN ÷2 (10k/10k) from pot/switch PB6/PB7 → I²C SCL/SDA (+4.7k each → 3V3)
PA1 → 1k → 2N3904 base; collector → IRF9540 PB0 → 330Ω → LED → GND
gate; 10k gate→5V; drain → switched 5V NRST ← reset button → GND (optional)
→ stack (LED+330Ω as a test load) PB12–15 → 330Ω → LED → GND (gauge; dark till FW)
GND / 5V / 3V3 rails common. Fan 5V from a SEPARATE 5V (2nd PSU / LM2596) — not the switched stack rail.
PA0 ← BAT ÷2 (10k/10k) desde 18650+ / pot PA6 → 220Ω → gate IRLZ44N; ventilador(−); 1N5819 ∥ ventilador
PA4 ← 5V ÷2 (10k/10k) desde riel 5V PB10 ← tacómetro, pull-up 10k → 3V3
PA5 ← IGN ÷2 (10k/10k) desde pot/interruptor PB6/PB7 → I²C SCL/SDA (+4.7k cada uno → 3V3)
PA1 → 1k → base 2N3904; colector → gate IRF9540 PB0 → 330Ω → LED → GND
; 10k gate→5V; drain → 5V conmutado NRST ← botón de reset → GND (opcional)
→ etapa (LED+330Ω como carga de prueba) PB12–15 → 330Ω → LED → GND (indicador; apagado hasta FW)
Rieles GND / 5V / 3V3 comunes. 5 V del ventilador desde una fuente de 5 V SEPARADA (2ª fuente / LM2596) — no del riel conmutado de la etapa.
```
> **Proto↔PCB part map (don't get confused):** the schematic uses SMD equivalents (Q1 **AO3401A**
> P-FET, Q5 **MMBT3904**, Q2 **AO3400A** fan FET). On the breadboard you use the through-hole
> stand-ins above (**IRF9540N / 2N3904 / IRLZ44N**) — same topology, same firmware.
!!! note "Mapa de partes prototipo↔PCB (para no confundirse)"
El esquemático usa equivalentes SMD (Q1 **AO3401A** P-FET, Q5 **MMBT3904**, Q2 **AO3400A** FET del ventilador). En el protoboard se usan los sustitutos through-hole de arriba (**IRF9540N / 2N3904 / IRLZ44N**) — misma topología, mismo firmware.
---
## 7. Después de que el prototipo funcione — siguientes pasos
## 7. After the proto works — next steps (not tomorrow)
- Pase de firmware: driver del indicador de LEDs (PB12–15 desde `BAT_SENSE`) + lógica `CHRG_EN` de corte de carga en caliente.
- KiCad: limpieza cosmética de ERC → huellas → después layout de PCB (DEV primero, después PROD según `watchdog-production-schematic-delta`).
- Capacidad del paquete confirmada **~12 Ah** (2026-06-30; la etiqueta «40 Ah» estaba mal) — dimensiona la corriente de carga del LTC4040 (≈ C/5, ≤ 2.5 A).
- Firmware pass: gauge-LED driver (PB12–15 from `BAT_SENSE`) + `CHRG_EN` cut-charge-when-hot logic.
- KiCAD: cosmetic ERC cleanup → footprints → **then** PCB layout (DEV first, then build PROD per
[[watchdog-production-schematic-delta]]).
- Pack Ah confirmed **~12 Ah** (2026-06-30; "40 Ah" label was wrong) — sizes the LTC4040 charge current (≈C/5, ≤2.5 A).
## Relacionados
## Related
[[watchdog-electrical-design-state]] (CANONICAL) · [[watchdog-protoboard-bringup]] (Jun-22 shop
list) · [[watchdog-production-schematic-delta]] (PROD build spec) · `kicad/hbox-watchdog-v3.kicad_sch`
`watchdog-electrical-design-state` (canónico, repo) · [lista de compras del protoboard](historico-protoboard.md) (22-jun) · `watchdog-production-schematic-delta` (especificación del build PROD, repo) · `kicad/hbox-watchdog-v3.kicad_sch` · lo que siguió: [bring-up de la EinarBoard 1.0](einarboard-1.0-bringup.md).
## Historial de revisiones
| Versión | Fecha | Cambios |
|---|---|---|
| 1.0 | 2026-06-24 | Guía de banco original (inglés); actualización de sensores 03-jul. |
| 1.1 | 2026-09-29 | Traducción al español, encabezado uniforme y enlaces. Sin cambios técnicos. |

View File

@ -1,130 +1,114 @@
---
tags: [project-drogheda, hardware, watchdog, prototype, breadboard, bom, bring-up]
project: Project Drogheda
author: Helgen CTO
title: "Watchdog — Lista de compras para el bring-up en protoboard"
tags: [project-drogheda, hardware, watchdog, prototype, breadboard, bom, bring-up, historico]
date: 2026-06-22
status: Active — shop list for the Blackpill bring-up
project: Project Drogheda
author: Helgen Technologies
status: HISTÓRICO — lista de compras del prototipo en Blackpill (jun-2026)
---
# Watchdog Bring‑up — Protoboard Shopping List (print me)
# Watchdog — Lista de compras para el bring-up en protoboard
> **⚠ SUPERSEDED for sensors (2026-07-03):** the proto suite is now **AHT10 (0x38, alone on
> I²C1, 3V3) + LM35→PA7 + NTC→PB1** — no SHT40/SHT31/BME280/TMP102 on the proto (PCB-only).
> Charge cutoff = **PA8 `CHRG_RUN`** on the TP4056 IN+ (the kit module has no TEMP pin).
> Current shop lists = `watchdog-protoboard-BOM-3boards.xlsx` / `watchdog-LISTA-DE-COMPRAS-ES.xlsx`;
> wiring = ledger xlsx + Guía v2.2. The sensor/substitute rows below are kept for history only.
Tarjeta: V3 en protoboard (prototipo sobre Blackpill, antes de la EinarBoard 1.0).
> Goal: breadboard the v2.2 watchdog on your **existing Blackpill**, prove the
> state machine + sensing + load switch + fans + temp loop, **before** any PCB.
> All parts are **through‑hole / breadboard‑friendly** and stocked at a normal MX
> electronics shop (Steren / AG Electrónica / local). Quantities include spares.
> Pin map: [[03-Architecture-Hardware/watchdog-pcb-v3-design#2|design §2]] ·
> firmware: `blackpillrtkcode_v2.ino` (v2.2).
!!! abstract "Para quién · Cuándo · Tiempo · Necesitas"
- Para quién: ingeniería (banco QRO)
- Cuándo: documento histórico — compras para el prototipo en protoboard del watchdog v2.2/v3 (jun-2026). El procedimiento de banco es [Bring-up del prototipo v3](historico-proto-bench-v3.md)
- Tiempo: una visita a la tienda de electrónica
- Necesitas: el Blackpill y lo listado en §0
## 0. Already have — do NOT buy
STM32F411 Blackpill · USB‑C/micro cable · 18650 + PowerBoost · Mean Well SD‑15B‑05
(or a bench PSU) · multimeter · the F9P + 4G master (only needed later, not for the
bring‑up). A **heat source** (hair dryer / lighter / hot water cup) to trigger the
thermal/fan test — household, no need to buy.
Traducido del original en inglés (22-jun-2026, sustituido en parte el 03-jul-2026).
---
!!! warning "Sustituido para sensores (2026-07-03)"
El conjunto de sensores del prototipo pasó a ser **AHT10 (0x38, solo en I²C1, 3V3) + LM35→PA7 + NTC→PB1** — sin SHT40/SHT31/BME280/TMP102 en el prototipo (solo en PCB). Corte de carga = **PA8 `CHRG_RUN`** en IN+ del TP4056 (el módulo del kit no tiene pin TEMP). Listas de compras vigentes = `watchdog-protoboard-BOM-3boards.xlsx` / `watchdog-LISTA-DE-COMPRAS-ES.xlsx`; cableado = libro de conexiones xlsx + Guía v2.2. Las filas de sensores/sustitutos de abajo se conservan solo por historia.
## 1. Core — bring up the "brains" (buy this even if the shop is sparse)
Objetivo: armar en protoboard el watchdog v2.2 sobre el Blackpill existente y probar la máquina de estados + sensado + interruptor de carga + ventiladores + lazo de temperatura, antes de cualquier PCB. Todas las partes son through-hole / aptas para protoboard y se consiguen en una tienda de electrónica normal en México (Steren / AG Electrónica / local). Las cantidades incluyen repuestos. Mapa de pines: `watchdog-pcb-v3-design` §2 (repo) · firmware: `blackpillrtkcode_v2.ino` (v2.2).
| # | Item | Qty | Value / part | ~MXN | For |
## 0. Ya se tiene — no comprar
STM32F411 Blackpill · cable USB-C/micro · 18650 + PowerBoost · Mean Well SD-15B-05 (o una fuente de banco) · multímetro · el F9P + 4G master (solo hacen falta después, no para el bring-up). Una fuente de calor (secadora / encendedor / taza de agua caliente) para disparar la prueba térmica/de ventilador — de casa, no hay que comprarla.
## 1. Núcleo — arrancar los «cerebros» (comprar esto aunque la tienda esté escasa)
| # | Ítem | Cant. | Valor / parte | ~MXN | Para |
|---|---|---|---|---|---|
| 1 | Breadboard 830‑pt | 2 | half/full | 120 | build surface (2 = room for fans/sensors) |
| 2 | Jumper wires M‑M | 1 pk | 65 pcs | 60 | board wiring |
| 3 | Jumper wires M‑F | 1 pk | 40 pcs | 50 | to Blackpill / modules |
| 4 | Resistor assortment box | 1 | ¼ W (incl. 330Ω,1k,4.7k,10k,100k,220Ω) | 120 | dividers, gates, pull‑ups |
| 5 | LED (any) | 5 | 3/5 mm | 10 | status LED on PB0 |
| 6 | Ceramic cap 100 nF | 10 | 0.1 µF (104) | 20 | ADC filters + decoupling |
| 7 | Electrolytic 100 µF / ≥16 V | 4 | — | 20 | rail bulk / modem‑burst reservoir |
| 8 | **2N3904** (NPN, TO‑92) | 3 | load‑switch driver | 15 | PA1 → P‑FET gate |
| 9 | **IRF9540 / IRF9540N** (P‑MOSFET, TO‑220) | 2 | high‑side 5 V switch | 40 | switched 5 V to "stack" |
| 10 | **10 kΩ trim pot** | 2 | breadboard trimmer | 30 | sweep VBAT / ignition to test thresholds |
| 11 | Tactile button or slide switch | 2 | — | 20 | simulate ignition on/off |
| 12 | Male header strip | 1 | 1×40, 2.54 mm | 15 | solder onto any module that needs pins |
| 1 | Protoboard 830 puntos | 2 | media/completa | 120 | superficie de armado (2 = espacio para ventiladores/sensores) |
| 2 | Jumpers M-M | 1 pq | 65 pzas | 60 | cableado de la placa |
| 3 | Jumpers M-F | 1 pq | 40 pzas | 50 | hacia el Blackpill / módulos |
| 4 | Caja surtida de resistencias | 1 | ¼ W (incl. 330 Ω, 1 k, 4.7 k, 10 k, 100 k, 220 Ω) | 120 | divisores, gates, pull-ups |
| 5 | LED (cualquiera) | 5 | 3/5 mm | 10 | LED de estado en PB0 |
| 6 | Capacitor cerámico 100 nF | 10 | 0.1 µF (104) | 20 | filtros ADC + desacoplo |
| 7 | Electrolítico 100 µF / ≥ 16 V | 4 | — | 20 | bulk del riel / reserva para ráfagas del módem |
| 8 | **2N3904** (NPN, TO-92) | 3 | driver del interruptor de carga | 15 | PA1 → gate del P-FET |
| 9 | **IRF9540 / IRF9540N** (P-MOSFET, TO-220) | 2 | interruptor lado alto de 5 V | 40 | 5 V conmutado hacia la «etapa» |
| 10 | **Potenciómetro de 10 kΩ** | 2 | trimmer para protoboard | 30 | barrer VBAT / ignición para probar umbrales |
| 11 | Botón táctil o interruptor deslizante | 2 | — | 20 | simular ignición on/off |
| 12 | Tira de header macho | 1 | 1×40, 2.54 mm | 15 | soldar en cualquier módulo que necesite pines |
**Core subtotal ≈ 520 MXN.** With this you can flash v2.2, watch the `$PHLG`/TLM log,
and validate the **load switch + the three sense dividers + LED** — the whole watchdog
logic — without the thermal parts.
**Subtotal del núcleo ≈ 520 MXN.** Con esto se puede flashear v2.2, ver el log `$PHLG`/TLM y validar el interruptor de carga + los tres divisores de sensado + LED — toda la lógica del watchdog — sin las partes térmicas.
---
## 2. Adiciones térmicas — ventiladores + temperatura (lo nuevo de v3)
## 2. Thermal add‑ons — fans + temperature (the v3 new stuff)
| # | Item | Qty | Value / part | ~MXN | For / note |
| # | Ítem | Cant. | Valor / parte | ~MXN | Para / nota |
|---|---|---|---|---|---|
| 13 | 5 V fan, 40–60 mm, **3‑wire** | 1 | 3‑wire = has tach | 60 | one extraction fan; 3‑wire so PB10 reads RPM. Grab a 2nd as a spare if cheap |
| 14 | **IRLZ44N** (logic‑level N‑MOSFET, TO‑220) | 2 | fan low‑side PWM | 30 | 1 + spare; **must be logic‑level**; see substitute below |
| 15 | Schottky **1N5819** | 3 | fan flyback | 10 | one across the fan (1N4007 ok if out) |
| 16 | I²C temp+RH breakout | 1 | **SHT31 / SHT40** ideal | 120 | matches firmware (0x44). RH catches condensation |
| 17 | Analog temp **LM35** (TO‑92) | 2 | sure‑thing fallback | 25 | every shop has it; heat it → watch fans ramp |
| 18 | **DS18B20** waterproof probe | 1 | 1‑wire | 45 | great as the battery/modem hot‑spot probe |
| 19 | LM2596 buck module (adj.) | 1 | 24/12 → 5 V | 35 | dedicated **fan 5 V** rail (caveat §0a) if no 2nd bench PSU |
| 13 | Ventilador 5 V, 40–60 mm, **3 hilos** | 1 | 3 hilos = tiene tacómetro | 60 | un ventilador de extracción; de 3 hilos para que PB10 lea RPM. Tomar un 2º como repuesto si es barato |
| 14 | **IRLZ44N** (N-MOSFET de nivel lógico, TO-220) | 2 | PWM lado bajo del ventilador | 30 | 1 + repuesto; debe ser de nivel lógico; ver sustituto abajo |
| 15 | Schottky **1N5819** | 3 | flyback del ventilador | 10 | uno en paralelo con el ventilador (1N4007 sirve si no hay) |
| 16 | Breakout I²C temp+HR | 1 | **SHT31 / SHT40** ideal | 120 | coincide con el firmware (0x44). La HR detecta condensación |
| 17 | Temperatura analógica **LM35** (TO-92) | 2 | respaldo seguro | 25 | lo tienen en todas las tiendas; calentarlo → ver rampar los ventiladores |
| 18 | Sonda **DS18B20** sumergible | 1 | 1-wire | 45 | excelente como sonda de punto caliente de batería/módem |
| 19 | Módulo buck LM2596 (ajustable) | 1 | 24/12 → 5 V | 35 | riel de **5 V del ventilador** dedicado (salvedad §0a) si no hay 2ª fuente de banco |
**Thermal subtotal ≈ 260 MXN** (one fan + driver + one temp option). Grab #13–15 for the fan, and **one** temperature option
(#16 ideal, else #17/#18).
**Subtotal térmico ≈ 260 MXN** (un ventilador + driver + una opción de temperatura). Tomar #13–15 para el ventilador y una opción de temperatura (#16 ideal; si no, #17/#18).
---
## 3. Sustituciones (el inventario de la tienda varía — todas funcionan)
## 3. Substitutions (shop stock varies — these all work)
| If they're out of… | Buy instead | Catch |
| Si no tienen… | Comprar en su lugar | Detalle |
|---|---|---|
| IRLZ44N (logic‑level FET) | **2N2222A** (TO‑92) or **TIP120** (Darlington) | BJT: add 1 kΩ base resistor; fine for a <0.5 A fan. **Plain IRF540/IRFZ44 won't fully turn on from 3.3 V — avoid.** |
| SHT31/SHT40 I²C breakout | **BME280/BMP280** (I²C, common) | address 0x76/0x77 → small firmware change |
| Any I²C sensor | **LM35** (analog) or **DS18B20** (1‑wire) | not I²C → firmware reads ADC / 1‑wire instead (I'll patch it) |
| IRF9540 P‑MOSFET | keep your original, or **2N2222 high‑side** is awkward — ask for any P‑channel ≥30 V | gate fully pulled to GND by the 2N3904, so a standard P‑FET is OK here |
| 1N5819 Schottky | **1N4007** | slightly slower; fine at fan PWM |
| IRLZ44N (FET de nivel lógico) | **2N2222A** (TO-92) o **TIP120** (Darlington) | BJT: añadir resistencia de base de 1 kΩ; bien para un ventilador < 0.5 A. **Un IRF540/IRFZ44 común no enciende del todo con 3.3 V — evitar.** |
| Breakout I²C SHT31/SHT40 | **BME280/BMP280** (I²C, común) | dirección 0x76/0x77 → cambio pequeño de firmware |
| Cualquier sensor I²C | **LM35** (analógico) o **DS18B20** (1-wire) | no es I²C → el firmware lee ADC / 1-wire en su lugar (parche de firmware) |
| P-MOSFET IRF9540 | conservar el original; un **2N2222 en lado alto** es incómodo — pedir cualquier canal P ≥ 30 V | el gate lo lleva a GND por completo el 2N3904, así que un P-FET estándar sirve aquí |
| Schottky 1N5819 | **1N4007** | un poco más lento; bien a la PWM del ventilador |
---
## 4. Orden de bring-up (para que la lista se corresponda con acciones)
## 4. Bring‑up order (so the list maps to actions)
1. **Solo USB** — flashear v2.2, abrir serie a 115200. Confirmar líneas `BOOT/COLS/TLM` **y un `$PHLG,...*CS` cada 30 s**. (Sin partes externas — esto prueba el firmware.)
2. **LED en PB0** vía 330 Ω → observar que los códigos de parpadeo cambien con el estado.
3. Interruptor de carga — 2N3904 + IRF9540 + 1 kΩ (base) + 10 kΩ (pull-up de gate) desde un riel de 5 V; poner un LED+330 Ω en la salida conmutada. Conmutar: confirmar OFF al reset, ON cuando PA1 lo maneja. (Este es el corazón de la recuperación.)
4. Divisores de sensado — dos de 10 kΩ cada uno (÷2) hacia **PA0** (batería vía 18650) y **PA4** (riel 5 V); un pot de 10 kΩ hacia **PA5** (ignición). Barrerlos y ver `veh`/`ign` cambiar en el TLM con histéresis/debounce.
5. Ventilador — PA6 → gate (220 Ω) del IRLZ44N → ventilador(−); diodo de flyback en paralelo con el ventilador; 100 kΩ gate→GND. Verlo girar/rampar; hilo de tacómetro → pull-up 10 kΩ a 3V3 → PB10 → RPM en el log; **desconectar el ventilador → `FAN_FAULT`**.
6. Temperatura — breakout I²C en PB6/PB7 (+4.7 kΩ pull-ups), o LM35 en un pin ADC. Calentarlo → los ventiladores rampan según la curva 45→70 °C; a 75 °C entra el derate térmico existente.
1. **Just USB** — flash v2.2, open serial @115200. Confirm `BOOT/COLS/TLM` lines **and a
`$PHLG,...*CS` every 30 s**. (No external parts — this proves the firmware.)
2. **LED on PB0** via 330 Ω → watch the blink codes change with state.
3. **Load switch** — 2N3904 + IRF9540 + 1 kΩ (base) + 10 kΩ (gate pull‑up) from a 5 V rail;
put an LED+330 Ω on the switched output. Toggle: confirm **OFF at reset**, ON when PA1
drives. (This is the heart of recovery.)
4. **Sense dividers** — two 10 kΩ each (÷2) into **PA0** (battery via 18650) and **PA4**
(5 V rail); a 10 kΩ pot into **PA5** (ignition). Sweep them and watch `veh`/`ign` flip in
the TLM with hysteresis/debounce.
5. **Fan** — PA6 → gate (220 Ω) of IRLZ44N → fan(−); flyback diode across the fan;
100 kΩ gate→GND. Watch it spin/ramp; tach wire → 10 kΩ pull‑up to 3V3 → PB10 →
RPM in the log; **unplug the fan → `FAN_FAULT`**.
6. **Temperature** — I²C breakout on PB6/PB7 (+4.7 kΩ pull‑ups), or LM35 on an ADC pin.
Heat it → fans ramp per the 45→70 °C curve; at 75 °C the existing thermal derate kicks in.
---
## 5. Wiring cheat‑sheet (Blackpill side)
## 5. Hoja de cableado (lado Blackpill)
```
PA0 ← BAT ÷2 (10k/10k) from 18650+ PA6 → 220Ω → IRLZ44N gate; fan(−); 1N5819 ∥ fan
PA4 ← 5V ÷2 (10k/10k) from 5V rail PB10 ← fan tach, 10k pull-up → 3V3 (1k series)
PA5 ← IGN ÷2 (10k/10k) from pot/switch PB6/PB7 → I²C SCL/SDA (+4.7k each → 3V3)
PA1 → 1k → 2N3904 base; collector → IRF9540 PB0 → 330Ω → LED → GND
gate; 10k gate→5V; drain → switched (PA7/PB12 left free — 2nd fan if ever needed)
5V → stack (use an LED load to test)
GND/5V/3V3 rails common; fan 5V from a SEPARATE 5V (LM2596 or 2nd PSU) — not the stack rail.
PA0 ← BAT ÷2 (10k/10k) desde 18650+ PA6 → 220Ω → gate IRLZ44N; ventilador(−); 1N5819 ∥ ventilador
PA4 ← 5V ÷2 (10k/10k) desde riel 5V PB10 ← tacómetro, pull-up 10k → 3V3 (1k en serie)
PA5 ← IGN ÷2 (10k/10k) desde pot/interr. PB6/PB7 → I²C SCL/SDA (+4.7k cada uno → 3V3)
PA1 → 1k → base 2N3904; colector → gate PB0 → 330Ω → LED → GND
IRF9540; 10k gate→5V; drain → 5V (PA7/PB12 libres — 2º ventilador si algún día hace falta)
conmutado → etapa (LED como carga)
Rieles GND/5V/3V3 comunes; 5 V del ventilador desde una fuente de 5 V SEPARADA (LM2596 o 2ª fuente) — no del riel de la etapa.
```
---
## 6. Nota sobre el sensor de temperatura y el firmware
## 6. Note on the temp sensor + firmware
The v2.2 firmware reads **I²C SHT40 (0x44) + TMP102 (0x48)**. Whatever you bring back:
- **SHT31/SHT40** → works as‑is (SHT40) or a 1‑line address tweak (SHT31).
- **BME280** → change address + read call.
- **LM35 / DS18B20** → analog / 1‑wire; tell me which and I'll patch `buildPHLG()` +
the fan‑curve input to read it. For *tomorrow's* bring‑up the fan loop can also be
driven off the **MCU‑internal** temp (already in firmware) — heat the whole board and
the derate still triggers, so you can prove the fan path even before the sensor arrives.
El firmware v2.2 lee **I²C SHT40 (0x44) + TMP102 (0x48)**. Según lo que se consiga:
## Related
- **3-board PROTO BOM (use this for bring-up):** `watchdog-protoboard-BOM-3boards.xlsx` (engineering, ≈MXN 5,341) + `watchdog-LISTA-DE-COMPRAS-ES.xlsx` (plain-Spanish shop list). **v3 adds:** reset (on-board + external), 4-LED battery gauge, power-cutoff switch, and battery backup (proto: TP4056+MT3608+OR-diodes+NTC; PCB: **LTC4040**). Canonical electrical state: [[03-Architecture-Hardware/watchdog-electrical-design-state|watchdog-electrical-design-state.md]].
- [[03-Architecture-Hardware/watchdog-pcb-v3-bom|v3 BOM (production + bench, xlsx)]] ·
[[03-Architecture-Hardware/watchdog-pcb-v3-design|v3 design (pin map, sub‑circuits)]] ·
`04-Source-Code/firmware/blackpillrtkcode_v2/blackpillrtkcode_v2.ino`
- **SHT31/SHT40** → funciona tal cual (SHT40) o con un ajuste de dirección de una línea (SHT31).
- **BME280** → cambiar dirección + llamada de lectura.
- **LM35 / DS18B20** → analógico / 1-wire; se parcha `buildPHLG()` + la entrada de la curva del ventilador para leerlo. Para el bring-up inmediato el lazo del ventilador también puede manejarse con la temperatura interna del MCU (ya está en el firmware) — calentar toda la tarjeta y el derate se dispara igual, así que se puede probar el camino del ventilador antes de que llegue el sensor.
## Relacionados
- **BOM PROTO de 3 tarjetas (usar para el bring-up):** `watchdog-protoboard-BOM-3boards.xlsx` (ingeniería, ≈ MXN 5,341) + `watchdog-LISTA-DE-COMPRAS-ES.xlsx` (lista de compras en español llano). **v3 añade:** reset (en tarjeta + externo), indicador de batería de 4 LEDs, interruptor de corte de energía y respaldo de batería (prototipo: TP4056+MT3608+diodos OR+NTC; PCB: **LTC4040**). Estado eléctrico canónico: `watchdog-electrical-design-state.md` (repo).
- `watchdog-pcb-v3-bom` (BOM v3 producción + banco, xlsx) · `watchdog-pcb-v3-design` (diseño v3: mapa de pines, subcircuitos) · `04-Source-Code/firmware/blackpillrtkcode_v2/blackpillrtkcode_v2.ino` — todos en el repo.
- Lo que siguió: [Bring-up del prototipo v3](historico-proto-bench-v3.md) → [Bring-up de la EinarBoard 1.0](einarboard-1.0-bringup.md).
## Historial de revisiones
| Versión | Fecha | Cambios |
|---|---|---|
| 1.0 | 2026-06-22 | Lista original (inglés); nota de sustitución 03-jul. |
| 1.1 | 2026-09-29 | Traducción al español, encabezado uniforme y enlaces. Sin cambios técnicos. |

View File

@ -1,182 +1,124 @@
# Prueba de banco — módem 4G en modo batería (fw 0.5.7 → 0.6.0)
---
title: "Prueba de banco — módem 4G en modo batería"
tags: [project-drogheda, hbox, procedimiento, bateria, modem, ltc4040, v5, v4, firmware]
date: 2026-09-26
project: Project Drogheda
author: Helgen Technologies
version: 1.3
---
!!! danger "Noche 26/27-sep con 0.5.8: módem oscuro al amanecer (vbat 3.50 V, F9P vivo, LEDs de carga apagados)"
Al volver los 24 V el módem siguió oscuro; solo un reset (SW1/P10) o `SW4G1` lo levantó. Causa más probable: el recovery de enlace
seguía armado en batería y, sin GGA durante el silencio del ahorro, «RTK perdido 15 min» disparó un ciclo de etapa **en batería**
(buscar `RECOVERY` / `rec=1` en la captura, o `$PHEV RECOVERY` en el servidor). 0.5.8 queda retirada; **0.5.9** no cicla nunca en
batería, resetea al volver el 5 V tras ≥ 10 s de respaldo, corre continuo (sin ahorro) y añade la vigilancia del módem.
# Prueba de banco — módem 4G en modo batería
!!! success "0.6.0 — prueba del cargador (antes de la corrida de batería, misma unidad, paquete bajo)"
1. 24 V + etapa ON, consola abierta. En los primeros 120 s `STAT` dice `carga=HOLDOFF`; luego `carga=PROVING n/30s` y a los ~150 s
`EVT CARGA ON: riel 5.xx V estable 30 s`. En el siguiente `STAT`: `ltc=CARGANDO`; en el monitor la unidad muestra 🔌 CARGANDO.
2. Multímetro en P2 (riel del vehículo) 10 min: anotar mínimo visto. Si el riel cae bajo 4.90 V durante una ráfaga LTE, la consola
dice `CARGA cortada … enfriamiento 60 s` y `carga=COOLDOWN faltan Ns`; luego reintenta. Anotar `cortes=` al cabo de 1 h y el `vbat`
inicial y final (debe subir). Enfriamientos que llegan a 30 min = la fuente no aguanta 2.4 A + etapa → V5.6 o fuente de 4 A.
3. Quitar 24 V: `carga=BATT`, `CARGA OFF: BATT` (nunca carga en batería). Volver 24 V: reset (0.5.9), y a los ~150 s vuelve a cargar.
!!! abstract "Para quién · Cuándo · Tiempo · Necesitas"
- Para quién: laboratorio QRO.
- Cuándo: al validar un firmware nuevo en una unidad V5.5 completa, o cuando una unidad en batería deja de reportar. V4: usa el [procedimiento V4](v4-prueba-fw-0.5.6.md) y su [acta](../formularios/v4.html) (en la V4 el USB de la Blackpill alimenta el riel de 5 V y la prueba en batería no vale con un cable normal).
- Tiempo: ~45 min por unidad; la aceptación (§2) incluye una noche completa.
- Necesitas: unidad completa con batería, fuente de 24 V, laptop grabando la consola, dos multímetros, monitor abierto, [acta de esta prueba](../formularios/prueba-bateria.html).
!!! success "Prueba de aceptación y calibración de 0.5.9 (misma unidad, consola abierta) — vale igual para 0.6.0"
1. 24 V + ignición, módem registrado, RTK fix. 5 min. Anotar de 3–4 `STAT`: `sag5=` (nivel «vivo en 24 V»), `rtcm_age=` (pocos s), `sta=`.
2. Quitar 24 V. 20 min. Anotar de 3–4 `STAT`: `sagb=` (nivel «vivo en batería»); `modem=vivo`; el módem sigue con LEDs; **no debe
aparecer ninguna línea `RECOVERY`**; el monitor sigue viendo la unidad con `pwr=BATT`.
3. Matar el módem a propósito (en batería): `P` (etapa OFF) y luego `P` + `Y` (etapa ON desde batería) → F9P vivo, módem oscuro. 3 min:
`rtcm=none`, `sagb` cae al piso, `flat` sube y a las 4 ventanas `EVT MODEM SOSPECHOSO` + `$PHEV MODEM_DARK`. Anotar `sagb` de esas ventanas.
4. Volver los 24 V: `5 V de vuelta … reset del MCU`, reinicio, etapa ON a los ~3 s, módem enciende; tras 2 min `modem=vivo`.
5. Noche completa en batería desde 24 V (sin tocar nada). En la mañana: módem vivo antes de volver los 24 V, y `STAT`/monitor con la hora
de corte 3.40 V si llegó (`SLEEP`) → autonomía real.
!!! danger "No se hace"
No cambies el firmware, no muevas JP2/JP3/JP4 ni el trimmer del SD-15B: la prueba vale porque la unidad está como en campo. Nunca conectes la fuente de banco a P4 con la batería puesta.
Con los `sag5`/`sagb` de 1–3 se fijan `MODEM_SAG5_V` / `MODEM_SAGB_V` para 0.5.10 (auto-reset en 24 V; reset condicional al volver el 5 V).
## 1. Cargador (0.6.0)
!!! success "Resultado 26-sep: hipótesis A confirmada — y cerrada (procedimiento de 0.5.8, retirado)"
Con 0.5.7 en batería **ningún** encendido de etapa arrancó el módem (`P`, despertar, reset por `R`/P10); con 24 V todos;
y `SW4G1` con la etapa ya encendida sí. Es el riel del boost (4.6 V en `SW_IN`) hundido por la ráfaga de arranque del módem:
el buck de `3V3_MODEM` (mínimo 4.5 V) cae y el PMIC del módem aborta sin reintentar. **No tiene arreglo por firmware en V5.5/V4.**
Por eso **0.5.8 CAMPO no apaga el módem en batería** (respaldo continuo con ahorro: ráfaga de posición cada 10 min, `$PHLG`
cada 3 min). **Prueba de aceptación de 0.5.8** (misma unidad, consola abierta, [acta](../formularios/prueba-bateria.html)):
Misma unidad, paquete bajo, antes de la corrida en batería.
1. 24 V + etapa ON, consola abierta. Los primeros 120 s `STAT` dice `carga=HOLDOFF`; luego `carga=PROVING n/30s` y a los ~150 s `EVT CARGA ON: riel 5.xx V estable 30 s`. Siguiente `STAT`: `ltc=CARGANDO`; el monitor muestra 🔌 CARGANDO.
2. Multímetro en P2 durante 10 min; anota el mínimo. Si el riel baja de 4.90 V en una ráfaga LTE: `CARGA cortada … enfriamiento 60 s`, `carga=COOLDOWN faltan Ns`, y reintenta. Anota `cortes=` a la hora y `vbat` inicial y final (debe subir). Enfriamientos que llegan a 30 min: la fuente no da 2.4 A + etapa; V5.6 o fuente de 4 A.
3. Quita 24 V: `carga=BATT`, `CARGA OFF: BATT` (nunca carga en batería). Al volver 24 V: reset y a los ~150 s carga otra vez.
## 2. Aceptación (0.5.9 y 0.6.0)
Misma unidad, consola abierta.
1. 24 V + ignición, módem registrado, RTK fix, 5 min. De 3–4 `STAT` anota `sag5=` (nivel "vivo en 24 V"), `rtcm_age=` (pocos s) y `sta=`.
2. Quita 24 V, 20 min. Anota `sagb=` de 3–4 `STAT` ("vivo en batería"). Esperado: `modem=vivo`, LEDs del módem encendidos, ninguna línea `RECOVERY`, el monitor ve la unidad con `pwr=BATT`.
3. Mata el módem a propósito en batería: `P` (etapa OFF) y `P` + `Y` (ON desde batería) → F9P vivo, módem oscuro. En 3 min: `rtcm=none`, `sagb` al piso, `flat` sube y a las 4 ventanas `EVT MODEM SOSPECHOSO` + `$PHEV MODEM_DARK`. Anota `sagb` de esas ventanas.
4. Vuelve 24 V: `5 V de vuelta … reset del MCU`, etapa ON a los ~3 s, el módem enciende; a los 2 min `modem=vivo`.
5. Noche completa en batería desde 24 V, sin tocar. En la mañana: módem vivo antes de volver 24 V y hora del corte de 3.40 V (`SLEEP`) si llegó: autonomía real.
Con `sag5`/`sagb` de 1–3 se fijan `MODEM_SAG5_V` / `MODEM_SAGB_V` para 0.5.10 (auto-reset en 24 V; reset condicional al volver el 5 V).
## 3. Hallazgos 25–27 sep
- 26-sep (0.5.7), hipótesis A confirmada: en batería ningún encendido de etapa arrancó el módem (`P`, despertar, reset por `R`/P10); con 24 V todos; `SW4G1` con la etapa encendida sí. El boost (4.6 V en `SW_IN`) se hunde con la ráfaga de arranque del módem, el buck de `3V3_MODEM` (mínimo 4.5 V) cae y el PMIC del módem aborta sin reintentar. No tiene arreglo por firmware en V5.5/V4; se corrige en V5.6. Por eso el firmware de campo no apaga el módem en batería.
- Noche 26/27-sep (0.5.8): al amanecer `vbat` 3.50 V, F9P vivo, módem oscuro, LEDs de carga apagados. Al volver 24 V el módem siguió oscuro; solo SW1/P10 o `SW4G1` lo levantaron. Causa probable: el recovery de enlace seguía armado en batería; sin GGA en el silencio del ahorro, "RTK perdido 15 min" disparó un ciclo de etapa en batería (buscar `RECOVERY` / `rec=1` en la captura o `$PHEV RECOVERY` en el servidor). 0.5.8 retirada; 0.5.9 no cicla en batería, resetea al volver el 5 V tras ≥ 10 s de respaldo, corre continuo y vigila el módem.
??? note "Aceptación de 0.5.8 (retirada)"
1. 24 V + ignición: etapa ON a los ~3 s, módem registra, `MODOB ON` (clic de K1 ~13 s), el monitor ve la unidad con fix.
2. Quitar 24 V (dejar la batería): `V5 PERDIDO` → `BACKUP inicio` → `AHORRO en bateria`. **El módem sigue con sus LEDs encendidos.**
A los ~8 s: `AHORRO: rafaga #1 enviada … silencio 592 s`. En el monitor: badge de batería «~10 min», sin alarma.
3. Esperar 10 min: `AHORRO: rafaga #2` y la posición llega al monitor (el módem seguía registrado; no hubo encendido nuevo).
Entre ráfagas, a los 3 y 6 min, un `$PHLG` (el monitor sigue viendo salud). Anotar `vbat` de cada `STAT`.
4. Volver los 24 V con el módem vivo: `V5 PRESENTE` → `BACKUP fin` → `AHORRO fin`. **Sin reset** (la etapa venía encendida desde 24 V).
5. Caso reset: con 24 V quitados, pulsar P10 (o `R`): la etapa **no** se reenciende en batería (por diseño). Volver los 24 V:
reset del MCU (`5 V de vuelta con etapa apagada`) y a los ~4 s arranca todo, módem incluido.
6. Soak opcional hasta el corte de 3.40 V (`SLEEP`): anotar la hora de inicio y de corte → autonomía real (estimada 30–35 h).
2. Quitar 24 V con batería: `V5 PERDIDO` → `BACKUP inicio` → `AHORRO en bateria`; el módem sigue encendido. A los ~8 s `AHORRO: rafaga #1 enviada … silencio 592 s`; en el monitor, badge de batería "~10 min" sin alarma.
3. A los 10 min `AHORRO: rafaga #2` y la posición llega al monitor. A los 3 y 6 min, un `$PHLG`. Anotar `vbat` de cada `STAT`.
4. Volver 24 V con el módem vivo: `V5 PRESENTE` → `BACKUP fin` → `AHORRO fin`, sin reset.
5. Sin 24 V, pulsar P10 (o `R`): la etapa no se reenciende en batería. Al volver 24 V: reset (`5 V de vuelta con etapa apagada`) y a los ~4 s arranca todo.
6. Opcional hasta el corte de 3.40 V (`SLEEP`): autonomía real (estimada 30–35 h).
Lo que sigue abajo es el procedimiento original de 0.5.7 (diagnóstico); se conserva por trazabilidad.
## 4. Corridas de diagnóstico (0.5.3–0.5.7)
**Versión:** 1.0 · 26-sep-2026 · **Para:** laboratorio QRO · **Dura:** ~45 min por unidad · **Registro:** [**▶ acta de esta prueba**](../formularios/prueba-bateria.html) — trae las tres tablas para llenar en el teléfono o la laptop, y ahí se adjunta la captura de consola.
Con estas corridas se separaron las hipótesis A y B. Siguen siendo la forma de medir los rieles en batería en cualquier tarjeta.
!!! warning "¿Es una tarjeta V4? Usa su procedimiento y su acta"
En la V4 el USB de la Blackpill está unido al riel de 5 V de la tarjeta: con un cable normal la laptop alimenta la
tarjeta y la prueba en batería no vale. Para una V4 sigue [V4 — preparación y prueba con 0.5.6](v4-prueba-fw-0.5.6.md)
(puente, interruptores del simpleRTK2B, cable de consola sin 5 V) y regístrala en el [acta de prueba V4](../formularios/v4.html).
Síntoma original (0.5.3, ventana de 2 min cada 10 min): en batería la etapa enciende pero el módem nunca transmite; los LEDs UART del simpleRTK2B parpadean lento (~1/s, solo GGA saliendo) en lugar de rápido, justo después del clic de K1.
## Qué se está buscando
Con 24 V la unidad funciona bien: módem registrado, LEDs UART del simpleRTK2B en **parpadeo rápido**
(correcciones RTCM entrando + NMEA saliendo), se oye el **clic de K1** a los ~13 s y el monitor la ve.
En batería (0.5.3: ventana de 2 min cada 10 min) la unidad enciende la etapa, pero **el módem nunca llega a
transmitir**: los LEDs UART del simpleRTK2B parpadean **lento, ~1 por segundo** (solo la GGA saliendo, sin
correcciones) y el servidor no recibe nada. Se observó que el cambio ocurre **justo después del clic de K1**.
Hay dos explicaciones posibles y esta prueba las separa:
| Hipótesis | Qué la delataría |
| Hipótesis | La delata |
|---|---|
| **A · El riel se hunde.** En batería el módem cuelga del boost del LTC4040 (~4.79 V en MAIN5V), no de los 5.2–5.4 V del SD-15B. La ráfaga de registro LTE (~2 A) hunde el riel, el módem se reinicia y nunca termina de registrarse. | MAIN5V o SW_5V caen por debajo de ~4.4 V mientras el módem intenta registrarse; sus LEDs se apagan y reencienden. Falla **igual** con Modo B bloqueado. |
| **B · El camino por K1.** Con K1 conmutado (Modo B) la GGA llega al módem a través del MCU; si en batería esa ruta no entrega bien, el módem no manda GGA al caster y no recibe correcciones. | Con Modo B **bloqueado** (tecla `B`) el módem sí registra y aparecen las correcciones (parpadeo rápido). Los rieles se mantienen. |
| A · Riel hundido. En batería el módem cuelga del boost del LTC4040 (~4.79 V en MAIN5V), no de los 5.2–5.4 V del SD-15B; la ráfaga LTE (~2 A) lo hunde y el módem se reinicia | MAIN5V o SW_5V bajo ~4.4 V mientras registra; LEDs del módem se apagan y vuelven. Falla igual con Modo B bloqueado |
| B · Camino por K1. Con Modo B la GGA pasa por el MCU; si en batería no llega, no hay correcciones | Con Modo B bloqueado (`B`) el módem registra y hay parpadeo rápido; los rieles aguantan |
!!! note "El firmware no ve el riel de la batería"
`v5`/`v5min` de la consola y del `$PHLG` miden el **5 V del vehículo** (P2), no el riel del boost. En batería
leen ~0 y no dicen nada. Por eso **hay que medir con el multímetro**: la prueba no vale sin las lecturas.
`v5`/`v5min` miden el 5 V del vehículo (P2), no el boost: en batería leen ~0. Sin lecturas de multímetro la prueba no vale.
## Material
Montaje: unidad completa con batería, antenas y cielo; 24 V al GX16 (o P2); consola en el USB del HBOX (115200, CR+LF) grabando toda la sesión; multímetros en MAIN5V (U6 pin 1 / C32 / P11 pin 1), SW_5V (MOD1 pin 5 / C3) y 3V3_MODEM (J7 pin 1 / J8 pin 7), negro a GND; osciloscopio en 3V3_MODEM a 5 s/div si hay; monitor abierto; cronómetro. Teclas: `s` STAT · `v` puntos de medición · `B` Modo B permitido/bloqueado · `l` leyenda.
- La unidad completa (tarjeta V5 o V4 con **0.5.3**, simpleRTK2B, módem 4G con SIM, **batería conectada**),
antenas GNSS y LTE conectadas, antena GNSS con cielo (aunque sea ventana).
- Fuente de 24 V al GX16 (o al P2 según cómo esté armada la unidad). Un interruptor o simplemente desconectar.
- Laptop con terminal serie en el **USB del HBOX** (115200, CR+LF) **grabando a archivo** toda la sesión.
- **Multímetros** (dos, o uno y paciencia) en tres puntos: **MAIN5V** (U6 pin 1 / C32 — o P11 pin 1, que es lo mismo),
**SW_5V** (MOD1 pin 5 / C3) y, el que más importa, **3V3_MODEM** (zócalo XBee pin 1 = J7 pin 1 / J8 pin 7): es el que
alimenta al módem. Negro a GND. Si hay osciloscopio, mejor en 3V3_MODEM con 5 s/div.
- El monitor abierto en otra pantalla con la unidad ubicada.
- Cronómetro (el del teléfono).
### Corrida 0 — referencia con 24 V (5 min)
Teclas de consola que se usan: `s` = STAT ahora · `v` = puntos de medición · `B` = Modo B permitido/bloqueado · `l` = leyenda.
1. 24 V, consola grabando. Espera `STACK ON` y `MODOB ON` (~13 s, clic).
2. Anota LEDs del módem (cuál, color, ritmo), LEDs UART del simpleRTK2B (rápido), MAIN5V ≈ 5.2–5.4 V, SW_5V ≈ 5.0 V, y la unidad en el monitor con Salud y ⚡.
3. `s` y copia la línea `STAT`.
## Corrida 0 — referencia con 24 V (5 min)
Si la corrida 0 no sale limpia, detente: el problema no es la batería.
1. 24 V puesto, consola grabando. Esperar a `EVT … STACK ON`, luego a `MODOB ON` (~13 s; se oye el clic).
2. Anotar en la tabla: patrón de LEDs del módem (describir: cuál LED, color, rápido/lento/fijo), LEDs UART del
simpleRTK2B (**rápido** esperado), MAIN5V y SW_5V (esperado ≈ 5.2–5.4 V y ≈ 5.0 V), y que el monitor muestre la
unidad con Salud (`$PHLG`) y ⚡.
3. Teclear `s` y copiar la línea `STAT`.
### Corrida 0-bis — reset por software
Si la corrida 0 no sale limpia, **detenerse**: el problema no es la batería.
Con el módem oscuro en 24 V, tecla `R`. Si enciende igual que con P10, sigue con 1 y 4: en cada ventana debe verse `reset=SOFT` y `BACKUP tras reset SOFT … ventana AHORA`, y el módem encender solo. Si `R` no lo enciende, pasa al puente (abajo).
## Corrida 1 — batería con Modo B (la falla) (25 min)
### Corrida 1 — batería con Modo B (25 min)
1. Con todo funcionando, **quitar los 24 V** y arrancar el cronómetro. Consola: `V5 PERDIDO` → `BACKUP inicio … modo
reporte cada 10 min`. La etapa **sigue encendida** (esta primera ventana arranca con el módem ya registrado, así
que todavía transmite — no es la que interesa).
2. A los ~2 min: `DUTY reposo … etapa OFF`. Verificar con el multímetro que **SW_5V = 0 V** y que el módem **se apagó**
(LEDs apagados). Si el módem sigue encendido con SW_5V = 0, anotar y **avisar**: algo lo alimenta por otro lado
(¿USB conectado al simpleRTK2B o al módem?).
3. Esperar el despertar: `DUTY despertar #1 … etapa ON` a los ~10 min del paso 1. **Aquí empieza lo importante.**
Desde ese instante, durante los 2 minutos, registrar cada 15 s en la tabla:
- MAIN5V y SW_5V (el valor **más bajo** que se vea; los multímetros baratos promedian — anotar el mínimo que alcancen a leer),
- LEDs del módem (¿se apagan y reencienden? ¿llegan a parpadeo lento/fijo de "registrado"?),
- LEDs UART del simpleRTK2B (lento 1/s = sin correcciones · rápido = con correcciones),
- momento del **clic de K1** (consola: `MODOB ON`),
- línea `STAT` (teclear `s` a los 30 s y a los 90 s; interesan `vbat` y `vbatmin`).
4. En el monitor: ¿la unidad recibió algo en esa ventana? (fila actualizada, `$PHLG` con 🔋, o nada).
5. Dejar que cierre la ventana (`DUTY reposo`) y **no tocar**: se necesita una segunda ventana para la corrida 2.
1. Quita 24 V y arranca el cronómetro: `V5 PERDIDO` → `BACKUP inicio … modo reporte cada 10 min`. Esta primera ventana arranca con el módem registrado; no es la que interesa.
2. A los ~2 min, `DUTY reposo … etapa OFF`: SW_5V = 0 V y módem apagado. Si el módem sigue encendido con SW_5V = 0, anota y avisa (¿USB conectado al simpleRTK2B o al módem?).
3. `DUTY despertar #1 … etapa ON` a los ~10 min. Durante los 2 min, cada 15 s: mínimo de MAIN5V y SW_5V, LEDs del módem, LEDs UART del simpleRTK2B, momento del clic de K1 (`MODOB ON`), y `s` a los 30 y 90 s (`vbat`, `vbatmin`).
4. En el monitor: ¿llegó algo en esa ventana?
5. Deja cerrar la ventana sin tocar.
## Corrida 2 — batería SIN Modo B (25 min)
### Corrida 2 — batería sin Modo B (25 min)
1. Mientras la unidad está en reposo (etapa OFF), teclear `B` en la consola → debe responder `MODO B BLOQUEADO por
operador`. Ahora al despertar K1 **no** conmuta: el F9P habla directo con el módem.
2. Esperar `DUTY despertar #2` y repetir **exactamente** el registro del paso 3 de la corrida 1.
3. Resultado:
- **Si ahora el módem registra y el simpleRTK2B parpadea rápido** → hipótesis **B** (camino por K1). Anotarlo y
dejar la unidad así; ingeniería revisa el firmware.
- **Si sigue igual que en la corrida 1** → hipótesis **A** (riel). Seguir a la corrida 3.
4. Teclear `B` otra vez para dejar Modo B permitido.
1. En reposo, `B` → `MODO B BLOQUEADO por operador` (K1 no conmuta).
2. En `DUTY despertar #2` repite el registro de la corrida 1.
3. Módem registra y parpadeo rápido: hipótesis B; deja la unidad así y avisa a ingeniería. Igual que la corrida 1: hipótesis A, sigue a la 3.
4. `B` otra vez para permitir Modo B.
## Corrida 3 — solo si la 2 dio "A": ¿es la batería o es el boost? (20 min)
### Corrida 3 — batería o boost (20 min, solo si dio A)
1. 24 V puesto, etapa apagada (`P` la apaga si está encendida, o simplemente esperar el reposo). **Desconectar la batería** de su
conector y conectar en su lugar una **fuente de banco a 3.9 V con límite de 3 A** (respetar polaridad; medir antes de
conectar).
2. Repetir la corrida 1 (quitar 24 V, esperar el despertar, registrar los 2 min).
3. Resultado:
- **Funciona con la fuente** → el problema es el **paquete** (resistencia interna alta: celda caliente, vieja o descargada).
Anotar el voltaje de la batería en vacío y la temperatura que reporte `STAT` (`tbat`).
- **Falla igual** → el problema es la **etapa de boost** (LTC4040 / capacitancia en MAIN5V). Es hardware; no cambiar nada,
reportar las lecturas.
1. Con 24 V y etapa apagada, desconecta la batería y pon en su lugar una fuente a 3.9 V, límite 3 A (mide polaridad antes).
2. Repite la corrida 1.
3. Funciona con la fuente: el paquete tiene resistencia interna alta (caliente, viejo o descargado); anota su voltaje en vacío y `tbat`. Falla igual: boost (LTC4040 / capacitancia en MAIN5V); reporta las lecturas sin cambiar nada.
## Corrida 4 — regreso de los 24 V sin reset (5 min)
### Corrida 4 — regreso de 24 V (5 min)
Observado el 25-sep: con la unidad en batería y el módem oscuro, al volver los 24 V el simpleRTK2B revive pero el
módem **sigue oscuro hasta un reset de la tarjeta**. Medir **3V3_MODEM** en ese estado: si marca ~3.3 V con el módem
apagado, el módem está en *latch* por subvoltaje (no rearranca hasta que se le quita la alimentación). La causa (26-sep): con la etapa OFF el MCU seguía
sosteniendo el riel del módem por el UART del GNSS (PA2 → simpleRTK2B → DIN_4G), así que el módem nunca veía un
power-on reset. **0.5.5** puso ese UART en alta impedancia y cicla la etapa 10 s al volver el 5 V — **no bastó**: en reposo
`3V3_MODEM` sigue en ~1 V (C43+, 26-sep), el módem no ve un apagado real y no rearranca.
25-sep: en batería con el módem oscuro, al volver 24 V el simpleRTK2B revive y el módem sigue oscuro hasta un reset. Mide 3V3_MODEM: ~3.3 V con el módem apagado = latch por subvoltaje. Causa (26-sep): con la etapa OFF el MCU sostenía el riel del módem por el UART del GNSS (PA2 → simpleRTK2B → DIN_4G). 0.5.5 dejó ese UART en alta impedancia y cicla la etapa 10 s al volver el 5 V; no bastó (3V3_MODEM en reposo ~1 V en C43+). Lo revive un pulso en `SW4G1` o un reset por P10 con 24 V; un ciclo de etapa (`P`/`P`+`Y`, 5–60 s) nunca. Por eso 0.5.7 resetea el MCU en cada despertar y al volver el 5 V.
**Lo que sí lo revive (confirmado 26-sep): un pulso en `SW4G1`** y también **un reset del MCU por P10 con 24 V** —
mientras que un ciclo de etapa desde el firmware (`P`/`P`+`Y`, 5–60 s) nunca lo enciende. Por eso **0.5.7** hace en cada
despertar de batería y en cada regreso del 5 V un reset del MCU (arranca en ~4 s, ventana de inmediato).
**Corrida 0-bis (antes de la corrida 1):** con el módem oscuro en 24 V, tecla **`R`** (reset por software). Si el módem
enciende igual que con P10 → seguir con las corridas 1 y 4: en cada ventana debe verse el banner de arranque con
`reset=SOFT` y `BACKUP tras reset SOFT … ventana AHORA`, y el módem encender solo. Si `R` **no** lo enciende, el reset por
pin hace algo que el reset por software no hace: se pasa al puente.
**Respaldo — el puente (0.5.6+, sigue en el firmware):** 3 s después de cada encendido de etapa el MCU pulsa el reset del
módem por el pin libre P7 de `U13` (PCF8574). Eso necesita un **puente en la tarjeta**:
Puente (0.5.6+, sigue en el firmware): 3 s después de cada encendido de etapa el MCU pulsa el reset del módem por U13 P7.
```
U13 pin 12 (P7) ──|<── SW4G1 pad 1 (MODEM_RST) diodo Schottky de señal BAT54 (o BAT85/BAT43/1N5711) — no 1N5819
cátodo ánodo
```
1. Con la etapa ON, teclear **`M`**: el multímetro en `SW4G1` pad 1 debe caer a < 0.4 V durante 0.5 s y los LEDs del
módem apagar y volver. Si no, el puente no está.
2. Repetir la **corrida 1** (batería) y la **corrida 4** (regreso de 24 V sin reset): en cada ventana debe verse
`EVT … MODEM_RST stack_on` a los 3 s y el módem registrar solo.
3. En reposo, anotar además **`SW_5V` en C3(+)** (no en Q1) y si el LED POWER del simpleRTK2B está encendido; y confirmar
que **no hay cable en el USB-C J9** (es el USB del módem: su VBUS llega al módulo). Eso dice quién sostiene el ~1 V.
1. Etapa ON, tecla `M`: `SW4G1` pad 1 cae a < 0.4 V durante 0.5 s y los LEDs del módem se apagan y vuelven. Si no, falta el puente.
2. Repite las corridas 1 y 4: en cada ventana `EVT … MODEM_RST stack_on` a los 3 s y el módem registra solo.
3. En reposo anota SW_5V en C3(+) (no en Q1) y si el LED POWER del simpleRTK2B enciende. Confirma que no hay cable en J9 (USB del módem; su VBUS llega al módulo).
## Registro
### Registro
Todo se llena en el **[acta de la prueba](../formularios/prueba-bateria.html)**: configuración, corrida 0, la tabla de
2 minutos de cada despertar (una por corrida), el resultado A/B y el archivo completo de la consola. Queda en el
expediente de la unidad. Si no hay señal en el laboratorio, la misma tabla en papel y se captura después:
Todo va en el [acta de la prueba](../formularios/prueba-bateria.html): configuración, corrida 0, la tabla de 2 min de cada despertar, resultado A/B y log completo. Sin señal en el laboratorio, en papel:
| t | MAIN5V (mín) | SW_5V (mín) | 3V3_MODEM (mín) | LEDs módem | LEDs UART simpleRTK2B | K1 | `vbat` / `vbatmin` | ¿Servidor recibió? |
| t | MAIN5V (mín) | SW_5V (mín) | 3V3_MODEM (mín) | LEDs módem | LEDs UART simpleRTK2B | K1 | `vbat` / `vbatmin` | ¿Llegó al servidor? |
|---|---|---|---|---|---|---|---|---|
| 0:15 | | | | | | | | |
| 0:30 | | | | | | | | |
@ -185,6 +127,12 @@ expediente de la unidad. Si no hay señal en el laboratorio, la misma tabla en p
| 1:30 | | | | | | | | |
| 2:00 | | | | | | | | |
!!! danger "Lo que NO se hace"
No cambiar el firmware, no mover puentes (JP2/JP3/JP4), no tocar el trimmer del SD-15B. La prueba sirve porque
la unidad está **como en campo**. Y nunca conectar la fuente de banco a la batería con la batería puesta.
## Historial de revisiones
| Versión | Fecha | Cambios |
|---|---|---|
| 1.1 | 2026-09-27 | Resultado 26-sep (hipótesis A), aceptación 0.5.8 → 0.5.9 y prueba del cargador 0.6.0. |
| 1.2 | 2026-09-29 | Reordenado: estado actual primero. |
| 1.3 | 2026-09-29 | Edición breve; los hallazgos 26/27-sep viven aquí (Descargas solo los resume). |
Versiones anteriores en git.

View File

@ -1,127 +1,80 @@
# Reflasheo de unidades HBOX — solo en taller
**Para:** Alan y Daniel (ejecución) · ingeniería (generación del binario)
**Versión:** 1.0 · 18-sep-2026 · **Responsable:** Leo Rodríguez
---
title: "Reflasheo de unidades HBOX — solo en taller"
tags: [project-drogheda, hbox, procedimiento, reflasheo, firmware, dfu, v3, v4, v5]
date: 2026-09-18
project: Project Drogheda
author: Helgen Technologies
version: 1.2
---
## 1. Cuándo se reflashea y cuándo no
# Reflasheo de unidades HBOX — solo en taller
Reflashear es una **prueba diagnóstica**, no una reparación: sirve para contestar *«¿el problema
desaparece con firmware nuevo?»*. Si la unidad tiene un corto, un conector roto o una batería
hinchada, el firmware no va a arreglar nada.
!!! abstract "Para quién · Cuándo · Tiempo · Necesitas"
- Para quién: técnicos de taller (Alan y Daniel); §5 es para ingeniería.
- Cuándo: unidad V3, V4 o V5.5 después del [diagnóstico en banco](diagnostico-banco.md), con las capturas ya subidas al acta.
- Tiempo: 20 min de flasheo + 10 min de verificación.
- Necesitas: laptop con STM32CubeProgrammer o `dfu-util`, cable USB con datos, el `.bin` de la tarjeta desde [Descargas](../descargas/index.md) con SHA-256 verificado, unidad en la mesa alimentada solo por USB, [acta de reflasheo](../formularios/reflasheo.html).
!!! danger "Dos reglas que no se rompen"
**1 · Solo en taller, nunca sobre la máquina.** Un flasheo interrumpido deja la unidad muerta.
Si eso pasa en la mesa, se vuelve a intentar; si pasa arriba de un RTG, hay que bajarla otra vez.
Reflashear es una prueba diagnóstica ("¿desaparece la falla con firmware nuevo?"), no una reparación. Un corto, un conector roto o una batería hinchada no se arreglan con firmware.
**2 · Primero la evidencia, después el flasheo.** El flasheo borra la memoria del equipo
(temperatura máxima, recuperaciones, causa del último arranque) y sustituye el firmware que
estaba fallando. **Haz y sube las capturas del diagnóstico antes de tocar el botón.** El acta de
banco bloquea este paso hasta que el archivo de captura esté subido.
!!! warning "Reglas"
1. Solo en taller, nunca sobre la máquina. Un flasheo interrumpido deja la unidad muerta; en la mesa se reintenta, arriba de un RTG hay que bajarla otra vez.
2. Primero la evidencia. El flasheo borra la memoria del equipo (temperatura máxima, recuperaciones, causa del último arranque). Sube las capturas del diagnóstico antes; el acta de banco bloquea este paso hasta que estén.
3. Un binario por tarjeta ([tabla y reglas en Descargas](../descargas/index.md#firmware-del-hbox-que-binario-va-en-que-tarjeta)). Si no encuentras el `.bin` correcto, pregunta a ingeniería.
| Situación | ¿Reflashear? |
## 1. Cuándo sí y cuándo no
| Situación | Reflashear |
|---|---|
| Ya hiciste el diagnóstico y las capturas están subidas | **Sí** |
| La unidad tiene corto, humedad o daño visible | No — enviar a Querétaro |
| Diagnóstico hecho y capturas subidas | Sí |
| Corto, humedad o daño visible | No: a Querétaro |
| No sabes qué firmware trae | Primero anótalo (línea `BOOT` de la captura) |
| La unidad está instalada en la máquina | **No.** Se desmonta primero |
| No encuentras el `.bin` correcto en Descargas | No inventes: pregunta a ingeniería |
| Unidad instalada en la máquina | No: se desmonta primero |
| El binario de esa tarjeta dice "pendiente" en Descargas | No: flasheo detenido hasta que ingeniería lo publique (§5) |
## 2. Qué binario le toca a cada unidad
## 2. Flasheo
Los binarios viven en **[Descargas](../descargas/index.md)**, con su versión y su SHA256. Cada
generación de tarjeta tiene el suyo y **no son intercambiables**: la polaridad del control de carga
está invertida entre generaciones, así que un binario equivocado puede dejar la batería cargando
cuando debería estar cortada.
1. Anota el firmware que traía (línea `BOOT,…,fw=3.0.3,…` de la captura) en el acta. Sin ese dato el reflasheo no sirve como prueba.
2. Verifica el SHA-256 del `.bin` ([cómo](../descargas/index.md#verifica-el-sha-256)).
3. USB del Blackpill (o J11 en V5) a la laptop.
4. Modo DFU: mantén BOOT0, pulsa y suelta RESET (NRST), suelta BOOT0. Debe aparecer `STM32 BOOTLOADER` (`0483:DF11`). Si no, repite; si sigue sin salir, cambia el cable (muchos son solo de carga) o el MCU no arranca.
5. Graba en `0x08000000`: STM32CubeProgrammer (USB/DFU → Open file → Download) o `dfu-util -a 0 -s 0x08000000:leave -D hbox-tarjetaV3_X.Y.Z.bin`.
6. Espera "Download complete" y "Verify successful". Si falla a la mitad, no desconectes: repite 4 y 5.
7. Pulsa RESET.
| Generación de tarjeta | Binario | Estado |
|---|---|---|
| **V3** — EinarBoard 1.0 (RTK-003, RTK-006, RTK-014), Blackpill | `hbox-tarjetaV3_4.0.0.bin` | ⚠ publicado, sin prueba de banco |
| **V4** — Blackpill + PCF8574/W5500/SC16IS752 | `hbox-tarjetaV4_0.6.0.bin` | ⚠ publicado, sin prueba de banco (mismo código que V5 + `board_v4.h`); 0.6.0 CAMPO = 0.5.9 + gobernador de carga; puente U13-P7 → SW4G1 opcional |
| **V5** — MCU soldado, lote de 15 | `hbox-v5-bringup_0.6.0.bin` | ⚠ vigente 27-sep (0.6.0 CAMPO: cargador con gobernador; el módem no se apaga en batería, sin ciclos de etapa en batería, reset al volver el 5 V; ver [Descargas](../descargas/index.md)) |
## 3. Verificación
Si el renglón dice *pendiente*, **no hay binario aprobado todavía**: el flasheo de esa generación
está detenido hasta que ingeniería lo publique (§6).
1. Puerto serie a 115200 grabando a archivo; pulsa RESET y captura el arranque.
2. Comprueba:
- [ ] Línea `BOOT` con la versión nueva en `fw=`.
- [ ] El LED parpadea (no apagado ni en parpadeo rápido permanente).
- [ ] Salen líneas `TLM,` cada pocos segundos.
- [ ] Ningún `EVT` de falla repitiéndose.
3. Deja correr 10 min con antenas: `state` llega a `RUN` y `link` sale de `SRCH`.
4. Sube esta captura al [acta de reflasheo](../formularios/reflasheo.html) junto con la de antes.
## 3. Qué necesitas
- Laptop con **STM32CubeProgrammer** (o `dfu-util`).
- Cable **USB con datos** (muchos cables de carga no llevan datos — si la laptop no ve nada, prueba otro).
- El `.bin` descargado del sitio, con su SHA256 verificado.
- La unidad **en la mesa**, energizada solo por el USB.
Verifica el archivo antes de flashear:
```bash
# macOS / Linux
shasum -a 256 hbox-tarjetaV3_X.Y.Z.bin
# Windows (PowerShell)
Get-FileHash .\hbox-tarjetaV3_X.Y.Z.bin -Algorithm SHA256
```
Debe coincidir **carácter por carácter** con el que publica `SHA256SUMS.txt`. Si no coincide,
descárgalo otra vez; si sigue sin coincidir, no lo uses y avisa.
## 4. El flasheo, paso a paso
1. **Anota el firmware que traía.** De la captura del diagnóstico, la línea `BOOT,…,fw=3.0.3,…`.
Va en el acta. Sin este dato el reflasheo no sirve como prueba.
2. Conecta el **USB del Blackpill** a la laptop.
3. **Entra a modo DFU:**
- Mantén presionado **BOOT0**.
- Presiona y suelta **RESET (NRST)**.
- Suelta **BOOT0**.
- En la laptop debe aparecer **«STM32 BOOTLOADER»** (identificador `0483:DF11`).
Si no aparece: repite la secuencia; si sigue sin salir, el cable no lleva datos o el MCU no arranca.
4. **Graba el binario** en la dirección **`0x08000000`**:
- *STM32CubeProgrammer* → conectar en **USB/DFU** → *Open file* → *Download*.
- o bien: `dfu-util -a 0 -s 0x08000000:leave -D hbox-tarjetaV3_X.Y.Z.bin`
5. Espera a **«Download complete»** y **«Verify successful»**. Si falla a la mitad, **no desconectes**:
repite el paso 3 y vuelve a grabar.
6. Presiona **RESET**.
## 5. Verificación — el flasheo no termina hasta aquí
1. Abre el puerto serie a **115200 baudios**, con **guardar a archivo**.
2. Presiona RESET otra vez y captura el arranque.
3. Comprueba:
- [ ] Aparece la línea `BOOT` con la **versión nueva** en `fw=`.
- [ ] El LED vuelve a parpadear (no se queda apagado ni en parpadeo rápido permanente).
- [ ] Empiezan a salir líneas `TLM,` cada pocos segundos.
- [ ] Ningún `EVT` de falla repitiéndose sin parar.
4. Deja correr **10 minutos** con antenas conectadas y vuelve a mirar: `state` debe llegar a `RUN`,
y `link` debe salir de `SRCH`.
5. **Sube esta captura al acta**, junto con la de antes del flasheo. Las dos juntas son la prueba de
si el firmware cambió algo.
| Resultado | Qué sigue |
| Resultado | Siguiente |
|---|---|
| Arranca y se estabiliza en `RUN` | Candidata a reinstalar — coordina con ICAVE |
| Arranca pero repite la misma falla | El firmware no era la causa → enviar a Querétaro |
| Ya no arranca después del flasheo | Repite DFU con otro cable; si sigue, enviar a Querétaro |
| Arranca y queda en `RUN` | Candidata a reinstalar; coordina con ICAVE |
| Repite la misma falla | El firmware no era la causa: a Querétaro |
| Ya no arranca | Repite DFU con otro cable; si sigue, a Querétaro |
## 6. Para ingeniería — cómo se genera el binario
## 4. V5 y V4
*(Esta sección no es para el técnico: es para quien publica el `.bin`.)*
Mismo DFU. V5: por J11 ([flasheo V5 §5](v5-prueba-y-flasheo.md#5-flasheo-por-usb-dfu-j11-5-min)). V4: solo con USB, sin 24 V y sin batería ([procedimiento V4](v4-prueba-fw-0.5.6.md)).
Hoy el repositorio **no contiene binarios compilados de V3 ni de V4**. Los `.bin` están en
`.gitignore` a propósito. Y hay una diferencia importante entre las dos generaciones:
## 5. Para ingeniería — generar y publicar un binario
| Generación | Código fuente | Qué falta |
El repositorio no contiene binarios compilados de V3 ni V4 (`.bin` en `.gitignore`).
| Tarjeta | Código fuente | Falta |
|---|---|---|
| **V3** | ✅ `04-Source-Code/firmware/blackpillrtkcode_v4/` (4.0.0): la lógica de v3.0.3 + telemetría en banda | Probarlo en banco (RTK-003 / RTK-006) |
| **V4** | ✅ `hbox_v5_bringup/` (0.5.1) + `board_v4.h` — la V4 es la V5 en un Blackpill | Compilar para Blackpill y probarlo en banco |
| V3 | `04-Source-Code/firmware/blackpillrtkcode_v4/` (4.0.0): lógica de v3.0.3 + telemetría en banda | Prueba de banco (RTK-003 / RTK-006) |
| V4 | `hbox_v5_bringup/` + `board_v4.h` (la V4 es la V5 en un Blackpill) | Prueba de banco |
Un binario por tarjeta. `blackpillrtkcode_v3` (3.0.4) queda solo como referencia: es la lógica que corre hoy en campo pero sin telemetría en banda, así que el monitor no la ve.
`blackpillrtkcode_v3` (3.0.4) queda como referencia: es la lógica de campo sin telemetría en banda. V3 solo usa `<Arduino.h>` y `<math.h>`: basta el core STM32.
El buen dato es que V3 no depende de ninguna librería externa — solo `<Arduino.h>` y `<math.h>` —
así que basta el core de STM32.
Compilación reproducible con `arduino-cli` (verifica el FQBN contra tu instalación del core
STM32duino antes de darlo por bueno):
Compilación con `arduino-cli` (verifica el FQBN contra tu core STM32duino):
```bash
# 1. toolchain (una sola vez)
@ -155,23 +108,27 @@ mv release/hbox_v5_bringup.ino.bin release/hbox-tarjetaV4_0.6.0.bin
shasum -a 256 release/hbox-tarjetaV4_0.6.0.bin | tee -a release/SHA256SUMS
```
**El destino de tarjeta ya viene bien por omisión:** el propio `.ino` trae `TARGET_EINARBOARD 1` y
`TARGET_PROTO 0`, que es lo correcto para la flota desplegada — las unidades de campo son
**EinarBoard 1.0** corriendo v2/v3 (así lo dice el `V4-PLAN.md`). Solo habría que tocarlo si vas a
flashear una tarjeta de protoboard, y en ese caso se edita el `.ino`, no se pasa por la línea de
comandos.
El `.ino` trae por omisión `TARGET_EINARBOARD 1` y `TARGET_PROTO 0`, correcto para la flota (EinarBoard 1.0 con v2/v3, según `V4-PLAN.md`). Solo se cambia, editando el `.ino`, para una tarjeta de protoboard.
!!! warning "El flag de destino de tarjeta no es cosmético"
`TARGET_EINARBOARD` y `TARGET_PROTO` **invierten la polaridad del control de carga** (en
producción `CHRG_EN` en alto = carga **apagada**; en protoboard `CHRG_RUN` en alto = carga
**encendida**). Compilar con el destino equivocado puede dejar la batería cargando justo cuando
el firmware cree que la está protegiendo por temperatura — precisamente la falla #1 del RCA.
!!! warning "El destino de tarjeta invierte la polaridad del cargador"
Producción: `CHRG_EN` alto = carga apagada. Protoboard: `CHRG_RUN` alto = carga encendida. Con el destino equivocado la batería puede quedar cargando cuando el firmware cree protegerla por temperatura (falla #1 del RCA de junio).
Antes de publicar:
Antes de publicar en [Descargas](../descargas/index.md):
- [ ] Compilado con el `TARGET_` correcto para la generación de tarjeta.
- [ ] **Probado en banco en una unidad real**, no solo compilado.
- [ ] Verificada la polaridad del control de carga sobre hardware.
- [ ] Publicado en `docs/descargas/` con versión en el nombre y su línea en `SHA256SUMS.txt`.
- [ ] Anotado en el `CHANGELOG.md` del repositorio de firmware, con la fecha.
- [ ] Actualizada la tabla de §2 de este documento.
- [ ] Compilado con el `TARGET_` correcto para la tarjeta.
- [ ] Probado en banco en hardware real, no solo compilado.
- [ ] Polaridad del control de carga verificada sobre la tarjeta.
- [ ] Nombre con tarjeta y versión (`hbox-tarjetaV3_X.Y.Z.bin`); nunca se infiere una de la otra.
- [ ] Copiado a `docs/descargas/` de `hbox-docs` (los `.bin` de campo están en `.gitignore`); `SHA256SUMS.txt` lo regenera `sync-docs.sh`.
- [ ] Anotado en el `CHANGELOG.md` del firmware con fecha y quién lo probó.
- [ ] Tabla de Descargas actualizada; publicado con `./scripts/deploy.sh`.
## Historial de revisiones
| Versión | Fecha | Cambios |
|---|---|---|
| 1.0 | 2026-09-18 | Primera versión. |
| 1.1 | 2026-09-29 | Encabezado uniforme; enlaces a manuales y al acta. |
| 1.2 | 2026-09-29 | Edición breve. Tabla de binarios y verificación SHA-256 → Descargas; la lista "antes de publicar" vive solo aquí. |
Versiones anteriores en git.

View File

@ -1,214 +1,134 @@
# V4 — preparación y prueba con firmware 0.5.6
---
title: "V4 — preparación y prueba con firmware 0.6.0"
tags: [project-drogheda, hbox, procedimiento, v4, firmware, bateria, modem, dfu]
date: 2026-09-26
project: Project Drogheda
author: Helgen Technologies
version: 1.3
---
**Versión:** 1.0 · 26-sep-2026 · **Para:** técnico de banco · **Dura:** ~1 h por tarjeta · **Registro:** [**▶ acta de prueba V4**](../formularios/v4.html) — una por tarjeta; ahí se suben la foto del puente y la consola completa.
# V4 — preparación y prueba con firmware 0.6.0
Antes de probar una tarjeta V4 con el firmware 0.5.6 hay que hacerle cuatro preparativos: el puente de reset del
módem, dos interruptores del simpleRTK2B, un cable de consola sin 5 V y la batería cargada. Después se flashea y se
hacen tres pruebas: con 24 V, en batería y regreso de 24 V.
!!! abstract "Para quién · Cuándo · Tiempo · Necesitas"
- Para quién: técnico de banco.
- Cuándo: una vez por tarjeta V4 (EinarBoard 2.0, Blackpill en zócalo), antes de darla por buena con el firmware de campo. Sin serie: etiquétala V4-NN con el siguiente libre del [tablero](../tablero.html).
- Tiempo: ~1 h por tarjeta, más ~20 min en batería.
- Necesitas: tarjeta V4 completa (Blackpill, simpleRTK2B, módem con SIM, antena GNSS con cielo, antena LTE, batería); 24 V al GX16 que puedas desconectar; diodo Schottky BAT54 (como D5), BAT85, BAT43 o 1N5711, nunca 1N5819; alambre wire-wrap, cautín fino, flux, Kapton, termofil, lupa; multímetro con MIN/MAX; laptop con terminal serie y `dfu-util` o STM32CubeProgrammer; dos cables USB-A a USB-C (uno normal y uno sin 5 V, Preparación 2); cargador Li-ion de 1 celda o fuente de banco; monitor y [acta de prueba V4](../formularios/v4.html) abierta desde el inicio (se guarda sola en el navegador).
Abre el [acta](../formularios/v4.html) al empezar y llénala conforme avanzas: se guarda sola en el navegador. Si la
tarjeta no tiene número de serie, etiquétala **V4-NN** con el siguiente libre del [tablero](../tablero.html).
Orden: tres preparativos (puente de reset del módem; interruptores del simpleRTK2B, cable sin 5 V y batería), flasheo, y tres pruebas (24 V, batería, regreso de 24 V). Conectores y botones: [manual V4](../manuales/manual-tarjeta-V4.md). En V5.5 la prueba equivalente es [módem 4G en batería](prueba-bateria-modem.md).
!!! note "Actualización 27-sep (noche): el binario vigente es 0.6.0 CAMPO = 0.5.9 + gobernador de carga (la batería se recarga en la unidad)"
Donde abajo dice 0.5.9, léase 0.6.0 (`hbox-tarjetaV4_0.6.0.bin`, SHA-256 `1458470bbdd95b49…`; consola `hbox-v5-bringup 0.6.0`, `$PHLG,0.6.0,`).
Con 24 V y la etapa ON, a los ~2 min `STAT` muestra `carga=PROVING` y luego `ON` / `ltc=CARGANDO`; en el monitor 🔌 CARGANDO.
El procedimiento se escribió para 0.5.6. Puente, `M`, `R` y DFU solo con USB no cambian con 0.6.0. Historial de versiones: [Descargas](../descargas/index.md).
!!! note "Actualización 27-sep (tarde): 0.5.9 CAMPO (respaldo continuo; sin ciclos de etapa en batería; reset al volver el 5 V)"
Con 0.5.9 no hay ventanas de 10 min ni ahorro en batería: la etapa y el módem siguen encendidos y reportando; ningún ciclo de
etapa en batería; al volver el 5 V tras ≥ 10 s de respaldo la tarjeta se resetea sola (arranca en ~4 s con el módem). 0.5.8 se retiró
(su recovery en batería dejaba el módem oscuro). Lo demás (puente, `M`, `R`, DFU solo con USB) sigue igual. Donde abajo dice 0.5.7 u
0.5.8, léase 0.5.9.
!!! note "Actualización 26-sep (tarde): el binario vigente era 0.5.7"
0.5.7 conserva todo lo de 0.5.6 (pulso `MODEM_RST` por el puente, tecla `M`) y añade el **despertar de batería por reset
del MCU** — lo único que en banco encendió el módem sin puente — más la tecla **`R`** (reset por software ahora), reset
en batería que abre ventana y `P` aceptado en batería. Este procedimiento sigue igual; donde dice 0.5.6, léase 0.5.7.
Antes de la Prueba B, con el módem oscuro en 24 V teclea `R`: si enciende, el puente pasa a ser respaldo.
## Antes de empezar
!!! danger "Reglas"
- Todo cambio de hardware (soldar, mover interruptores, poner o quitar módulos) se hace **sin energía**: sin 24 V,
batería desconectada y sin USB.
- Durante las pruebas **no conectes ningún USB al simpleRTK2B ni al USB-C del módem (J9)**: alimentan al módem
por otro lado y la prueba no vale.
- En la V4 la consola se usa **solo con el cable sin 5 V** (Preparación 2). El cable normal es únicamente para
flashear.
- Durante la prueba en batería **no presiones RESET**. Tras un reset sin 24 V la etapa no se enciende (es a
propósito) y la prueba se pierde.
- Graba la consola completa a archivo desde el primer minuto (115200, CR+LF).
**Material**
- Tarjeta V4 completa: Blackpill, simpleRTK2B, módem 4G con SIM, antena GNSS con vista al cielo, antena LTE y batería.
- Fuente de 24 V al GX16 que puedas desconectar.
- Diodo Schottky pequeño: **BAT54** (el mismo tipo que D5 en la tarjeta), BAT85, BAT43 o 1N5711. **No uses 1N5819.**
- Alambre delgado (wire-wrap), cautín de punta fina, flux, cinta Kapton, termofil y lupa.
- Multímetro (mejor si tiene MIN/MAX).
- Laptop con terminal serie y `dfu-util` o STM32CubeProgrammer.
- Dos cables USB-A a USB-C: uno normal para flashear y otro modificado sin 5 V (Preparación 2).
- Cargador de Li-ion de 1 celda o fuente de banco (Preparación 2).
- Acceso al monitor y al [acta de prueba V4](../formularios/v4.html).
!!! warning "Reglas"
- Todo cambio de hardware (soldar, mover interruptores, poner o quitar módulos) sin energía: sin 24 V, batería desconectada, sin USB.
- Durante las pruebas, ningún USB al simpleRTK2B ni a J9 (USB-C del módem): alimentan al módem por otro lado.
- La consola de la V4 se usa solo con el cable sin 5 V. El cable normal es solo para flashear.
- En batería no pulses RESET: tras un reset sin 24 V la etapa no enciende (a propósito) y la prueba se pierde.
- Graba la consola completa desde el primer minuto (115200, CR+LF).
## Preparación 1 — Puente de reset del módem
El firmware 0.5.6 reinicia el módem 3 s después de cada encendido de la etapa, igual que si alguien presionara el
botón **4G NTRIP RESET**. Para eso necesita un diodo entre U13 y ese botón. Se hace una sola vez por tarjeta y
**sin energía**.
3 s después de cada encendido de etapa el firmware reinicia el módem como si se pulsara 4G NTRIP RESET. Necesita un diodo entre U13 y ese botón. Una vez por tarjeta, sin energía.
```
U13 pata 12 (P7) ──|<── SW4G1, pad que va a RESET (J7)
cátodo ánodo
```
1. **Ubica U13** (PCF8574): el chip de 16 patas que está a la derecha de los puentes JP2/JP3 del cargador.
2. **Encuentra su pata 12.** Pon la marca de la pata 1 (punto o bisel) arriba a la izquierda: las patas 9 a 16 quedan
del lado derecho, con la 16 arriba. En ese lado hay **dos patas juntas sin pista: la 13 (arriba) y la 12 (abajo)**.
La 12 es la de abajo, pegada a la 11, que sí tiene pista.
3. **Ubica SW4G1**: el botón con la leyenda **4G NTRIP RESET**. Tiene dos pads. Con el multímetro en continuidad, el
pad correcto es el que tiene continuidad con el pin del zócalo J7 marcado **RESET**. El otro pad es tierra.
4. **Suelda el diodo** con alambre corto:
- **Banda del diodo (cátodo) → U13 pata 12.**
- **Lado sin banda (ánodo) → pad de SW4G1 que va a RESET.**
- Si es un BAT54 de 3 patas (SOT-23): pata 1 = ánodo, pata 3 = cátodo, la 2 no se usa. La prueba del paso 6
confirma la orientación, sea cual sea el encapsulado.
5. Revisa con lupa que la pata 12 **no quede unida a la 11 ni a la 13**. Fija el alambre con Kapton y pásalo lejos
del módem 4G.
6. **Revisión sin energía**, multímetro en prueba de diodo: punta roja en el pad de SW4G1 y negra en U13 pata 12 →
**0.15–0.45 V**. Con las puntas invertidas → **OL** o un valor alto (más de 1 V). Si marca 0 V hay un corto; si
marca OL en los dos sentidos, falta soldadura.
7. Toma la **foto del puente** (U13 y SW4G1) y súbela al acta.
1. U13 (PCF8574) es el chip de 16 patas a la derecha de JP2/JP3.
2. Con la marca de pata 1 arriba a la izquierda, las patas 9–16 quedan a la derecha (16 arriba). Hay dos patas juntas sin pista: 13 (arriba) y 12 (abajo, pegada a la 11, que sí tiene pista).
3. SW4G1 es el botón 4G NTRIP RESET. De sus dos pads, el correcto tiene continuidad con el pin RESET del zócalo J7; el otro es tierra.
4. Suelda con alambre corto: banda del diodo (cátodo) → U13 pata 12; lado sin banda (ánodo) → pad de SW4G1 a RESET. BAT54 en SOT-23: pata 1 = ánodo, pata 3 = cátodo, la 2 no se usa.
5. Con lupa: la pata 12 no toca la 11 ni la 13. Fija el alambre con Kapton, lejos del módem.
6. Prueba de diodo sin energía: roja en SW4G1, negra en U13-12 → 0.15–0.45 V; invertidas → OL o > 1 V. 0 V = corto; OL en ambos sentidos = falta soldadura.
7. Foto del puente (U13 y SW4G1) al acta.
!!! warning "¿Por qué no 1N5819?"
Es un Schottky de potencia: en caliente deja pasar corriente al revés, y esa corriente alimentaría al módem durante
el reposo, justo lo que se está eliminando. Un 1N4148 solo sirve si en la Prueba A la lectura baja de 0.4 V.
No uses 1N5819: es Schottky de potencia y en caliente conduce al revés, lo que alimentaría el módem en reposo. Un 1N4148 solo sirve si en la Prueba A la lectura baja de 0.4 V.
## Preparación 2 — Interruptores del simpleRTK2B, cable de consola y batería
## Preparación 2 — Interruptores, cable de consola y batería
**Interruptores del simpleRTK2B** (sin energía)
Interruptores del simpleRTK2B (sin energía): el doble junto al LED POWER, rotulado IOREF=3.3V y 5V=OUTPUT, va con ambos en OFF. La tarjeta ya da IOREF con su 3.3 V permanente; con IOREF en ON el GPS queda encendido en reposo, alimenta de regreso al módem y gasta la batería. Sin esas leyendas: foto y pregunta antes de mover. Anota la posición.
- Junto al LED **POWER** del simpleRTK2B hay un interruptor doble con las leyendas **IOREF=3.3V** y **5V=OUTPUT**.
**Los dos van en OFF.**
- La tarjeta ya le da IOREF con su 3.3 V permanente. Con IOREF=3.3V en ON, ese 3.3 V mantiene encendido al GPS
durante el reposo, alimenta de regreso al módem y gasta la batería.
- Si los interruptores no tienen esas leyendas, toma una foto y pregunta antes de mover nada. Anota la posición en
el acta.
Cable de consola sin 5 V (una vez). En la V4 el 5 V del USB de la Blackpill está unido al riel de 5 V: con un cable normal la laptop alimenta la tarjeta (la prueba en batería no vale) y con 24 V la tarjeta le regresa corriente a la laptop.
**Cable de consola sin 5 V** (solo V4, se hace una vez)
1. Abre el forro de un cable USB-A a USB-C unos 5 cm a la mitad.
2. Corta solo el hilo rojo (+5 V) y aísla ambas puntas con termofil. Si no trae rojo, negro, verde y blanco, usa otro.
3. Etiqueta: SOLO CONSOLA V4 — SIN 5 V.
4. Prueba: tarjeta sin 24 V ni batería, cable entre laptop y Blackpill: la Blackpill queda apagada. Si enciende, el cable no sirve.
5. Al usarlo, energiza primero la tarjeta y luego conecta el cable.
En la V4 los 5 V del USB de la Blackpill están unidos al riel de 5 V de la tarjeta. Con un cable normal la laptop
alimenta la tarjeta: la prueba en batería no vale, y con 24 V la tarjeta le regresa corriente a la laptop.
Batería: mide en su conector; debe tener ≥ 3.80 V (3.14 V, como en el último reporte, es descargada). Cárgala por fuera con el cargador Li-ion de 1 celda, o fuente de banco a 4.00 V con límite 1 A directo al conector, polaridad verificada, sin dejarla sola, hasta que la corriente baje de 0.1 A. Si se calienta o se infla, detente y avisa.
1. Toma un cable USB-A a USB-C y abre el forro unos 5 cm a la mitad del cable.
2. **Corta solo el hilo rojo (+5 V)** y aísla las dos puntas con termofil. No cortes el negro, el verde ni el blanco.
Si el cable no trae esos cuatro colores, usa otro.
3. Etiquétalo: **SOLO CONSOLA V4 — SIN 5 V**.
4. Pruébalo: con la tarjeta sin 24 V y sin batería, conecta la laptop y la Blackpill con este cable. **La Blackpill
debe quedar apagada** (ningún LED). Si enciende, el cable no sirve.
5. Al usarlo, primero energiza la tarjeta (24 V o batería) y después conecta el cable.
## Flasheo de 0.6.0
**Batería**
Archivo [`hbox-tarjetaV4_0.6.0.bin`](../descargas/hbox-tarjetaV4_0.6.0.bin), nunca el `hbox-v5-bringup_…`. SHA-256: `1458470bbdd95b490969976402bf2144a773a991b7650c55e3281687ba77b2e3` ([cómo verificar](../descargas/index.md#verifica-el-sha-256)).
- Mide la batería en su propio conector: debe tener **3.80 V o más**. Una batería con 3.14 V, como la del último
reporte, está descargada.
- **Cárgala por fuera de la tarjeta**: el firmware 0.5.6 no carga la batería.
- Usa el cargador de Li-ion de 1 celda del laboratorio. Si no hay, fuente de banco en **4.00 V con límite de 1 A**,
directo al conector de la batería y con la polaridad verificada. No la dejes sola; termina cuando la corriente
baje de 0.1 A.
- Si la batería se calienta o se ve inflada, detente y avisa.
1. Sin 24 V y con la batería desconectada, cable normal a la Blackpill.
2. DFU: mantén BOOT0, pulsa y suelta NRST, suelta BOOT0. Debe aparecer `STM32 BOOTLOADER` (0483:DF11).
3. `dfu-util -a 0 -s 0x08000000:leave -D hbox-tarjetaV4_0.6.0.bin` (o STM32CubeProgrammer → USB → Connect → Download en `0x08000000`).
4. Consola a 115200: `hbox-v5-bringup 0.6.0`, `board=EinarBoard v4 (HBOX v4)` y `>>> BOARD OK`. Si no viste el arranque: `t` (la línea empieza con `$PHLG,0.6.0,`) y `r` repite los tests.
5. Retira el cable normal. Desde aquí, solo el cable sin 5 V.
## Flasheo de 0.6.0 (sustituye a 0.5.9 / 0.5.8 / 0.5.7 / 0.5.6)
- Archivo: [**`hbox-tarjetaV4_0.6.0.bin`**](../descargas/hbox-tarjetaV4_0.6.0.bin), de [Descargas](../descargas/index.md).
**No** uses el de V5 (`hbox-v5-bringup_…`).
- SHA-256, verifícalo antes: `1e604edd1fa20e72327574f91292fbab11e1ab2d12c990ad62330dbb0e4c52ab`.
En Mac o Linux: `shasum -a 256 hbox-tarjetaV4_0.6.0.bin` (esperado `1458470bbdd95b49…`).
**Pasos**
1. Tarjeta **sin 24 V y con la batería desconectada**. Conecta el **cable normal** a la Blackpill.
2. Modo DFU: mantén **BOOT0** de la Blackpill, presiona y suelta **NRST**, suelta BOOT0. La laptop debe mostrar
**STM32 BOOTLOADER** (0483:DF11).
3. Graba: `dfu-util -a 0 -s 0x08000000:leave -D hbox-tarjetaV4_0.6.0.bin` (o STM32CubeProgrammer → USB → Connect →
Download en `0x08000000`).
4. Abre la consola (115200). Tras reiniciar debe verse `hbox-v5-bringup 0.6.0`, luego
`board=EinarBoard v4 (HBOX v4)`, y los tests deben terminar en `>>> BOARD OK`. Si no alcanzas a ver el arranque,
teclea `t` (la línea debe empezar con `$PHLG,0.6.0,`) y `r` para repetir los tests.
5. Desconecta el cable normal. De aquí en adelante, solo el cable sin 5 V.
!!! tip "Si no aparece STM32 BOOTLOADER"
En la V4 el USB también alimenta el riel de 5 V de la tarjeta, y con él al W5500, cuya salida de interrupción llega
al pin `BOOT1` de la Blackpill. Si tras dos intentos no aparece STM32 BOOTLOADER: sin energía, saca la Blackpill del
zócalo, flashéala suelta con el cable normal y vuelve a colocarla. **Al colocarla, su USB-C va del lado de la
etiqueta E-CSn de la tarjeta**: el pin B12 de la Blackpill cae en E-CSn y el pin R en NRST. Si no coincide, no la
energices.
Sin `STM32 BOOTLOADER` tras dos intentos: el USB también alimenta el W5500, cuya interrupción llega a `BOOT1`. Sin energía, saca la Blackpill, flashéala suelta y reinsértala con su USB-C del lado de la etiqueta E-CSn (B12 en E-CSn, pin R en NRST). Si no coincide, no la energices.
## Prueba A — Con 24 V
1. Conecta la batería y después los 24 V. Espera 30 s, conecta el **cable sin 5 V** y abre la consola grabando.
2. Mide **P2** (entrada de 5 V del SD-15B): **5.1–5.3 V**. Si marca 0 V, detente: el SD-15B o el arnés no están
entregando.
3. Teclea `s`. La línea `STAT` debe mostrar `v5=5.xx(ok)`, `stack=ON` y `mrst=1` (o más); al poco rato también
`modoB=ON` y `gga=` con satélites.
4. **Prueba del puente:** multímetro en el pad RESET de SW4G1 contra GND (con el módem encendido marca alto). Teclea
`M`: la lectura debe caer **por debajo de 0.4 V** durante medio segundo (usa MIN/MAX si lo tienes) y los LEDs del
módem se apagan y vuelven. La consola dice `MODEM_RST operador`.
- No baja: el diodo está al revés o sin soldar.
- Baja pero se queda entre 0.4 y 0.7 V: el diodo no es Schottky; cámbialo.
5. Espera a que el módem registre y a que los LEDs UART del simpleRTK2B parpadeen rápido (están llegando
correcciones). En el monitor, la unidad aparece con `0.6.0` y ⚡ VEHÍCULO.
1. Conecta la batería y luego 24 V. A los 30 s conecta el cable sin 5 V y abre la consola grabando.
2. P2 (salida del SD-15B): 5.1–5.3 V. Con 0 V detente: SD-15B o arnés.
3. `s`: `v5=5.xx(ok)`, `stack=ON`, `mrst=1` o más; al poco, `modoB=ON` y `gga=` con satélites.
4. Puente: multímetro en el pad RESET de SW4G1 contra GND (alto con el módem encendido). Teclea `M`: baja de 0.4 V medio segundo (usa MIN/MAX), los LEDs del módem se apagan y vuelven, y la consola dice `MODEM_RST operador`. No baja: diodo al revés o sin soldar. Se queda en 0.4–0.7 V: el diodo no es Schottky.
5. Espera registro del módem y LEDs UART del simpleRTK2B en parpadeo rápido (correcciones). En el monitor: `0.6.0` y ⚡ VEHÍCULO.
6. Opcional: con el módem oscuro en 24 V, `R` (reset por software) debe encenderlo.
Si algo de esta prueba falla, no pases a la prueba en batería: marca «me detengo» en el acta y ve al Cierre.
Si algo falla, no pases a batería: marca "me detengo" en el acta y ve al cierre.
## Prueba B — En batería
1. Con todo funcionando, **quita los 24 V** (la batería se queda conectada) y anota la hora. La consola muestra
`V5 PERDIDO` y `BACKUP inicio … modo reporte cada 10 min`. La etapa sigue encendida unos 2 minutos.
2. Llegan `DUTY reposo … etapa OFF` y `STACK OFF reason=duty_sleep`. Espera 30 s y mide en reposo:
!!! note "Pendiente de ingeniería"
Los pasos 2–5 describen el ciclo de 10 min de 0.5.6–0.5.7. Desde 0.5.9 la etapa y el módem siguen encendidos en batería, sin ventanas (ver [Descargas](../descargas/index.md)). Con 0.6.0 registra en el acta lo que ocurra y avisa a ingeniería.
| Punto | Dónde medir | Debe marcar |
1. Con todo funcionando, quita 24 V (la batería queda) y anota la hora: `V5 PERDIDO` y `BACKUP inicio … modo reporte cada 10 min`. La etapa sigue unos 2 min.
2. `DUTY reposo … etapa OFF` y `STACK OFF reason=duty_sleep`. A los 30 s mide:
| Punto | Dónde | Debe marcar |
|---|---|---|
| SW_5V | C3 (+) | menos de 0.3 V |
| 3V3_MODEM | C43 (+) o J7 pin 1 | menos de 0.3 V; anota el valor aunque sea mayor |
| LED POWER del simpleRTK2B | a la vista | apagado (el LED IOREF encendido es normal) |
| SW_5V | C3 (+) | < 0.3 V |
| 3V3_MODEM | C43 (+) o J7 pin 1 | < 0.3 V; anota el valor aunque sea mayor |
| LED POWER del simpleRTK2B | A la vista | Apagado (IOREF encendido es normal) |
- LED POWER encendido en reposo: el interruptor IOREF=3.3V quedó en ON o hay un USB conectado al simpleRTK2B.
- 3V3_MODEM arriba de 0.3 V: anótalo en el acta y sigue la prueba; ingeniería lo revisa.
LED POWER encendido: IOREF=3.3V en ON o un USB en el simpleRTK2B. 3V3_MODEM > 0.3 V: anótalo y sigue.
3. A los 10 min del paso 1 llega `DUTY despertar #1`. En la consola deben aparecer, en este orden:
`STACK ON reason=duty_wake` → `NMEA primera trama en PA3 ($GNTXT,…u-blox AG…)` → a los 3 s
`MODEM_RST stack_on` → a los ~10 s `MODOB ON`.
- Si la primera trama no es `$GNTXT … u-blox AG` sino `$GNGGA` u otra, el GPS nunca se apagó: revisa el
interruptor IOREF=3.3V.
4. Durante esa ventana (2 a 3 min) el módem debe encender sus LEDs y registrar solo, sin tocar nada. En el monitor
debe llegar la posición con 🔋. Anota lo que viste en la tabla de despertares del acta.
5. Deja pasar la segunda ventana (a los 20 min del paso 1) y confirma lo mismo.
3. A los 10 min, `DUTY despertar #1`, en orden: `STACK ON reason=duty_wake` → `NMEA primera trama en PA3 ($GNTXT,…u-blox AG…)` → a los 3 s `MODEM_RST stack_on` → a los ~10 s `MODOB ON`. Si la primera trama es `$GNGGA` u otra, el GPS nunca se apagó: revisa IOREF.
4. En la ventana (2–3 min) el módem registra solo y la posición llega al monitor con 🔋. Anota en la tabla de despertares.
5. Confirma lo mismo en la segunda ventana (min 20).
**Pasa** si en las dos ventanas el módem registra y el monitor recibe la unidad, sin presionar nada. Si no registra,
el acta abre una tabla para anotar los rieles y los LEDs durante la siguiente ventana.
Pasa si en las dos ventanas el módem registra y el monitor recibe la unidad sin tocar nada. Si no registra, el acta abre una tabla de rieles y LEDs para la siguiente ventana.
## Prueba C — Regreso de los 24 V sin reset
## Prueba C — Regreso de 24 V sin reset
1. **Durante el reposo** (etapa OFF), reconecta los 24 V sin presionar RESET. La consola muestra `V5 PRESENTE`,
`DUTY fin` y `BACKUP fin`; a los ~3 s `STACK ON reason=auto` y 3 s después `MODEM_RST stack_on`.
2. **Durante una ventana** (etapa ON): quita los 24 V como en el paso 1 de la Prueba B y reconéctalos antes de que
pasen 2 minutos. La consola muestra `5 V de vuelta tras bateria: ciclo de etapa…` → `STACK OFF reason=pwr_return`
→ unos 10 s después `STACK ON reason=recovery` → `MODEM_RST stack_on`.
1. En reposo (etapa OFF), reconecta 24 V sin pulsar RESET: `V5 PRESENTE`, `DUTY fin`, `BACKUP fin`; a los ~3 s `STACK ON reason=auto` y 3 s después `MODEM_RST stack_on`.
2. En una ventana (etapa ON), quita 24 V y reconéctalos antes de 2 min: `5 V de vuelta tras bateria: ciclo de etapa…` → `STACK OFF reason=pwr_return` → ~10 s → `STACK ON reason=recovery` → `MODEM_RST stack_on`.
**Pasa** si en los dos casos el módem registra solo en menos de 2 minutos y el monitor vuelve a mostrar ⚡.
Pasa si en los dos casos el módem registra solo en < 2 min y el monitor vuelve a ⚡.
## Registro y cuándo parar
## Registro
Todo va en el **[acta de prueba V4](../formularios/v4.html)**: diodo usado y foto del puente, posición de los
interruptores, prueba del cable, voltaje de la batería, flasheo, lectura de P2 y la prueba con `M`, lecturas en
reposo, la tabla de despertares, la Prueba C y el **archivo completo de la consola**. Cada etapa termina con una
pregunta de paso: si la tarjeta no pasa, marca «me detengo», llena el Cierre y envía el acta con resultado **FALLA**.
Queda en el [expediente](../unidad.html) de la tarjeta y en el [tablero](../tablero.html).
Todo va en el [acta de prueba V4](../formularios/v4.html), con el log completo de consola. Cada etapa termina con una pregunta de paso; si la tarjeta no pasa, marca "me detengo", llena el cierre y envía con resultado FALLA. Queda en el [expediente](../unidad.html) y en el [tablero](../tablero.html).
!!! danger "Detente y avisa a ingeniería si pasa cualquiera de estas"
- P2 marca 0 V con los 24 V puestos.
!!! danger "Detente y avisa a ingeniería"
- P2 en 0 V con 24 V puestos.
- La Blackpill enciende con el cable sin 5 V.
- Con `M`, el pad RESET de SW4G1 no baja de 0.4 V (después de revisar el diodo).
- Los tests terminan en `>>> BOARD CHECK FAILED`.
- El LED POWER del simpleRTK2B sigue encendido en reposo con IOREF=3.3V en OFF y sin USB.
- Con `M`, el pad RESET de SW4G1 no baja de 0.4 V (diodo ya revisado).
- Tests terminan en `>>> BOARD CHECK FAILED`.
- LED POWER del simpleRTK2B encendido en reposo con IOREF en OFF y sin USB.
- Algo se calienta o huele, o la batería se infla.
## Historial de revisiones
| Versión | Fecha | Cambios |
|---|---|---|
| 1.1 | 2026-09-27 | Notas de 0.5.7, 0.5.9 y 0.6.0. |
| 1.2 | 2026-09-29 | SHA-256 de 0.6.0 corregido; encabezado uniforme. |
| 1.3 | 2026-09-29 | Edición breve; tabla de versiones → Descargas; aviso de que la Prueba B describe el ciclo de 0.5.6–0.5.7. |
Versiones anteriores en git.

View File

@ -0,0 +1,94 @@
---
title: "HBOX V5 — Checklist de puesta en marcha en el puerto"
tags: [project-drogheda, hbox, v5, v5.6, instalacion, puesta-en-marcha, campo, checklist]
date: 2026-09-29
project: Project Drogheda
author: Helgen Technologies
version: 1.2
status: ACTIVO — imprimir; una hoja por unidad instalada
audience: técnico de campo
---
# HBOX V5 — Checklist de puesta en marcha en el puerto
!!! abstract "Para quién · Cuándo · Tiempo · Necesitas"
- **Para quién:** técnico de campo; una hoja impresa por unidad V5.5/V5.6. Al terminar se sube al [expediente](../unidad.html).
- **Cuándo:** al instalar en la máquina, después de la [configuración](v5-configuracion-unidad.md) y la [recepción](ciclo-de-vida.md#7-recepcion-e-inspeccion).
- **Tiempo:** 45–60 min por unidad (incluye 5 min en batería).
- **Necesitas:** multímetro, herramienta de montaje, teléfono con datos para el monitor y el [manual del cliente](../manuales/manual-cliente.md) para entregar.
**Unidad:** `HBOX5-E___-A____-R_____` · **Monitor:** `H00___` · **Máquina:** ____________ · **Terminal:** ________
**Técnico:** ____________________ · **Fecha:** ____/____/2026 · **Inicio:** ______ · **Fin:** ______
!!! warning "Antes de subir a la máquina"
Acta de ensamble APROBADA y unidad configurada. Firmware de campo vigente; el `-eth` de banco no se instala en campo. Interruptor de corte en OFF hasta el paso 3. Máquina apagada y con permiso de acceso (número de máquina como lo nombra la terminal).
## 1. Montaje (máquina apagada)
- [ ] Gabinete fijo en el punto acordado, sin tapar la rejilla del ventilador ni el LED de panel.
- [ ] Antena GNSS en el punto más alto, con cielo, sobre base metálica si es magnética; cable sin dobleces ni empalmes.
- [ ] 2 antenas LTE a ≥ 1 m de la GNSS y ≥ 20 cm entre sí; SMA a mano + ¼ vuelta.
- [ ] Prensaestopas apretados; sin cables sobre bordes cortantes; bridas cada 30 cm.
## 2. Arnés 24 V (máquina apagada, con multímetro)
- [ ] GX16: pin 1 = +24 V permanente (batería de la máquina) · pin 2 = GND · pin 3 = ignición (+24 V solo con llave) · pin 4 = GND.
- [ ] En el conector, antes de enchufar: pin 1–2 = 24–28 V; pin 3–2 = 0 V con llave OFF y 24–28 V con llave ON.
- [ ] Sin continuidad entre pin 1 o 3 y el 5 V de la tarjeta (P2). 24 V en P2 destruye la unidad.
- [ ] Portafusible del kit en el +24 V, cerca de la toma, fusible 3 A lento. <!-- VERIFICAR: valor final del fusible en línea (mismo pendiente que el manual DRG-MAN-001) -->
## 3. Encendido y LEDs
- [ ] GX16 enchufado, interruptor de corte en ON, llave en ON.
- [ ] LED de panel parpadea a 1 Hz en < 5 s.
- [ ] Ventilador gira.
- [ ] RGB azul en < 15 s y verde (RTK FIX) en < 10 min con cielo.
- [ ] Módem registrado (LED de red lento o fijo) en < 2 min.
| RGB | Estado | Acción |
|---|---|---|
| Verde | Etapa ON, RTK FIX | OK |
| Azul | Etapa ON, sin RTK | Espera 10 min con cielo; si sigue: SIM / correcciones |
| Magenta | Etapa ON, el F9P no habla | Avisa a ingeniería (simpleRTK2B) |
| Amarillo | En batería | Sin 5 V: arnés / SD-15B |
| Rojo | Etapa OFF | Sin 5 V, batería < 3.40 V o > 60 °C. No la dejes así |
## 4. Monitor
- [ ] En monitor.helgen.dev, `H00___` aparece con posición en la máquina en ≤ 2 min.
- [ ] Columna Salud presente (fw, `vbat`, temperaturas). Sin Salud: avisa (Modo B / módem).
- [ ] Con batería en carga, 🔌 CARGANDO a los ~3 min.
## 5. Ethernet (solo si el panel lleva RJ45 y el cliente lo usa)
- [ ] Cable en J10; LED de enlace encendido. Sin PoE: la unidad sigue con 24 V.
- [ ] IP asignada por la red del cliente: __________________ (hoy solo espejo de prueba; el monitor no lo usa).
## 6. Prueba de batería (5 min)
- [ ] Llave OFF y GX16 desconectado: RGB amarillo, ventilador parado, módem encendido.
- [ ] 5 min después el monitor sigue recibiendo posición con `pwr=BATT`.
- [ ] Al reconectar: la tarjeta se reinicia sola (0.5.9+), RGB azul → verde en < 10 min, monitor vuelve a `VEH`.
- [ ] Módem oscuro al volver el 24 V: pulsa SW4G1 una vez. ☐ Pasó.
## 7. Cierre
- [ ] Tapa con sello, tornillos en cruz, etiqueta exterior legible; foto de gabinete, antenas y GX16.
- [ ] Interruptor de corte en ON; llave como la encontraste.
- [ ] Reportado a ingeniería: `H00___` instalada en ____________ a las ______ · RTK FIX ☐ sí ☐ no · batería 5 min ☐ OK.
**Resultado:** ☐ EN SERVICIO ☐ EN SERVICIO CON OBSERVACIONES ☐ NO INSTALADA (motivo: _____________________)
**Firma técnico:** ______________________ **Firma cliente / supervisor:** ______________________
Falla en la instalación: [diagnóstico en campo](../diagnostico/procedimiento-diagnostico-campo.md) y su [acta](../formularios/diagnostico.html).
## Historial de revisiones
| Versión | Fecha | Cambios |
|---|---|---|
| 1.0 | 2026-09-29 | Primera versión (V5.5/V5.6, fw 0.6.0). |
| 1.1 | 2026-09-29 | Encabezado uniforme. |
| 1.2 | 2026-09-29 | Edición breve; firmware "vigente" en lugar de número fijo. |
Versiones anteriores en git.

View File

@ -0,0 +1,120 @@
---
title: "HBOX V5 — Configuración de una unidad"
tags: [project-drogheda, hardware, hbox, v5, v5.6, configuracion, ntrip, ethernet, rs485, rs232, bateria, procedimiento]
project: Project Drogheda
author: Helgen Technologies
date: 2026-09-29
version: 1.1
status: ACTIVO — toda unidad V5.5 / V5.6 antes de embarcar o de reinstalar
audience: técnicos de banco
---
# HBOX V5 — Configuración de una unidad
!!! abstract "Para quién · Cuándo · Tiempo · Necesitas"
- Para quién: técnicos de banco.
- Cuándo: unidad V5.5/V5.6 que pasó la [prueba final](v5-prueba-final-unidad.md), antes de embarcar o de reinstalar. Paso 5 de producción, antes del [checklist de puesta en marcha](v5-checklist-puesta-en-marcha.md).
- Tiempo: 30–40 min por unidad, más la espera de RTK FIX.
- Necesitas: laptop con terminal serie a 115200 grabando, 2 cables USB-C con datos, 24 V o arnés GX16 real, [plantilla 4G](../descargas/4G_NTRIP_HelgenSRV-NMEA.example.txt) y el `.local.txt` de ingeniería, configuración F9P, antena GNSS con cielo, 2 antenas LTE, SIM Telcel; si aplica, cable Ethernet y adaptadores USB-RS485 / USB-RS232. Registro: [acta de ensamble](../formularios/ensamble.html) y, si aplica, [acta Ethernet y serie](../formularios/ethernet-serie.html).
Una unidad está configurada cuando cumple las siete filas:
| # | Elemento | Configurado cuando | § |
|---|---|---|---|
| 1 | Módem 4G | Parámetros cargados (APN, caster, mountpoint, ID de estación) y registrado en Telcel | 1 |
| 2 | simpleRTK2B (ZED-F9P) | Configuración Helgen en flash; RTK FIX (`fix=4`) con cielo | 2 |
| 3 | Identidad | Aparece en el monitor como `H00xx` con posición y Salud | 3 |
| 4 | Ethernet (si lo lleva) | Enlace y espejo TCP probados con `0.6.0-eth` | 4 |
| 5 | Puertos serie (si los lleva) | `[PASS] SC16IS752` y niveles correctos en P15/P16 | 4 |
| 6 | Paquete de batería | Química = JP2; `ltc=CARGANDO` | 5 |
| 7 | Firmware y consola | Versión vigente y `STAT` limpio | 6 |
## 1. Módem 4G — parámetros
Las claves `$$$AS+…` y la plantilla están en [Descargas](../descargas/index.md#parametros-del-modem-4g-ntrip-master). Los valores reales (caster y APN) los entrega ingeniería para esta unidad; no se guardan ni se reenvían. `AS+K` (ID de estación) es el `H00xx` de la unidad (§3).
1. Módem suelto (antes del ensamble): se carga sobre el simpleRTK2B por el USB XBEE ([módulos §2b](v5-modulos-integracion.md#2b-montaje-y-configuracion)).
2. Unidad ensamblada (módem en J7/J8): terminal en J9 a 115200 (J9 va al USB del módem, `USB_DP/DM` → J7 pines 7/8 según netlist V5.6); mismo procedimiento. <!-- VERIFICAR: que el módem enumere por J9 con la etapa encendida y acepte $$$AS+ por ese puerto; hasta hoy solo se ha configurado por el USB XBEE del simpleRTK2B -->
3. Al terminar, `$$$AS+I=1111` y lee `AS+K`; anótalo en el acta.
4. Retira el cable de J9: con cable, la laptop alimenta el módem y las pruebas de batería y de reset del módem no valen.
- [ ] Todas las líneas contestaron `OK`.
- [ ] Módem registrado en Telcel (LED lento o fijo) en < 2 min.
- [ ] `AS+K` anotado.
## 2. simpleRTK2B — RTK FIX
1. El módulo trae la configuración Helgen de su acta. Si llegó sin acta, cárgala ([módulos §1c](v5-modulos-integracion.md#1c-configuracion-helgen)).
2. Consola del HBOX (J11, 115200), etapa encendida (`stack=ON`): `n` muestra 20 s de `$GNGGA` con `fix=` y `sats=`.
3. Con cielo y módem registrado, espera `fix=4` (típico 1–5 min, máximo 10). `STAT`: `gga=RTK_FIX sats≥10 hdop<1.5`; LED RGB verde.
| `fix=` | Significado | Se embarca |
|---|---|---|
| 0 | Sin fix | No |
| 1 | GPS autónomo (sin correcciones) | No |
| 5 | RTK FLOAT | No, salvo cielo malo documentado |
| 4 | RTK FIX | Sí |
- [ ] `fix=4` estable 5 min; tiempo y satélites anotados.
## 3. Identidad `H00xx`
La identidad en el monitor (monitor.helgen.dev, htracker) sale del módem: el NTRIP Master envía `$GPTXT` con el ID de `AS+K` en el tercer campo y el servidor lo toma como `H00xx`. <!-- VERIFICAR: confirmar con Leo que AS+K se captura literalmente como H00xx (retranslator: parse_gptxt → parts[2]) --> El `H00xx` cambia si se cambia el módem, no la tarjeta. El `$PHID` que manda el espejo Ethernet (UID, fw, tarjeta, MAC) todavía no lo usa el monitor.
1. Con 24 V, etapa ON y módem registrado, en ≤ 2 min el monitor muestra `H00xx` con posición a 1 Hz y Salud (fw, `vbat`, temperaturas, `v5min`).
2. Consola: `modoB=ON relay=… phlg_aire=…` sube de 1 en 1 cada 30 s.
- [ ] `H00xx` visible con Salud y anotado en el acta y en la etiqueta interior (`HBOX5-Exx-Axxx-Rxxxx · H00xx`).
## 4. Ethernet y puertos serie (solo si el panel los lleva)
Prueba, defaults de red, pines de P15/P16 y regla de JP5: [Prueba de Ethernet y puertos serie](v5-prueba-ethernet-serie.md). No hay build de campo con Ethernet: la IP y el servidor son banderas de compilación y el monitor no escucha el espejo.
- [ ] Ethernet probado y registrado, o "no aplica: panel sin RJ45".
- [ ] `[PASS] SC16IS752` en el POST; JP5 abierto/cerrado según la instalación, anotado.
## 5. Batería
Química y JP2: [ensamble §2](v5-ensamble.md#2-tarjeta-sin-energia).
Con 24 V, etapa ON y > 150 s tras el arranque: `STAT … carga=PROVING` → `carga=ON … ltc=CARGANDO`, y el monitor muestra 🔌 CARGANDO. `vbat` sube en la siguiente media hora. Detalle del gobernador: [Descargas](../descargas/index.md).
- [ ] Química = JP2, ambas anotadas.
- [ ] `ltc=CARGANDO` visto.
## 6. Consola final
24 V + ignición, etapa ON ≥ 5 min, cielo, batería conectada. Teclea `s` y lee `STAT`:
| Campo | Debe decir | Si no |
|---|---|---|
| Encabezado (tras reset) | `hbox-v5-bringup` con la versión vigente de [Descargas](../descargas/index.md) | Reflashea |
| `v5=` | `5.2x–5.3x(ok)`, nunca `BAJO` ni `no` | SD-15B a ~5.3 V; arnés |
| `v5min=` | ≥ 4.9 | El riel cae con la ráfaga LTE: fuente / SD-15B |
| `vbat=` | Li-ion 3.6–4.1 · LFP 3.2–3.5 <!-- VERIFICAR: rango LFP con firmware para V5.6 --> | Paquete / P4 |
| `chrg=` · `ltc=` · `carga=` | `chg` · `CARGANDO` · `ON` (tras ~150 s) | §5 |
| `flt=` | `none` | `FAULT`: LTC4040 / NTC del paquete |
| `tair=` / `rh=` · `tbat=` · `tmcu=` | Plausibles (< 45 °C en banco), no `n/d` | I²C: U3 / U4 |
| `i2cerr=` | `0` | Soldadura U3 / U4 / U13 / U10 |
| `stack=` · `modo=` | `ON` · `AUTO` | `MAN`: teclea `A` |
| `gga=` · `sats=` | `RTK_FIX` · ≥ 10 | §2 |
| `modoB=` · `phlg_aire=` | `ON` · sube cada 30 s | K1 / módem |
| `rtcm_age=` | Pocos segundos (no `rtcm=none`) | No llegan correcciones: §1 |
| `modem=` | `vivo` (tras 2 min de gracia) | `SOSPECHOSO`: módem oscuro; SW4G1 y revisa |
| `rec=` | `0`, sin `LIMP` | NMEA intermitente: MOD1 / UART1 |
| `eth=` (solo `-eth`) | `CONECTADO ip=…` con cable; `off` sin 5 V | §4 |
V5.6: su firmware (`MODEM_EN`, `tchg`, `tcell`, `tmodem`) aún no existe; hasta entonces se prueba con el binario V5 vigente y esos campos no aparecen. <!-- VERIFICAR: versión y nombre del binario V5.6 cuando se publique -->
- [ ] `STAT` limpio y encabezado de versión pegados en el acta.
- [ ] Etiquetas exterior e interior con `HBOX5-Exx-Axxx-Rxxxx` y `H00xx`.
- [ ] P11 en OFF para almacenar o embarcar.
## Historial de revisiones
| Versión | Fecha | Cambios |
|---|---|---|
| 1.0 | 2026-09-29 | Primera versión: define "unidad configurada" para V5.5/V5.6. |
| 1.1 | 2026-09-29 | Edición breve. Parámetros del módem → Descargas; Ethernet/serie y JP5 → prueba de Ethernet y serie; química/JP2 → ensamble §2; tabla de firmware → Descargas. |
Versiones anteriores en git.

View File

@ -1,176 +1,169 @@
---
title: HBOX v5 — Procedimiento de ensamble de la unidad y energizado final
title: "HBOX V5 — Ensamble de la unidad y energizado"
tags: [project-drogheda, hardware, hbox, v5, ensamble, checklist, procedimiento]
date: 2026-09-17
project: Project Drogheda
author: Helgen Technologies
date: 2026-09-17
version: 1.0
status: ACTIVO — una unidad a la vez; se registra en el acta "Ensamble"
version: 1.2
status: ACTIVO — una unidad a la vez
audience: técnicos de banco
---
# HBOX v5 — Ensamble de la unidad y energizado final
# HBOX V5 — Ensamble de la unidad y energizado
**Entrada:** tres módulos **ya aprobados** en sus actas — una EinarBoard **V5-NN** (acta de prueba y
flasheo), un simpleRTK2B Pro **ARD-NNN** y un módem 4G NTRIP Master **RTK-NNNN** que pasaron juntos la
**integración**. **Salida:** una unidad HBOX cerrada, etiquetada **HBOX5-Exx-Axxx-Rxxxx**, encendida y
reportando.
!!! abstract "Para quién · Cuándo · Tiempo · Necesitas"
- Para quién: técnicos de banco.
- Cuándo: con una EinarBoard V5-NN aprobada y una pareja ARD-NNN + RTK-NNNN aprobada e integrada. Paso 3 de producción, entre [Módulos RTK y 4G](v5-modulos-integracion.md) y la [prueba final](v5-prueba-final-unidad.md). Resultado: unidad cerrada, etiquetada `HBOX5-Exx-Axxx-Rxxxx`, encendida y reportando.
- Tiempo: 60–90 min por unidad.
- Necesitas: ver §1; [acta de ensamble](../formularios/ensamble.html).
**Duración estimada:** 60–90 min por unidad.
!!! warning "Reglas"
1. Primero el acta: selecciona los tres módulos en el [acta de ensamble](../formularios/ensamble.html) y espera a verlos en verde (Aprobado) con la pareja en "integración OK". Un módulo en rojo o "sin acta" no se ensambla.
2. La batería se conecta al final (§6), con la unidad energizada desde 24 V.
3. Inserta los módulos sin energía y revisa la orientación dos veces. Un XBee al revés o un simpleRTK2B corrido un pin se destruye al encender.
> ⛔ **REGLA 1 — Primero el acta, luego el desarmador.** Abrir el acta de ensamble, seleccionar los
> tres módulos y esperar a que el sitio muestre los tres en **verde (Aprobado)** y la pareja ArduSimple+4G
> con **integración OK**. Si alguno sale en rojo o "sin acta", **no se ensambla** con ese módulo.
>
> ⛔ **REGLA 2 — Batería al final.** El pack 1S4P se conecta en P4 solo en la sección 6, con la unidad
> ya energizada desde 24 V y con el NTC del pack en P4-3.
>
> ⛔ **REGLA 3 — Todo módulo se inserta sin energía**, mirando la orientación dos veces. Un XBee al
> revés o un simpleRTK2B corrido un pin se destruye al encender.
## 0. Número de la unidad
---
## 0. El número de serie de la unidad
El acta lo compone automáticamente al seleccionar los módulos:
El acta lo compone al seleccionar los módulos:
```
HBOX5 - E07 - A010 - R0006
│ │ │ └── módem 4G NTRIP Master RTK-0006
│ │ │ └── módem 4G NTRIP Master RTK-0006
│ │ └────────── simpleRTK2B Pro (ArduSimple) ARD-010
│ └──────────────── EinarBoard V5-07
│ └──────────────── EinarBoard V5-07
└──────────────────────── producto HBOX, tarjeta v5
```
Ese texto va en la **etiqueta exterior** del HBOX (panel, junto al GX16) y en la **etiqueta interior**
(cara interna de la tapa). Un módulo solo puede pertenecer a **una** unidad: el sitio rechaza el acta
si el módulo ya está asignado.
Va en la etiqueta exterior (panel, junto al GX16) y en la interior (cara interna de la tapa). Un módulo pertenece a una sola unidad: el sitio rechaza el acta si ya está asignado.
---
## 1. Material y herramientas
## 1. Material
| Ítem | Notas |
|---|---|
| Gabinete HBOX con panel perforado (GX16-5, 3 × SMA, RJ45, prensaestopas) | según el diseño mecánico vigente |
| EinarBoard **V5-NN** aprobada, con firmware de bring-up **0.5.1 o superior** | ver acta de tarjeta |
| simpleRTK2B Pro **ARD-NNN** y módem 4G NTRIP Master **RTK-NNNN** aprobados e integrados | con sus bolsas |
| Fuente **Mean Well SD-15B-05** (24 V → 5 V) | va dentro del HBOX |
| Pack de batería **1S4P** con NTC (3 hilos → P4) | conectar al final |
| Ventilador 5 V 2 hilos (P6), LED de panel (P8), botón de reset (P10), interruptor de corte (P11), NTC de punto caliente (P12) | arnés interno |
| Pigtails de antena: GNSS SMA-hembra bulkhead → SMA del simpleRTK2B; 2 × LTE SMA bulkhead → u.FL del módulo 4G | |
| Separadores M2.5/M3, tornillería, bridas, fijador de rosca para SMA | |
| Fuente de banco 24 V / 1 A con límite de corriente, multímetro, laptop con terminal serie | |
| Etiquetas: exterior e interior con el número de unidad | impresas desde el acta |
| Gabinete HBOX con panel (GX16-5, 3 × SMA, RJ45, prensaestopas) | Diseño mecánico vigente |
| EinarBoard V5-NN aprobada, firmware 0.5.1 o superior | Acta de tarjeta |
| simpleRTK2B Pro ARD-NNN y módem RTK-NNNN aprobados e integrados | En sus bolsas |
| Mean Well SD-15B-05 (24 V → 5 V) | Va dentro del HBOX |
| Paquete de batería con NTC (3 hilos → P4), química según §2 | Se conecta al final |
| Ventilador 5 V (P6), LED de panel (P8), botón de reset (P10), interruptor de corte (P11), NTC de punto caliente (P12) | Arnés interno |
| Pigtails: GNSS SMA bulkhead → SMA del simpleRTK2B; 2 × LTE SMA bulkhead → u.FL del módem | |
| Separadores M2.5/M3, tornillería, bridas, fijador de rosca | |
| Fuente de banco 24 V / 1 A con límite, multímetro, laptop con terminal serie | |
| Etiquetas exterior e interior | Impresas desde el acta |
---
## 2. Tarjeta (sin energía)
## 2. Preparación de la tarjeta (sin energía)
- [ ] La EinarBoard es la V5-NN seleccionada en el acta (etiqueta cerca de MH4).
- [ ] JP2 coincide con la química del paquete (tabla abajo). Léelo con lupa; serigrafía V5.6: `JP2 = F2 (Li-ion / LFP)`.
- [ ] JP3 (F1) = 0 · JP4 (F0) = 1. Anota JP2, JP3 y JP4 en el acta.
- [ ] JP1 (0R, alimentación del ventilador) presente.
- [ ] P11 abierto, sin jumper; ahí va el interruptor de panel (§4).
- [ ] Tarjeta fija con separadores en MH1–MH6 (MH7–MH12 según el diseño), sin flexionarla; apriete suave.
- [ ] EinarBoard **V5-NN** corresponde a la seleccionada en el acta (leer la etiqueta cerca de MH4).
- [ ] Jumpers del cargador en la posición del pack Li-ion 4.00 V: **JP2 (F2) = 1 · JP3 (F1) = 0 · JP4 (F0) = 1**.
Anotar en el acta la posición de cada uno. *(Si el pack cambia a LiFePO4, ingeniería indicará JP2 = 0.)*
- [ ] Jumper **JP1** (0R, alimentación del ventilador) presente.
- [ ] **P11** (corte) **abierto** — sin jumper; el interruptor de panel se conecta ahí en la sección 4.
- [ ] Tarjeta fijada en la platina/gabinete con separadores en **MH1–MH6** (y MH7–MH12 según el diseño) sin flexionar la tarjeta; tornillos con apriete suave.
| Tarjeta | Paquete | JP2 (3 pads) | RNTB (R55) / NTC del paquete | Flotación | En vacío |
|---|---|---|---|---|---|
| V5.5 | Li-ion 18650 1S4P | 1-2 (F2 alto, Li-ion) | 10 k / NTC 10 k | ≈ 4.0–4.1 V | 3.0–4.2 V |
| V5.6 | LiFePO4 alta temperatura 26650 | 2-3 (F2 bajo, LFP) | 5.6 k / NTC B3380 | 3.50 V | 2.8–3.6 V |
## 3. Módulos enchufables (sin energía)
!!! danger "Química y JP2 cruzados = FALLA"
- Li-ion con JP2 en 2-3: flota a 3.50 V, el paquete nunca se llena y la autonomía es de minutos.
- LFP con JP2 en 1-2: el cargador intenta 4.0 V sobre una celda de 3.6 V máx. Sobrecarga. No se embarca.
- [ ] **simpleRTK2B Pro ARD-NNN** en **MOD1**: alinear el pin **"5V"** del zócalo UNO con el pin 5V del
módulo; las cuatro tiras entran a fondo y parejas; **ninguna** clavija queda fuera del zócalo.
- [ ] **Módem 4G NTRIP Master RTK-NNNN** en **J7/J8** (zócalo XBee de 2 mm de la EinarBoard, **no** en el
simpleRTK2B): la silueta del módulo coincide con la serigrafía; pin 1 (VCC) del lado marcado.
- [ ] SIM presente en el módulo 4G (ya verificada en su acta).
- [ ] Nada toca la tapa ni los separadores; los módulos no rozan componentes altos (K1, C10, L6).
Si no coinciden, detén la unidad y avisa a ingeniería. JP2 no se cambia en banco.
## 4. Panel y arnés interno (sin energía)
## 3. Módulos (sin energía)
Conectar contra el pinout; cada JST hace **clic**.
- [ ] simpleRTK2B ARD-NNN en MOD1: pin "5V" del zócalo UNO alineado con el 5V del módulo; las cuatro tiras a fondo, ninguna clavija fuera.
- [ ] Módem RTK-NNNN en J7/J8 de la EinarBoard (no en el simpleRTK2B): silueta sobre la serigrafía, pin 1 (VCC) del lado marcado.
- [ ] SIM puesta.
- [ ] Nada toca la tapa ni los separadores; los módulos no rozan K1, C10 ni L6.
| Conector | Qué se conecta | Verificar |
## 4. Panel y arnés (sin energía)
Cada JST hace clic.
| Conector | Qué va | Verifica |
|---|---|---|
| **P1** (GX16-5 del panel) | pin 1 = +24 V · pin 2 = GND · pin 3 = ignición · pin 4 = GND | polaridad con multímetro **antes** de conectar al panel |
| **SD-15B-05** | entrada: +24 V/GND del GX16 (empalme en Y) · salida +5 V/GND → **P2** (pin 1 = +5 V) | ajustar salida a **5.0 V** en banco antes de montar |
| **P6** | ventilador (pin 1 = +5V_FAN, pin 2 = retorno) | dirección de flujo: aire **hacia afuera** por la rejilla |
| **P8** | LED de panel (pin 1 = ánodo, pin 2 = cátodo) | LED asoma por el panel |
| **P10** | botón de reset externo | normalmente abierto |
| **P11** | interruptor de corte del panel (2 hilos) | en posición **ON** cierra pin 1–2 |
| **P12** | NTC de punto caliente pegado al módulo 4G o al disipador | con cinta térmica |
| **P4** | **NO conectar todavía** (batería, sección 6) | — |
| Antena **GNSS** | bulkhead SMA del panel → SMA del simpleRTK2B | fijador de rosca, apriete a mano + ¼ vuelta |
| Antenas **LTE (2)** | bulkheads SMA del panel → u.FL del módulo 4G | los u.FL hacen clic; ruta del cable sin dobleces < 10 mm |
| **J10** RJ45 / **P15** RS-485 / **P16** RS-232 | solo si el panel de esta unidad los lleva | tapas ciegas en los que no |
| P1 (GX16-5) | 1 = +24 V · 2 = GND · 3 = ignición · 4 = GND | Polaridad con multímetro antes de conectar |
| SD-15B-05 | Entrada +24 V/GND del GX16 (empalme en Y); salida +5 V/GND → P2 (pin 1 = +5 V) | Salida a 5.0 V en banco antes de montar |
| P6 | Ventilador (1 = +5V_FAN, 2 = retorno) | Aire hacia afuera por la rejilla |
| P8 | LED de panel (1 = ánodo, 2 = cátodo) | Asoma por el panel |
| P10 | Botón de reset | Normalmente abierto |
| P11 | Interruptor de corte (2 hilos) | ON cierra 1–2 |
| P12 | NTC de punto caliente en el módem o el disipador | Cinta térmica |
| P4 | Nada todavía | §6 |
| GNSS | Bulkhead SMA → SMA del simpleRTK2B | Fijador de rosca, a mano + ¼ vuelta |
| LTE (2) | Bulkheads SMA → u.FL del módem | Clic en los u.FL; sin dobleces < 10 mm |
| J10 / P15 / P16 | Solo si el panel los lleva ([conexión](v5-prueba-ethernet-serie.md#conexion-en-la-instalacion)) | Tapas ciegas en los que no |
- [ ] Ningún cable pasa sobre el módulo 4G ni sobre la antena; cables sujetos con bridas al chasis.
- [ ] Ningún cable pasa sobre el módem ni la antena; cables con bridas al chasis.
- [ ] Sin conductores expuestos cerca de 24 V (P1, SD-15B).
## 5. Energizado desde 24 V (unidad abierta, sin batería)
## 5. Energizado desde 24 V (abierta, sin batería)
1. Fuente de banco **24.0 V, límite 1.0 A**, salida apagada, conectada al **GX16** del panel (pin 1 = +, pin 2 = −).
Interruptor de corte (P11) en **ON**. USB-C en **J11** conectado a la laptop, terminal serie a 115200.
2. Encender la salida. En los primeros 10 s:
1. Fuente a 24.0 V, límite 1.0 A, salida apagada, al GX16 (pin 1 = +, pin 2 = −). P11 en ON. USB-C de J11 a la laptop, terminal a 115200.
2. Enciende. En los primeros 10 s:
| Punto | Esperado |
|---|---|
| Corriente de la fuente | **< 150 mA** (etapa RTK aún apagada) |
| **D18** verde | Encendido |
| **D17** azul + LED de panel | Parpadean (firmware de bring-up corriendo) |
| Consola | Encabezado `hbox-v5-bringup`, reporte con **12 PASS**, luego `STAT … v5=4.9–5.1` |
| Ventilador | **Gira** (con 24 V presente el buck U2 se enciende solo) |
| Punto | Esperado |
|---|---|
| Corriente | < 150 mA (etapa RTK apagada) |
| D18 | Encendido |
| D17 y LED de panel | Parpadean |
| Consola | Encabezado `hbox-v5-bringup`, 12 PASS, luego `STAT … v5=4.9–5.1` |
| Ventilador | Gira (U2 se enciende solo con 24 V) |
3. Anotar en el acta: `v5` (debe ser 4.8–5.1 V), `tmp102`, `sht40`.
4. **Encender la etapa RTK desde la consola:** teclear **`P`** y confirmar con **`Y`**. El firmware sube
`PWR_CTRL` y reporta `STACK ON`. En los siguientes 60 s:
3. Anota `v5` (4.8–5.1 V), `tmp102` y `sht40`.
4. Enciende la etapa: `P` y confirma con `Y` (`STACK ON`). En 60 s:
| Punto | Esperado |
|---|---|
| Corriente de la fuente | sube a **250–600 mA** (pico corto al registrar el 4G) |
| simpleRTK2B: LED POWER | Encendido |
| 4G: LED de red | Buscando → registrado (< 2 min) |
| Consola, comando **`n`** | Muestra las tramas `$GNGGA` de PA3: **`fix=1`** (GPS) al minuto, **`fix=4`** (RTK FIX) en < 10 min con antena al cielo; `sats ≥ 10` |
| Punto | Esperado |
|---|---|
| Corriente | 250–600 mA (pico corto al registrar el 4G) |
| simpleRTK2B, LED POWER | Encendido |
| Módem, LED de red | Registrado en < 2 min |
| Consola, tecla `n` | Tramas `$GNGGA` de PA3: `fix=1` al minuto, `fix=4` (RTK FIX) en < 10 min con cielo; `sats ≥ 10` |
5. Anotar en el acta el **tiempo hasta `fix=4`** y el número de satélites.
6. Teclear **`P`** de nuevo para **apagar** la etapa RTK. La corriente debe volver a < 150 mA.
5. Anota el tiempo hasta `fix=4` y los satélites.
6. `P` otra vez apaga la etapa; la corriente vuelve a < 150 mA.
> Si `n` no muestra tramas: el simpleRTK2B no está a 115200 en UART1 (volver al acta del módulo RTK:
> configuración Helgen) o MOD1 está corrido un pin. **Apagar antes de tocar nada.**
`n` sin tramas: el simpleRTK2B no está a 115200 en UART1 (configuración Helgen) o MOD1 está corrido un pin. Apaga antes de tocar.
## 6. Batería y respaldo
1. Con la unidad encendida desde 24 V y la etapa RTK **apagada**: conectar el pack en **P4**
(pin 1 = BAT+, pin 2 = GND, pin 3 = NTC). Medir antes con multímetro: **3.0–4.2 V** entre BAT+ y GND.
2. En la consola, `STAT` debe mostrar **`vbat`** con el voltaje del pack y **`chrg`**: `0` = cargando
(el firmware de bring-up mantiene la carga **deshabilitada**, así que `chrg=1` es lo esperado aquí).
3. **Prueba de respaldo:** apagar la salida de la fuente de 24 V.
1. Con 24 V y la etapa apagada, mide el paquete en vacío (rango en §2) y conéctalo en P4 (1 = BAT+, 2 = GND, 3 = NTC).
2. `STAT` muestra `vbat` y `chrg` (`0` = cargando). Con la etapa apagada el firmware no carga: `chrg=1` es lo esperado.
3. Apaga la fuente de 24 V:
| Punto | Esperado |
|---|---|
| D18, D17 y consola | **Siguen vivos** (el LTC4040 conmuta a batería sin reinicio: el encabezado **no** se vuelve a imprimir) |
| `STAT` | `v5=0.0`, `vbat` con el voltaje del pack |
| Ventilador | Se detiene (no hay 24 V) — correcto |
| Punto | Esperado |
|---|---|
| D18, D17 y consola | Siguen vivos; el encabezado no se reimprime (sin reinicio) |
| `STAT` | `v5=0.0`, `vbat` del paquete |
| Ventilador | Se detiene |
4. Volver a encender 24 V: `STAT` vuelve a `v5≈5.0`. Sin reinicio.
5. Anotar: voltaje del pack, "respaldo OK sin reinicio".
4. Enciende 24 V: `v5≈5.0`, sin reinicio.
5. Anota el voltaje del paquete y "respaldo OK sin reinicio".
## 7. Cierre, etiquetado y registro
## 7. Cierre
- [ ] Etiqueta **exterior** `HBOX5-Exx-Axxx-Rxxxx` en el panel, junto al GX16. Etiqueta **interior** en la tapa.
- [ ] Interruptor de corte en **OFF** para almacenar (evita descargar la batería). Anotarlo en la etiqueta interior.
- [ ] Tapa cerrada con su sello; tornillos en cruz; prensaestopas apretados.
- [ ] Acta de ensamble enviada con resultado **APROBADA**.
- [ ] Etiqueta exterior `HBOX5-Exx-Axxx-Rxxxx` junto al GX16; etiqueta interior en la tapa.
- [ ] P11 en OFF para almacenar (no descarga la batería); anótalo en la etiqueta interior.
- [ ] Tapa con su sello, tornillos en cruz, prensaestopas apretados.
- [ ] Acta de ensamble enviada como APROBADA.
---
Siguiente: [prueba final](v5-prueba-final-unidad.md) y [configuración](v5-configuracion-unidad.md).
## Anexo A — Notas de ingeniería
## Anexo — notas de ingeniería
- **Firmware:** el bring-up **0.2.0** añade el modo de banco (`P` = stack ON/OFF con confirmación,
`n` = monitor NMEA de PA3, 20 s). Mantiene la carga deshabilitada (`CHRG_EN` alto) y K1 liberado.
La unidad ensamblada queda con este firmware hasta que exista el firmware de producción v5
(rediseño de gestión de batería); se re-flashea por J11 sin abrir el HBOX si J11 queda accesible —
**decidir si J11 asoma por el panel o se deja interno.**
- **Corriente en 24 V:** valores orientativos; los reales se fijan con las primeras tres unidades y
se actualizan aquí (bring-up 0.2.0 imprime `v5` pero no mide corriente).
- **Respaldo sin reinicio** es la prueba del LTC4040 + L6/SW_BAT en la tarjeta real (el EMC audit
marcó `/SW_BAT` 0.3 mm como crítico): si alguna unidad reinicia al cortar 24 V, anotar `vbat` y
temperatura — es evidencia para el respin.
- **Modo B / relevador K1:** no se prueba aquí; K1 queda liberado (camino directo F9P ↔ módem).
- El bring-up 0.2.0 añadió el modo de banco (`P` = etapa ON/OFF con confirmación, `n` = monitor NMEA de PA3 por 20 s) con la carga deshabilitada (`CHRG_EN` alto) y K1 liberado. Desde 0.6.0 el gobernador carga solo con etapa ON en 24 V. Se reflashea por J11 sin abrir el HBOX si J11 queda accesible; pendiente decidir si J11 asoma por el panel.
- Las corrientes en 24 V son orientativas; se fijan con las primeras tres unidades (el firmware imprime `v5` pero no mide corriente).
- El respaldo sin reinicio prueba el LTC4040 + L6/`SW_BAT` (0.3 mm, crítico en la auditoría EMC). Si una unidad reinicia al cortar 24 V, anota `vbat` y temperatura para el respin.
- Modo B / K1 no se prueba aquí; K1 queda liberado (F9P ↔ módem directo).
## Historial de revisiones
| Versión | Fecha | Cambios |
|---|---|---|
| 1.0 | 2026-09-17 | Primera versión. |
| 1.1 | 2026-09-29 | Encabezado uniforme y enlaces al flujo de producción. |
| 1.2 | 2026-09-29 | Edición breve. La regla de química del paquete y JP2 (V5.5 y V5.6) vive aquí, en §2. |
Versiones anteriores en git.

View File

@ -1,211 +1,155 @@
---
title: HBOX v5 — Prueba de módulos (simpleRTK2B Pro y 4G NTRIP Master) e integración RTK antes del ensamble
title: "HBOX V5 — Prueba de módulos e integración RTK"
tags: [project-drogheda, hardware, hbox, v5, ardusimple, 4g, ntrip, testing, procedimiento]
date: 2026-09-17
project: Project Drogheda
author: Helgen Technologies
date: 2026-09-17
version: 1.0
status: ACTIVO — se aplica a cada módulo antes de asignarlo a una unidad
version: 1.2
status: ACTIVO
audience: técnicos de banco
---
# HBOX v5 — Prueba de módulos e integración RTK (antes del ensamble)
# HBOX V5 — Prueba de módulos e integración RTK
**Objetivo:** que ningún módulo llegue al ensamble sin haber demostrado que funciona **solo** y **en
pareja**: cada simpleRTK2B Pro obtiene fix GNSS, cada 4G NTRIP Master se registra en la red, y la
pareja RTK + 4G alcanza **RTK FIX** con correcciones NTRIP. Todo queda registrado en las actas
del sitio (`https://drogheda.helgen.online` → Actas).
!!! abstract "Para quién · Cuándo · Tiempo · Necesitas"
- Para quién: técnicos de banco.
- Cuándo: cada simpleRTK2B Pro y cada 4G NTRIP Master antes de asignarlo a una unidad, sin EinarBoard. Paso 2 de producción, entre la [prueba de tarjeta](v5-prueba-y-flasheo.md) y el [ensamble](v5-ensamble.md).
- Tiempo: módulo RTK 10 min · módulo 4G 10 min · integración 15–30 min (depende del cielo).
- Necesitas: laptop con u-center o u-center 2; dos cables USB-C con datos (el simpleRTK2B tiene dos puertos: POWER+GPS y XBEE); antena GNSS multibanda SMA con vista al cielo; dos antenas LTE (u.FL → SMA); una nano-SIM Telcel activa por módem; de ingeniería, la configuración F9P (`.txt` de u-center) y `4G_NTRIP_HelgenSRV-NMEA.local.txt` con credenciales (no se copia a otras máquinas); etiquetas ARD-NNN y RTK-NNNN, bolsas antiestáticas; actas [ArduSimple](../formularios/ardusimple.html), [módem 4G](../formularios/modem4g.html) e [integración](../formularios/integracion.html).
**Duración estimada:** módulo RTK 10 min · módulo 4G 10 min · integración 15–30 min (depende del cielo).
!!! warning "Reglas"
1. Un acta por módulo, con su serie (ARD-010, RTK-0006…), nunca por lote.
2. Sin EinarBoard: el simpleRTK2B se alimenta por su USB y el módem va en el zócalo XBee del simpleRTK2B.
3. Conecta las antenas antes de energizar. Un transmisor LTE sin antena se puede dañar.
> ⛔ **REGLA 1 — Un acta por módulo, con su número de serie.** No se prueba "un lote"; se prueba
> RTK-010, 4G-006, uno por uno.
>
> ⛔ **REGLA 2 — Sin EinarBoard en estas pruebas.** El simpleRTK2B se alimenta por su propio USB y el
> módulo 4G va en el zócalo XBee del simpleRTK2B. La tarjeta EinarBoard entra hasta el ensamble.
>
> ⛔ **REGLA 3 — Antenas siempre conectadas antes de energizar** el módulo 4G y el receptor GNSS.
> Un transmisor LTE sin antena se puede dañar.
## 0. Números de serie
---
| Pieza | Etiqueta | Dónde va |
|---|---|---|
| EinarBoard V5 | V5-01 … V5-15 (30 seleccionables) | Cerca de MH4 (puesta en la prueba de tarjeta) |
| simpleRTK2B Pro (ArduSimple) | ARD-001 … ARD-030 | Blindaje del ZED-F9P, sin tapar SMA ni zócalo XBee |
| 4G NTRIP Master (módem) | RTK-0001 … RTK-0030 (serie hasta RTK-1000) | Blindaje del módem, sin tapar los u.FL |
| Unidad HBOX | HBOX5-E07-A010-R0006 (la calcula el acta de ensamble) | Panel exterior |
## 0. Identidad de cada pieza (números de serie)
El número de unidad sale de sus tres módulos: `E07` = V5-07, `A010` = ARD-010, `R0006` = RTK-0006. "RTK-" es el módem 4G, no el receptor GNSS. Los números no tienen que coincidir: en el acta de ensamble eliges qué módulo aprobado va en cada unidad.
| Pieza | Etiqueta | Rango | Dónde va la etiqueta |
|---|---|---|---|
| EinarBoard v5 | **V5-01 … V5-15** (30 seleccionables) | lote JLC 22-Ago | esquina cerca de MH4 (ya puesta en la prueba de tarjeta) |
| simpleRTK2B Pro (ArduSimple) | **ARD-001 … ARD-030** | consecutivo de 3 dígitos | sobre el blindaje del ZED-F9P, sin tapar el conector SMA ni el zócalo XBee |
| 4G NTRIP Master (módem) | **RTK-0001 … RTK-0030** | consecutivo de 4 dígitos (serie hasta RTK-1000) | sobre el blindaje del módem, sin tapar los conectores u.FL de antena |
| Unidad HBOX (ensamblada) | **HBOX5-E07-A010-R0006** | se calcula sola en el acta de ensamble | panel exterior del HBOX |
En cada acta anota también la etiqueta de fábrica de ArduSimple y, en el módem, IMEI e ICCID de la SIM.
El número de la unidad **se arma con los tres módulos que lleva dentro**: `E07` = EinarBoard V5-07,
`A010` = ArduSimple ARD-010, `R0006` = módem 4G RTK-0006. **Ojo:** la etiqueta "RTK-" es la del **módem 4G**, no la del receptor GNSS. No hace falta que los números coincidan entre sí: el técnico
**selecciona** en el acta de ensamble qué módulo (ya aprobado) va en qué unidad, y el sitio compone el
número. Así, con solo leer la etiqueta del HBOX se sabe qué hay dentro.
## 1. simpleRTK2B Pro — acta ArduSimple
Anota también en cada acta la **etiqueta de fábrica** del módulo (el código que trae impreso
ArduSimple) y, en el 4G, el **IMEI** y el **ICCID de la SIM**. Es lo que después permite rastrear un
módulo en la plataforma.
### 1a. Inspección (sin energía)
---
- [ ] Etiqueta ARD-NNN puesta; etiqueta de fábrica anotada.
- [ ] Pines del zócalo XBee (2 × 10) rectos; SMA firme; sin componentes golpeados.
- [ ] Tira tipo Arduino (entra en MOD1) recta y completa.
## 1. Material
### 1b. Fix GNSS
| Cant. | Ítem |
|---|---|
| 1 | Laptop con **u-center** (u-blox, Windows) o **u-center 2** |
| 2 | Cables USB-C **con datos** (el simpleRTK2B Pro tiene dos puertos USB: **POWER+GPS** y **XBEE**) |
| 1 | Antena GNSS multibanda (SMA) con vista al cielo (ventana con cielo abierto o exterior) |
| 2 | Antenas LTE (u.FL → SMA pigtail según el módulo) |
| 1 | SIM Telcel activa (nano-SIM) por módulo 4G |
| 1 | Archivo de configuración del **ZED-F9P** de Helgen (u-center `.txt`) — lo entrega ingeniería |
| 1 | Archivo de configuración del **4G NTRIP Master** con credenciales reales (`4G_NTRIP_HelgenSRV-NMEA.local.txt`) — lo entrega ingeniería, **no** se copia a otras máquinas |
| — | Etiquetas ARD-NNN (ArduSimple) y RTK-NNNN (módem 4G), marcador, bolsas antiestáticas |
1. Antena GNSS al SMA, con vista al cielo.
2. USB-C POWER+GPS a la laptop.
3. Verifica:
---
| Punto | Esperado |
|---|---|
| LED POWER | Encendido |
| Laptop | Puerto serie u-blox GNSS receiver |
| u-center → Receiver → Connect | Fix Mode de *No Fix* a 3D en < 2 min a cielo abierto |
| Satélites en uso | ≥ 10 |
| LED GPS FIX | Parpadea con fix |
## 2. Módulo simpleRTK2B Pro (ArduSimple) — acta **"Módulo ArduSimple"**
4. Anota en el acta: firmware del ZED-F9P (View → Messages → UBX-MON-VER), satélites y tiempo al primer fix.
### 2a. Inspección visual (sin energía)
Sin fix en 5 min a cielo abierto: prueba otra antena antes de marcar FALLA.
- [ ] Etiqueta **ARD-NNN** puesta y legible; anotar también la etiqueta de fábrica.
- [ ] Pines del zócalo **XBee** (2 hileras de 10) rectos; conector **SMA** firme; sin componentes golpeados.
- [ ] Pines de la tira tipo Arduino (los que entran en MOD1 de la EinarBoard) rectos y completos.
### 1c. Configuración Helgen
### 2b. Energizado y fix GNSS
1. Tools → Receiver Configuration → Load configuration → archivo F9P de Helgen → Transfer file → GNSS.
2. UBX-CFG-CFG → Save current configuration (todas las memorias) → Send.
3. Desconecta y reconecta el USB. Conecta u-center a 115200: debe seguir con fix y `$GNGGA`.
1. Conectar la **antena GNSS** al SMA. Colocarla con vista al cielo.
2. Conectar el USB-C **POWER+GPS** a la laptop.
3. Verificar:
- [ ] Configuración guardada; sobrevive al reinicio.
## 2. Módem 4G NTRIP Master — acta módem 4G
### 2a. Inspección (sin energía)
- [ ] Etiqueta RTK-NNNN puesta; IMEI (etiqueta del módem) e ICCID (SIM) anotados.
- [ ] SIM insertada en la dirección correcta, con clic.
- [ ] Pines XBee (2 × 10, paso 2 mm) rectos; u.FL sin daño.
### 2b. Montaje y configuración
1. Sin energía, inserta el módem en el zócalo XBee del simpleRTK2B. La silueta indica la orientación; no fuerces.
2. Dos antenas LTE a los u.FL; antena GNSS al SMA.
3. Conecta USB POWER+GPS (alimenta todo) y USB XBEE (configuración del módem).
4. Terminal serie en el puerto XBEE a 115200 baud. Envía línea por línea las líneas `$$$AS+…` de `4G_NTRIP_HelgenSRV-NMEA.local.txt`. Cada una contesta `OK` o el eco de ArduSimple.
5. `$$$AS+I=1111` para entrar a configuración; `$$$AS+K=…` con el ID de estación que indique ingeniería.
- [ ] Configuración completa, sin `ERROR`.
- [ ] ID de estación (`AS+K`) anotado.
### 2c. Registro en la red (hasta 2 min)
| Punto | Esperado |
|---|---|
| LED **POWER** | Encendido |
| Laptop | Aparece un puerto serie (u-blox GNSS receiver) |
| u-center → Receiver → Connect | Conecta; **Fix Mode** pasa de *No Fix* a **3D** en < 2 min a cielo abierto |
| Satélites en uso | **≥ 10** (cielo abierto) |
| LED **GPS FIX** | Parpadea cuando hay fix |
| LED de red 4G | De parpadeo rápido (buscando) a lento o fijo (registrado) |
| Comando de estado de ArduSimple por XBEE | Operador Telcel y RSSI |
4. Anotar en el acta: **versión de firmware** del ZED-F9P (u-center → View → Messages → UBX-MON-VER),
satélites en uso, y el tiempo hasta el primer fix.
- [ ] Registrado en Telcel; RSSI anotado si lo reporta.
### 2c. Cargar la configuración de Helgen
Sin registro en 3 min: prueba la SIM en otro módem aprobado. Si la SIM funciona allí y este no registra: FALLA (4G).
1. u-center → **Tools → Receiver Configuration** → *Load configuration* → archivo F9P de Helgen →
**Transfer file → GNSS**.
2. Guardar en el receptor: **UBX-CFG-CFG → Save current configuration** (todas las memorias) → Send.
3. Desconectar y reconectar el USB. Volver a conectar en u-center a la **velocidad configurada por Helgen
(115200)**. Debe seguir mostrando fix y mensajes `$GNGGA`.
## 3. Integración ArduSimple + 4G — acta de integración
- [ ] Configuración cargada y guardada; sobrevive al reinicio.
Se prueba la pareja que irá junta (ARD-NNN + RTK-NNNN); el mismo par se elige en el ensamble. Montaje igual que 2b; el USB XBEE puede quedar conectado para ver mensajes.
> Si el módulo no da fix en 5 min a cielo abierto, probar con otra antena antes de marcarlo FALLA.
---
## 3. Módem 4G NTRIP Master — acta **"Módem 4G"**
### 3a. Inspección visual (sin energía)
- [ ] Etiqueta **RTK-NNNN** puesta; anotar **IMEI** (etiqueta del módem) e **ICCID** (tarjeta SIM).
- [ ] **SIM insertada** en la dirección correcta, con clic.
- [ ] Pines XBee (2 × 10, paso 2 mm) rectos; conectores **u.FL** de antena sin daño.
### 3b. Montaje sobre el simpleRTK2B y configuración
1. **Sin energía**, insertar el módulo 4G en el zócalo **XBee del simpleRTK2B Pro** (el módulo queda
sobre el receptor; el corte de la silueta indica la orientación — nunca forzar).
2. Conectar las **2 antenas LTE** a los u.FL del módulo.
3. Conectar la antena GNSS. Conectar el USB **POWER+GPS** (alimenta todo) **y** el USB **XBEE** (puerto de
configuración del módem).
4. En la laptop abrir un terminal serie en el puerto **XBEE** a **115200 baud** y enviar, línea por línea,
el archivo `4G_NTRIP_HelgenSRV-NMEA.local.txt` (solo las líneas `$$$AS+…`). Cada línea debe contestar
`OK` (o el eco de ArduSimple).
5. Al terminar: `$$$AS+I=1111` para entrar a config y **`$$$AS+K=…`** debe llevar el **ID de estación**
que indique ingeniería para este módulo (se anota en el acta).
- [ ] Configuración enviada completa, sin líneas con `ERROR`.
- [ ] ID de estación (`AS+K`) anotado en el acta.
### 3c. Registro en la red
Esperar hasta 2 min con las antenas LTE conectadas:
| Punto | Esperado |
|---|---|
| LED de **red / 4G** del módulo | Pasa de parpadeo rápido (buscando) a **parpadeo lento o fijo** (registrado) |
| Consulta de estado por el puerto XBEE (comando de estado de ArduSimple) | Reporta operador **Telcel** y señal (RSSI) |
- [ ] Registrado en la red Telcel. Anotar RSSI si el módulo lo reporta.
> Sin registro en 3 min: revisar que la SIM esté activa (probar la SIM en otro módulo aprobado). Si
> la SIM funciona en otro módulo y este no registra → **FALLA (4G)**.
---
## 4. Integración ArduSimple + 4G — acta **"Integración"**
Se hace con la **pareja** que después irá junta en una unidad (ARD-NNN + RTK-NNNN). El acta registra
los dos números; el mismo par se seleccionará en el ensamble.
Montaje: el mismo del punto 3b (4G sobre el simpleRTK2B, dos antenas LTE, antena GNSS al cielo, USB
POWER+GPS conectado; el USB XBEE puede quedar conectado para ver mensajes).
1. u-center conectado al puerto **POWER+GPS** (115200). Esperar fix **3D**.
2. Observar el LED **NO RTK** del simpleRTK2B: encendido = sin correcciones; **parpadeando = RTK FLOAT**;
**apagado = RTK FIX**.
3. En u-center: **Fix Mode** debe llegar a **3D/DGNSS/FIXED** (RTK fixed). Tiempo típico a cielo abierto:
1–5 min tras el registro 4G.
1. u-center en POWER+GPS (115200). Espera fix 3D.
2. LED NO RTK del simpleRTK2B: encendido = sin correcciones; parpadea = RTK FLOAT; apagado = RTK FIX.
3. Fix Mode debe llegar a 3D/DGNSS/FIXED, típicamente 1–5 min después del registro 4G.
| Punto | Esperado | Anotar |
|---|---|---|
| Tiempo desde encendido hasta **RTK FIX** | < 10 min | minutos |
| Fix Mode en u-center | 3D/DGNSS/**FIXED** | — |
| Encendido → RTK FIX | < 10 min | minutos |
| Fix Mode | 3D/DGNSS/FIXED | — |
| Satélites en uso | ≥ 10 | número |
| Precisión estimada (u-center, hAcc) | < 0.05 m en FIX | metros |
| Estabilidad | Se mantiene FIXED **5 min** sin caer a FLOAT (con la antena quieta) | sí/no |
| Plataforma Helgen | Ingeniería confirma que la estación (ID `AS+K`) aparece reportando en el servidor | sí/no |
| hAcc | < 0.05 m en FIX | metros |
| Estabilidad | FIXED 5 min sin caer a FLOAT, antena quieta | sí/no |
| Plataforma | Ingeniería ve la estación (`AS+K`) reportando | sí/no |
- [ ] RTK FIX alcanzado y estable 5 min.
- [ ] Confirmado en plataforma (o anotado "pendiente de confirmar" con hora).
- [ ] RTK FIX estable 5 min.
- [ ] Confirmado en plataforma, o "pendiente" con hora.
> **Si llega a FLOAT pero nunca a FIX:** cielo insuficiente (probar exterior) o punto de montaje
> incorrecto; no es falla del módulo si el módulo 4G ya registró y hay correcciones (LED NO RTK
> parpadea). Si **nunca sale de "encendido"** (sin correcciones): revisar credenciales NTRIP con
> ingeniería antes de marcar FALLA.
FLOAT sin llegar a FIX con el LED NO RTK parpadeando: falta cielo (prueba en exterior) o el mountpoint está mal; no es falla del módulo. LED NO RTK siempre encendido (sin correcciones): revisa credenciales NTRIP con ingeniería antes de marcar FALLA.
### 4b. Cierre
### Cierre
- [ ] Apagar (desconectar USB). Separar el módulo 4G del simpleRTK2B **con cuidado, sin doblar pines**.
- [ ] Guardar cada módulo en su bolsa con su etiqueta. Anotar en la bolsa del ArduSimple: "pareja: RTK-NNNN".
- [ ] Enviar el acta de integración con los dos números.
- [ ] Desconecta el USB. Separa el módem del simpleRTK2B sin doblar pines.
- [ ] Cada módulo en su bolsa con su etiqueta; en la del ArduSimple anota "pareja: RTK-NNNN".
- [ ] Envía el acta de integración.
---
## 4. Criterio de aprobado
## 5. Hoja rápida de estados (para el técnico)
| Módulo | Aprobado cuando… |
| Módulo | Aprobado cuando |
|---|---|
| ARD-NNN | fix 3D, ≥10 sat, configuración Helgen cargada y guardada |
| RTK-NNNN (módem) | SIM registrada en Telcel, configuración enviada sin errores, `AS+K` anotado |
| Pareja ArduSimple + 4G | RTK FIX estable 5 min con correcciones por 4G |
| ARD-NNN | Fix 3D, ≥ 10 satélites, configuración Helgen guardada |
| RTK-NNNN | Registrado en Telcel, configuración sin errores, `AS+K` anotado |
| Pareja | RTK FIX estable 5 min con correcciones por 4G |
Un módulo con **FALLA** no se asigna a ninguna unidad: el acta de ensamble no lo dejará seleccionar.
El acta de ensamble no deja seleccionar un módulo con FALLA. Parámetros del módem y configuración F9P: [Descargas](../descargas/index.md). Configuración final de la unidad: [Configuración de la unidad](v5-configuracion-unidad.md).
---
## Anexo — notas de ingeniería
## Anexo A — Notas de ingeniería
- En la unidad V5 el módem va en J7/J8 de la EinarBoard (mismo footprint XBee), no sobre el simpleRTK2B. El enlace F9P ↔ módem pasa por K1; con K1 liberado (`BYP_CTRL` bajo, estado por defecto) el camino es directo. Por eso la integración se prueba sobre el simpleRTK2B: misma electrónica, sin depender del firmware de la EinarBoard.
- F9P: UART1 a 115200 (lo lee la EinarBoard en PA3/PA2) y UART2 a la velocidad del módem (`AS+B=115200`). El `.txt` del F9P no está en el repo; falta añadirlo a `04-Source-Code/rtk-config/` (sin secretos).
- `AS+K` es la identidad en el servidor secundario (`AS+r/AS+h`). Pendiente decidir si es el número del módem (R0006) o el de la unidad; mientras, el acta lo guarda como texto libre.
- Credenciales (APN, NTRIP) solo en `…local.txt` en la laptop de banco; nunca en git ni en el sitio.
- En la **unidad v5** el módulo 4G **no** va sobre el simpleRTK2B: va en el zócalo **J7/J8** de la
EinarBoard (mismo footprint XBee). El enlace F9P ↔ módem pasa por el relevador **K1**; con K1
liberado (estado por defecto del firmware, `BYP_CTRL` bajo) el camino es directo. Por eso la
prueba de integración se hace con el módulo montado en el simpleRTK2B (misma electrónica, sin
depender del firmware de la EinarBoard).
- Configuración F9P: UART1 a **115200** (es lo que lee la EinarBoard en PA3/PA2) y UART2 a la
velocidad del módem (`AS+B=115200`). El archivo `.txt` del F9P **no está en el repo** — hay que
añadirlo a `04-Source-Code/rtk-config/` (sin secretos) para que este procedimiento sea reproducible.
- El ID de estación `AS+K` es la identidad de la unidad en el servidor secundario (`AS+r/AS+h`).
Decisión pendiente: `AS+K` = número del módem 4G (R0006) o número de unidad. Mientras se decide,
el acta lo registra como texto libre.
- Las credenciales (APN, NTRIP) viven solo en `…local.txt` en la laptop de banco. Nunca en git ni en
el sitio.
## Historial de revisiones
| Versión | Fecha | Cambios |
|---|---|---|
| 1.0 | 2026-09-17 | Primera versión. |
| 1.1 | 2026-09-29 | Encabezado uniforme, enlaces a actas, descargas y configuración. |
| 1.2 | 2026-09-29 | Edición breve: material dentro del encabezado; secciones renumeradas. |
Versiones anteriores en git.

View File

@ -0,0 +1,195 @@
---
title: "HBOX V5 — Prueba de banco: Ethernet y puertos serie"
tags: [project-drogheda, hardware, hbox, v5, v5.6, ethernet, w5500, rs485, rs232, sc16is752, testing, procedimiento]
project: Project Drogheda
author: Helgen Technologies
date: 2026-09-29
version: 1.1
status: ACTIVO — obligatoria en al menos una V5.5 antes de pedir la V5.6; después, en toda unidad con RJ45 o clemas serie
audience: técnicos de banco
---
# HBOX V5 — Prueba de banco: Ethernet y puertos serie
!!! abstract "Para quién · Cuándo · Tiempo · Necesitas"
- Para quién: técnicos de banco.
- Cuándo: al menos una V5.5 antes de pedir la V5.6 (Ethernet nunca se había probado en tarjeta real y la V5.6 copia el bloque); después, toda unidad V5.5/V5.6 con RJ45 o clemas serie en el panel, dentro de la [configuración de la unidad](v5-configuracion-unidad.md).
- Tiempo: Ethernet 15 min · serie 15 min.
- Necesitas: unidad V5 ensamblada (o tarjeta + simpleRTK2B para ver NMEA); 24 V al GX16 (o 5.3 V / 3 A en P2); laptop con terminal serie a 115200 grabando y `nc` (macOS/Linux) o `ncat` (Windows); binario de banco `hbox-v5-bringup_0.6.0-eth.bin` (lo compila ingeniería con `-DENABLE_ETH=1` y entrega su SHA-256) <!-- VERIFICAR: nombre y SHA-256 del binario -eth publicado -->; cable Ethernet directo cat 5e de 1–3 m (el W5500 hace Auto-MDIX); adaptadores USB-RS485 y USB-RS232 (DB9 macho) con 3 cables con puntera; multímetro; desarmador plano 2.5 mm; [acta Ethernet y puertos serie](../formularios/ethernet-serie.html).
!!! warning "Reglas"
1. Nunca pruebes Ethernet solo en batería ni solo por USB: el W5500 cuelga de `3V3_ETH`, que sale del 5 V del sistema. Sin 5 V el firmware lo deja en reset.
2. 5 V del sistema ≥ 5.2 V (SD-15B o fuente a ~5.3 V). Con menos, la ráfaga LTE lleva el riel al PFI 4.60 V del LTC4040 y la tarjeta se reinicia.
3. Con fuente de banco en P2 y sin 24 V, sin paquete de batería. Lo normal: 24 V al GX16 y el SD-15B interno.
## A. Ethernet (build `0.6.0-eth`)
### A1. Laptop (una vez)
1. Adaptador Ethernet en IP manual 192.168.7.1, máscara 255.255.255.0, sin gateway. Con un switch con DHCP la unidad toma IP del DHCP pero sigue buscando el servidor en 192.168.7.1; usa cable directo.
2. Firewall: permite entradas a 5010/TCP o desactívalo durante la prueba.
3. Deja escuchando:
```bash
nc -lk 5010 # macOS / Linux
ncat -lk 5010 # Windows (Nmap)
```
### A2. Flasheo del build de banco
1. DFU por J11, solo USB, sin 24 V ([flasheo §5](v5-prueba-y-flasheo.md#5-flasheo-por-usb-dfu-j11-5-min)).
2. `dfu-util -a 0 -s 0x08000000:leave -D hbox-v5-bringup_0.6.0-eth.bin` o STM32CubeProgrammer.
3. Terminal en J11: primera línea `hbox-v5-bringup 0.6.0-eth`; la ayuda (`h`) lista `E=Ethernet on/off`.
El build `-eth` es solo de banco: al terminar reflashea `hbox-v5-bringup_0.6.0.bin` (ver C).
### A3. Secuencia
1. Cable entre J10 y la laptop. Sin 24 V los LEDs de J10 quedan apagados (correcto: el USB no alimenta el W5500).
2. Energiza 24 V + ignición (P11 en ON). En los primeros ~15 s:
| Paso | Consola | Significa |
|---|---|---|
| a | `>>> BOARD OK` · `EVT … STACK ON reason=auto` | Tarjeta y etapa bien |
| b | `EVT ETH W5500 OK en SPI2 (W5500) mac=02:48:42:xx:xx:xx ip_estatica=192.168.7.2 — esperando cable` | El chip responde (`$PHEV … ETH_HW,ok`) |
| c | LED de enlace de J10 encendido, actividad parpadea | PHY con enlace |
| d | `EVT ETH sin DHCP en 4 s -> IP estatica` (directo) o `ETH enlace ARRIBA ip=<dhcp> (DHCP)` (switch) | Dirección obtenida |
| e | `EVT ETH enlace ARRIBA ip=192.168.7.2 (estatica) gw=… -> servidor 192.168.7.1:5010` | Listo para conectar |
| f | `EVT ETH conectado a 192.168.7.1:5010 (n=1): NMEA + $PHLG + $PHEV en espejo` | Socket abierto |
3. En `nc` llega primero la identidad y luego el flujo. `$PHID` se repite cada 5 min; con la etapa apagada o sin simpleRTK2B solo llegan `$PHLG`/`$PHEV`.
```
$PHID,<UID 24 hex>,0.6.0-eth,EinarBoard v5 (HBOX v5),02:48:42:xx:xx:xx,<up_s>*CS
$PHLG,0.6.0-eth,RUN,…
$GNGGA,…
$GNRMC,…
```
4. `s`: `STAT … eth=CONECTADO ip=192.168.7.2 lineas=N bytes=… drop=0 conn=1`. `lineas` sube; `drop` queda en 0.
5. Cable: desconecta el RJ45 10 s → `EVT ETH cable desconectado — esperando enlace`; al reconectar, `enlace ARRIBA` y `conectado (n=2)` en < 10 s.
6. Servidor: cierra `nc` (Ctrl-C) → `EVT ETH servidor desconectado … reintento en 5 s`; relanza `nc -lk 5010` y reconecta solo.
7. Tecla `E` → `ETH OFF (operador)`, LEDs de J10 apagados; `E` otra vez repite b–f.
8. Sin 5 V: quita los 24 V con batería puesta → `EVT ETH OFF (sin_5V): W5500 en reset` y `eth=off`. Al volver los 24 V, reset del MCU (0.5.9+) y la secuencia completa.
9. Guarda el log de consola y la captura de `nc` (`nc -lk 5010 | tee H00xx_eth.txt`) para el acta.
### A4. Aceptación
| Criterio | Pasa si |
|---|---|
| Hardware | `ETH W5500 OK en SPI2` en cada arranque con 5 V, nunca `NO responde` |
| Enlace | LED de enlace ON con cable; `enlace ARRIBA` < 10 s tras conectar |
| Dirección | Toma DHCP si hay servidor; si no, 192.168.7.2 en ≤ 5 s |
| Espejo | `$PHID` primero; NMEA + `$PHLG` continuos ≥ 5 min; `drop=0` |
| Recuperación | Cable y servidor se recuperan solos en < 10 s |
| No interferencia | Con Ethernet conectado: `modoB=ON`, `phlg_aire` sube, el monitor ve la unidad por 4G, `v5min ≥ 4.9` |
### A5. Fallas
| Síntoma | Revisa |
|---|---|
| `EVT ETH W5500 NO responde en SPI2 … — 3V3_ETH? U11? reintento en 10 s` (`$PHEV … ETH_HW,fail`) | `3V3_ETH` (salida de U12 / J10 pin 4 TCT) = 3.3 V. Con 0 V: U12 o su enable, `SYS5V` (¿P11 cerrado?). Con 3.3 V: SPI2 (PB12 CS, PB13 SCK, PB14 MISO, PB15 MOSI) y RST en PA15 (en V5.5 flota sin pull-down; V5.6 lleva R112 4.7 k), cristal Y1 25 MHz, soldadura de U11 (QFN 48) |
| `W5500 OK` pero nunca `enlace ARRIBA` | Otro cable; adaptador de la laptop activo; J10 (pines doblados; el HR911105A trae los magnéticos dentro y un golpe los rompe); pares J10 1-2 / 3-6 |
| `enlace ARRIBA` sin `conectado` (`eth=buscando_srv`) | IP de la laptop ≠ 192.168.7.1/24, `nc` sin escuchar, firewall, dos adaptadores en la misma subred |
| `conectado` sin datos en `nc` o `drop` sube | `nc` sin `-k` se cerró tras el primer cliente; terminal congelada |
| Reinicio al conectar Ethernet | `v5min` < 4.6: SD-15B o fuente (regla 2) |
| Bien con cable directo, mal con switch | DHCP en otra subred y servidor fijo en 192.168.7.1: usa cable directo o pide build con `-DETH_SERVER_IP=` |
## B. Puertos serie (P15 RS-485, P16 RS-232)
### B0. Qué prueba cada firmware
| Firmware | Prueba | Secciones |
|---|---|---|
| 0.6.0 / 0.6.0-eth | Presencia del SC16IS752 y niveles estáticos | B1, B2 |
| 0.6.1 (planeado) | Lazo interno y eco externo a 9600 8N1 | B3, B4 |
### B1. Presencia (0.6.x)
Tarjeta energizada (USB basta). Teclea `r` y busca:
```
[PASS] I2C SC16IS752 U10 @0x4D ACK
[PASS] SC16IS752 0x4D ACK, SPR rd=0xA5 (exp A5), LSR=0x60
```
`[FAIL] … no ACK at 0x4D`: U10 sin alimentación, soldadura o dirección (A0, A1 a GND). `SPR rd=` ≠ `A5`: U10 dañado o Y2 no oscila (marcado `3.6864`).
### B2. Niveles estáticos (0.6.x, sin nada en las clemas)
| Punto (negro a P15.3 / P16.3) | Esperado | Si no |
|---|---|---|
| P16.1 (TX RS-232) | −5 a −6.5 V (reposo del MAX3232) | ≈ 0 V: U15 sin 3V3 o bomba de carga muerta; ≈ +5 V: T1IN bajo = U10 en reset |
| P16.2 (RX RS-232) | ≈ 0 V (pull-down interno de R1IN) | — |
| P15.1 (A) y P15.2 (B) a GND | Ambas 1–3 V <!-- VERIFICAR: el SP3485 no polariza A/B en recepción; medir en la primera V5.5 y fijar el rango --> | Ambas 0 V con 3V3 presente: U14 sin VCC |
| P15.1 – P15.2 con JP5 cerrado | 0 V ± 0.2 (driver desactivado, línea terminada) <!-- VERIFICAR: estado por defecto de SER_DEA (DE/~RE de U14) tras reset del SC16IS752; si el driver arranca activo se leerá ≈ +2 V (marca) --> | ≈ 0 con JP5 abierto también es normal |
| Ohms P15.1–P15.2, tarjeta apagada | JP5 abierto > 10 kΩ · cerrado ≈ 120 Ω (R82) | — |
### B3. Lazo interno (0.6.1)
No cablees P15 con P16: son eléctricamente distintos. El lazo de 0.6.1 une TX→RX de cada canal dentro del SC16IS752 (MCR bit 4), sin cable: tecla de consola de 0.6.1 <!-- VERIFICAR: tecla y texto de salida del auto-test de lazo en 0.6.1 --> → `[PASS] SER_LOOP_A` / `[PASS] SER_LOOP_B`. Prueba U10 y el cristal, no los transceptores ni las clemas.
### B4. Eco externo con adaptadores (0.6.1, 9600 8N1)
En modo eco, lo que entra por un puerto sale por el mismo.
RS-485 (P15):
1. JP5 según la [regla de terminación](#conexion-en-la-instalacion). En banco, bus de dos nodos: ciérralo solo si el adaptador también termina. Anota la posición.
2. A → P15.1, B → P15.2, GND → P15.3. Par trenzado, ≤ 3 m.
3. Terminal en el adaptador a 9600 8N1, sin eco local. Envía `HELGEN-485 0123456789\r\n` diez veces (o 1 kB).
4. Pasa con 10/10 líneas idénticas.
5. Sin respuesta: intercambia A y B (muchos adaptadores rotulan D+/D− al revés); si sigue, vuelve a B2.
RS-232 (P16):
1. Cable de 3 hilos: P16.1 TX → DB9 pin 2 (RXD) · P16.2 RX → DB9 pin 3 (TXD) · P16.3 GND → DB9 pin 5. Sin control de flujo.
2. Terminal a 9600 8N1. Envía `HELGEN-232 0123456789\r\n` diez veces.
3. Pasa con 10/10 idénticas. Basura o nada: invierte pines 2↔3 y revisa B2.
### B5. Aceptación
| Prueba | Pasa si | Firmware |
|---|---|---|
| Presencia U10 | `[PASS] SC16IS752 … SPR rd=0xA5` | 0.6.0+ |
| Niveles RS-232 | P16.1 en −5…−6.5 V en reposo | 0.6.0+ |
| Niveles RS-485 | A y B con nivel (no 0/0); 120 Ω A-B solo con JP5 cerrado | 0.6.0+ |
| Lazo interno | `SER_LOOP_A` y `SER_LOOP_B` en PASS | 0.6.1 |
| Eco RS-485 / RS-232 | 10/10 idénticas a 9600 8N1 | 0.6.1 |
Sin 0.6.1 el resultado se registra como "presencia + niveles OK". Basta para ordenar la V5.6 (el bloque serie no cambia). El eco se agrega al mismo acta cuando salga 0.6.1.
## Conexión en la instalación
| Conector | Pin 1 | Pin 2 | Pin 3 | Notas |
|---|---|---|---|---|
| P15 RS-485 | A | B | GND | Semidúplex, 2 hilos. JP5 = terminación 120 Ω (R82) entre A y B |
| P16 RS-232 | TX (sale) | RX (entra) | GND | ±5 V (MAX3232). El HBOX es DTE |
- JP5 (puente de soldadura, abierto de fábrica): un bus RS-485 se termina solo en sus dos extremos. Ciérralo solo si el HBOX es un extremo; en un bus de dos nodos se cierran los dos; nunca en un nodo intermedio.
- RS-232 contra otro DTE (laptop, PLC con DB9 macho): cruzado como en B4. Contra un DCE (módem, DB9 hembra): directo.
- Clemas Phoenix MC 1,5 de 3 vías (paso 3.5 mm): alambre 0.2–1.5 mm² (AWG 24–16), pelado 7 mm, sin estañar (o con puntera). RS-485 en par trenzado con GND en el mismo cable.
- No hay PoE (J10 pines 7/8 sin conectar): la unidad sigue necesitando 24 V.
## C. Cierre
- [ ] Si la unidad se embarca, reflashea `hbox-v5-bringup_0.6.0.bin` y anótalo en el [acta de reflasheo](../formularios/reflasheo.html).
- [ ] Retira cable y adaptadores; tapas ciegas en J10/P15/P16 que el panel no use.
- [ ] Envía el [acta Ethernet y puertos serie](../formularios/ethernet-serie.html) con los dos logs.
## Anexo — notas de ingeniería
- `ethService()`: `RST` alto → 150 ms → `Ethernet.begin` estático (prueba el chip y lee el PHY) → con cable, DHCP con 4 s (K1 liberado mientras, `relayDisengage("eth_dhcp")`) o estática → `connect()` con timeout 300 ms, reintento 5 s. Escrituras no bloqueantes (`availableForWrite`); descartes en `drop=`. MAC `02:48:42:` + hash del UID. Eventos en banda: `ETH_HW`, `ETH_UP`, `ETH_LINK`, `ETH_CONN`, `ETH_DISC`, `ETH_OFF`.
- Defaults del build: DHCP, y si no hay respuesta en 4 s estática 192.168.7.2/24 (`-DETH_DHCP=0`, `-DETH_IP=192,168,1,50`); servidor 192.168.7.1:5010, reintento 5 s (`-DETH_SERVER_IP=`, `-DETH_SERVER_PORT=`); activo solo con 5 V, nunca en batería ni por USB. IP y servidor son banderas de compilación: otro valor = otro `.bin` de ingeniería. No hay build de campo con Ethernet y el servidor htracker no escucha el espejo; la unidad reporta por 4G.
- V5.6 añade R112 4.7 k pull-down en `ETH_RST` (PA15) y C90 4.7 µF / C91 10 nF. `W5500 NO responde` intermitente en V5.5: sospecha PA15 flotando antes de que el firmware tome el pin.
- SC16IS752: 0x4D (A1 = A0 = GND, I²C), IRQ en PB8 (R81 10 k), Y2 3.6864 MHz (`XTAL_FREQ 3686400` → 9600 = divisor 24). Canal A → U14 SP3485 (DE y ~RE unidos en `SER_DEA`); canal B → U15 MAX3232 (canal 2 sin usar: T2IN y R2IN a GND). En 0.6.0 no hay tráfico de aplicación y el protocolo con el equipo del cliente está por definir.
- Netlist V5.6 (`p5ntc-after.xml`): P15.1 `RS485_A`, P15.2 `RS485_B`, P15.3 GND; JP5.1 `RS485_T` (R82 120 Ω → A), JP5.2 `RS485_B`; P16.1 `RS232_TX` (T1OUT), P16.2 `RS232_RX` (R1IN), P16.3 GND; J10 1/2 TX±, 3/6 RX±, 4 TCT (3V3_ETH), 5 RCT, 7/8 NC, 9–12 LEDs.
## Historial de revisiones
| Versión | Fecha | Cambios |
|---|---|---|
| 1.0 | 2026-09-29 | Primera versión: Ethernet con `0.6.0-eth` y puertos serie (presencia, niveles, lazo y eco para 0.6.1). |
| 1.1 | 2026-09-29 | Edición breve; recibe de la configuración de la unidad la tabla de conexión, la regla de JP5 y los defaults de Ethernet. |
Versiones anteriores en git.

View File

@ -1,82 +1,97 @@
# HBOX v5 — Prueba final de unidad ensamblada con firmware 0.5.1 (field-minimum + telemetría y eventos)
---
title: "HBOX V5 — Prueba final de unidad ensamblada"
tags: [project-drogheda, hardware, hbox, v5, testing, prueba-final, procedimiento]
date: 2026-09-18
project: Project Drogheda
author: Helgen Technologies
version: 1.2
audience: técnicos de banco
---
**Alcance:** unidad completa (EinarBoard V5 + ArduSimple + módem 4G + batería + antenas) dentro del HBOX, antes de embarcar.
**Firmware:** `hbox-v5-bringup_0.5.1.bin` (SHA-256 `e1f35108…`) — descarga en <https://drogheda.helgen.online/descargas/>.
**Duración:** ~45 min por unidad (P1–P6). Registrar todo en el acta de ensamble (`HBOX5-Exx-Axxx-Rxxxx`).
# HBOX V5 — Prueba final de unidad ensamblada
!!! warning "Lo que 0.5.1 NO hace"
**No carga la batería** (cargador apagado). El paquete es de un solo uso: sostiene la unidad cuando se va el 5 V del vehículo
hasta 3.40 V y después la unidad solo funciona con alimentación del vehículo. Las unidades regresan a laptop (DFU en J11, 2 min)
cuando salga el firmware de producción. Anotar en el acta: *«fw 0.5.1-fm, cargador OFF»*.
!!! abstract "Para quién · Cuándo · Tiempo · Necesitas"
- Para quién: técnicos de banco.
- Cuándo: unidad V5.5/V5.6 recién ensamblada, antes de embarcar. Paso 4 de producción, entre el [ensamble](v5-ensamble.md) y la [configuración](v5-configuracion-unidad.md).
- Tiempo: ~45 min por unidad (P1–P6).
- Necesitas: arnés GX16 real con fuente de 24 V, cable USB-C en J11, laptop con terminal a 115200 grabando, antenas con cielo, monitor abierto. Se registra en el [acta de ensamble](../formularios/ensamble.html).
Firmware: el binario V5 vigente de [Descargas](../descargas/index.md). Abajo `X.Y.Z` es la versión que flasheaste. Hasta 0.5.9 el cargador está apagado (paquete de un solo uso hasta 3.40 V); desde 0.6.0 carga con 24 V y etapa ON (`carga=`, `ltc=CARGANDO`).
## 0. Preparación
- Consola: cable USB-C en **J11**, PuTTY/CoolTerm **115200**. Cada línea es `STAT`, `EVT` o `$PHLG`; teclear `l` para la leyenda.
- Fuente: **24 V** en P1 (entrada + ignición) a través del arnés GX16 real; el SD-15B interno da el 5 V. Batería en P4. NTC en P12 si la unidad lo lleva.
- Antenas GNSS y LTE conectadas; SIM instalada; módem en su socket.
- **Antes de energizar — verificación del arnés GX16 con la fuente APAGADA (obligatoria; la EinarBoard 006 murió por un cruce aquí):**
continuidad GX16 pin 1 → P1.1 (24V_IN) · pin 2 → GND · pin 3 → P1.3 (IGN_IN); **ninguna continuidad entre pin 1 / pin 3 y P2.1 (5 V)**.
El 5 V de P2 solo puede venir de la salida del SD-15B. Con 24 V en P2 el LTC4040 (máx 5.5 V) y el MCU se pierden.
- NTC de punto caliente: conector **P12** (2 pines, NTC 10 k B3950). Es la única NTC que ve el MCU (`tntc`); la NTC del paquete en **P4 pin 3**
va solo al LTC4040 y **no aparece en telemetría** por diseño. Sin NTC en P12 el monitor muestra «n/d».
- Guardar el log completo de la consola: `HBOX5-Exx-Axxx-Rxxxx_prueba-final.txt` (adjuntarlo al acta).
## P1 — Arranque autónomo (2 min)
Energizar 24 V (con ignición) y **no tocar la consola**.
1. Con la fuente apagada, verifica el arnés GX16 (obligatorio; la EinarBoard 006 murió por un cruce aquí): pin 1 → P1.1 (24V_IN), pin 2 → GND, pin 3 → P1.3 (IGN_IN), y ninguna continuidad de pin 1 o pin 3 a P2.1 (5 V). El 5 V de P2 solo sale del SD-15B; 24 V en P2 destruye el LTC4040 (máx 5.5 V) y el MCU.
2. Consola: USB-C en J11, PuTTY o CoolTerm a 115200. Cada línea es `STAT`, `EVT` o `$PHLG`; `l` muestra la leyenda.
3. 24 V en P1 (entrada + ignición) por el arnés GX16; el SD-15B da el 5 V. Batería en P4. Antenas GNSS y LTE, SIM y módem puestos.
4. NTC de punto caliente en P12 (10 k B3950) si la unidad la lleva. Es la única que ve el MCU (`tntc`); la NTC del paquete (P4 pin 3) va solo al LTC4040 y no sale en telemetría. Sin NTC en P12 el monitor muestra "n/d".
5. Graba el log completo como `HBOX5-Exx-Axxx-Rxxxx_prueba-final.txt` para el acta.
## P1. Arranque autónomo (2 min)
Energiza 24 V con ignición. No toques la consola.
| Esperado | Si falla |
|---|---|
| Banner `hbox-v5-bringup 0.5.1` · `modo=AUTO` · `inputs at boot: v5=5.2–5.4V(ok) ign=ON` | otra versión → re-flashear; `ign=OFF` → arnés pin 3 / divisor 22k-10k |
| `---- RESULT: 12 PASS / 0 FAIL ----` · `>>> BOARD OK` | cualquier `[FAIL]` → tarjeta a revisión, no embarcar |
| `EVT … STACK ON reason=auto` **sin teclear nada** (≈10 s tras el banner) | no enciende → `STAT` muestra `v5=` bajo 4.5 o `modo=MAN` (teclear `A`) |
| `EVT … NMEA primera trama` < 3 s después · `EVT FAN ON (vehiculo: 5V+ign)` | sin NMEA → ArduSimple no arranca: medir SW_5V (MOD1 pin 5) ≈ 5 V |
| LED RGB **azul** (etapa ON sin RTK) o **verde** (RTK); gauge DB1–DB4 según `vbat` | RGB rojo con `stack=ON` → PCF8574 / cableado LEDs |
| Banner `hbox-v5-bringup X.Y.Z` · `modo=AUTO` · `inputs at boot: v5=5.2–5.4V(ok) ign=ON` | Otra versión: reflashea. `ign=OFF`: arnés pin 3 / divisor 22k-10k |
| `---- RESULT: 12 PASS / 0 FAIL ----` · `>>> BOARD OK` | Cualquier `[FAIL]`: tarjeta a revisión, no se embarca |
| `EVT … STACK ON reason=auto` sin teclear, ≈10 s tras el banner | `STAT` con `v5=` < 4.5 o `modo=MAN` (teclea `A`) |
| `EVT … NMEA primera trama` < 3 s después · `EVT FAN ON (vehiculo: 5V+ign)` | Sin NMEA: mide SW_5V (MOD1 pin 5) ≈ 5 V |
| LED RGB azul (sin RTK) o verde (RTK); DB1–DB4 según `vbat` | RGB rojo con `stack=ON`: PCF8574 / cableado de LEDs |
## P2 — Riel y módem (10 min)
Dejar la unidad 10 min encendida con el módem registrándose (LEDs del módem / la unidad aparece en el servidor).
## P2. Riel y módem (10 min)
Deja la unidad 10 min encendida mientras el módem se registra.
| Esperado | Si falla |
|---|---|
| `STAT … v5=5.2x–5.3x(ok)` **todo el tiempo**; nunca `(BAJO)` ni `EVT V5 BAJO`; **`v5min` ≥ 4.9 V** en todas las STAT | `BAJO` o `v5min` < 4.6 → el riel cae con la ráfaga LTE: SD-15B ajustado a ~5.3 V en P2 (memo 24-Jul, PFI LTC4040) |
| `tbat`/`tair`/`tmcu` estables (< 45 °C en banco) · `i2cerr=0` | `i2cerr` subiendo → bus I²C / soldadura U3/U4/U13 |
| `$PHLG,0.5.1-fm,RUN,…` cada 10 s, `rec=0`, sin `LIMP` | `rec` > 0 sin causa → NMEA intermitente: revisar MOD1 / UART1 F9P |
| **Modo B:** ≈10 s tras la primera NMEA, `EVT MODOB ON`; luego `STAT … modoB=ON relay=` (sube cientos/s) `phlg_aire=` (+1 cada 30 s) | `modoB=off` permanente → sin NMEA en PA3 o `B` bloqueado; `relay=0` con `modoB=ON` → K1 / PA10 |
| **Servidor:** en ≤ 2 min la unidad `H00xx` muestra la columna **Salud** (fw `0.5.1-fm`, vbat, temperaturas, `v5min`) y en el log del servidor los `$PHEV` (BOOT, STACK_ON, MODOB_ON) y sigue reportando posición 1 Hz | posición sí pero sin Salud → el módem no reenvía la `$PHLG`: revisar `$$$AS+` (modo transparente) |
| `v5=5.2x–5.3x(ok)` siempre; nunca `(BAJO)` ni `EVT V5 BAJO`; `v5min` ≥ 4.9 V en cada `STAT` | `BAJO` o `v5min` < 4.6: el riel cae con la ráfaga LTE; ajusta el SD-15B a ~5.3 V (PFI del LTC4040) |
| `tbat`/`tair`/`tmcu` estables (< 45 °C) · `i2cerr=0` | `i2cerr` sube: I²C / soldadura U3, U4, U13 |
| `$PHLG,X.Y.Z,RUN,…` cada 10 s, `rec=0`, sin `LIMP` | `rec` > 0: NMEA intermitente, revisa MOD1 / UART1 del F9P |
| Modo B: ≈10 s tras la primera NMEA, `EVT MODOB ON`; `modoB=ON`, `relay=` sube cientos/s, `phlg_aire=` +1 cada 30 s | `modoB=off` fijo: sin NMEA en PA3 o `B` bloqueado. `relay=0` con `modoB=ON`: K1 / PA10 |
| Servidor: en ≤ 2 min `H00xx` muestra Salud (fw, vbat, temperaturas, `v5min`), llegan `$PHEV` (BOOT, STACK_ON, MODOB_ON) y posición a 1 Hz | Posición sin Salud: el módem no reenvía `$PHLG`; revisa `$$$AS+` (modo transparente) |
## P3 — Respaldo de batería (6 min) — **la prueba que nunca se había hecho en v5**
Con la etapa ON: **desconectar el 24 V** (se va el 5 V del SD-15B). Esperar 5 min. Reconectar.
## P3. Respaldo de batería (6 min)
Con la etapa ON, desconecta los 24 V. Espera 5 min y reconecta.
| Esperado | Si falla |
|---|---|
| `EVT V5 PERDIDO` → `EVT BACKUP inicio vbat=4.0x` (la etapa **sigue ON**) · RGB **amarillo** | la etapa se apaga / la tarjeta se reinicia (`reset=POR`) → el LTC4040 no sostiene: medir MAIN5V (C32) durante el corte, esperado 4.79 V |
| `STAT … stack=ON backup=Ns nmea=` **sigue contando** 5 min · `fan` según termostato (normalmente OFF) | `nmea` se detiene → SW_BAT/L6 (pista 0.3 mm, auditoría EMC) o paquete flojo en P4 |
| al reconectar: `EVT V5 PRESENTE` → `EVT BACKUP fin dur≈300s nmea_durante=N … SOSTUVO` | — |
| `EVT V5 PERDIDO` → `EVT BACKUP inicio vbat=4.0x`, etapa sigue ON, RGB amarillo | La etapa se apaga o la tarjeta reinicia (`reset=POR`): mide MAIN5V (C32) durante el corte, esperado 4.79 V |
| `stack=ON backup=Ns nmea=` sigue contando 5 min; ventilador según termostato (normalmente OFF) | `nmea` se detiene: SW_BAT/L6 (pista 0.3 mm) o paquete flojo en P4 |
| Al reconectar: `EVT V5 PRESENTE` → `EVT BACKUP fin dur≈300s nmea_durante=N … SOSTUVO` | — |
## P4 — Cielo abierto: primer RTK (10 min)
Con antena GNSS con cielo despejado y base activa (`$$$AS+` configurado):
## P4. Primer RTK a cielo abierto (10 min)
Antena con cielo despejado y base activa (`$$$AS+` configurado).
| Esperado | Si falla |
|---|---|
| `EVT GGA fix … -> RTK FLOAT(5)` y luego `-> RTK FIX(4)`; `STAT … gga=RTK_FIX sats≥10 hdop<1.5` · RGB **verde** | se queda en `GPS(1)`: correcciones no llegan → módem/NTRIP (`$$$AS+`), no el F9P |
| `$PHLG … RUN,OK,4,…` | `link=DEGR` permanente = NMEA sí, RTK no |
| `EVT GGA fix … -> RTK FLOAT(5)` y luego `-> RTK FIX(4)`; `gga=RTK_FIX sats≥10 hdop<1.5`; RGB verde | Se queda en `GPS(1)`: no llegan correcciones; revisa módem/NTRIP (`$$$AS+`), no el F9P |
| `$PHLG … RUN,OK,4,…` | `link=DEGR` fijo: NMEA sí, RTK no |
## P5 — Recuperación de enlace (4 min, solo 1 unidad de muestra por lote)
Con la etapa ON y > 90 s de encendida: **retirar el ArduSimple del socket** (o su UART1) y cronometrar.
## P5. Recuperación de enlace (4 min, una unidad por lote)
Con la etapa ON más de 90 s, retira el ArduSimple del zócalo (o su UART1) y cronometra.
| Esperado | Si falla |
|---|---|
| `EVT NMEA PERDIDO >5 s` → a los 60 s `EVT RECOVERY #1 sin NMEA 60s -> ciclo de etapa 5 s` → `STACK OFF reason=no_nmea` → 5 s → `STACK ON reason=recovery` · RGB **magenta** | no cicla → `modo=MAN` o < 90 s de gracia |
| Reinsertar el ArduSimple → `NMEA primera trama`; `STAT … rec=1` | — |
| `EVT NMEA PERDIDO >5 s` → a los 60 s `EVT RECOVERY #1 sin NMEA 60s -> ciclo de etapa 5 s` → `STACK OFF reason=no_nmea` → 5 s → `STACK ON reason=recovery`; RGB magenta | No cicla: `modo=MAN` o < 90 s de gracia |
| Al reinsertar: `NMEA primera trama`; `rec=1` | — |
## P6 — Apagado y acta (2 min)
- Quitar ignición: `EVT IGN OFF`, `EVT FAN OFF (bateria: termostato)`; la etapa sigue ON mientras haya 5 V (el SD-15B sigue con 24 V).
- Quitar 24 V: si la batería está, entra `BACKUP` (P3); dejarla hasta `SLEEP` **no** es necesario — reconectar y apagar con `P`.
- Guardar el log. En el acta: versión (`0.5.1-fm`), `uid=` del banner, resultado P1–P5, `vbat` final, y la nota *cargador OFF*.
## P6. Apagado y acta (2 min)
## Lectura rápida del LED RGB (para el técnico de campo)
| Color | Significado |
|---|---|
| **verde** | etapa ON, RTK fix |
| **azul** | etapa ON, NMEA sí, sin RTK (normal bajo techo / al arrancar) |
| **magenta** | etapa ON pero el F9P no habla (revisar ArduSimple) |
| **amarillo** | funcionando desde la batería (sin 5 V del vehículo) |
| **rojo** | etapa OFF (sin 5 V, batería < 3.40 V, > 60 °C, o apagada por operador) |
1. Quita la ignición: `EVT IGN OFF`, `EVT FAN OFF (bateria: termostato)`. La etapa sigue ON mientras haya 24 V.
2. Quita 24 V: con batería entra `BACKUP`. No esperes a `SLEEP`: reconecta y apaga con `P`.
3. En el acta: versión, `uid=` del banner, resultado P1–P5, `vbat` final y, con 0.5.x, "cargador OFF".
Colores del LED RGB: [manual V5](../manuales/manual-tarjeta-V5.md).
## Historial de revisiones
| Versión | Fecha | Cambios |
|---|---|---|
| 1.0 | 2026-09-18 | Primera versión (0.5.1-fm). |
| 1.1 | 2026-09-29 | Título sin versión de firmware; nota de cargador 0.6.0; enlaces al flujo. |
| 1.2 | 2026-09-29 | Edición breve: versión genérica `X.Y.Z`; tabla de colores RGB remitida al manual V5. |
Versiones anteriores en git.

View File

@ -1,256 +1,197 @@
---
title: EinarBoard v5 (HBOX v5) — Procedimiento de prueba y flasheo por tarjeta
tags: [project-drogheda, hardware, einarboard, v5, bringup, testing, flasheo, procedimiento]
title: "EinarBoard V5 — Prueba y flasheo por tarjeta"
tags: [project-drogheda, hardware, einarboard, v5, v5.5, v5.6, bringup, testing, flasheo, procedimiento]
date: 2026-09-15
project: Project Drogheda
author: Helgen Technologies
date: 2026-09-15
version: 1.0
status: ACTIVO — aplicar a cada una de las 15 tarjetas del lote JLC 22-Ago-2026
version: 1.2
status: ACTIVO
audience: técnicos de banco
---
# EinarBoard v5 — Procedimiento de prueba y flasheo
# EinarBoard V5 — Prueba y flasheo por tarjeta
**Lote:** 15 tarjetas `hbox-watchdog-v5` (JLCPCB, pedido 22-Ago-2026).
**Objetivo:** verificar que cada tarjeta enciende sin cortos, que sus rieles están en valor,
y dejarla flasheada con el firmware de arranque entregado por ingeniería.
**Duración estimada:** 15–20 min por tarjeta.
!!! abstract "Para quién · Cuándo · Tiempo · Necesitas"
- Para quién: técnicos de banco.
- Cuándo: al recibir cada tarjeta V5.5 o V5.6 desnuda, antes de montar módulos. Siguiente paso: [Módulos RTK y 4G](v5-modulos-integracion.md).
- Tiempo: 15–20 min por tarjeta.
- Necesitas: multímetro, fuente de banco 0–30 V con límite de corriente, cable USB-C con datos, laptop con STM32CubeProgrammer o `dfu-util`, jumper 2.54 mm para P11, lupa, el binario V5 vigente de [Descargas](../descargas/index.md) y el [acta de tarjeta V5](../formularios/v5.html).
> ⛔ **REGLA 1 — NO flashear `blackpillrtkcode_v3` (v3.0.3) en esta tarjeta.**
> Ese firmware es para la EinarBoard 1.0 (Blackpill). En la v5 usa los pines PB12–PB15 como
> LEDs de batería, pero en esta tarjeta esos pines son el bus SPI del chip Ethernet (W5500).
> Solo se flashea el archivo `.bin` que entregue ingeniería para v5.
>
> ⛔ **REGLA 2 — Sin batería y sin módulos en estas pruebas.** No conectar nada en P4
> (batería), ni insertar el simpleRTK2B en MOD1, ni el módem 4G en J7/J8.
>
> ⛔ **REGLA 3 — Fuente de banco siempre con límite de corriente.** Si la corriente llega al
> límite o un componente se calienta: apagar, marcar la tarjeta como FALLA y pasar a la siguiente.
!!! warning "Reglas"
1. Flashea solo el binario V5 de [Descargas](../descargas/index.md). `blackpillrtkcode_v3` (v3.0.3) maneja PB12–PB15 como LEDs de batería; en la V5 esos pines son el SPI del W5500.
2. Sin batería en P4, sin simpleRTK2B en MOD1 y sin módem en J7/J8.
3. Fuente siempre con límite de corriente. Si llega al límite o algo se calienta: apaga, marca FALLA y pasa a la siguiente tarjeta.
---
## Referencias en la tarjeta
## 0. Material
| Cant. | Ítem |
|---|---|
| 1 | Multímetro (continuidad / V DC) |
| 1 | Fuente de banco 0–30 V con límite de corriente ajustable |
| 1 | Cable USB-C ↔ USB-C (o USB-A ↔ USB-C) **con datos** (no solo carga) |
| 1 | Laptop con **STM32CubeProgrammer** instalado (o `dfu-util` en terminal) |
| 1 | Archivo de firmware: **`hbox-v5-bringup_0.5.1.bin`** — descarga: **https://drogheda.helgen.online/descargas/** (repo: `04-Source-Code/firmware/hbox_v5_bringup/release/`, SHA-256 inicia `e1f35108`) |
| 1 | Jumper 2.54 mm para P11 (interruptor de corte) |
| 1 | Lupa o lámpara con aumento |
| — | Hoja de registro (sección 7) |
**Identificación en la tarjeta** (serigrafía):
| Ref. | Qué es | Dónde se usa |
| Ref. | Qué es | Uso |
|---|---|---|
| **J11** | USB-C **DFU** (junto a SW1/SW2 y J10 Ethernet) | Alimentar solo el MCU y flashear |
| **J9** | USB-C del **módem** | NO se usa en este procedimiento |
| **SW1** | Botón **RESET** | Reiniciar el MCU |
| **SW2** | Botón **BOOT0** | Entrar en modo DFU |
| **TP7 / TP6** | Puntos de prueba **3V3 / GND** | Medir el riel de 3.3 V |
| **TP3 / TP4 / TP5** | SWDIO / SWCLK / NRST | Solo si ingeniería pide programar por ST-Link |
| **P2** | Entrada **5 V** (donde va la Mean Well SD-15B) | Prueba del riel de 5 V |
| **P1** | Entrada **24 V** (GX16) — pin 1 = +24 V, pin 2 = GND | Prueba del buck del ventilador |
| **P11** | Header **CUTOFF-SW** (2 pines) | Puentear para que pase MAIN5V → SYS5V |
| **P6** | Header del ventilador (2 pines) — pin 1 = +5V_FAN, pin 2 = retorno conmutado | Medir salida del buck (pin 1 contra GND) |
| **MOD1** | Zócalo UNO del simpleRTK2B — pin **"5V"** | Verificar que la etapa RTK arranca **apagada** |
| **D18** | LED verde **PWR** | Enciende cuando hay 3.3 V |
| **D17** | LED azul **C13** | Lo controla el firmware (apagado en chip virgen) |
| **U17** | Regulador AMS1117 3.3 V | Tocar para verificar temperatura |
| **Y2** | Cristal **3.6864 MHz** (HC-49, marcado `3.6864` / `36.864`) | Verificación visual |
| J11 | USB-C DFU (junto a SW1/SW2 y J10) | Alimentar el MCU y flashear |
| J9 | USB-C del módem | No se usa aquí |
| SW1 / SW2 | RESET / BOOT0 | Reinicio y modo DFU |
| TP7 / TP6 | 3V3 / GND | Riel de 3.3 V |
| TP3 / TP4 / TP5 | SWDIO / SWCLK / NRST | Solo si ingeniería pide ST-Link |
| P2 | Entrada 5 V (SD-15B) | Riel de 5 V |
| P1 | Entrada 24 V (GX16): pin 1 = +24 V, pin 2 = GND | Buck del ventilador |
| P11 | CUTOFF-SW (2 pines) | Puentear para pasar MAIN5V → SYS5V |
| P6 | Ventilador: pin 1 = +5V_FAN, pin 2 = retorno conmutado | Salida del buck (pin 1 contra GND) |
| MOD1 | Zócalo UNO del simpleRTK2B, pin "5V" | La etapa RTK debe arrancar apagada |
| D18 / D17 | LED verde PWR / LED azul C13 | 3.3 V presente / controlado por firmware |
| U17 | AMS1117 3.3 V | Temperatura al tacto |
| Y2 | Cristal 3.6864 MHz (marcado `3.6864` o `36.864`) | Visual |
---
## 1. Inspección visual (sin energía, 3 min)
## 1. Inspección visual (sin energía) — 3 min
- [ ] Sin puentes de soldadura en U16 (MCU), U11 (W5500), U10 (SC16IS752) y U6 (LTC4040).
- [ ] Y2 marcado `3.6864` o `36.864`; Y1 y Y3 `25.000`; Y4 el pequeño de 32.768 kHz. Y2 marcado `1.8432`: anota y avisa a ingeniería.
- [ ] SW1 y SW2 presentes y con clic.
- [ ] J11, J9 y J10 (RJ45) asentados, sin pines doblados.
- [ ] JP2, JP3 y JP4 presentes; no cambies su posición.
- [ ] Sin componentes faltantes ni marcas de quemado.
Con lupa, en cada tarjeta:
## 2. Cortos a tierra (sin energía, 2 min)
- [ ] No hay puentes de soldadura visibles entre pines de **U16** (MCU, 64 pines), **U11**
(W5500), **U10** (SC16IS752), **U6** (LTC4040).
- [ ] **Y2** dice `3.6864` (o `36.864`). Los otros tres cristales: **Y1** y **Y3** = `25.000`,
**Y4** = pequeño de 32.768 kHz. Si Y2 dice `1.8432` → marcar y avisar a ingeniería.
- [ ] Botones **SW1** y **SW2** presentes y con "clic".
- [ ] Conectores **J11**, **J9**, **J10 (RJ45)** bien asentados, sin pines doblados.
- [ ] Jumpers de configuración del cargador presentes: **JP2, JP3, JP4** (no tocar su posición).
- [ ] Sin componentes faltantes evidentes ni marcas de quemado.
Multímetro en ohms, no en modo continuidad. Punta negra en TP6. Unos cientos de ohms que suben es normal (capacitores cargando); una lectura fija de 0–20 Ω es corto.
---
## 2. Continuidad — cortos a tierra (sin energía) — 2 min
Multímetro en **ohms** (no en modo continuidad/beep, porque los capacitores dan lecturas
transitorias). Punta negra en **TP6 (GND)**. Esperar a que la lectura se estabilice.
| Medir en | Riel | Esperado | Si es < 100 Ω |
| Punto | Riel | Esperado | < 100 Ω |
|---|---|---|---|
| **TP7** | 3V3 | > 1 kΩ (la lectura sube lentamente) | FALLA — corto en 3.3 V |
| **P2 pin 1** | VEH5V (entrada 5 V) | > 1 kΩ | FALLA — corto en entrada 5 V |
| **P11 pin 1** | MAIN5V | > 1 kΩ | FALLA — corto en 5 V del sistema |
| **P1 pin 1** | 24V_IN | > 10 kΩ | FALLA — corto en 24 V |
| **MOD1 pin "5V"** | SW_5V (etapa RTK) | > 1 kΩ | FALLA |
| TP7 | 3V3 | > 1 kΩ | FALLA: corto en 3.3 V |
| P2 pin 1 | VEH5V | > 1 kΩ | FALLA: corto en entrada 5 V |
| P11 pin 1 | MAIN5V | > 1 kΩ | FALLA: corto en 5 V del sistema |
| P1 pin 1 | 24V_IN | > 10 kΩ | FALLA: corto en 24 V |
| MOD1 pin "5V" | SW_5V | > 1 kΩ | FALLA |
> Nota: es normal ver lecturas de unos cientos de ohms **que van subiendo** — son los
> capacitores cargándose con el multímetro. Lo que NO es normal es una lectura fija de 0–20 Ω.
## 3. Riel de 3.3 V por USB (J11, 3 min)
---
El USB en J11 energiza solo el MCU y la lógica de 3.3 V; el 5 V del sistema queda apagado.
## 3. Prueba del riel de 3.3 V por USB (J11) — 3 min
1. Conecta USB-C en J11 a la laptop o a un cargador.
2. Mide:
Con USB solo se energiza el MCU y la lógica de 3.3 V; el riel de 5 V del sistema queda apagado.
Es la forma más segura de encender la tarjeta por primera vez.
| Punto | Esperado |
|---|---|
| D18 | Encendido |
| TP7 contra TP6 | 3.20–3.40 V |
| U17 al tacto tras 1 min | Tibio. Si quema: FALLA |
| D17 | Apagado o fijo (chip virgen) |
1. Conectar el cable USB-C en **J11** (el que está junto a los botones), otro extremo a la laptop
o a un cargador USB.
2. Verificar:
3. D18 apagado o TP7 < 3.0 V: desconecta y marca FALLA (3V3).
4. Deja el USB conectado.
| Punto | Esperado |
|---|---|
| **D18** (LED verde PWR) | **Encendido** |
| **TP7** respecto a TP6 | **3.20 – 3.40 V** |
| **U17** (AMS1117) al tacto tras 1 min | Tibio, se puede tocar. **Si quema → FALLA** |
| **D17** (LED azul) | Apagado o fijo (chip virgen — normal) |
## 4. Rieles de 5 V y 24 V con fuente (5 min)
3. Si D18 no enciende o TP7 < 3.0 V → desconectar, marcar **FALLA (3V3)**.
4. **Dejar el USB conectado** para la sección siguiente.
Con el MCU virgen sus pines quedan en alta impedancia y la etapa RTK debe quedar apagada; eso es lo que se verifica.
---
### 4a. 5 V (P2)
## 4. Prueba de rieles de 5 V y 24 V con fuente de banco — 5 min
1. Fuente a 5.0 V, límite 500 mA, salida apagada.
2. Jumper en P11.
3. Fuente a P2 (pin 1 = +5 V, pin 2 = GND). El USB puede quedarse en J11.
4. Enciende y mide:
Se hace **con el MCU virgen (sin firmware)**: así todos sus pines quedan en alta impedancia y la
etapa RTK permanece apagada por diseño. Esto es lo que se está verificando.
| Punto | Esperado |
|---|---|
| Corriente | < 300 mA (típico 100–250 mA) |
| P11 pin 1 (MAIN5V) | 4.8–5.1 V |
| P11 pin 2 (SYS5V) | 4.8–5.1 V |
| TP7 | 3.20–3.40 V |
| MOD1 pin "5V" (SW_5V) | 0 V. Con 5 V: FALLA (la etapa RTK no arranca apagada) |
| U6 y U12 al tacto | Tibios |
### 4a. Riel de 5 V (entrada P2)
5. Apaga la fuente y desconecta P2.
1. Fuente de banco: **5.0 V, límite 500 mA**, salida apagada.
2. Colocar el **jumper en P11** (CUTOFF-SW).
3. Conectar fuente a **P2**: pin 1 = +5 V, pin 2 = GND. (Puede quedarse el USB en J11.)
4. Encender la salida y medir:
### 4b. 24 V → buck del ventilador (P1)
| Punto | Esperado |
|---|---|
| Corriente de la fuente | **< 300 mA** (típico 100–250 mA) |
| **P11 pin 1** (MAIN5V) | 4.8 – 5.1 V |
| **P11 pin 2** (SYS5V, con jumper) | 4.8 – 5.1 V |
| **TP7** (3V3) | 3.20 – 3.40 V |
| **MOD1 pin "5V"** (SW_5V, etapa RTK) | **0 V** ← obligatorio. Si hay 5 V aquí → FALLA (etapa RTK no arranca apagada) |
| **U6** (LTC4040), **U12** (buck Ethernet) al tacto | Tibios, no queman |
1. Fuente a 24.0 V, límite 200 mA, salida apagada.
2. Fuente a P1 (pin 1 = +24 V, pin 2 = GND). Pin 3 (ignición) sin conectar.
3. Enciende y mide:
5. Apagar la salida de la fuente. Desconectar de P2.
| Punto | Esperado |
|---|---|
| Corriente | < 50 mA (sin ventilador) |
| P6 pin 1 contra TP6 | 4.9–5.1 V (no midas contra P6 pin 2: es el lado conmutado) |
| U2 al tacto | Frío o tibio |
### 4b. Riel de 24 V → buck del ventilador (entrada P1)
4. Apaga y desconecta P1. El jumper de P11 puede quedarse.
1. Fuente de banco: **24.0 V, límite 200 mA**, salida apagada.
2. Conectar a **P1**: pin 1 = +24 V, pin 2 = GND. **Pin 3 (ignición) sin conectar.**
3. Encender la salida y medir:
Valor fuera de rango: marca FALLA con la sección (4a o 4b) y el valor medido.
| Punto | Esperado |
|---|---|
| Corriente de la fuente | **< 50 mA** (sin ventilador) |
| **P6 pin 1** (5V_FAN) respecto a **TP6 (GND)** | **4.9 – 5.1 V** (no medir contra P6 pin 2: es el lado conmutado del ventilador) |
| **U2** (buck) al tacto | Frío o tibio |
## 5. Flasheo por USB DFU (J11, 5 min)
4. Apagar salida. Desconectar de P1. Quitar el jumper de P11 (opcional; puede dejarse).
Solo tarjetas que pasaron 1–4. El firmware de campo se flashea igual. Verifica el SHA-256 del binario antes ([Descargas](../descargas/index.md)).
> Si algún valor está fuera de rango: marcar FALLA con la sección (4a o 4b) y el valor medido.
> **No flashear una tarjeta con FALLA.**
### 5a. Modo DFU
---
1. Solo el USB en J11 (nada en P1/P2).
2. Mantén SW2 (BOOT0).
3. Pulsa y suelta SW1 (RESET).
4. Suelta SW2.
5. La laptop detecta `STM32 BOOTLOADER` (ID `0483:DF11`).
## 5. Flasheo por USB DFU (J11) — 5 min
Si no aparece: cambia el cable (muchos son solo de carga) y repite con SW2 presionado al soltar SW1. El chip virgen solo entra al bootloader con esta secuencia.
Solo para tarjetas que pasaron las secciones 1 a 4.
### 5b. STM32CubeProgrammer
### 5a. Entrar en modo DFU
1. Selector de conexión: USB. Refresca hasta ver `USB1` y pulsa Connect.
2. Pestaña Erasing & Programming.
3. File path: el `.bin` descargado. Start address: `0x08000000`.
4. Marca Verify programming y Run after programming.
5. Start Programming. Espera "File download complete" y "Verify… successful".
6. Disconnect.
1. Solo el **USB en J11** conectado a la laptop (nada en P1/P2).
2. **Mantener presionado SW2 (BOOT0).**
3. Sin soltar SW2, **presionar y soltar SW1 (RESET)**.
4. **Soltar SW2.**
5. La laptop debe detectar un dispositivo **"STM32 BOOTLOADER"** (ID `0483:DF11`).
> El chip viene **vacío de fábrica**: no hace nada hasta que se flashea, y **solo** entra al
> programador con esta secuencia de botones. Si no aparece el dispositivo: cambiar el cable
> USB (muchos son solo de carga), repetir la secuencia con calma (SW2 debe estar presionado
> cuando se suelta SW1).
### 5b. Flashear con STM32CubeProgrammer (recomendado)
1. Abrir **STM32CubeProgrammer**.
2. Arriba a la derecha, en el selector de conexión elegir **USB**. Pulsar el botón de refrescar;
debe aparecer `USB1`. Pulsar **Connect**.
3. Ir a la pestaña **Erasing & Programming** (icono de flecha hacia abajo, lado izquierdo).
4. **File path** → seleccionar `hbox-v5-bringup_0.5.1.bin`.
5. **Start address** = `0x08000000`. Marcar **Verify programming** y **Run after programming**.
6. Pulsar **Start Programming**. Esperar "File download complete" y "Verify… successful".
7. Pulsar **Disconnect**.
### 5c. Alternativa por terminal (`dfu-util`, macOS/Linux)
### 5c. `dfu-util` (macOS/Linux)
```bash
dfu-util -l # debe listar [0483:df11]
dfu-util -a 0 -s 0x08000000:leave -D hbox-v5-bringup_0.5.1.bin
dfu-util -l # debe listar [0483:df11]
dfu-util -a 0 -s 0x08000000:leave -D hbox-v5-bringup_X.Y.Z.bin
```
### 5d. Verificación después del flasheo
### 5d. Verificación
1. Abrir un terminal serie en la laptop (CoolTerm, Serial, `screen`, o el monitor de Arduino)
y dejarlo listo. Pulsar **SW1** (RESET) una vez.
2. Esperado en los primeros 5 segundos:
1. Abre un terminal serie a 115200 baud (CoolTerm, `screen` o el monitor de Arduino) y pulsa SW1.
2. En los primeros 5 s:
| Punto | Esperado |
|---|---|
| **D17** (LED azul) + LED de panel en P8 (si hay) | **Parpadean** a 1 Hz (MCU ejecutando el firmware) |
| **DB1 → DB4** (LEDs del indicador de batería) | Se encienden **en secuencia** una vez, luego se apagan; después R, G, B en P14 si hay LED RGB conectado |
| Laptop | Aparece un **puerto serie** nuevo ("STMicroelectronics Virtual COM Port" / `usbmodem…`) |
| Terminal serie a **115200 baud** | Encabezado `hbox-v5-bringup 0.5.1` (cualquier otra version: re-flashear), luego líneas `[PASS]` / `[FAIL]`, y al final **`>>> BOARD OK`** |
| Punto | Esperado |
|---|---|
| D17 y LED de panel en P8 | Parpadean a 1 Hz |
| DB1 → DB4 | Encienden en secuencia una vez y se apagan; luego R, G, B en P14 si hay LED RGB |
| Laptop | Puerto serie nuevo (`STMicroelectronics Virtual COM Port` / `usbmodem…`) |
| Terminal | Encabezado `hbox-v5-bringup X.Y.Z` con la versión flasheada (otra versión: reflashea), líneas `[PASS]` y al final `>>> BOARD OK` |
3. Si el terminal se abrió tarde y no se vio el reporte: teclear **`r`** en el terminal → repite
todas las pruebas (y vuelve a encender los LEDs en secuencia).
4. Reporte esperado (todas `[PASS]`):
3. Si abriste el terminal tarde, teclea `r`: repite las pruebas y la secuencia de LEDs.
4. Reporte esperado:
```
[PASS] CLOCK_HSE SYSCLK=96000000 Hz HSE_RDY=1 PLL_SRC=HSE ← cristal Y3 y USB OK
[PASS] LSE_Y4 Y4 32.768k LSERDY=1 ← cristal Y4 OK
[PASS] I2C PCF8574 U13 @0x20 ACK
[PASS] I2C SHT40 U3 @0x44 ACK
[PASS] I2C TMP102 U4 @0x48 ACK
[PASS] I2C SC16IS752 U10 @0x4D ACK
[PASS] TMP102 TMP102 27.50 C
[PASS] SHT40 SHT40 27.8 C 45.0 %RH
[PASS] SC16IS752 0x4D ACK, SPR rd=0xA5 (exp A5), LSR=0x60
[PASS] GAUGE_WALK visual — technician confirms ← el técnico confirma que vio DB1→DB4
[PASS] ADC vbat=0.00 v5=0.00 ntc=..C mcu=..C ← vbat y v5 en 0 es NORMAL con solo USB
[PASS] DIN ign=0 chrg=.. fault=.. ser_irq=1 eth_int=..
---- RESULT: 12 PASS / 0 FAIL ----
>>> BOARD OK
```
```
[PASS] CLOCK_HSE SYSCLK=96000000 Hz HSE_RDY=1 PLL_SRC=HSE ← cristal Y3 y USB
[PASS] LSE_Y4 Y4 32.768k LSERDY=1 ← cristal Y4
[PASS] I2C PCF8574 U13 @0x20 ACK
[PASS] I2C SHT40 U3 @0x44 ACK
[PASS] I2C TMP102 U4 @0x48 ACK
[PASS] I2C SC16IS752 U10 @0x4D ACK
[PASS] TMP102 TMP102 27.50 C
[PASS] SHT40 SHT40 27.8 C 45.0 %RH
[PASS] SC16IS752 0x4D ACK, SPR rd=0xA5 (exp A5), LSR=0x60
[PASS] GAUGE_WALK visual — technician confirms ← confirmas que viste DB1→DB4
[PASS] ADC vbat=0.00 v5=0.00 ntc=..C mcu=..C ← vbat y v5 en 0 con solo USB
[PASS] DIN ign=0 chrg=.. fault=.. ser_irq=1 eth_int=..
---- RESULT: 12 PASS / 0 FAIL ----
>>> BOARD OK
```
Después imprime una línea `STAT …` cada 2 s con temperaturas y voltajes — es normal.
Después sale una línea `STAT …` cada 2 s. Sin módulos ni batería, la etapa RTK y el cargador no encienden.
5. Cualquier `[FAIL]` → anotar la línea completa en la hoja de registro y marcar **FALLA (POST)**.
El LED azul que no parpadea → repetir 5a–5b una vez; si vuelve a fallar → **FALLA (FLASH)**.
5. Cualquier `[FAIL]`: anota la línea completa y marca FALLA (POST). LED azul sin parpadear: repite 5a–5b una vez; si vuelve a fallar, FALLA (FLASH).
> Este firmware **no enciende la etapa RTK ni el cargador**: solo prueba la tarjeta. El firmware
> de producción v5 se flashea después, por el mismo procedimiento DFU.
## 6. Cierre
---
- [ ] Desconecta el USB.
- [ ] Etiqueta la tarjeta con su serie (V5-01 … V5-15) y la fecha, cerca de MH4, sin tapar serigrafía.
- [ ] Llena el [acta de tarjeta V5](../formularios/v5.html).
- [ ] Guarda en bolsa antiestática. Las FALLA van en bolsa aparte con nota del punto que falló.
## 6. Cierre de la tarjeta
## 7. Hoja de respaldo en papel
- [ ] Desconectar USB.
- [ ] Etiquetar la tarjeta con su número de serie (**V5-01 … V5-15**) y fecha, en la esquina
cerca de MH4 (sin tapar serigrafía ni componentes).
- [ ] Llenar la hoja de registro.
- [ ] Guardar en bolsa antiestática. Las tarjetas con FALLA van en bolsa aparte con la nota
del punto que falló.
---
## 7. Hoja de registro del lote
El registro oficial es el acta. Anota el valor medido cuando esté fuera de rango (ej. "TP7 = 2.9 V").
| Tarjeta | Visual (1) | Cortos (2) | 3V3 USB (3) | 5 V (4a) | 24 V (4b) | DFU (5a) | Flash (5b) | Post-flash (5d) | OK / FALLA | Técnico | Fecha |
|---|---|---|---|---|---|---|---|---|---|---|---|
@ -270,42 +211,28 @@ dfu-util -a 0 -s 0x08000000:leave -D hbox-v5-bringup_0.5.1.bin
| V5-14 | | | | | | | | | | | |
| V5-15 | | | | | | | | | | | |
Anotar el valor medido cuando esté fuera de rango (ej. "TP7 = 2.9 V").
Conectores y LEDs: [manual V5](../manuales/manual-tarjeta-V5.md) · valores: [hoja de datos V5.6](../hardware/v56-datasheet.md) · [pinout V5.6](../hardware/v56-pinout.md).
---
## Anexo — notas de ingeniería
## Anexo A — Notas de ingeniería (no requeridas para el técnico)
Verificado contra `hbox-watchdog-v5.kicad_pcb` / `.kicad_sch` (netlist, 15-sep-2026):
Verificado contra `hbox-watchdog-v5.kicad_pcb` / `.kicad_sch` (netlist, 15-Sep-2026):
- Alimentación por J11: VBUS → D13 (SS34) → `/LDO_IN` → U17 AMS1117 → `/3V3`. `/SYS5V` apagado, así que U12 y `/3V3_ETH` (W5500) también. R100/R101 (5.1 k en CC) presentes: un cable C-a-C entrega VBUS.
- DFU: BOOT0 = pin 60 de U16, pull-down R98 10 k, SW2 a 3V3. `/BOOT1_STRAP` (PB2, pin 28) a GND por R99 10 k. HSE = Y3 25 MHz en PH0/PH1 (el bootloader ROM lo requiere, AN2606). USB en PA11/PA12 (pines 44/45) con ESD D14/D15.
- SWD: TP3 SWDIO (PA13), TP4 SWCLK (PA14), TP5 NRST, TP6 GND, TP7 3V3.
- Única colisión v3.0.3 ↔ v5: `PIN_BATLED1..4` = PB12–PB15 (pines 33–36) = `/ETH_CS`, `/ETH_SCK`, `/ETH_MISO`, `/ETH_MOSI` (SPI2 del W5500); PB14 es salida del W5500. En v5 el indicador de batería está en U13 PCF8574 (A0–A2 a GND → 0x20, P0–P3 → RB1–RB4 120 R → LEDs). El resto del mapa v3 coincide: PA0 BAT_SENSE, PA1 PWR_CTRL, PA2/PA3 GNSS, PA4 5V_SENSE, PA5 IGN_SENSE, PA6 FAN_PWM, PA8 CHRG_EN, PA9/PA10 USART1, PB0 EXT_LED, PB1 NTC, PB3 CHRG_STAT, PB4 CHRG_FAULT, PB5 BYP_CTRL, PB6/PB7 I²C1, PC13 LED (activo bajo, R102 1 k a 3V3), PB10 tach = NC.
- Pines v5 que v3 no conoce: PC0 `/ETH_INT`, PA15 `/ETH_RST` (sin pull-up: flota si el MCU no lo maneja), PB8 `/SER_IRQ`, PC14/PC15 LSE (Y4). `/SER_RSTn` tiene pull-up R80 10 k.
- Cristales (BOM = maestro): Y2 = C2238 X49SM36864MSD2SC-1 = 3.6864 MHz para el SC16IS752 (`XTAL_FREQ 3686400`); "1.8432MHz" en esquemático/BOM es error de etiqueta. Y1 (W5500) y Y3 (HSE) = C14872 X49SM25MSD2SC = 25 MHz, confirmados contra el BOM de JLCPCB. Y4 = 32.768 kHz.
- KiCad vs tarjetas fabricadas: el `.kicad_pcb` vivo tiene 35 huellas movidas después del pedido (commits 24-ago y 07-sep: zona Ethernet/DFU J10/U11/U12/Y1/C90–C103/J11, D14–D16, R20, C101); la netlist no cambió. Referencia física del lote: `production/HBOX_v5_PROD.zip` (22-ago). En las tarjetas recibidas D14–D16 están junto al MCU, no junto a J11.
- U2 se habilita solo: `/EN_FAN` = divisor Ren1 100 k / Ren2 20 k desde `/24V` (≈4 V con 24 V), sin MCU; por eso 4b vale con chip virgen. `/FAN_RET` es el lado bajo conmutado por Q2 (gate en PA6): abierto con MCU virgen.
- Compilación v5: `STMicroelectronics:stm32:GenF4:pnum=GENERIC_F411RETX` (no `BLACKPILL_F411CE`), `HSE_VALUE=25000000` con `SystemClock_Config` explícito en HSE para que el USB CDC tenga reloj exacto.
- **Alimentación por J11:** VBUS → D13 (SS34) → `/LDO_IN` → U17 AMS1117 → `/3V3`. `/SYS5V`
queda apagado, por lo tanto U12 y `/3V3_ETH` (W5500) quedan apagados. R100/R101 (5.1 k en CC)
presentes: un cable C-a-C entrega VBUS.
- **DFU:** BOOT0 = pin 60 de U16, pull-down R98 10 k, SW2 lo lleva a 3V3. `/BOOT1_STRAP`
(PB2, pin 28) fijo a GND por R99 10 k. HSE = Y3 25 MHz en PH0/PH1 (el bootloader ROM lo
requiere, AN2606). USB en PA11/PA12 (pines 44/45) con ESD D14/D15.
- **SWD:** TP3 SWDIO (PA13), TP4 SWCLK (PA14), TP5 NRST, TP6 GND, TP7 3V3.
- **Colisión firmware v3.0.3 ↔ v5 (única encontrada):** `PIN_BATLED1..4` = PB12–PB15 (pines
33–36) = `/ETH_CS`, `/ETH_SCK`, `/ETH_MISO`, `/ETH_MOSI` (SPI2 del W5500). PB14 es salida del
W5500. El indicador de batería en v5 está en U13 PCF8574 (A0–A2 a GND → dirección I²C
0x20, salidas P0–P3 → RB1–RB4 120 R → LEDs). Todo el resto del mapa de pines de v3 coincide
con v5: PA0 BAT_SENSE, PA1 PWR_CTRL, PA2/PA3 GNSS, PA4 5V_SENSE, PA5 IGN_SENSE, PA6 FAN_PWM,
PA8 CHRG_EN, PA9/PA10 USART1, PB0 EXT_LED, PB1 NTC, PB3 CHRG_STAT, PB4 CHRG_FAULT,
PB5 BYP_CTRL, PB6/PB7 I²C1, PC13 LED (activo bajo, R102 1 k a 3V3), PB10 tach = NC.
- **Pines de v5 que v3 no conoce (firmware v5 debe manejarlos):** PC0 `/ETH_INT`,
PA15 `/ETH_RST` (sin pull-up: flota si el MCU no lo maneja), PB8 `/SER_IRQ` (SC16IS752),
PC14/PC15 LSE 32.768 kHz (Y4). `/SER_RSTn` sí tiene pull-up R80 10 k.
- **Cristales (BOM = maestro):** Y2 = C2238 X49SM36864MSD2SC-1 = **3.6864 MHz** para el
SC16IS752 (`XTAL_FREQ 3686400`); el campo "1.8432MHz" del esquemático/BOM es un error de
etiqueta. Y1 (W5500) y Y3 (HSE del MCU) = C14872 X49SM25MSD2SC = **25 MHz**, confirmados contra el BOM de ensamble en JLCPCB. Y4 = 32.768 kHz LSE.
- **Estado del archivo KiCad vs tarjetas fabricadas:** el `.kicad_pcb` vivo tiene 35 huellas
movidas después del pedido (commits 24-Ago y 07-Sep: reubicación de la zona Ethernet/DFU
J10/U11/U12/Y1/C90–C103/J11, D14–D16, R20, C101). La netlist no cambió. La referencia
física de este lote es `production/HBOX_v5_PROD.zip` (22-Ago). En las tarjetas recibidas
D14–D16 están junto al MCU, no junto a J11.
- **Buck del ventilador U2 se habilita solo:** `/EN_FAN` = divisor Ren1 100 k / Ren2 20 k desde
`/24V` (≈4 V con 24 V de entrada), no depende del MCU → la prueba 4b es válida con chip virgen.
`/FAN_RET` es el lado bajo conmutado por Q2 (gate desde PA6): con MCU virgen queda abierto.
- **Objetivo de compilación del firmware v5:** `STMicroelectronics:stm32:GenF4:pnum=GENERIC_F411RETX`
(no `BLACKPILL_F411CE`), `HSE_VALUE=25000000` con `SystemClock_Config` explícito en HSE para
que el USB CDC tenga reloj exacto.
## Historial de revisiones
| Versión | Fecha | Cambios |
|---|---|---|
| 1.0 | 2026-09-15 | Primera versión (lote de 15, firmware 0.5.1). |
| 1.1 | 2026-09-29 | Encabezado uniforme, nota de binario vigente, enlaces a acta y manuales. |
| 1.2 | 2026-09-29 | Edición breve: sin tabla de material duplicada; binario genérico `X.Y.Z` en lugar de 0.5.1. |
Versiones anteriores en git.

19
docs/produccion/index.md Normal file
View File

@ -0,0 +1,19 @@
---
title: "Producción — lote V5.6"
---
# Producción — lote V5.6
| Paso | Procedimiento | Acta |
|---|---|---|
| 1 | [Prueba y flasheo de tarjetas](../procedimientos/v5-prueba-y-flasheo.md) | [Tarjeta V5](../formularios/v5.html) |
| 2 | [Módulos RTK y 4G e integración](../procedimientos/v5-modulos-integracion.md) | [ArduSimple](../formularios/ardusimple.html) · [Módem 4G](../formularios/modem4g.html) · [Integración](../formularios/integracion.html) |
| 3 | [Ensamble de la unidad](../procedimientos/v5-ensamble.md) | [Ensamble](../formularios/ensamble.html) |
| 4 | [Prueba final antes de embarcar](../procedimientos/v5-prueba-final-unidad.md) | En el acta de ensamble |
| 5 | [Configuración de la unidad](../procedimientos/v5-configuracion-unidad.md) | [Ensamble](../formularios/ensamble.html) · [Ethernet y serie](../formularios/ethernet-serie.html) si aplica |
| 6 | [Checklist de puesta en marcha en el puerto](../procedimientos/v5-checklist-puesta-en-marcha.md) | Impreso, al expediente |
- [Tablero de producción](../tablero.html): qué tarjeta, módulo y unidad pasó cada paso.
- [Expediente de una unidad](../unidad.html)
- [Índice de actas](../actas/index.md)
- [Descargas](../descargas/index.md): firmware vigente y SHA-256.

163
docs/stylesheets/extra.css Normal file
View File

@ -0,0 +1,163 @@
/* ==========================================================================
HBOX — Documentación técnica · hoja de estilo Helgen
Colores tomados de _brand/estilo-helgen.tex (\definecolor):
HelgenIndigo #2C3C5B · HelgenCyan #51F3DA · HelgenTeal #17A08C
HelgenMist #EFF1F5 · HelgenLightCyan #E7FCF8 · HelgenLightIndigo #EDEFF4
========================================================================== */
:root {
--helgen-indigo: #2C3C5B;
--helgen-indigo-dark: #1F2A44;
--helgen-indigo-light: #3D5078;
--helgen-cyan: #51F3DA;
--helgen-teal: #17A08C;
--helgen-mist: #EFF1F5;
--helgen-light-cyan: #E7FCF8;
--helgen-light-indigo: #EDEFF4;
}
/* ---- Paleta "custom" de Material ---------------------------------------- */
[data-md-color-primary="custom"] {
--md-primary-fg-color: var(--helgen-indigo);
--md-primary-fg-color--light: var(--helgen-indigo-light);
--md-primary-fg-color--dark: var(--helgen-indigo-dark);
--md-primary-bg-color: #ffffff;
--md-primary-bg-color--light: rgba(255, 255, 255, 0.7);
}
[data-md-color-accent="custom"] {
--md-accent-fg-color: var(--helgen-teal);
--md-accent-fg-color--transparent: rgba(23, 160, 140, 0.1);
--md-accent-bg-color: #ffffff;
--md-accent-bg-color--light: rgba(255, 255, 255, 0.7);
}
[data-md-color-scheme="default"] {
--md-typeset-a-color: #14685c;
}
[data-md-color-scheme="slate"][data-md-color-accent="custom"] {
--md-accent-fg-color: var(--helgen-cyan);
--md-accent-fg-color--transparent: rgba(81, 243, 218, 0.12);
--md-accent-bg-color: var(--helgen-indigo-dark);
}
[data-md-color-scheme="slate"] {
--md-typeset-a-color: var(--helgen-cyan);
--md-default-bg-color: #161d2b;
--md-code-bg-color: #1c2536;
}
/* Fuentes del sistema (sitio utilizable sin Internet) */
:root {
--md-text-font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
--md-code-font: ui-monospace, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
}
/* ---- Tamaño: pensado para tableta en el taller -------------------------- */
.md-grid { max-width: 1400px; }
.md-typeset { font-size: 0.85rem; line-height: 1.6; }
@media screen and (min-width: 76.25em) {
.md-typeset { font-size: 0.9rem; }
}
.md-typeset h1 { color: var(--helgen-indigo); font-weight: 700; }
[data-md-color-scheme="slate"] .md-typeset h1 { color: var(--helgen-cyan); }
.md-typeset h2 { font-weight: 600; border-bottom: 2px solid var(--helgen-light-indigo); padding-bottom: 0.2em; }
[data-md-color-scheme="slate"] .md-typeset h2 { border-bottom-color: var(--helgen-indigo-light); }
/* Cabecera y pestañas */
.md-header__button.md-logo img { height: 1.6rem; width: auto; }
.md-tabs__link { font-size: 0.75rem; font-weight: 600; }
.md-tabs__link--active { border-bottom: 3px solid var(--helgen-cyan); }
/* ---- Tarjetas (grid cards) ---------------------------------------------- */
.md-typeset .grid.cards > ul > li,
.md-typeset .grid > .card {
border-radius: 0.5rem;
border: 1px solid var(--helgen-light-indigo);
transition: box-shadow 0.15s ease, transform 0.15s ease, border-color 0.15s ease;
}
[data-md-color-scheme="slate"] .md-typeset .grid.cards > ul > li { border-color: #2a3650; }
.md-typeset .grid.cards > ul > li:hover,
.md-typeset .grid > .card:hover {
border-color: var(--helgen-teal);
box-shadow: 0 6px 20px rgba(44, 60, 91, 0.18);
transform: translateY(-2px);
}
.md-typeset .grid.cards > ul > li > hr { margin: 0.6em 0; }
.md-typeset .grid.cards > ul > li h3 { margin-top: 0; }
.md-typeset .grid.cards > ul > li .md-button { margin: 0.2em 0.4em 0.2em 0; font-size: 0.78em; padding: 0.45em 1em; }
/* Botones */
.md-typeset .md-button--primary {
background-color: var(--helgen-indigo);
border-color: var(--helgen-indigo);
color: #fff;
}
.md-typeset .md-button--primary:hover {
background-color: var(--helgen-teal);
border-color: var(--helgen-teal);
}
/* ---- Pastillas de estado de tarjeta ------------------------------------- */
.badge-v3, .badge-v4, .badge-v55, .badge-v56, .badge-v6, .badge-fw {
display: inline-block;
padding: 0.1em 0.65em;
border-radius: 999px;
font-size: 0.72em;
font-weight: 700;
letter-spacing: 0.02em;
line-height: 1.6;
vertical-align: middle;
white-space: nowrap;
}
.badge-v56 { background: var(--helgen-indigo); color: #fff; }
.badge-v55 { background: var(--helgen-teal); color: #fff; }
.badge-v6 { background: #fff3cd; color: #7a5200; border: 1px solid #f0c36d; }
.badge-v4 { background: var(--helgen-light-indigo); color: var(--helgen-indigo); border: 1px solid #c9d0e0; }
.badge-v3 { background: #e9e9e9; color: #555; border: 1px solid #ccc; }
.badge-fw { background: var(--helgen-light-cyan); color: #0f5f52; border: 1px solid #9fe6d8; }
[data-md-color-scheme="slate"] .badge-v4 { background: #2a3650; color: #dfe6f5; border-color: #3d5078; }
[data-md-color-scheme="slate"] .badge-v3 { background: #333; color: #ccc; border-color: #555; }
[data-md-color-scheme="slate"] .badge-v6 { background: #4a3a10; color: #ffd97a; border-color: #7a5200; }
[data-md-color-scheme="slate"] .badge-fw { background: #123a34; color: var(--helgen-cyan); border-color: #17A08C; }
/* Aviso de búsqueda en la portada */
.buscar-aviso {
background: var(--helgen-light-cyan);
border-left: 4px solid var(--helgen-teal);
padding: 0.6em 1em;
border-radius: 0.3rem;
margin: 1em 0 1.5em;
}
[data-md-color-scheme="slate"] .buscar-aviso { background: #123a34; }
/* Tablas: más compactas y con cabecera Helgen */
.md-typeset table:not([class]) th {
background: var(--helgen-light-indigo);
color: var(--helgen-indigo);
}
[data-md-color-scheme="slate"] .md-typeset table:not([class]) th {
background: #2a3650;
color: #fff;
}
.md-typeset table:not([class]) td, .md-typeset table:not([class]) th { padding: 0.5em 0.8em; }
/* Listas de pasos numeradas (índices de sección) */
.md-typeset ol.pasos > li { margin-bottom: 0.6em; }
.md-typeset ol.pasos > li::marker { font-weight: 700; color: var(--helgen-teal); }
/* ---- Impresión (checklists y procedimientos) ---------------------------- */
@media print {
.md-header, .md-tabs, .md-sidebar, .md-footer, .md-top, .md-search,
.md-content__button, .md-source-file, .md-typeset .headerlink { display: none !important; }
.md-main__inner { margin: 0; }
.md-content { max-width: 100%; margin: 0; }
.md-typeset { font-size: 10.5pt; line-height: 1.35; color: #000; }
.md-typeset h1 { font-size: 16pt; color: #000; page-break-after: avoid; }
.md-typeset h2 { font-size: 13pt; page-break-after: avoid; border-bottom: 1px solid #000; }
.md-typeset h3 { font-size: 11.5pt; page-break-after: avoid; }
.md-typeset table { page-break-inside: avoid; font-size: 9.5pt; }
.md-typeset .admonition, .md-typeset details { page-break-inside: avoid; border: 1px solid #000; box-shadow: none; }
.md-typeset .task-list-control .task-list-indicator { border: 1px solid #000; background: #fff; }
.md-typeset a { color: #000; text-decoration: none; }
.md-typeset a[href^="http"]::after { content: none; }
.badge-v3, .badge-v4, .badge-v55, .badge-v56, .badge-v6, .badge-fw { border: 1px solid #000; background: none; color: #000; }
@page { margin: 12mm 14mm; }
}

View File

@ -71,7 +71,7 @@ const STREAMS = [
{ tipo:'prueba-v5', prefijo:'V5', desde:1, n:30, pad:2, titulo:'Tarjetas EinarBoard — V5', form:'formularios/v5.html' },
{ tipo:'modulo-ard', prefijo:'ARD', desde:1, n:30, pad:3, titulo:'Módulos simpleRTK2B Pro — ARD', form:'formularios/ardusimple.html', usoClave:'ard' },
{ tipo:'modulo-4g', prefijo:'RTK', desde:1, n:30, pad:4, titulo:'Módems 4G NTRIP Master — RTK', form:'formularios/modem4g.html', usoClave:'modem' },
{ tipo:'prueba-v4', prefijo:'V4', desde:1, n:15, pad:2, titulo:'Tarjetas EinarBoard — V4 (fw 0.5.6)', form:'formularios/v4.html' },
{ tipo:'prueba-v4', prefijo:'V4', desde:1, n:15, pad:2, titulo:'Tarjetas EinarBoard — V4 (fw 0.6.0)', form:'formularios/v4.html' },
];
const TABLAS = [
{ tipo:'integracion', titulo:'Integración ArduSimple + 4G (parejas)', form:'formularios/integracion.html', cols:[['ard','ArduSimple'],['modem','4G (RTK-)']] },

18
docs/taller/index.md Normal file
View File

@ -0,0 +1,18 @@
---
title: "Taller"
---
# Taller
Unidad o tarjeta en la mesa. Antes de tocarla, abre su [expediente](../unidad.html). Reglas de banco: [diagnóstico en banco](../procedimientos/diagnostico-banco.md#reglas-de-banco).
| Trabajo | Cuándo | Procedimiento | Acta |
|---|---|---|---|
| Diagnóstico en banco | Llegó del campo o falló en producción | [Diagnóstico en banco](../procedimientos/diagnostico-banco.md) | [Banco](../formularios/banco.html) |
| Reflasheo | Después de subir la captura del diagnóstico | [Reflasheo de unidades](../procedimientos/reflasheo-unidades.md) | [Reflasheo y configuración](../formularios/reflasheo.html) |
| Módem 4G en batería | Validar firmware o unidad que no reporta en batería | [Módem 4G en batería](../procedimientos/prueba-bateria-modem.md) | [Módem en batería](../formularios/prueba-bateria.html) |
| Ethernet y puertos serie | El cliente usa Ethernet, RS-485 o RS-232 | [Ethernet y puertos serie](../procedimientos/v5-prueba-ethernet-serie.md) | [Ethernet y serie](../formularios/ethernet-serie.html) |
| Tarjeta V4 | Preparación y prueba con 0.6.0 | [Preparación y prueba V4](../procedimientos/v4-prueba-fw-0.5.6.md) | [Prueba V4](../formularios/v4.html) |
- [Manual V5](../manuales/manual-tarjeta-V5.md) · [Manual V4](../manuales/manual-tarjeta-V4.md) · [Pinout V5.6](../hardware/v56-pinout.md)
- [Tablero de producción](../tablero.html)

View File

@ -1,31 +1,47 @@
site_name: HBOX — Documentación Técnica
site_description: Procedimientos de banco, montaje y diagnóstico del HBOX (EinarBoard) — Helgen Technologies
site_url: https://docs.helgen.online/hbox/
site_name: HBOX — Documentación técnica (Helgen)
site_description: Procedimientos de producción, taller, campo y hardware del HBOX (EinarBoard) — Helgen Technologies
site_url: https://drogheda.helgen.online/
copyright: "© Helgen Technologies — uso interno"
theme:
name: material
language: es
logo: img/helgen-logo-white.png
favicon: img/favicon.png
font: false
palette:
- scheme: default
primary: deep orange
accent: deep orange
primary: custom
accent: custom
toggle:
icon: material/weather-night
name: Modo oscuro
- scheme: slate
primary: deep orange
accent: deep orange
primary: custom
accent: custom
toggle:
icon: material/weather-sunny
name: Modo claro
features:
- navigation.tracking
- navigation.tabs
- navigation.tabs.sticky
- navigation.sections
- navigation.indexes
- navigation.top
- navigation.footer
- navigation.tracking
- search.suggest
- search.highlight
- content.code.copy
- toc.integrate
- toc.follow
extra_css:
- stylesheets/extra.css
plugins:
- search:
lang: [es, en]
separator: '[\s\-\.,:/]+'
markdown_extensions:
- admonition
@ -41,70 +57,107 @@ markdown_extensions:
nav:
- "🏠 Inicio": index.md
- "🧭 Guía del ingeniero": guia-ingeniero.md
- "🚜 Campo — la unidad está en la máquina":
- "Cómo se diagnostica en campo": diagnostico/procedimiento-diagnostico-campo.md
- "▶ Acta de diagnóstico en campo": formularios/diagnostico.html
- "Tablero de campo (qué se ha revisado)": diagnostico/tablero-campo.html
- "🔬 Taller — la unidad está en la mesa":
- "Cómo se diagnostica en banco": procedimientos/diagnostico-banco.md
- "▶ Acta de diagnóstico en banco": formularios/banco.html
- "⚡ Reflasheo de unidades": procedimientos/reflasheo-unidades.md
- "🔋 Prueba: módem 4G en batería (0.6.0)": procedimientos/prueba-bateria-modem.md
- "▶ Acta: prueba de módem en batería": formularios/prueba-bateria.html
- "🧪 V4 — preparación y prueba con 0.5.6": procedimientos/v4-prueba-fw-0.5.6.md
- "▶ Acta de prueba V4 (0.5.6)": formularios/v4.html
- "▶ Acta de reflasheo y configuración": formularios/reflasheo.html
- "🏭 Producción — lote v5":
- "1 · Prueba y flasheo de tarjetas": procedimientos/v5-prueba-y-flasheo.md
- "▶ Acta de tarjeta V5": formularios/v5.html
- "2 · Módulos RTK y 4G": procedimientos/v5-modulos-integracion.md
- "▶ Acta ArduSimple": formularios/ardusimple.html
- "▶ Acta módem 4G": formularios/modem4g.html
- "▶ Acta de integración": formularios/integracion.html
- "3 · Ensamble de la unidad": procedimientos/v5-ensamble.md
- "▶ Acta de ensamble": formularios/ensamble.html
- "🏭 Producción — lote V5.6":
- produccion/index.md
- "1 · Prueba y flasheo de tarjetas":
- procedimientos/v5-prueba-y-flasheo.md
- "Acta de tarjeta V5": formularios/v5.html
- "2 · Módulos RTK y 4G":
- procedimientos/v5-modulos-integracion.md
- "Acta ArduSimple": formularios/ardusimple.html
- "Acta módem 4G": formularios/modem4g.html
- "Acta de integración": formularios/integracion.html
- "3 · Ensamble de la unidad":
- procedimientos/v5-ensamble.md
- "Acta de ensamble": formularios/ensamble.html
- "4 · Prueba final antes de embarcar": procedimientos/v5-prueba-final-unidad.md
- "5 · Configuración de la unidad": procedimientos/v5-configuracion-unidad.md
- "6 · Checklist de puesta en marcha": procedimientos/v5-checklist-puesta-en-marcha.md
- "Tablero de producción": tablero.html
- "🛠 Hardware v6 — fabricación":
- "Auditoría pre-fabricación (español)": hardware/v6-auditoria-prefab.md
- "Pre-fabrication audit (English)": hardware/v6-prefab-audit.md
- "Plan de cobre y colocación EMC (ES)": hardware/EinarBoard-v6_Plan-de-Cobre_ES.html
- "Copper plan & EMC placement (EN)": hardware/EinarBoard-v6_Copper-Plan_EN.html
- "🔬 Taller":
- taller/index.md
- "Diagnóstico en banco":
- procedimientos/diagnostico-banco.md
- "Acta de diagnóstico en banco": formularios/banco.html
- "Reflasheo de unidades":
- procedimientos/reflasheo-unidades.md
- "Acta de reflasheo y configuración": formularios/reflasheo.html
- "Prueba: módem 4G en batería":
- procedimientos/prueba-bateria-modem.md
- "Acta: módem en batería": formularios/prueba-bateria.html
- "Prueba: Ethernet y puertos serie":
- procedimientos/v5-prueba-ethernet-serie.md
- "Acta: Ethernet y puertos serie": formularios/ethernet-serie.html
- "V4 — preparación y prueba con 0.6.0":
- procedimientos/v4-prueba-fw-0.5.6.md
- "Acta de prueba V4": formularios/v4.html
- "🔩 Montaje y arneses":
- "Pinout de arneses y conectores": montaje/pinout-arneses.md
- "BOM dividido para ensamble": montaje/bom-split.md
- "Guía de ensamble y control de calidad": montaje/guia-ensamble-qc.md
- "Guía de ensamble (PDF)": montaje/assembly-guide.md
- "🚜 Campo":
- campo/index.md
- "Diagnóstico en campo":
- diagnostico/procedimiento-diagnostico-campo.md
- "Acta de diagnóstico en campo": formularios/diagnostico.html
- "Tablero de campo": diagnostico/tablero-campo.html
- "Puesta en marcha en el puerto": procedimientos/v5-checklist-puesta-en-marcha.md
- "Envío, recepción y daños":
- procedimientos/ciclo-de-vida.md
- "Acta de envío": formularios/envio.html
- "Acta de recepción e inspección": formularios/recepcion.html
- "Acta de daño o incidente": formularios/dano.html
- "Expediente de una unidad": unidad.html
- "Actas — índice y cómo se usan": actas/index.md
- "📥 Descargas":
- "Firmware, parámetros 4G y ZED-F9P": descargas/index.md
- "README firmware bring-up v5": descargas/hbox-v5-bringup-README.md
- "🔩 Tarjetas y hardware":
- hardware/index.md
- "Manuales por tarjeta": manuales/index.md
- "V5.6 — lote en pedido":
- "Manual de la tarjeta V5 (V5.5 y V5.6)": manuales/manual-tarjeta-V5.md
- "Hoja de datos V5.6": hardware/v56-datasheet.md
- "Pinout de conectores V5.6": hardware/v56-pinout.md
- "Instrucciones de layout (esquemático → PCB)": hardware/v56-layout-instrucciones.md
- "ECO V5.6": hardware/v56-eco.md
- "Cambios al esquemático V5.5 → V5.6": hardware/v56-cambios-esquematico.md
- "V4":
- "Manual de la tarjeta V4": manuales/manual-tarjeta-V4.md
- "V3 — producción antigua":
- "Manual de la tarjeta V3": manuales/manual-tarjeta-V3.md
- "Pinout V3 (arneses y conectores)": montaje/pinout-arneses.md
- "BOM V3 (dividido para ensamble)": montaje/bom-split.md
- "Guía de ensamble y control de calidad": montaje/guia-ensamble-qc.md
- "Guía de ensamble (PDF)": montaje/assembly-guide.md
- "v6 — en diseño, no pedir":
- "Manual de la tarjeta v6": manuales/manual-tarjeta-v6.md
- "Auditoría completa v6": hardware/v6-auditoria-completa.md
- "Cambios al esquemático v6": hardware/v6-cambios-esquematico.md
- "Revisión v6 contra lecciones V5.5": hardware/v6-revision-lecciones-v55.md
- "Mapa de pines MCU v6": hardware/v6-pinmap.md
- "Auditoría pre-fabricación v6": hardware/v6-auditoria-prefab.md
- "Auditoría pre-fabricación v6 (inglés)": hardware/v6-prefab-audit.md
- "Plan de cobre y colocación EMC v6": hardware/EinarBoard-v6_Plan-de-Cobre_ES.html
- "Plan de cobre y colocación EMC v6 (inglés)": hardware/EinarBoard-v6_Copper-Plan_EN.html
- "📦 Ciclo de vida — envío, recepción, daños":
- "El ciclo de vida de una unidad (mapa)": procedimientos/ciclo-de-vida.md
- "▶ Acta de envío": formularios/envio.html
- "▶ Acta de recepción e inspección (cada caja, antes del puerto)": formularios/recepcion.html
- "▶ Acta de daño o incidente": formularios/dano.html
- "🗂 Expediente de una unidad": unidad.html
- "📋 Actas — índice y cómo se usan": actas/index.md
- "🌿 Git y archivos de diseño":
- "Guía Git (español)": git/guia-git-es.md
- "Git guide (English)": git/git-guide-en.md
- "📕 Manuales y descargas":
- "Manual del cliente (instalación y operación)": manuales/manual-cliente.md
- "Manual de instalación y operación (PDF)": manuales/Drogheda-Manual-Instalacion-Operacion_v2.0.pdf
- "Ficha técnica HBOX (PDF)": manuales/Drogheda-HBOX-Datasheet_v2.0.pdf
- "Descargas":
- descargas/index.md
- "README firmware bring-up v5": descargas/hbox-v5-bringup-README.md
- "Git y archivos de diseño":
- "Guía Git": git/guia-git-es.md
- "Guía Git (inglés)": git/git-guide-en.md
- "📚 Referencia e histórico":
- "Protocolo de diagnóstico remoto (2026-06)": diagnostico/protocolo-diagnostico-remoto.md
- "EinarBoard 1.0 — Bring-up runbook": procedimientos/einarboard-1.0-bringup.md
- "FW v3.0.3 — Prueba de banco (ventilador)": procedimientos/fan-policy-bench-test.md
- "Histórico — Proto bench v3": procedimientos/historico-proto-bench-v3.md
- "Histórico — Protoboard": procedimientos/historico-protoboard.md
- "Protocolo de diagnóstico remoto": diagnostico/protocolo-diagnostico-remoto.md
- "EinarBoard 1.0 — puesta en marcha (histórico)": procedimientos/einarboard-1.0-bringup.md
- "FW v3.0.3 — prueba de banco del ventilador": procedimientos/fan-policy-bench-test.md
- "Histórico — prototipo v3 en protoboard": procedimientos/historico-proto-bench-v3.md
- "Histórico — lista de compras del protoboard": procedimientos/historico-protoboard.md
- "👤 Mi cuenta (cambiar contraseña)": cuenta.html
- "⚙ Administración (Leo)": admin.html
- "🚪 Salir": salir.html
- "⚙ Cuenta":
- "Mi cuenta (cambiar contraseña)": cuenta.html
- "Administración (Leo)": admin.html
- "Salir": salir.html

25
scripts/sync-docs.sh Normal file → Executable file
View File

@ -6,6 +6,9 @@ set -euo pipefail
cd "$(dirname "$0")/.."
SRC="${DROGHEDA_ROOT:-..}" # hbox-docs vive como submódulo directo de Drogheda
# NOTA (2026-09-29): las portadas de sección docs/index.md, docs/produccion/index.md, docs/taller/index.md,
# docs/campo/index.md y docs/hardware/index.md, junto con docs/stylesheets/extra.css y docs/img/, viven SOLO en
# hbox-docs (no vienen del repo Drogheda) y no están en este MAP a propósito: el script no las toca ni las borra.
declare -a MAP=(
"06-Testing-Validation/2026-09-15_Drogheda_EinarBoard-v5_Procedimiento-Prueba-y-Flasheo_ES_v1.0.md|docs/procedimientos/v5-prueba-y-flasheo.md"
"06-Testing-Validation/2026-09-17_Drogheda_HBOX-v5_Modulos-e-Integracion_ES_v1.0.md|docs/procedimientos/v5-modulos-integracion.md"
@ -38,6 +41,28 @@ declare -a MAP=(
"04-Source-Code/firmware/release/hbox-tarjetaV4_0.6.0.bin|docs/descargas/hbox-tarjetaV4_0.6.0.bin"
"04-Source-Code/firmware/release/hbox-tarjetaV4_0.5.9.bin|docs/descargas/superseded/hbox-tarjetaV4_0.5.9.bin"
"04-Source-Code/firmware/release/hbox-tarjetaV4_0.5.8.bin|docs/descargas/superseded/hbox-tarjetaV4_0.5.8.bin"
# Documentación 2026-09-29: datasheet, pinout V5.6, manuales por tarjeta, procedimientos de configuración/Ethernet/serie, manual de cliente
"03-Architecture-Hardware/2026-09-29_Drogheda_EinarBoard-V5.6_Datasheet_ES_v1.0.md|docs/hardware/v56-datasheet.md"
"03-Architecture-Hardware/2026-09-29_Drogheda_HBOX-V5_Harness-Connector-Pinout_v1.0.md|docs/hardware/v56-pinout.md"
"03-Architecture-Hardware/manuales/index.md|docs/manuales/index.md"
"03-Architecture-Hardware/manuales/manual-tarjeta-V5.md|docs/manuales/manual-tarjeta-V5.md"
"03-Architecture-Hardware/manuales/manual-tarjeta-V4.md|docs/manuales/manual-tarjeta-V4.md"
"03-Architecture-Hardware/manuales/manual-tarjeta-V3.md|docs/manuales/manual-tarjeta-V3.md"
"03-Architecture-Hardware/manuales/manual-tarjeta-v6.md|docs/manuales/manual-tarjeta-v6.md"
"06-Testing-Validation/2026-09-29_Drogheda_HBOX-V5_Configuracion-de-Unidad_ES_v1.0.md|docs/procedimientos/v5-configuracion-unidad.md"
"06-Testing-Validation/2026-09-29_Drogheda_HBOX-V5_Prueba-Ethernet-y-Puertos-Serie_ES_v1.0.md|docs/procedimientos/v5-prueba-ethernet-serie.md"
"06-Testing-Validation/2026-09-29_Drogheda_HBOX-V5_Checklist-Puesta-en-Marcha_ES_v1.0.md|docs/procedimientos/v5-checklist-puesta-en-marcha.md"
"03-Architecture-Hardware/Drogheda-Manual-Instalacion-Operacion_v2.0.pdf|docs/manuales/Drogheda-Manual-Instalacion-Operacion_v2.0.pdf"
"Marketing/HBOX-Datasheet/Drogheda-HBOX-Datasheet_v2.0.pdf|docs/manuales/Drogheda-HBOX-Datasheet_v2.0.pdf"
"00-Project-Management/2026-09-29_Drogheda_Guia-Ingeniero-Sitio_ES_v1.0.md|docs/guia-ingeniero.md"
"03-Architecture-Hardware/2026-09-29_Drogheda_EinarBoard-V5.6_Instrucciones-Layout_ES_v1.0.md|docs/hardware/v56-layout-instrucciones.md"
"03-Architecture-Hardware/2026-09-28_Drogheda_EinarBoard-V5.6_Schematic-Change-Report_v1.0.md|docs/hardware/v56-cambios-esquematico.md"
"03-Architecture-Hardware/2026-09-27_Drogheda_EinarBoard-V5.6_ECO_ES_v1.0.md|docs/hardware/v56-eco.md"
# v6 (en diseño)
"03-Architecture-Hardware/2026-09-28_Drogheda_EinarBoard-v6_Full-Audit_v1.0.md|docs/hardware/v6-auditoria-completa.md"
"03-Architecture-Hardware/2026-09-28_Drogheda_EinarBoard-v6_Schematic-Change-Report_v1.0.md|docs/hardware/v6-cambios-esquematico.md"
"03-Architecture-Hardware/2026-09-28_Drogheda_EinarBoard-v6_Review-vs-V5.5-Lessons_v1.0.md|docs/hardware/v6-revision-lecciones-v55.md"
"03-Architecture-Hardware/pinmap-v6.md|docs/hardware/v6-pinmap.md"
"04-Source-Code/firmware/release/hbox-tarjetaV4_0.5.7.bin|docs/descargas/superseded/hbox-tarjetaV4_0.5.7.bin"
"04-Source-Code/firmware/release/hbox-tarjetaV4_0.5.6.bin|docs/descargas/superseded/hbox-tarjetaV4_0.5.6.bin"
"04-Source-Code/firmware/release/hbox-tarjetaV4_0.5.5.bin|docs/descargas/superseded/hbox-tarjetaV4_0.5.5.bin"