hbox-docs/docs/formularios/v4.html

253 lines
18 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.6.0)</title>
<script src="../js/tema.js"></script>
<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:'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'];
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.6.0',
subtitulo: 'Un acta por tarjeta (V4-01 … V4-15) · ~1 h',
textoOK: 'APROBADA',
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="../tableros/actas/">tablero de actas</a>. La serie PRUEBA sirve para practicar.',
secciones: [
{ titulo: '1 · Datos',
items: [
{ 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',
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:'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:'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, 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:'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:'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:'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:'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:'Indicación de ingeniería y posición final' },
{ tipo:'check', clave:'s2_04_usb', req:true,
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 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 en su conector, como llegó',
esperado:'3.80 V o más para empezar', u:'V',
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:'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.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:'<code>hbox-tarjetaV4_0.6.0.bin</code> de Descargas (no el de V5 ni el 0.6.1 retirado); 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:'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:'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 (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:'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:'Cable normal retirado; desde aquí, solo el cable sin 5 V.' },
] },
{ titulo: '5 · Prueba A — con 24 V', si: flashOK,
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 (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 (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:'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:'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:'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:'Módem registrado y UART del simpleRTK2B en parpadeo rápido',
opciones:['Sí','No'] },
{ 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 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: '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 sin 24 V', ph:'14:05' },
{ tipo:'radio', clave:'s5_01_perdido', req:true,
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:'«DUTY reposo … etapa OFF» y «STACK OFF reason=duty_sleep»',
opciones:['Sí','No'] },
{ 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> 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ó (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: 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ó: 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 24 V sin reset', si: aOK,
sub: 'Dos casos, sin pulsar RESET.',
items: [
{ 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 — 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 — 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 — 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:'Monitor de vuelta en ⚡', opciones:['Sí','No'] },
] },
{ titulo: '8 · Cierre',
items: [
{ tipo:'archivo', clave:'s7_00_log', req:true, etiqueta:'v4-consola',
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 marcado arriba. APROBADA solo si pasó A, B y C.' },
{ tipo:'texto', clave:'s7_02_detalle', rows:'4', req:true, si: falla,
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' },
{ tipo:'check', clave:'s7_04_guardada', req:true,
txt:'24 V y batería desconectados; tarjeta etiquetada (V4-NN) y guardada.' },
] },
]
});
</script>
</body>
</html>