← Notas desde el banco de trabajo.
USB-C Power Delivery para un producto que no es un teléfono
Un producto que necesitaba 12 o 20 volts y no tenía batería solía significar un conector barril y un eliminador de pared con una salida fija impresa en la etiqueta. Ahora el dibujo mecánico dice USB-C, la primera placa prototipo enciende, y alguien la conecta a un cargador y mide el riel de entrada. Marca 5 volts. Nada está roto. Nada ha negociado todavía, y hasta que lo haga, USB-C se comporta exactamente como el conector tonto de 5 volts al que reemplaza.
Esa brecha entre «es un conector USB-C» y «entrega el voltaje que la carga necesita» es donde vive la mayor parte del trabajo de diseño — y donde siguen llegando las preguntas, la más reciente en un hilo de Hacker News sobre una pequeña biblioteca de código abierto para un sink PD y en una serie de publicaciones en el foro de la comunidad de ST de ingenieros cuyo sink negocia un contrato, luego lo pierde, o nunca pasa de un hard reset. El conector es un commodity. La negociación no.
Qué tiene que pasar antes de que cambie el voltaje
Una fuente USB-C siempre enciende a 5 volts y se queda ahí hasta que algo le pide más. El sink se identifica poniendo cada línea CC a tierra a través de aproximadamente 5.1 kΩ (Rd); la fuente lo detecta, aplica VBUS y — si soporta Power Delivery — inicia una máquina de estados sobre la línea CC, codificada a 300 kbps. La fuente envía un mensaje Source_Capabilities con la lista de los objetos de datos de potencia (PDO) que ofrece: un conjunto de voltajes fijos y, en los cargadores más nuevos, un rango PPS o AVS ajustable en pasos finos. El sink elige uno, envía un Request que nombra ese PDO y la corriente que necesita, y solo después de que la fuente responde Accept y luego PS_RDY cambia realmente el riel.
Cualquiera de esos pasos puede fallar — un mensaje mal formado, un timeout, una corriente que la fuente no concede — y el resultado es un Hard_Reset de vuelta a los 5 volts predeterminados hasta que el sink lo intente de nuevo. Nada de esto es instantáneo; el handshake toma de decenas a bajas centenas de milisegundos incluso cuando sale limpio. Un diseño que supone que el voltaje solicitado está presente en el momento en que aparece VBUS se va a comportar mal justo de la manera en que hoy la gente depura en público.
Tres maneras de construir el sink
Hay tres opciones reales, y la correcta depende de cuánto necesita cambiar el voltaje después del arranque, no de cómo esté construido el resto de la placa.
| Enfoque | Esfuerzo de firmware | Bueno para |
|---|---|---|
| Controlador PD independiente (p. ej. TI TPS25730, Cypress/Infineon CYPD3177, STMicro STUSB4500) | Bajo — configuración por NVM/straps, o una capa I2C delgada hacia un MCU host | Un voltaje fijo o un conjunto pequeño de voltajes solicitados, con mínima participación del host |
| MCU con un periférico PD integrado (p. ej. STM32G0/G4/U5 UCPD) más un IC de protección de CC | Alto — un stack PD completo corre en el MCU de la aplicación | Dispositivos que ya necesitan un MCU para la carga principal y buscan una integración estrecha |
| IC trigger/decoy de voltaje fijo (p. ej. CH224, piezas de la clase IP2721) | Casi cero | Un solo voltaje conocido, sin renegociación, sin PPS |
Un controlador independiente suele ser la opción predeterminada correcta: la lógica del protocolo y los tiempos viven en silicio que ya pasó por pruebas de interoperabilidad con cargadores reales, y el lado del host es un puñado de lecturas de registros. Un periférico integrado en el MCU se justifica cuando el producto ya necesita un procesador de aplicación y la línea extra en la lista de materiales no vale la pena evitarla — pero presupuesta tiempo real de firmware para él; varios hilos del foro de ST de este mes se remontan a la configuración de los pull-downs de CC o a la configuración de interrupciones, no al protocolo en sí. Un chip trigger es la decisión correcta cuando el producto de verdad solo necesita un voltaje y nunca renegocia.
Vale la pena nombrar una cuarta opción para poder descartarla: hacer bit-banging de PD en un GPIO libre con un transistor y sin PHY dedicado. Es una forma legítima de quitar una línea de la lista de materiales en una placa de aficionado, y funciona — un artículo reciente de Hackaday hizo exactamente esto. Pero los tiempos de CC son estrictos, no hay protección integrada contra sobrevoltaje ni contra batería muerta, y la corrección depende por completo de un código que no ha visto la variedad de cargadores que un producto en el mercado va a encontrar. Bien para una placa en el banco. El cimiento equivocado para un cargador que nunca has probado.
El problema de arranque para un dispositivo sin batería
Los teléfonos y las laptops ejecutan sus propias tareas internas desde una batería mientras PD negocia en segundo plano. Un instrumento o herramienta alimentado desde la red eléctrica normalmente no puede — no hay un reservorio de carga con el cual hacer funcionar el MCU y el controlador PD mientras sube el riel. (Un producto que sí lleva una celda recargable no tiene este problema, pero hereda un diseño de entrada de cargador propio.) Ese es el problema específico alrededor del cual giró la reciente discusión en HN sobre las bibliotecas de sink PD: un dispositivo que necesita 12 volts o más y no tiene nada más con qué funcionar no puede hacer nada hasta que termine la negociación, y la negociación misma necesita energía.
Funcionan dos patrones. Mantener una pequeña sección siempre encendida — el controlador PD, un supervisor, un LED de estado — funcionando directamente del riel predeterminado de 5 volts, y condicionar la carga principal a una señal de «contrato aceptado». O ejecutar una pequeña etapa boost o buck-boost desde 5 volts el tiempo suficiente para arrancar el sistema, y luego pasar el control cuando el riel negociado esté estable. En cualquier caso, el producto necesita un estado definido y visible para «todavía negociando» en lugar de silencio — un LED apagado durante una ventana de negociación de doscientos milisegundos le parece a un cliente una placa muerta.
Qué se rompe una vez que sale del banco
Un sink que funciona con una fuente de laboratorio y un cargador no ha sido probado contra el entorno en el que realmente se va a enviar.
Los cargadores multipuerto y los power banks renegocian su presupuesto interno de potencia cuando se conecta o desconecta un segundo puerto, lo que puede tirar y restablecer VBUS en puertos que ya estaban funcionando. Un sink tiene que tratar un Hard_Reset como algo rutinario, no excepcional, y recuperarse sin hacer caer los reguladores posteriores en brownout ni quedar atrapado en una falla. No todos los cargadores con conector USB-C hablan PD estándar: muchos adaptadores de carga rápida para teléfonos usan por defecto primero un handshake propietario y solo recurren a PD o a 5 volts simples si el sink no participa en él. Un sink debería solicitar solo de la lista estándar de PDO y tratar «el voltaje solicitado no se ofrece» como una rama normal, no como una ruta de error añadida después de la primera devolución del campo. Los cables también importan: una corriente superior a 3 A requiere un cable de 5 A con un chip e-marker, y un cable barato sin marcar hace que la fuente limite la corriente sin importar lo que el sink haya pedido — vale una línea en la documentación del producto, no solo en el esquemático.
Si la carga necesita un voltaje continuamente variable en lugar de pasos fijos, PPS o el rango AVS más nuevo es la herramienta correcta, pero el contrato tiene que renovarse cada pocos segundos o la fuente lo deja expirar y regresa a un PDO fijo. Un perfil que supone que un voltaje PPS se mantiene indefinidamente va a regresar a 5 volts a la mitad de un ciclo sin ninguna razón visible en un osciloscopio para quien no sepa ya que debe buscarlo.
Hacia dónde empujan hoy las normas de la UE
Las reglas del cargador común de la UE bajo la Directiva de Equipos Radioeléctricos ya exigen USB-C en teléfonos, tabletas y cámaras, y alcanzan a las laptops el 28 de abril de 2026, con soporte obligatorio de PD hasta 240 W. Su alcance real es más limitado de lo que la mayoría de los ingenieros supone: cubre equipos radioeléctricos — dispositivos con capacidad inalámbrica — no la electrónica en general. Un instrumento alimentado desde la red eléctrica o un fixture de pruebas sin radio no está obligado a llevar USB-C. Pero la presión del mercado va de todos modos por delante de la regulación: los líderes de ingeniería piden cada vez más USB-C en productos que nunca estuvieron dentro del alcance, simplemente porque es lo que ya son todos los cables del edificio.
Esa suele ser la decisión real escondida detrás de «solo ponle USB-C» — no una cuestión de cumplimiento, sino de arquitectura de alimentación, y es más barato responderla correctamente en la etapa del esquemático que después de que el gabinete ya se fabricó con un conector barril.
Envíanos el perfil de voltaje y corriente de la carga, si el producto tiene algún almacenamiento de energía propio y cómo necesita comportarse en el primer medio segundo después de conectarse, y te diremos si lo adecuado es un controlador independiente, un periférico del MCU o un IC trigger antes de que se hagan los pull-downs de CC en el layout.
¿Quieres agregar alimentación USB-C a un producto que no es un teléfono? Diseñamos el circuito sink de PD y el firmware que lo negocia.
Herramientas para este tema
- Grabador ESP32 en el navegador Graba un .bin por USB desde el navegador. Lee primero el chip y el archivo, y rechaza firmware compilado para otro chip, otra revisión u otro tamaño de flash.
- Grabador STM32 en el navegador Graba un .dfu, .hex o .bin por USB DFU desde el navegador. Lee primero el mapa de flash y la identidad del chip y rechaza firmware cuyos bytes o tabla de vectores no le pertenecen. Nunca toca los option bytes.
- Terminal serie en el navegador Conecta una placa USB y lee o envía texto y hex por serie desde el navegador. Velocidad y formato, perfiles de reset DTR/RTS para ESP32 y Arduino, marcas de tiempo y registro guardado. Nada sale de tu computadora.
Notas relacionadas
- Why an NTC thermistor reads wrong on a microcontroller Why a thermistor on an ADC pin drifts, jumps or reads high: divider placement, the curve math, self-heating and leads. Checks to run before you blame the chip.
- Logging to an SD card without corrupting it on power loss How to log to an SD card without corrupting it when power drops: when to sync FAT, where littlefs fits, and the hold-up hardware that matters.
- Preparing for the CRA 24-hour vulnerability reporting duty What triggers a CRA report, the 24-hour, 72-hour and final deadlines, and the firmware and process pieces a small hardware maker needs in place first.