Compare commits

...

3 Commits

17 changed files with 218 additions and 78 deletions

View File

@ -1,4 +1,9 @@
035ebeb348461765f099341603a9e99b94512f8477509efb78aa7caf953f4c2f hbox-tarjetaV3_3.0.4.bin
a68a87ff1f6b34a8284e9e5e32c95da7bb8d8adc071c5fd64412a3e744e46b28 hbox-tarjetaV3_4.0.0.bin
a8de74b3d7768e9d5656ae0bff05475445c0cd2599ecfdc4ab081e517ed3d6ef hbox-v5-bringup_0.4.0.bin
e1f351084e803306c376989b284ca0f9f9f1a3445e59494f8a5ff7a9652ad44c hbox-v5-bringup_0.5.1.bin
162a8d4f17af36e9cbacf7751ec230a21161ce92c0446564d01a06aa2588789e hbox-tarjetaV4_0.5.3.bin
2c5349a9a096929c33a09307640359c523421b226b9db3602279127de19eff95 hbox-v5-bringup_0.5.3.bin
035ebeb348461765f099341603a9e99b94512f8477509efb78aa7caf953f4c2f superseded/hbox-tarjetaV3_3.0.4.bin
4528187f9d675bca8114583d44eccf4d2149d847f7e5fc402631d8811ee39282 superseded/hbox-tarjetaV4_0.5.1.bin
fa2b7554099b332c70ab18cde24b30a4f0a46ac01987466e491c69b308783a5a superseded/hbox-tarjetaV4_0.5.2.bin
a8de74b3d7768e9d5656ae0bff05475445c0cd2599ecfdc4ab081e517ed3d6ef superseded/hbox-v5-bringup_0.4.0.bin
e1f351084e803306c376989b284ca0f9f9f1a3445e59494f8a5ff7a9652ad44c superseded/hbox-v5-bringup_0.5.1.bin
a9b0d6c1c640ebc9a132236ca465cad04e8eed99962b7dc6024b6ee8b765d2d6 superseded/hbox-v5-bringup_0.5.2.bin

Binary file not shown.

View File

