¿Puedes programar un microcontrolador para que sea un puente uart a usb?

Por lo que parece, uart y usb son solo dos formas diferentes de comunicación digital, por lo que parece que si solo programa un microcontrolador para aceptar uart a través de un par de pines io y apaga usb en un par de otros pines podría hacer un uart al puente usb sin comprar nada. Algo así como traducir idiomas. ¿Así es como funciona? ¿Me estoy perdiendo de algo? Estoy usando un pic16f84a.

Sí, pero no si tu microcontrolador es un PIC16. No tiene el hardware adecuado para USB.
eso es como decir porque una patineta tiene ruedas y una grúa tiene ruedas puedo remolcar un auto con mi patineta. El uart y el usb son bloques lógicos dedicados dentro del chip, los pines son solo formas de llegar a ellos desde el exterior, no son E / S genéricas con las que puede hacer cualquier cosa. o su chip tiene el hardware o no. mcus con usb a menudo tiene un uart separado en pines separados y puede usar ese chip como un puente usb a uart con el software adecuado y comprender los límites de velocidad del uart al mover datos
sigue haciendo preguntas sobre USB para un chip que no funciona con USB, solo obtenga un chip diferente, hay miles de opciones disponibles por unos o cinco dólares... no necesita seguir venciendo a este caballo muerto haciendo las mismas preguntas una y otra vez y otra vez
Las preguntas son en realidad todas ligeramente diferentes. Estoy tratando de ser específico y tenía diferentes ideas sobre cómo hacerlo que no estaban cubiertas en las otras preguntas. Además, literalmente no tengo dinero para comprar otro chip.

Respuestas (2)

Cualquier IC de puente USB a UART que vea en el mercado ya es una MCU que tiene firmware comprometido permanentemente (puede estar en Flash o ROM). Estos también suelen tener un bloque periférico UART y USB dedicado en el chip. El uso de software puro para implementar UART y el protocolo de nivel de línea USB limita severamente las posibilidades de velocidad y, en general, no sería práctico.

Muchas de las MCU más modernas que tienen periféricos de controlador USB integrados tendrán notas de aplicación disponibles y un código de referencia que muestra cómo construir un puente USB UART. En algunos casos, esto solo se convierte en parte de una aplicación mucho más grande que se ejecuta en la MCU. En particular, si tiene una MCU de 200 MHz y 32 bits, esto se vuelve muy práctico incluso para admitir un RTOS y el procesamiento de tareas para una aplicación además de la funcionalidad del puente.

Nota: Una MCU que funciona de esta manera como puente se denomina dispositivo USB de clase CDC.

¿Seguiría siendo lento si dedicara todo el microcontrolador a convertir uart a usb y tuviera un segundo microcontrolador para ejecutar mi otra programación?
@ user11937382 Un PIC16 dedicado no es suficiente si eso es lo que está preguntando. Hacer bricolaje es un proyecto más difícil que cualquiera que sea su proyecto real. Incluso los microcontroladores más potentes no intentan explotar el USB nativo. Usan su periférico USB.
¿pic16 no es lo suficientemente rápido? ¿O no tiene suficiente memoria para contener todo?
@ user11937382: no sé qué tan rápido es su PIC16, pero en mi experiencia al tratar de hacer que un UART transmita y reciba un poco en el software usando solo pines GPIO cuando se ejecuta a una frecuencia de, digamos, 16-> 25 MHz, encontrará una velocidad de transmisión limitada. a unos 1200 baudios más o menos. USB es muchas veces más rápido, por lo que no es nada práctico para bit bang, incluso si intenta limitarse a la antigua especificación de velocidad USB1.1.
@ user11937382 Los procesadores mucho, mucho, mucho más potentes no son lo suficientemente rápidos para hacerlo. Es posible que tengan suficiente memoria pero no suficiente velocidad. El PIC16 carece irremediablemente, lamentablemente, de velocidad y memoria para la tarea. El USB está en todas partes, pero eso no significa que sea simple. Es muy, muy complicado. Podría ser un profesional y aún no saber lo suficiente como para intentar intentar lo que está sugiriendo.
¿Hay alguna otra forma de que un microcontrolador se comunique con una computadora? Vi un programa v-usb pero aparentemente no funciona con pic.
¿Hay alguna manera de desactivar los protocolos usb y usar el puerto USB como un puerto serie normal?
Definitivamente no estaría de acuerdo en que CUALQUIER puente sea una MCU, estaría de acuerdo en que mcus con capacidades USB y UART pueden actuar como un puente, pero no hay razón para desperdiciar la lógica haciendo una MCU completa para un puente dedicado de usb a uart .

