He estado tratando de encontrar una manera de que un microcontrolador se comunique directamente con una computadora a través de USB sin un puente uart a USB y pensé que podría hacerlo desactivando los protocolos USB para el puerto USB y usando el puerto como un puerto serie normal. puerto. Sin embargo, me dijeron que no se puede apagar la parte USB. Sin embargo, también escuché que Linux deja mucho más funcionamiento interno del sistema operativo abierto a modificaciones. ¿Linux le permite alterar los protocolos USB y convertir un puerto USB en un puerto serie normal?
Respuesta1
USB no es "sólo un puerto serie" en ningún sentido que coincida con el antiguo estándar de puerto serie RS-232 (también conocido como EIA/TIA-232). No puede convertir USB en RS-232 "desactivando los requisitos adicionales".
A diferencia de los clásicos puertos serie RS-232, el USB utiliza señalización diferencial: en realidad un poco (muy poco) como el RS-485, aunque los niveles de señal y otras características eléctricas son muy diferentes.
RS-232 puede usar voltajes de señal de hasta +/- 15 voltios: USB usa <0,3 V para nivel lógico bajo y de 2,8 a 3,6 voltios para nivel lógico alto en los modos USB 1; en el modo USB 2 de alta velocidad los voltajes son incluso menores que eso.
Incluso si se utilizan niveles lógicos TTL (0..5V) en RS-232, el transmisor USB no podrá generar una señal de "espacio" RS-232 (= estado de voltaje más alto) de manera confiable. Los niveles de señal simplemente no coinciden entre estos estándares: la señal de un transmisor USB sería demasiado débil para el receptor UART RS-232 y la señal de salida RS-232 sobrecargaría el receptor USB.
Tampoco se puede evitar la incompatibilidad con un circuito convertidor de nivel simple: en lugar de enviar solo un bit de inicio, luego un byte de datos y luego uno o dos bits de parada, el transceptor USB maneja paquetes. Al inicio del paquete, debe haber una secuencia de sincronización (8 bits para USB 1; 32 bits para transferencias de alta velocidad USB 2), luego se transfieren varios bytes y finalmente la señal de fin de paquete que no coincidirá. cualquiera de los estados normales "lógico bajo" o "lógico alto". Todo esto se puede implementar en hardware para lograr eficiencia, y dado que normalmente no hay razón para hacer algo diferente, probablemente no existan disposiciones para evitarlo para "alterar bits" en las líneas de datos reales en el control directo del software.
Compare los ejemplos de señalización deRS-232yUSB 1.1en Wikipedia.
En resumen: no, el problema es que las diferencias entre USB y RS-232 son demasiado grandes a nivel de hardware real.