banner

Noticias

Jun 05, 2023

Todo sobre USB

Como muchas personas han señalado, lo que importa con USB-C no es solo el estándar, sino las implementaciones. Después de todo, son las implementaciones con las que realmente tenemos que lidiar, y es donde surgen la mayoría de los problemas con USB-C. Hay algunas fallas en el estándar, como la falta de marcas de cables desde el principio, pero en este punto, estoy convencido de que el estándar USB-C es mucho mejor de lo que algunas personas piensan.

Me gustaría guiarlo a través de algunas implementaciones de USB-C en productos reales, de código abierto, adyacentes y simplemente interesantes. Todos son imperfectos de alguna manera, no puede ser de otra manera, ya que tienen que lidiar con el desordenado mundo real, donde la perfección es una rareza.

Hoy, veamos el Pinecil. Un soldador de Pine64, lanzado hace unos años, manteniendo el precio bajo y la calidad alta. Tiene un conector de barril y un puerto USB-C para su entrada de energía, una salida bienvenida de la estrategia de plancha Miniware, donde ni el TS100 solo con conector de barril ni los hierros TS80 de punta patentada de baja potencia lo lograron. Y, dado su diseño en torno a las puntas estilo TS100 T12, no es de extrañar que Pinecil ocupe un lugar bien merecido en el mundo de los aficionados.

Ahora, podría estar pensando que Pinecil debería ser un dispositivo simple. La forma habitual de obtener alta potencia de un puerto USB-C es un IC de activación de suministro de energía (PD), y simplemente podría usar eso. Sin embargo, si ha leído el artículo de alimentación USB-C, es posible que recuerde el escenario del cargador de 45 W frente a 60 W, en el que dicho arreglo fallaría de inmediato. En general, la capacidad de configuración de los circuitos integrados de activación es bastante baja, y cuando se encuentra con un problema de compatibilidad de PD con alguna fuente de alimentación, no puede hacer nada al respecto, excepto reemplazar el circuito integrado con un circuito integrado de lógica ligeramente diferente, si es que existe un reemplazo, y por lo general no lo hace. Esto es costoso y limitante para un producto de uso en el mundo real.

Pinecil optó por el "software de pila de PD + IC de interfaz de PD", dedicando parte de la MCU a la naturaleza en tiempo real de las comunicaciones de PD. El frontend de PD utilizado es el FUSB302, conectado a la MCU a través de la interfaz I2C normal. El microcontrolador en sí ha cambiado del GD32VF103 en Pinecil v1 al BL706 en Pinecil v2, ambos RISC-V.

Ahora, comencé a hablar en abstracto aquí, pero tiene sentido hablar sobre el hacker haciendo el trabajo real para hacer posible la pila de PD; de hecho, toda la pila de software de Pinecil. La persona responsable del PD y del software Pinecil en general es [Ralim], conocido por su firmware IronOS desarrollado inicialmente para TS100, TS80 y otros soldadores con MCU en ellos. Pine64 contactó a [Ralim] cuando Pinecil era solo un concepto, y le preguntó si estaría disponible para migrar IronOS, incluido el trabajo de PD requerido.

A lo largo de los años, el enfoque "frontend + MCU" ha valido la pena enormemente. Una de las principales razones es la compatibilidad con PSU: existe una gran variación dentro de las comunicaciones de la fuente de alimentación USB-C, ya que las cosas de PD pueden ser difíciles de implementar, especialmente cuando se trata de casos extremos. De hecho, el firmware inicial de las planchas Pinecil no funcionaba con varias fuentes de alimentación, incluidos, por ejemplo, algunos bloques de alimentación de Apple.

Ahora, lo hermoso es que cada vez que alguien presentaba un problema de compatibilidad de PSU en GitHub, [Ralim] podía rastrear este problema, ya sea mediante la depuración remota 'pruebe este binario' o directamente comprando la misma PSU. Luego, solucionaría el problema cambiando la forma en que la pila trata los casos extremos, probando la solución y cargando una nueva versión de firmware de Pinecil en GitHub para que todos la usen. En un año, la mayoría de los problemas de USB-C desaparecieron, y si tiene un problema con Pinecil, es probable que solo necesite actualizar el firmware de la versión anterior instalada de fábrica.

A lo largo de los años, la pila se ha vuelto bastante madura y, lo que es más importante, probada en batalla: es difícil encontrar una fuente de alimentación con la que Pinecil no funcione hoy en día. Por motivos de depuración y comodidad de los piratas informáticos, si conecta una fuente de alimentación USB-C en su Pinecil mientras mantiene presionado el botón +, se le mostrará un menú de depuración de PD que enumera todos los perfiles; en cierto modo, Pinecil es una herramienta de depuración de PD que usted ya podría poseer.