si solo programa un microcontrolador para aceptar uart a través de un par de pines io y apaga usb en un par de otros pines, podría hacer un puente uart a usb sin comprar nada. Algo así como traducir idiomas. ¿Así es como funciona?

No precisamente. Desde un alto punto de vista teórico de la informática, desde una vista de 20.000 pies, podría parecer así. Sin embargo, en realidad es bastante diferente.

El UART es un protocolo de transferencia serie primitivo, INICIO+cambio de ocho bits+DETENER, sin estructuras, direcciones, corrección de datos ni reconocimiento. Enviado y espero que otro receptor lo atrape. A lo sumo se espera un LF de vuelta. Pero uno puede llamarlo un "paquete UART".

El USB básico requiere seguir un protocolo estricto para el intercambio de datos altamente estructurados, que se organizan en "paquetes". Los paquetes USB tienen SYNC, ID de paquete, DATA, CRC y EOP. Los PID-DATA+CRC están codificados de una manera especial para mantener una señal + balanceada, para evitar que las líneas de datos permanezcan en un estado por mucho tiempo, a diferencia de UART. USB clásico utiliza codificación NRZI con "relleno de bits".

El intercambio de paquetes requiere cierto orden llamado "transacción", que generalmente incluye la fase de CONFIGURACIÓN con la DIRECCIÓN, la fase de DATOS y el dispositivo USB debe responder con algún paquete que reconozca la exactitud de los datos recibidos. Por lo general, se necesitan tres paquetes individuales para una "transacción".

Luego, las transacciones USB se organizan en "transferencias", que incluyen CONFIGURACIÓN, DATOS (pueden ser muchos paquetes de DATOS) y paquetes de confirmación para cada DATO, en ambos sentidos. También hay transferencias de CONTROL, que tienen etapa de CONFIGURACIÓN, etapa de DATOS y etapa de ESTADO, por lo que la transferencia de control típica (para configurar u obtener algún parámetro del dispositivo) toma 9 paquetes USB individuales, cada uno con estructura SYNC-PID/ADDRESS-CRC_EOP.

Además, las respuestas a los paquetes entrantes tienen un límite de tiempo de respuesta de menos de 1,7 us, por lo que no muchas MCU pueden decodificar un paquete, verificar su suma de verificación y responder en menos de 2 microsegundos. Por lo tanto, el soporte para el protocolo USB generalmente se implementa en el hardware, al menos en las partes críticas en cuanto al tiempo. Esto se llama USB SIE - Motor de interfaz en serie. Si bien el orden y la generación de transferencias es responsabilidad de USB HOST y no es de su incumbencia, los dispositivos deben obedecer las reglas de SIE, decodificar todos los paquetes y responder correctamente a tiempo.

Un dispositivo USB se vuelve funcional después de un proceso llamado "enumeración", que incluye leer las capacidades del dispositivo y el propósito funcional (también conocido como "descriptores del dispositivo"), recibir la dirección USB individual, seleccionar/iniciar la "configuración del dispositivo". Esta enumeración generalmente toma una docena de transferencias de control y debe ocurrir antes de que se pueda establecer cualquier puente entre los DATOS USB y los DATOS UART.

Dado este breve curso de "aplastamiento" en USB, ahora decide si puede implementar este SIE ("apagar usb en un par de pines más") en su microcontrolador PIC16.