~ Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QCy5VHMVLkAmftYM6swWmx
20 KiB
Auditoría final de producción — V5.6 y V5.7 · 22-oct-2026
Pregunta (Leo, 22-oct, 10:01): ¿se piden hoy? Y que todos los puertos funcionen, que la V5.7 no use la Mean Well, que el módem no provoque un apagón, que en batería duerma 10 min, despierte, reporte dos veces y vuelva a dormir, empezar el firmware, y una sola auditoría con riesgos, easy wins y matriz.
!!! success "Veredicto: GO al piloto de 5 V5.6 + 5 V5.7, hoy, con tres condiciones de pedido que no tocan el cobre" - (1) Vías «Epoxy Filled & Capped» + rayos X en U6: las tres vías térmicas del LTC4040 caen dentro de las ventanas de pasta (al 50 %). Es la causa de los puentes de la V5.5/V4. - (2) Rotación y polaridad en el visor de JLC de U6, U7, U25, U26, L22, Q7, U16, D34, D10 y los electrolíticos: las huellas easyeda2kicad no pasan por la tabla de correcciones del Fabrication Toolkit y nunca se han fabricado. - (3) BOM: D10 SMBJ33A → SMBJ33CA (misma huella; con el arnés al revés la V5.7 abre su fusible SMD F2). Código con existencia: C8838 o C2688178.
**NO-GO para las 108 V5.6 y las 322 V5.7** hasta que el piloto pase el banco con el firmware 0.7.0: hoy ningún firmware enciende el módem de estas tarjetas (MODEM_EN en PC3 es nuevo).
Documentos de esta auditoría: ▶ PDF completo (33 pp.) · ▶ Presentación (19 láminas) · Protocolo (el «reprompt») · 04-Source-Code/firmware/hbox_v5_bringup/board_v56.h (mapa de pines, repositorio).
1. Lo que pidió Leo y lo que se encontró
| Mandato | Estado | Evidencia |
|---|---|---|
| Que todos los puertos funcionen | Hardware sí · firmware no | Netlist contra hojas de datos; faltan SC16IS752 y Ethernet de campo en software |
| V5.7 sin la Mean Well | Sí | U25 TPS54360B 5.32 V / 600 kHz, 9–32 V continuos; se mide a 9/24/32 V |
| Ethernet, RS-485, RS-232 usables | Usables, con dos reglas | RS-485 ocupa el bus ~1 s al arrancar hasta que 0.7.0 escribe EFCR; H4 (TTL) y P16 (RS-232) nunca al mismo tiempo |
| Módem sin apagón | Resuelto en hardware | AP64350 regula desde 3.8 V (riel de respaldo 4.79 V), boost 2.5 A vs 1.8 A de pico, C43 220 µF, PFI 4.40 V. El firmware secuencia etapa → NMEA → módem |
| 10 min dormida, 2 reportes, dormir | Hardware sí · firmware no | STM32 alimentado en respaldo, LSE Y4 (RTC), INT1 del SC7A20 en PB9, MODEM_EN/PWR_CTRL. Piso dormido ≈ 75 mW con el W5500 en power-down; ≈ 5 días con ventanas de 45 s cada 10 min |
| Gerber/BOM/CPL generados | Verificados | Idénticos a una regeneración con relleno fresco (0.000 mm² de XOR); el .kicad_pcb del repo trae el relleno viejo (P-1) |
| Empezar el firmware | Empezado | board_v56.h (64 pines del netlist, idéntico en V5.6 y V5.7) + especificación 0.7.0 con algoritmos |
| Riesgos, easy wins, matriz | Hecho | 30 hallazgos, 16 riesgos antes/después, 6 easy wins |
2. Qué se revisó (método A–G)
- A · Paquete. Regeneración con
kicad-cli10.0.4 en copias y comparación primitiva por primitiva: máscaras, pasta, serigrafía, contorno y taladros idénticos; pads y pistas idénticos; rellenos de zona 0.000 mm² de diferencia contra un relleno fresco hecho con el proyecto cargado. BOM: 226 / 229 piezas montadas, todas con LCSC; CPL cuadra con el PCB (fuera: JP, TP, MOD1, MH, R109/R124/R125 DNP). - B · Eléctrica. Netlist de cada esquemático (V5.6 = V5.7 en los 64 pines del MCU) contra las hojas de datos del LTC4040, AP64350, TPS54360B, W5500, SC16IS752, SP3485, MAX3232, SC7A20, STM32F411.
- C · Batería. Presupuesto en respaldo (2.9 W promedio, 8.7 W de pico contra 12 W del boost), piso dormido por componente, autonomía por ventana y periodo, secuencia del ciclo.
- D · Cobre. DRC con
.kicad_dru+ relleno + paridad: 3 errores (MOD1, por diseño, excluidos), 0 sin conectar, paridad solo PWR_FLAG, en las dos. RS1 Kelvin (VIN y CLN) comprobado recortando el pad. Vías únicas = las aceptadas el 19/21-oct. - E · Firmware. 0.6.3 contra el hardware nuevo;
board_v56.h; inventario de algoritmos; lo que falta con tamaño. - F · Riesgo. Matriz 5 × 5 antes y después.
!!! warning "P-1 — el repo guarda el relleno de zonas viejo; el Gerber trae el fresco"
Los dos .kicad_pcb tienen el relleno de la pasada 5. El Fabrication Toolkit rellenó al exportar (por eso el paquete está bien), pero una exportación sin rellenar (kicad-cli, o el GUI sin «B») manda cobre de GND encima de la vía de /SYS5V de T35 y de las vías de RS1 de T34. Leo, 5 min: abrir cada tarjeta, B, guardar, commit. Regla: todo script T que toque cobre termina con rellenado en el GUI antes del commit.
V5.7 sin la Mean Well. U25 TPS54360B (3.5 A, 4.5–60 V) con R121/R122 → 5.32 V, R120 162 k → 600 kHz, R124/R125 DNP (EN flotante = siempre encendida), L22 10 µH SRP1265A, D34 B560C, C149/C150 2.2 µF/100 V a la entrada, C153/C154 47 µF a la salida; D10 SMBJ33A + F2 3 A a la entrada → 9–32 V DC continuos sin la SD-15B. A 32 V y 2.8 A el bloque disipa ≈ 2.5 W (U25 ≈ 1.6 W): se mide en banco (E-9).
3. Hallazgos — problema → arreglo
Clases: 🔴 bloqueante · 🟠 alto · 🟡 medio · 🟢 bajo / easy win. «Rev. sig.» = cambio de cobre para la siguiente revisión, no detiene el pedido.
| Id | Tarjeta | Problema | Arreglo | Quién | |
|---|---|---|---|---|---|
| P-1 | 🟠 | ambas | .kicad_pcb con el relleno de la pasada 5; el fresco solo está en el Gerber |
Abrir, B, guardar, commit. Regla nueva para los scripts T | Leo, hoy |
| P-2 | 🟠 | ambas | U6 QFN 0.5 mm: 3 vías térmicas dentro de las ventanas de pasta; U7/U25 pasta al 100 % con vías | Pedido: Epoxy Filled & Capped + rayos X en U6; lupa antes de energizar | Leo · Jesús |
| P-3 | 🟠 | ambas | Rotación de U7, U25, U26, L22 (easyeda2kicad) y polaridad de D34 nunca fabricadas | Confirmar en el visor de JLC | Leo, al pedir |
| P-4 | 🟢 | V5.7 (V5.6) | D10 SMBJ33A unidireccional: con el arnés al revés abre F2 (SMD) | BOM: SMBJ33CA, misma huella | Leo, antes de pedir |
| P-5 | 🟢 | ambas | SP3485 sin receptor a prueba de bus abierto; MAX3232 sin ESD | 108/322: THVD1410DR (C2671345) y TRS3232E, mismo pinout | Adriana (pre-orden) |
| P-6 | 🟢 | ambas | 10 nF con dos códigos (C1589 / C57112); C22 etiquetado 22 µF (C138687 es 10 µF/50 V) | Unificar en C1589; corregir la etiqueta | Leo, BOM |
| P-7 | 🟡 | V5.7 (V5.6) | JST del borde superior movidos 12–38 mm; en V5.7 P14 68 mm y DB1–DB4 al borde derecho | Medir arneses; tapa V5.7 si el gauge se ve por la tapa | Jesús, piloto |
| P-8 | 🟢 | ambas | Sin MH11: U6/L6 sin abrazadera de disipador | Temperatura de U6/L6 en banco a 1.4 A y 45 °C | Jesús, piloto |
| E-1 | ✅ | ambas | LTC4040: PFI 4.40/4.51 V, respaldo 4.79 V, 2.5 A Kelvin, 1.40 A, 3.50 V LFP, NTC +10…+60 °C, C129, CHGOFF/BSTOFF atados | Nada; verificado contra hoja de datos | — |
| E-2 | ✅ | ambas | Riel del módem: AP64350 3.33 V / 500 kHz desde SYS5V, EN apagado por defecto, C130, C43 220 µF, RST/LED/EN/RTCM al MCU | Nada; el caso de brownout de V5.5 desapareció por diseño | — |
| E-3 | 🟠 | ambas | 3V3_ETH sin enable: W5500 65–132 mA activo; en reset sin cifra | 0.7.0: PHY power-down (13 mA) antes de dormir. Rev. sig.: enable | 0.7.0 |
| E-4 | 🟡 | ambas | RS-485: DE y /RE en /RTSA → transmisor encendido desde el reset hasta que el firmware configura U10; sin TVS ni polarización | 0.7.0: EFCR/MCR primero; punto a punto; THVD1410 (P-5). Rev. sig.: U32 + D39 como v6 | 0.7.0 · BOM |
| E-5 | 🟢 | ambas | RS-232: R1OUT y H4.3 comparten SER_RXB | H4 y P16 nunca juntos. Rev. sig.: R147 | Manual |
| E-6 | 🟢 | ambas | Ethernet: J10.8 al aire, LED ACT invertido | Cosmético | Rev. sig. |
| E-7 | 🟠 | V5.7 | Ignición a 12 V = 1.38 V en PA5 (zona indefinida) | 0.7.0: ADC con histéresis 0.80 / 0.55 V | 0.7.0 |
| E-8 | 🟢 | V5.7 | Entrada 9–32 V con F2 SMD | El breaker del gabinete sigue siendo la protección; manual | Manual |
| E-9 | 🟡 | V5.7 | U25: lazo de entrada ≈ 56 mm² (D-21-2) y ≈ 2.5 W a 32 V / 2.8 A | Banco: timbre en SW/VIN y temperatura de U25/D34 a 9/24/32 V | Jesús, piloto |
| E-10 | 🟢 | V5.7 | Toda la entrada de U25 por dos vías 0.8/0.3 en serie | A 24 V nada (0.7 A); a 9 V cámara térmica. Rev. sig.: 2.ª vía | Jesús · Rev. sig. |
| E-11 | 🟢 | V5.7 | D12 (LDO del MCU) + U12 por una vía 0.6/0.3 (146.37, 86.96), ≈ 0.3 A | Sobra eléctricamente; punto único de falla. Rev. sig. | Rev. sig. |
| E-12 | 🟢 | ambas | LSE FC-135 (CL 12.5 pF) con 12 pF: corre rápido unas decenas de ppm | 0.7.0: LSEDRV alto, timeout, fallback a LSI | 0.7.0 |
| E-13 | 🟡 | ambas | Rdfu1 22 k (PA10) sostiene a medias el riel del módem apagado vía K1/DIN | 0.7.0: pulso de MODEM_RST tras cada MODEM_EN. Rev. sig.: revisar Rdfu1 | 0.7.0 |
| E-14 | 🟢 | ambas | NTC_CELL (PC5) solo vale con VEH5V presente | Reportar n/c en batería; U4 y U18 cubren | 0.7.0 |
| E-15 | 🟢 | V5.7 | /VIN_FUSED y /SW_PWRIN fuera de la clase HV24 | Rev. sig.: patrón de la clase | Rev. sig. |
| E-16 | 🟢 | ambas | Inrush de C3 220 µF + C40 al encender la etapa | 0.7.0: módem después de la etapa; rampa de 20 ms en batería | 0.7.0 |
| F-1 | 🔴 (piloto) | ambas | 0.6.3 no enciende el módem de V5.6/V5.7 y lee mal NTC, flotación e ignición | board_v56.h (hecho) + 0.7.0-pre: 1 día |
Leo + Claude |
| F-2 | 🟠 | ambas | Ciclo de 10 min no existe (el actual es espera activa a 96 MHz); umbrales Li-ion | STOP + RTC, apagado ordenado, LFP 2.95 / 3.20 V. 3–4 días | Leo + Claude |
| F-3 | 🟡 | ambas | SC16IS752 sin driver | Driver + EFCR primero. 1 día | Leo + Claude |
| F-4 | 🟡 | ambas | Ethernet solo en build de banco con IP fija | Modo de campo configurable. 2 días | Leo + Claude |
| F-5 | 🟢 | ambas | SC7A20 sin driver | 0.5 día; despertar por movimiento | Leo + Claude |
| F-6 | 🟢 | ambas | Vigilancia del módem indirecta | LED (PC2) + RTCM (PC7); reset con límite | Leo + Claude |
| F-7 | 🟢 | ambas | Modo B supone módem siempre encendido | No insertar hasta que viva; soltar K1 antes de apagarlo | Leo + Claude |
| F-8 | 🟡 | ambas | Recuperación sin orden entre módem y etapa | Módem OFF → etapa OFF/ON → NMEA → módem ON | Leo + Claude |
Easy wins, en orden de valor: vías tapadas + rayos X en U6 (P-2) · D10 → SMBJ33CA (P-4) · commit con relleno fresco (P-1) · 10 nF y etiqueta de C22 (P-6) · THVD1410 / TRS3232E en la pre-orden (P-5) · ENIG como acabado.
4. Batería, apagón del módem y ciclo de 10 min
| Carga en respaldo | Promedio | Pico |
|---|---|---|
| Etapa RTK | 0.7 W | 1.0 W |
| Módem 4G (vía U7) | 1.5 W | 7.3 W (2 A a 3.3 V) |
| MCU y lógica | 0.5 W | 0.6 W |
| W5500 (PD) · K1 | 0.05 · 0.15 W | — |
| Total | ≈ 2.9 W (0.6 A) | ≈ 8.7 W (1.8 A) < 2.5 A del boost |
Piso dormido estimado ≈ 75 mW (W5500 en power-down 50 mW, MAX3232 + SP3485 4 mW, LED D18 4 mW, MCU en STOP 1.5 mW, resto 2 mW); sin el power-down del W5500 serían 450 mW y ninguna combinación llega a 7 días. Con 45 s de ventana cada 10 min ≈ 5 días; cada 20 min ≈ 8.5 días.
Secuencia de 0.7.0: respaldo detectado (5V_SENSE < 4.2 V, media 200 ms) → última palabra ($PHLG + posición) → apagar (MODEM_EN = 0, PA1 = 0, K1 suelto, UARTs en alta Z, W5500 PD, LEDs) → STOP con alarma RTC a 10 min (LSE; LSI si no arrancó), INT1 del SC7A20 y regreso del 24 V → despertar (vbat < 2.95 V → dormir otra vez) → etapa ON (rampa 20 ms) y NMEA ≤ 30 s → +2 s MODEM_EN; LED/RTCM ≤ 90 s o pulso de MODEM_RST (máx. 2) → K1 y 2 × $PHLG/$PHCG con pwr=BATT → dormir. Umbrales LFP: corte 2.95 V, rearme 3.20 V (0.6.3 trae 3.40 / 3.70 de Li-ion).
5. Firmware: 0.6.3 no sirve a V5.6/V5.7; board_v56.h sí
| Función | 0.6.3 (V5.5) | V5.6 / V5.7 | Efecto con 0.6.3 |
|---|---|---|---|
| Riel del módem | siempre encendido | MODEM_EN = PC3, apagado por defecto | el módem nunca enciende |
| Reset del módem | PCF8574 P7 → puente a SW4G1 | PC1 directo (R107) | el pulso no hace nada |
| LED del módem | — | PC2 | sin señal de vida |
| NTC | PB1 | PC5 (nodo NTC del LTC4040 × 0.5455) | lectura basura |
| Flotación / corte | 4.00 V · 3.40/3.70 V | 3.50 V · LFP 2.95/3.20 V | rearranques y cortes mal juzgados |
| Ignición | digitalRead | ADC (12 V → 1.38 V) | aleatoria a 12 V |
| Acelerómetro · RTCM | — | SC7A20 0x18 (INT1 PB9) · USART6 RX en PC7 | sin usar |
Trabajo para 0.7.0 con tamaño: F-1 0.7.0-pre (módem, NTC, LFP, ADC) 1 día · F-2 ciclo de respaldo 3–4 días · F-3 SC16IS752 1 día · F-4 Ethernet de campo 2 días · F-5…F-8 2 días. Los algoritmos heredados (gobernador de carga, recuperación de enlace, Modo B, vigilancia del módem, cortes, medición, supervisión) están descritos en el PDF, §7.2.
6. Registro de riesgos (P × I, antes → después)
| Id | Riesgo | Tarjeta | Antes | Después | Mitigación | Clase |
|---|---|---|---|---|---|---|
| R1 | Soldadura de U6 (QFN 0.5 mm, 3 vías en la pasta): puentes y bolas como en V5.5/V4 | V5.6 · V5.7 | 4·4 = 16 🔴 | 2·3 = 6 🟡 | Pedir con «Epoxy Filled & Capped» + rayos X en U6; lupa en cada tarjeta antes de energizar | Pedido |
| R2 | Rotación de huellas easyeda2kicad (U7, U25, U26, L22) y polaridad de D34 en JLC | V5.6 · V5.7 | 2·5 = 10 🟠 | 1·5 = 5 🟡 | Confirmar pin 1 y polaridad en el visor de JLC antes de pagar | Pedido |
| R3 | Apagón (brownout) del módem en batería al arrancar o en ráfaga LTE | V5.6 · V5.7 | 1·4 = 4 🟡 | 1·3 = 3 🟢 | Hardware ya resuelto (AP64350 desde 3.8 V, 2.5 A de boost, C43 220 µF); 0.7.0 secuencia etapa → NMEA → MODEM_EN | Diseño |
| R4 | Piso de consumo dormido demasiado alto (W5500 65–132 mA sin enable) | V5.6 · V5.7 | 4·3 = 12 🟠 | 2·3 = 6 🟡 | 0.7.0: W5500 en power-down (13 mA) antes de dormir; medir el piso en el piloto (PPK2) | Firmware |
| R5 | RS-485 toma el bus desde el encendido hasta que el firmware configura U10 | V5.6 · V5.7 | 3·2 = 6 🟡 | 2·2 = 4 🟡 | EFCR/MCR como primer paso del arranque; uso punto a punto; THVD1410 en BOM para 108/322 | Firmware |
| R6 | Ignición mal leída en máquinas de 12 V (1.38 V en PA5, zona indefinida) | V5.7 | 4·3 = 12 🟠 | 1·3 = 3 🟢 | 0.7.0: PA5 por ADC con histéresis 0.80/0.55 V | Firmware |
| R7 | Arnés al revés: D10 SMBJ33A conduce y abre F2 (SMD) / quema D10 | V5.7 (V5.6) | 2·3 = 6 🟡 | 2·1 = 2 🟢 | D10 → SMBJ33CA (misma huella); V5.6 sin fusible: el breaker del gabinete | BOM |
| R8 | U25: timbre en SW/VIN (lazo 56 mm²) o calor de U25/D34 a 32 V y 2.8 A | V5.7 | 2·3 = 6 🟡 | 2·2 = 4 🟡 | Banco: 9/24/32 V con 2.5 A, osciloscopio y cámara térmica; D-21-2 | Banco |
| R9 | Firmware 0.7.0 no existe: el piloto no se puede probar (ni el módem enciende) | V5.6 · V5.7 | 5·4 = 20 🔴 | 3·4 = 12 🟠 | board_v56.h hoy; 0.7.0-pre (módem + ADC) antes de que lleguen las tarjetas | Firmware |
| R10 | Arneses cortos / tapa: conectores JST movidos 12–68 mm; LEDs del gauge en otro borde (V5.7) | V5.7 (V5.6) | 3·2 = 6 🟡 | 3·1 = 3 🟢 | Medir con la primera tarjeta; tapa V5.7 si el gauge se ve por la tapa | Mecánica |
| R11 | Relleno de zonas viejo en los .kicad_pcb del repo: una exportación sin rellenar manda cortos | V5.6 · V5.7 | 2·4 = 8 🟠 | 1·4 = 4 🟡 | Hoy: Gerber verificado = relleno fresco. Leo: abrir, B, guardar y commit | Proceso |
| R12 | Umbrales de batería pensados para Li-ion (3.40/3.70 V) con paquete LFP (meseta 3.2–3.3 V) | V5.6 · V5.7 | 4·3 = 12 🟠 | 1·3 = 3 🟢 | 0.7.0: corte 2.95 V / rearme 3.20 V con media de 200 ms; SoC por culombios | Firmware |
| R13 | Lazos de convertidores heredados de V5.5 (U12/L8 35 mm, U2/Dbk1 18 mm): EMC / ruido | V5.6 · V5.7 | 2·2 = 4 🟡 | 2·2 = 4 🟡 | Se mide en el piloto; corregir en v6 | Diseño |
| R14 | Vías únicas en el camino de 24 V (V5.7) a 9 V y 1.9 A: calentamiento | V5.7 | 1·2 = 2 🟢 | 1·2 = 2 🟢 | Instalaciones a 24 V (0.7 A); cámara térmica a 9 V; 2.ª vía en la siguiente revisión | Diseño |
| R15 | Módem «encendido pero muerto» tras dormir (riel sostenido por Rdfu1 22k vía K1/DIN) | V5.6 · V5.7 | 2·3 = 6 🟡 | 1·3 = 3 🟢 | Pulso de MODEM_RST (PC1) tras cada MODEM_EN (SW4G1 probado); revisar Rdfu1 en v6 | Firmware |
| R16 | LSE no arranca (FC-135 CL 12.5 pF con 12 pF) y el ciclo de 10 min se queda sin reloj | V5.6 · V5.7 | 1·3 = 3 🟢 | 1·1 = 1 🟢 | LSEDRV alto + timeout → RTC con LSI (±5 %) y evento; IWDG independiente | Firmware |
7. El pedido de hoy (≈ 40 min) y el camino a las 108 / 322
- BOM: D10 → SMBJ33CA con existencia (opcional: 10 nF a C1589, etiqueta de C22).
- PCB: 4 capas, 1.6 mm, JLC04161H-7628, ENIG, Via covering: Epoxy Filled & Capped, «Confirm production file».
- Ensamble: solo top; rayos X en U6 en las notas del pedido; visor activado.
- Visor: pin 1 de U6, U7, U25, U26, U16, Q7; punto de L22; cátodo de D34, D10, D5, D6, D11–D13; «+» de C3, C43, C78, C10, C103; K1; Q10.
- 5 + 5. Número de orden al acta y a la Bitácora.
- Después de pagar: abrir cada tarjeta, B, guardar; commit de
kicad/yproduction/HBOX_v5_Rev[67]_PROD*; push; bump del submódulo.
Antes de las 108 / 322 (banco del piloto con 0.7.0): lupa en U6 + autoprueba · 24 V: NMEA < 2 s, registro < 60 s, Kelvin (TP1 ÷ 32) 1.0–1.1, carga 1.2–1.4 A · 20 ciclos de 10 min con paquete al 20 % y 45 °C, piso < 100 mW, SYS5V > 4.3 V · 20 cortes 24 V ↔ batería sin reset · RS-485/RS-232 en lazo, Ethernet 24 h · V5.7: 9/12/24/32 V, polaridad invertida, U25 < 110 °C y D34 < 100 °C a 32 V · temperaturas de U6, L6, L7 · arneses, tapa, barrenos. Con los 8 en verde se liberan las 108 y las 322.
Cómo se hizo
Copias en 03-Architecture-Hardware/kicad/_to_delete/audit-20261022/ (SHA-256 iguales a los originales); kicad-cli 10.0.4 (DRC con paridad y relleno, ERC, netlist, Gerber, taladros, posiciones, SVG); relleno fresco con pcbnew en una copia con el proyecto cargado (sin el .kicad_pro al lado el relleno sale distinto: lección del día); parser de Gerber propio para comparar flashes/trazos/regiones; parser de netlist; grafo de conectividad del cobre (Kelvin con el pad recortado, vías de articulación); cruce BOM/CPL/PCB; hojas de datos y piezas de JLC consultadas en línea. Fuentes LaTeX, figuras y scripts en 03-Architecture-Hardware/Auditoria-Final-V56-V57/.