¿Funcionaría este enfoque para un proyecto a pequeña escala que requiere fuente de alimentación USB-C para aficionados? No cuando el Pinecil era nuevo, tal vez. Sin embargo, hoy en día, la pila de PD es de código abierto y madura.

Escribir una pila de software USB-C PD no es tan sencillo como escribir, por ejemplo, un controlador ADC. Para hacer cumplir los requisitos de coexistencia y seguridad, USB-C utiliza máquinas de estado. Si alguna vez alguien compartió con usted uno de estos diagramas intimidantes directamente de las páginas de documentación de USB-C, es posible que se incline a creer que es mejor que los humanos no toquen USB-C. Ese punto de vista no es del todo incorrecto: volver a implementar estas máquinas de estado no es algo en lo que necesariamente quiera pasar su tiempo. Por otro lado, a pesar de la naturaleza informativamente agresiva, las máquinas de estado involucradas son más simples de lo que parecen.

Dicho esto, si está soñando con un proyecto de código abierto que hable por USB-C, no quiere comenzar desde cero y no tiene por qué hacerlo. Hoy en día, gracias al trabajo de [Ralim], tenemos una pila de PD de código abierto al alcance de la mano. Está en C++ y está diseñado para funcionar con un RTOS, ya que USB-C requiere respuestas razonablemente rápidas a partes del protocolo, aplicadas en el lado de la fuente de alimentación. Esta pila fue iniciada por [Clara Hobbs] como parte del proyecto PD Buddy Sink, y se convirtió en una biblioteca real que desea usar si usted también busca desarrollar su propio dispositivo alimentado por USB-C.

La pila está bien probada, gracias a una notable colección de varias PSU USB-C que posee Ralim y con las que puede probar; quizás, esto es lo que hace que esta pila sea la más valiosa. Sin embargo, también sirve como un patio de recreo USB-C. Cuando los cargadores EPR, como el de 140 W de Apple, comenzaron a aparecer en el mercado, tenían 28 V disponibles, algo que Pinecil podía usar para pasar de 50 W a 98 W de potencia de calentamiento de la punta. En unos pocos meses, la pila SPR solo ganó compatibilidad con EPR y vimos que los primeros Pinecils obtenían energía de 28 V de los cargadores de Apple, lo que lo convierte en el primer proyecto de código abierto capaz de lidiar con los requisitos adicionales de EPR.

El IC frontal de PD utilizado, FUSB302, tiene un aspecto extraño: su hoja de datos especifica dos voltajes máximos en su pin VBUS, 21 V "máximo recomendado" y 28 V "máximo absoluto". Ahora, este pin se conectó a la traza de alimentación VBUS en el puerto USB-C, es decir, a la entrada de alimentación. Al principio, esto causó preocupaciones en la comunidad, y aunque alguien probó la compatibilidad de 24 V y publicó gráficos de trazadores de curvas convincentes, el Pinecil fue degradado al afirmar que solo sería compatible con suministros de 21 V o menos, excluyendo los suministros de 24 V. una desventaja sobre el TS100.

Más adelante, podría haber ocurrido que el FUSB302 se volviera más sensible debido a las tolerancias de fabricación en diferentes lotes. Pasé el rato y ofrecí soporte técnico voluntario en el chat de Pinecil de Pine64, y lo que conocimos en ese momento fue una tendencia: alguien usó una fuente de alimentación de conector de barril barata, o conectó accidentalmente un suministro de 24 V, o simplemente usó un 20 V normal Ladrillo USB-C, y el FUSB302 moriría. A veces moriría en silencio y haría que el hierro solo funcionara a través de jack de barril o QC; a veces, el FUSB302 cortocircuitaba el riel interno de 3,3 V y derribaba toda la plancha de forma permanente, lo que requería la eliminación de aire caliente para revivir el Pinecil.

Los problemas no eran prominentes al mantener en perspectiva la cantidad total de Pinecils vendidos, pero definitivamente eran una tendencia y teníamos curiosidad. En algún momento, [Thanos the tank engine], un compañero hacker, decidió investigar y descubrir cuál podría ser la solución. Junto con [Ralim], descubrieron que la conexión del pin VBUS no se usaba en absoluto en el software y, de hecho, podía desconectarse por completo. Lo que siguió fue el "mod VBUS": un truco agregaría soporte de 24 V al Pinecil eliminando la conexión VBUS, con instrucciones en video sobre cómo cortar correctamente el rastro involucrado.

[Ralim] modificó el firmware para detectar si la modificación se realizó correctamente, como una medida de seguridad para los usuarios que podrían haber pasado por alto una pizca de cobre la primera vez. La solución finalmente se convirtió en una nueva revisión de PCB de Pinecil, y el Pinecil V2. En general, es una historia corta maravillosa de cómo los grandes productos de código abierto con una comunidad próspera se convierten en un multiplicador de fuerza.

