Todo sobre USB
HogarHogar > Blog > Todo sobre USB

Todo sobre USB

Jun 25, 2023

Como mucha gente ha señalado, lo que importa con USB-C no es sólo el estándar, sino también 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 explicarle 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, echemos un vistazo al Pinecil. Un soldador de Pine64, lanzado hace unos años, que mantiene el precio bajo y la calidad alta. Tiene un conector de barril y un puerto USB-C para su entrada de energía, una bienvenida salida de la estrategia de plancha Miniware, donde ni el TS100 con conector de barril ni los hierros TS80 de punta patentada de bajo consumo lo lograron. Y, dado su diseño con puntas estilo TS100 T12, no es de extrañar que Pinecil haya ocupado un lugar bien merecido en el mundo de los aficionados.

Ahora bien, quizás estés pensando que Pinecil debería ser un dispositivo sencillo. La forma habitual de obtener alta potencia de un puerto USB-C es un IC de activación de entrega de energía (PD), y simplemente podría usarlo. Sin embargo, si ha leído el artículo sobre alimentación USB-C, es posible que recuerde el escenario del cargador de 45 W frente a 60 W, donde dicha disposición 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 un problema de compatibilidad de PD con alguna fuente de alimentación, no se puede hacer nada al respecto excepto reemplazar el circuito integrado con un circuito integrado con una lógica ligeramente diferente, si es que existe un reemplazo, y normalmente no es así. Esto es costoso y limitante para un producto de uso en el mundo real.

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

Ahora, he comenzado a hablar en abstracto aquí, pero tiene sentido hablar del hacker que hace el trabajo real para hacer posible la pila PD; de hecho, toda la pila de software 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. Pine64 contactó a [Ralim] cuando Pinecil era solo un concepto, preguntándole si estaría disponible para portar IronOS, incluido el trabajo de PD requerido.

A lo largo de los años, el enfoque “frontend + MCU” ha dado enormes resultados. Una razón importante es la compatibilidad de la fuente de alimentación: existe una gran variación en 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 disponibles, incluidas, por ejemplo, algunas fuentes 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 "probar este binario" o comprando directamente la misma PSU. Luego, solucionaría el problema cambiando la forma en que la pila trata los casos extremos, probaría la solución y cargaría una nueva versión del firmware 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 desde la versión anterior actualizada de fábrica.

A lo largo de los años, la pila se ha vuelto bastante madura y, lo más importante, probada en batalla: es complicado encontrar una fuente de alimentación con la que Pinecil no funcione hoy en día. Por razones de depuración y conveniencia para los piratas informáticos, si conecta una fuente de alimentación USB-C a 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 puede usar. podría ya poseer.

¿Funcionaría este enfoque para un proyecto de aficionado a pequeña escala que requiere fuente de alimentación USB-C? Quizás no cuando el Pinecil era nuevo. Sin embargo, hoy en día, la pila de PD es de código abierto y está 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 ha compartido con usted uno de estos diagramas intimidantes directamente de las páginas de documentación de USB-C, es posible que se sienta inclinado a creer que es mejor que los humanos no toquen el USB-C. Ese punto de vista no es del todo erróneo: reimplementar estas máquinas de estados no es algo en lo que necesariamente quieras dedicar tu tiempo. Por otro lado, a pesar de la naturaleza informativamente agresiva, las máquinas de estados involucradas son más simples de lo que parecen.

Dicho esto, si sueñas con un proyecto de código abierto que habla USB-C, no quieres empezar desde cero y no es necesario. Hoy en día, gracias al trabajo de [Ralim], tenemos a nuestro alcance una pila de PD de código abierto. 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 desea desarrollar su propio dispositivo con alimentación USB-C.

La pila está bien probada, gracias a una colección notable de varias fuentes de alimentación USB-C que Ralim posee y con las que puede probar; tal vez, esto es lo que hace que esta pila sea la más valiosa. Sin embargo, también sirve como zona de juegos 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 saltar de 50 W a 98 W de potencia de calentamiento de la punta. En unos meses, la pila exclusiva de SPR obtuvo compatibilidad con EPR y vimos por primera vez a Pinecils obtener alimentación de 28 V de los cargadores de Apple, lo que lo convierte en el primer proyecto de código abierto capaz de hacer frente a los requisitos adicionales de EPR.

