hbox-docs/docs/formularios/v4.html

258 lines
20 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="es">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Acta de prueba — EinarBoard V4 (fw 0.5.6)</title>
<link rel="stylesheet" href="acta.css">
</head>
<body>
<div id="acta"></div>
<script src="acta.js"></script>
<script>
/* Acta de prueba de la tarjeta V4 con firmware 0.5.6 — tipo 'prueba-v4', una por serie (V4-01 … V4-15).
Procedimiento: procedimientos/v4-prueba-fw-0.5.6.md
- Las claves llevan el prefijo sN_MM_ para que ver.html las muestre en orden, por sección.
- Cada etapa termina con una pregunta de paso. Si la tarjeta no pasa, las secciones siguientes se
ocultan (sus obligatorios dejan de contar) y el acta se envía como FALLA desde el Cierre. */
const empieza = (v, k, t) => String(v[k] || '').startsWith(t);
const prepOK = v => empieza(v, 's2_09_prep_fin', 'Completa');
const flasheada = v => !!v.s3_01_dfu && !empieza(v, 's3_01_dfu', 'No logré');
const flashOK = v => prepOK(v) && flasheada(v) && v.s3_05_tests === '>>> BOARD OK';
const aOK = v => flashOK(v) && empieza(v, 's4_07_a_fin', 'Pasó');
const falla = v => !!v.s7_01_clasif && !empieza(v, 's7_01_clasif', 'Pasó');
const DESP = ['Despertar #1', 'Despertar #2'];
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:'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'];
const COLS_DIAG = [
{ k:'sw5v', txt:'SW_5V mín', u:'V', num:true, ph:'4.9' },
{ k:'v3m', txt:'3V3_MODEM mín', u:'V', num:true, ph:'3.3' },
{ k:'ledm', txt:'LEDs del módem (qué hacen)', opciones:['apagados','se apagan y vuelven','parpadeo','fijo'] },
{ k:'uart', txt:'LEDs UART del simpleRTK2B', opciones:['lento ~1/s','rápido','sin parpadeo'] },
{ k:'vbat', txt:'vbat / vbatmin (tecla s)', ph:'3.92 / 3.71', ancho:'110px' },
];
const PASO_NO = 'No pude completarla — me detengo (explico en Cierre)';
Acta.render({
tipo: 'prueba-v4',
prefijo: 'V4',
series: 15,
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',
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.',
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>' },
] },
{ 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',
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)' },
{ 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',
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',
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.' },
] },
{ 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)',
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)',
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.' },
{ 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?' },
{ 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).' },
{ 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)',
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ó',
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?',
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' },
{ 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>',
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?',
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' },
{ 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.)' },
{ 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)',
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] …' },
{ 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>.' },
] },
{ 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.',
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:'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',
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',
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…',
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>.' },
{ tipo:'radio', clave:'s4_04_modem', req:true,
txt:'¿El módem registró y los LEDs UART del simpleRTK2B parpadean rápido (llegan correcciones)?',
opciones:['Sí','No'] },
{ tipo:'radio', clave:'s4_05_monitor', req:true, txt:'¿En el monitor aparece la unidad con 0.5.6-fm 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.' },
{ 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.',
items: [
{ tipo:'texto', clave:'s5_00_hora', rows:'1', req:true, txt:'Hora en que quitaste los 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?',
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»?',
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',
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',
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.',
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?',
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.',
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.',
items: [
{ tipo:'radio', clave:'s6_00_c1', req:true, txt:'Caso 1 — durante el reposo (etapa OFF) reconecté los 24 V. El 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»?',
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…',
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»?',
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'] },
] },
{ 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?',
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.' },
{ 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',
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:'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.' },
] },
]
});
</script>
</body>
</html>