USB-C está diseñado para deshacerse de los estándares de carga patentados, y es por eso que el estándar USB-C dice que no debe admitir estándares de comunicación de cargador de secuestro de par de datos USB como QC en sus puertos USB-C. Sin embargo, el objetivo de Pinecil es ser accesible, y esta parte de la especificación USB-C tuvo que ser ignorada. Por lo tanto, además de la compatibilidad con PD, también hay compatibilidad con QC en caso de que tenga que trabajar con un cargador QC o un banco de energía: la accesibilidad de los piratas informáticos es más importante que el cumplimiento de USB-C. Tampoco es la única parte del estándar USB-C que Pinecil viola por buenas razones.

Las señales SBU y de alta velocidad en el puerto USB-C de Pinecil se utilizan para una variedad de señales: JTAG, SPI, I2C, UART y algunos ADC de la MCU principal. Como resultado, Pinecil es una placa de desarrollo RISC-V y USB-PD, con una placa de conexión económica a juego. No mucha gente ha aprovechado estas señales, pero definitivamente están disponibles e inicialmente se usaron durante el desarrollo de Pinecil, así que ¿por qué no incluirlas en la versión de producción?

La especificación USB-C permite la reutilización de estas señales con fines de depuración, pero requiere un multiplexor para apagarlas hasta que se active el modo de depuración; por lo tanto, el Pinecil no cumple en ese sentido. Por otro lado, no habría habido espacio en el PCB de Pinecil para un multiplexor, y habría causado un aumento de precio demasiado alto para una función que rara vez se usa y que aún es lo suficientemente buena como para no dejarla pasar. En cambio, en caso de que alguien usara un cable de alta velocidad para conectar un Pinecil a un puerto USB3, las señales se organizaron de manera que ninguno de los GPIO configurados como salida estuviera conectado al par TX del USB3, y no los usuarios alguna vez plantearon algún problema. Incluso si lo hicieran, sería suficiente usar un cable diferente, y si los problemas resultaran ser frecuentes, había puentes 0 R que podrían omitirse en la fábrica; afortunadamente, nada de eso fue necesario.

Al leer la historia del FUSB302, es posible que se haya preguntado: ¿cómo es posible que el voltaje del conector de barril llegue al VBUS del FUSB302? La razón es simple: el pin central del conector de barril y el USB-C VBUS están conectados juntos. Si alguna vez diseña un producto con entradas de alimentación duales, esto es lo que nunca debe hacer. Sin embargo, parece que Pine64 no tenía otra forma que hacer precisamente eso. En cambio, seleccionaron el conector de barril y el puerto USB-C con los perfiles mecánicos más bajos posibles, lo que hace imposible insertar cables en ambos enchufes al mismo tiempo, creando una especie de enclavamiento mecánico.

Ahora, no hay ninguna razón por la que alguna vez conectes estos dos conectores al mismo tiempo, a menos que estés usando el Pinecil como una elegante placa de activación, lo que teóricamente podrías hacer, si no fuera por la imposibilidad mecánica. Tampoco hay instrucciones que te pidan que hagas esto. Dicho esto, hay dos historias de alguien que decidió insertar un conector de barril y un cable USB-C mientras intentaban actualizar el firmware, quemando las computadoras que estaban usando para eso. Este fue un hecho desconcertante: nadie en la comunidad de Pinecil pudo conectar ambos enchufes al mismo tiempo, aunque lo intentamos.

En última instancia, se trataba de una compensación de diseño, donde se tomó una ruta mecánica para resolver un posible problema, y ​​fue una solución exitosa. Tienes que tener un conjunto muy específico de circunstancias incluso para llegar a un lugar donde es posible un modo de falla, y en este punto, la tasa de falla se acerca al mismo porcentaje que obtendrías si Pine64 pusiera un interruptor FET o un diodo en el camino del puerto USB-C; Después de todo, a los componentes de conmutación de potencia les gusta fallar en un cortocircuito. Sin embargo, en el lado de la comunidad, descubrimos una solución adicional: actualizar todas las instrucciones de actualización y la herramienta personalizada de actualización de Pinecil, advirtiendo al usuario que debe quitar la fuente de alimentación del conector de barril antes de actualizar. Después de que se han agregado las advertencias, este problema ha sido inaudito.

Existe un poder considerable detrás de un proyecto de código abierto que se fabricó en decenas de miles de unidades y llegó a manos de aficionados y piratas informáticos de todo el mundo. Mi Pinecil nunca me ha defraudado, y terminé confiando en sus capacidades USB-C. Tampoco debemos subestimar el regalo que es una pila de PD de código abierto probada en batalla. Si bien la implementación USB-C de Pinecil no es impecable, ha sido un gran beneficio para los piratas informáticos de todo el mundo; y también hay un tesoro de historias de las que aprender.

COMPARTIR