El CI frontal 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 estaba conectado 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 con 24 V y publicó gráficos convincentes del trazador de curvas, la etiqueta del Pinecil fue rebajada al indicar que solo sería compatible con suministros de 21 V o inferiores, excluyendo los suministros de 24 V. una desventaja sobre el TS100.

Posteriormente, pudo haber sucedido que el FUSB302 se volviera más sensible debido a tolerancias de fabricación en diferentes lotes. Pasé el rato y ofrecí soporte técnico voluntario en el chat Pinecil de Pine64, y lo que conocimos en ese entonces fue una tendencia: alguien usó una fuente de alimentación de barril barata, o accidentalmente conectó una fuente de 24 V, o simplemente usó una normal de 20 V. Bloque USB-C y el FUSB302 moriría. A veces moría silenciosamente y hacía que la plancha solo funcionara a través de un cilindro o QC; A veces, el FUSB302 cortaba el riel interno de 3,3 V y hacía que toda la plancha se cayera permanentemente, lo que requería la extracción de aire caliente para reactivar el Pinecil.

Los problemas no fueron 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 colega hacker, decidió investigarlo y descubrir cuál podría ser la solución. Junto con [Ralim], descubrieron que la conexión de pin VBUS no se usaba en absoluto en el software y, de hecho, se podía desconectar 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 el mod se realizó correctamente, como medida de seguridad para los usuarios que podrían haber perdido una astilla de cobre la primera vez. La solución finalmente también llegó a una nueva revisión de PCB de Pinecil y al Pinecil V2. En general, es una maravillosa historia corta sobre 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 admitirá estándares de comunicación de cargadores con secuestro de pares de datos USB como QC en sus puertos USB-C. Sin embargo, el objetivo del Pinecil es ser accesible y esta parte de la especificación USB-C tuvo que ignorarse. Entonces, 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 para piratas informáticos es más importante que la compatibilidad con 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, entonces, ¿por qué dejarlas de lado 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 Pinecil para un multiplexor, y habría causado un aumento demasiado grande en el precio de una característica rara vez utilizada 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 tampoco 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 cilíndrico pueda llegar al VBUS del FUSB302? La razón es simple: el pin central del conector cilíndrico y el USB-C VBUS están conectados entre sí. Si alguna vez diseña un producto con entradas de energía duales, esto es lo que nunca debe hacer. Sin embargo, parece que Pine64 no tenía otra forma que hacer precisamente eso. En su lugar, seleccionaron el conector cilíndrico y el puerto USB-C con los perfiles mecánicos más bajos posibles, lo que hacía imposible insertar cables en ambos enchufes al mismo tiempo, creando una especie de enclavamiento mecánico.

Ahora bien, no hay ninguna razón por la que alguna vez conectes ambos conectores al mismo tiempo, a menos que estés usando el Pinecil como un elegante tablero de disparo, lo cual teóricamente podrías, si no fuera por la imposibilidad mecánica. Tampoco hay instrucciones que le pidan que haga esto. Dicho esto, hay dos historias de alguien que decidió insertar un conector cilíndrico y un cable USB-C mientras intentaba actualizar el firmware, quemando las computadoras que estaban usando para eso. Esto fue un hecho desconcertante: nadie en la comunidad de Pinecil podía conectar ambos enchufes al mismo tiempo, aunque lo intentamos.

En última instancia, se trató de una solución de compromiso en el diseño, en la que se tomó una ruta mecánica para resolver un posible problema, y ​​fue una solución exitosa. Debes tener un conjunto de circunstancias muy específico para llegar incluso a un lugar donde un modo de falla sea posible, y en este punto, la tasa de falla se acerca al mismo porcentaje que obtendrías si Pine64 colocara un interruptor FET o un diodo. la forma del puerto USB-C; Después de todo, a los componentes de conmutación de energía les gusta fallar por cortocircuito. Sin embargo, por parte de la comunidad, descubrimos una solución adicional: actualizar todas las instrucciones de flasheo y la herramienta de flasheo Pinecil personalizada, advirtiendo al usuario que debe quitar la fuente de alimentación del conector cilíndrico antes de flashear. Después de que se agregaron las advertencias, este problema era inaudito.

Hay 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 deberíamos 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 perfecta, ha sido un gran beneficio para los piratas informáticos de todo el mundo; y también hay un montón de historias de las que aprender.