@ -20,6 +20,20 @@ arduino-cli compile \
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:
```bash
arduino-cli compile \
--fqbn "STMicroelectronics:stm32:GenF4:pnum=BLACKPILL_F411CE,usb=CDCgen,xserial=generic,rtlib=nanofp" \
--build-property "build.extra_flags=-DHBOX_BOARD_V4" \
--output-dir out-v4 hbox_v5_bringup
mv out-v4/hbox_v5_bringup.ino.bin release/hbox-tarjetaV4_0.5.1.bin
```
PB2 is BOOT1 on the F411: enter DFU with **USB only** (W5500 unpowered) so INTn cannot hold BOOT1 high.
The first console line must read `board=EinarBoard v4 (HBOX v4)`.
## Flash (DFU, J11)
Hold **SW2** (BOOT0) → tap **SW1** (RESET) → release SW2 → device `0483:DF11` appears.
```bash

Binary file not shown.

View File

@ -10,7 +10,7 @@ descargar nada, ubica cuál vas a tocar:
| Qué | Qué se le carga | Cómo | Dónde está |
|---|---|---|---|
| **Tarjeta HBOX** (Blackpill / EinarBoard) | Firmware `.bin` | DFU por USB | [§ Firmware del HBOX](#firmware-del-hbox-por-generacion-de-tarjeta) |
| **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) |
@ -23,59 +23,90 @@ Cada carga se registra en el **[acta de reflasheo](../formularios/reflasheo.html
## Firmware del HBOX — qué binario va en qué tarjeta
**La versión del firmware no dice nada de la tarjeta.** `0.3.0` no es "para V3" ni `0.4.0` "para V4":
son versiones viejas del firmware de **V5**. El binario lleva la tarjeta en el nombre y eso es lo que manda.
**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.
| Tarjeta | MCU | Firmware (código) | Binario vigente |
|---|---|---|---|
| **V3** — EinarBoard 1.0, las 3 unidades en campo | Blackpill en zócalo (F411CE) | `blackpillrtkcode_v3` · `_v4` | [`hbox-tarjetaV3_3.0.4.bin`](hbox-tarjetaV3_3.0.4.bin) ⚠ sin prueba de banco |
| **V3** con telemetría en banda | Blackpill en zócalo | `blackpillrtkcode_v4` (4.0.0) | [`hbox-tarjetaV3_4.0.0.bin`](hbox-tarjetaV3_4.0.0.bin) ⚠ sin prueba de banco |
| **V4** — `hbox-watchdog-v4` | Blackpill en zócalo + PCF8574 · W5500 · SC16IS752 | **ninguno** | — |
| **V5** — `hbox-watchdog-v5`, lote de 15 | STM32F411RET6 soldado | `hbox_v5_bringup` | [`hbox-v5-bringup_0.5.1.bin`](hbox-v5-bringup_0.5.1.bin) ✅ **en despliegue** |
| 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.5.3.bin`](hbox-tarjetaV4_0.5.3.bin) | ⚠ compilado 25-sep, **sin prueba de banco** |
| **V5** — `hbox-watchdog-v5`, lote de 15 | STM32F411RET6 soldado | `hbox_v5_bringup` (0.5.3) | [`hbox-v5-bringup_0.5.3.bin`](hbox-v5-bringup_0.5.3.bin) | ⚠ **vigente desde 25-sep** — ventana de 2 min cada 10 min en batería; 0.5.1 fue la última en campo |
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*.
!!! warning "0.5.3 (V4 y V5) cambia cómo se ve la unidad en el monitor cuando está en batería"
Con 0.5.3 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 0.5.3.** Con la V3 (4.0.0) no cambia nada: sigue reportando continuo en batería.
!!! 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`. Como `PB2` es `BOOT1` en el F411, la V4 **se flashea por DFU solo con USB** (sin 24 V),
para que el W5500 apagado no pueda sostener `BOOT1` en alto.
!!! danger "Lo que NO se puede cruzar"
- Un binario de **V5** en una **V3 o V4**: es otro MCU (soldado vs Blackpill), otro reloj y otro mapa
de pines. Lo más probable es que ni enumere por USB.
- `blackpillrtkcode` en una **V4**: maneja los LEDs de carga en PB12–PB15, que en la V4 son el SPI
del W5500. La V4 **no tiene firmware todavía**; hasta que lo tenga, no se flashea con nada.
- `hbox-v5-bringup_0.4.0` (o 0.3.0) en cualquier tarjeta: son versiones **superadas** de V5, sin
watchdog, ventilador ni recuperación de enlace. Solo se conservan por trazabilidad.
- `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.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.4.0.bin`](hbox-v5-bringup_0.4.0.bin) | 0.4.0 (2026-09-17) — **superada**, sin telemetría en banda | `a8de74b3d7768e9d…` ([SHA256SUMS](SHA256SUMS.txt)) |
| [**hbox-v5-bringup_0.5.1.bin**](hbox-v5-bringup_0.5.1.bin) | **0.5.1** (2026-09-18) — **campo + Modo B / telemetría — EN PRUEBA** (reportado: etapa RTK no enciende) | `e1f351084e803306…` | 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`) |
| [**hbox-v5-bringup_0.5.3.bin**](hbox-v5-bringup_0.5.3.bin) | **0.5.3** (2026-09-25) — **campo + Modo B + ventana de 2 min cada 10 min en batería** — ⚠ sin prueba de banco; requiere servidor con soporte `DUTY` | `2c5349a9a096929c…` | 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.5.1.bin
dfu-util -a 0 -s 0x08000000:leave -D hbox-v5-bringup_0.5.3.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 embarca con 0.5.1.** `0.4.0`
sigue descargable solo como referencia de versiones anteriores.
enciende y reporta telemetría completa en el monitor desplegado. **Se embarcó con 0.5.1; desde el 25-sep la vigente es 0.5.3.** `0.4.0`
queda en `superseded/` solo como referencia.
!!! note "Tarjetas ya flasheadas con cualquier versión anterior"
Re-flashear con **0.5.1** por el mismo procedimiento DFU. **La primera línea de la consola tras reset dice la versión**
(`hbox-v5-bringup 0.5.1 built …`): si la línea `STAT` no termina en `stack=…`, la tarjeta sigue con 0.1.1.
Re-flashear con **0.5.3** por el mismo procedimiento DFU. **La primera línea de la consola tras reset dice la versión**
(`hbox-v5-bringup 0.5.3 built …`): si la línea `STAT` no termina en `stack=…`, la tarjeta sigue con 0.1.1.
!!! tip "Consola 0.5.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.1 = firmware de campo mínimo + telemetría y eventos en banda — AUTO de fábrica"
!!! 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.
**El cargador sigue APAGADO: el paquete es de un solo uso hasta el firmware de producción.** Anotarlo en el acta de la unidad.
**0.5.2/0.5.3 — batería:** 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`).
@ -112,13 +143,13 @@ Notas de compilación y cambios: [README del firmware de bring-up](hbox-v5-bring
--output-dir build/v4-sinB blackpillrtkcode_v4
```
Es el firmware que gobierna la unidad en la máquina (`blackpillrtkcode_v3` / `v4`), distinto del de
bring-up del v5. Se usa en el [reflasheo en taller](../procedimientos/reflasheo-unidades.md).
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).
| Generación | Archivo | Estado |
| Tarjeta | Archivo | Estado |
|---|---|---|
| **V3** — flota desplegada | [`hbox-tarjetaV3_3.0.4.bin`](hbox-tarjetaV3_3.0.4.bin) · 62 464 B · `035ebeb3…` | ⚠ compilado 19-sep, falta prueba de banco |
| **V3** con telemetría | [`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 |
| **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.5.3.bin`](hbox-tarjetaV4_0.5.3.bin) · 81 932 B · `162a8d4f17af36e9…` | ⚠ compilado 25-sep, falta prueba de banco. Es 0.5.3 para Blackpill (`-DHBOX_BOARD_V4`), DFU **solo con USB** |
!!! 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

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -45,7 +45,7 @@ Acta.render({
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=3.0.4' },
{ 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:'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)' },

View File

@ -3,7 +3,7 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Acta de recepción — HBOX</title>
<title>Acta de recepción e inspección — HBOX</title>
<link rel="stylesheet" href="acta.css">
</head>
<body>
@ -12,7 +12,11 @@
<script src="series.js"></script>
<script src="acta.js"></script>
<script>
const enciende = v => String(v.enciende || '').startsWith('Sí');
const enciende = v => String(v.enciende || '').startsWith('Sí');
const corto = v => String(v.continuidad || '').startsWith('Sí');
const conBat = v => !String(v.bateria_fisica || '').startsWith('La unidad no trae');
const batMala = v => ['Hinchada','Con manchas','Caliente'].some(t => String(v.bateria_fisica || '').startsWith(t));
const puedeEnergizar = v => !corto(v);
Acta.render({
tipo: 'recepcion',
@ -21,13 +25,15 @@ Acta.render({
nombres: { alan: 'Alán Basurto', daniel: 'Daniel Martínez', leo: 'Leo Rodríguez' },
unidades: window.SERIES,
etiquetaSerie: 'Unidad que se recibe',
titulo: 'Acta de recepción',
subtitulo: 'Helgen Technologies · se llena al abrir la caja, ANTES de entrar al puerto.',
titulo: 'Acta de recepción e inspección',
subtitulo: 'Helgen Technologies · una por cada caja, al abrirla, ANTES de entrar al puerto.',
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. Se compara contra el <b>acta de envío</b>: mismo '
+ 'firmware, misma SIM, mismo contenido. Lo que no coincida, aquí se detecta. Historial de la unidad: '
+ 'elige la serie y mira sus visitas anteriores arriba.',
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.',
secciones: [
{ titulo: '0 · Qué llega y dónde',
@ -49,7 +55,7 @@ Acta.render({
] },
{ titulo: '2 · Contenido contra el acta de envío',
sub:'Abre el acta de envío de esta unidad (expediente) y compara punto por punto.',
sub:'Abre el acta de envío de esta unidad (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_ant_gnss', txt:'Antena GNSS con cable.' },
@ -60,20 +66,69 @@ Acta.render({
{ tipo:'foto', clave:'f_contenido', req:true, etiqueta:'contenido', txt:'Todo el contenido desplegado.' },
] },
{ titulo: '3 · Prueba rápida de vida (5 minutos, en el taller)',
sub:'Con fuente de 24 V y las antenas conectadas. No hace falta cielo abierto para esto.',
{ 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.',
items: [
{ tipo:'radio', clave:'enciende', req:true, txt:'¿Enciende y el LED parpadea?',
opciones:['Sí','No — LED apagado','Enciende pero se apaga'] },
{ tipo:'texto', clave:'fw', rows:'1', si:enciende, req:true, txt:'Firmware que reporta (línea BOOT)', ph:'fw=3.0.4' },
{ tipo:'check', clave:'fw_coincide', si:enciende, txt:'El firmware <b>coincide con el del acta de envío</b>.' },
{ tipo:'radio', clave:'modem', si:enciende, txt:'LED de red del módem 4G tras 3 minutos',
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:'archivo', clave:'log', etiqueta:'recepcion', si:enciende, txt:'Captura de la consola (opcional, pero útil si algo se ve raro)' },
{ tipo:'check', clave:'i_sacudir', req:true, txt:'Sacudí la unidad cerrada junto al oído: <b>nada suena suelto</b> adentro.' },
{ 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',
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',
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).',
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?' },
] },
{ titulo: '4 · Veredicto',
{ 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.',
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 Ω?',
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".' },
] },
{ 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.',
items: [
{ tipo:'radio', clave:'enciende', req:true, si:puedeEnergizar, txt:'Al energizar: ¿enciende y el LED de estado parpadea?',
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.' },
{ 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_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' },
] },
{ 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.',
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',
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:'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.' },
] },
{ titulo: '7 · Veredicto',
items: [
{ tipo:'radio', clave:'accion', req:true, guardaEn:'accion', txt:'¿Entra al puerto?',
opciones:[
@ -81,7 +136,7 @@ Acta.render({
'Entra con observaciones (anótalas)',
'No entra — se queda en el taller para revisión',
'Rechazada — regresa a Querétaro'],
aviso:'Si no enciende o el firmware no coincide, <b>no entra</b>. Instalarla y descubrirlo arriba de una máquina cuesta una visita más y un permiso más.' },
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.' },
{ tipo:'texto', clave:'observaciones', rows:'3', txt:'Observaciones' },
] },
]

View File

@ -17,7 +17,7 @@ incluidos los daños.
| 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**, antes de entrar al puerto | Taller Veracruz | [abajo](#7-recepcion) | [Recepción](../formularios/recepcion.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** | 🆕 |
@ -64,20 +64,42 @@ arnés GX16 · material de gabinete si aplica · hoja impresa con serie, máquin
Fotos: la caja abierta con todo adentro, la unidad con su etiqueta legible, la caja cerrada y rotulada.
## 7 · Recepción
## 7 · Recepción e inspección — cada caja, antes de entrar al puerto
Se llena **al abrir la caja, antes de entrar al puerto** — la última oportunidad de regresar por un
cable. Se compara contra el acta de envío de esa unidad (está en su expediente).
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).
**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.
**Orden obligatorio:** inspección → multímetro sin energía → energizar → prueba de vida. Nunca al revés.
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. **Prueba rápida de vida** (5 min, en el taller, fuente de 24 V): enciende y el LED parpadea ·
`BOOT` reporta el **mismo firmware** que el envío · el módem registra en Telcel (LED lento o fijo) ·
la SIM es la misma (ICCID).
4. **Veredicto:** lista para entrar · entra con observaciones · se queda en el taller · rechazada.
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 "Si no enciende o el firmware no coincide, no entra"
Instalarla y descubrirlo arriba de una máquina cuesta una visita más y un permiso más de ICAVE.
!!! 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.
## ⚡ Daño en cualquier momento

View File

@ -37,9 +37,9 @@ cuando debería estar cortada.
| Generación de tarjeta | Binario | Estado |
|---|---|---|
| **V3** — EinarBoard 1.0 (RTK-003, RTK-006, RTK-014), Blackpill | `hbox-tarjetaV3_3.0.4.bin` · `hbox-tarjetaV3_4.0.0.bin` (telemetría) | ⚠ publicados, sin prueba de banco |
| **V4** — Blackpill + PCF8574/W5500/SC16IS752 | **ninguno** | ⛔ sin firmware: `blackpillrtkcode` choca en PB12–15 con el W5500 |
| **V5** — MCU soldado, lote de 15 | `hbox-v5-bringup_0.5.1.bin` | ✅ en despliegue |
| **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.5.3.bin` | ⚠ publicado, sin prueba de banco (mismo código que V5 + `board_v4.h`) |
| **V5** — MCU soldado, lote de 15 | `hbox-v5-bringup_0.5.3.bin` | ⚠ vigente 25-sep (ventana de 2 min cada 10 min en batería); antes flashear, servidor con soporte `DUTY` |
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).
@ -112,10 +112,10 @@ Hoy el repositorio **no contiene binarios compilados de V3 ni de V4**. Los `.bin
| Generación | Código fuente | Qué falta |
|---|---|---|
| **V3** | ✅ Existe: `04-Source-Code/firmware/blackpillrtkcode_v3/` (v3.0.4) | Compilarlo y probarlo en banco |
| **V4** | ✅ Existe: `blackpillrtkcode_v4/` (v4.0.0, 1536 líneas) — deriva de v3 y agrega la telemetría en banda | Compilarlo y probarlo en banco |
| **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 |
Las dos se compilan igual. La diferencia práctica: **V3 deja la unidad como está hoy**; **V4 además hace que la unidad reporte su salud al servidor por el módem**, sin cables nuevos (K1 y `BYP_CTRL` ya están en la EinarBoard 1.0).
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.
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.
@ -140,11 +140,19 @@ cd ~/Documents/Claude/Projects/Drogheda/04-Source-Code/firmware
arduino-cli compile \
--fqbn "STMicroelectronics:stm32:GenF4:pnum=BLACKPILL_F411CE,usb=CDCgen,xserial=generic,rtlib=nanofp" \
--output-dir release/ \
blackpillrtkcode_v3/ # o blackpillrtkcode_v4/ para la version con telemetria
blackpillrtkcode_v4/
# 4. nómbralo por su versión y saca su huella
mv release/blackpillrtkcode_v3.ino.bin release/hbox-tarjetaV3_3.0.4.bin
shasum -a 256 release/hbox-tarjetaV3_3.0.4.bin | tee -a release/SHA256SUMS
# 4. nómbralo por tarjeta + versión y saca su huella
mv release/blackpillrtkcode_v4.ino.bin release/hbox-tarjetaV3_4.0.0.bin
shasum -a 256 release/hbox-tarjetaV3_4.0.0.bin | tee -a release/SHA256SUMS
# 5. V4: mismo codigo que V5, compilado para Blackpill con board_v4.h
arduino-cli compile \
--fqbn "STMicroelectronics:stm32:GenF4:pnum=BLACKPILL_F411CE,usb=CDCgen,xserial=generic,rtlib=nanofp" \
--build-property "build.extra_flags=-DHBOX_BOARD_V4" \
--output-dir release/ hbox_v5_bringup/
mv release/hbox_v5_bringup.ino.bin release/hbox-tarjetaV4_0.5.3.bin
shasum -a 256 release/hbox-tarjetaV4_0.5.3.bin | tee -a release/SHA256SUMS
```
**El destino de tarjeta ya viene bien por omisión:** el propio `.ino` trae `TARGET_EINARBOARD 1` y

View File

@ -78,7 +78,7 @@ nav:
- "📦 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 (antes de entrar al puerto)": formularios/recepcion.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

View File

@ -22,10 +22,15 @@ declare -a MAP=(
"03-Architecture-Hardware/kicad/docs/GIT-GUIDE_Colaboradores-Externos_ES.md|docs/git/guia-git-es.md"
"03-Architecture-Hardware/kicad/docs/GIT-GUIDE_External-Collaborators_EN.md|docs/git/git-guide-en.md"
# Descargas para técnicos (firmware de bring-up v5)
"04-Source-Code/firmware/hbox_v5_bringup/release/hbox-v5-bringup_0.5.1.bin|docs/descargas/hbox-v5-bringup_0.5.1.bin"
"04-Source-Code/firmware/hbox_v5_bringup/release/superseded/hbox-v5-bringup_0.4.0.bin|docs/descargas/hbox-v5-bringup_0.4.0.bin"
"04-Source-Code/firmware/release/hbox-tarjetaV3_3.0.4.bin|docs/descargas/hbox-tarjetaV3_3.0.4.bin"
"04-Source-Code/firmware/hbox_v5_bringup/release/hbox-v5-bringup_0.5.3.bin|docs/descargas/hbox-v5-bringup_0.5.3.bin"
"04-Source-Code/firmware/hbox_v5_bringup/release/hbox-v5-bringup_0.5.2.bin|docs/descargas/superseded/hbox-v5-bringup_0.5.2.bin"
"04-Source-Code/firmware/hbox_v5_bringup/release/hbox-v5-bringup_0.5.1.bin|docs/descargas/superseded/hbox-v5-bringup_0.5.1.bin"
"04-Source-Code/firmware/hbox_v5_bringup/release/superseded/hbox-v5-bringup_0.4.0.bin|docs/descargas/superseded/hbox-v5-bringup_0.4.0.bin"
"04-Source-Code/firmware/release/hbox-tarjetaV3_3.0.4.bin|docs/descargas/superseded/hbox-tarjetaV3_3.0.4.bin"
"04-Source-Code/firmware/release/hbox-tarjetaV3_4.0.0.bin|docs/descargas/hbox-tarjetaV3_4.0.0.bin"
"04-Source-Code/firmware/release/hbox-tarjetaV4_0.5.3.bin|docs/descargas/hbox-tarjetaV4_0.5.3.bin"
"04-Source-Code/firmware/release/hbox-tarjetaV4_0.5.2.bin|docs/descargas/superseded/hbox-tarjetaV4_0.5.2.bin"
"04-Source-Code/firmware/release/hbox-tarjetaV4_0.5.1.bin|docs/descargas/superseded/hbox-tarjetaV4_0.5.1.bin"
"04-Source-Code/firmware/hbox_v5_bringup/README.md|docs/descargas/hbox-v5-bringup-README.md"
)
@ -39,7 +44,7 @@ for entry in "${MAP[@]}"; do
done
# SHA256SUMS se GENERA de los .bin que de verdad se publican (antes se copiaba el del v5 y
# borraba las lineas de los demas firmwares). Asi la lista nunca miente sobre la carpeta.
( cd docs/descargas && shasum -a 256 *.bin > SHA256SUMS.txt )
( cd docs/descargas && shasum -a 256 *.bin superseded/*.bin > SHA256SUMS.txt )
echo "SHA256SUMS.txt regenerado: $(wc -l < docs/descargas/SHA256SUMS.txt) binarios"
echo "sincronizados $n archivos desde $SRC"
echo "Revisa 'git status' y haz commit de los cambios que quieras publicar."