Eu tenho tentado encontrar uma maneira de fazer com que um microcontrolador se comunique diretamente com um computador através de usb sem uma ponte uart para usb e pensei que poderia fazer isso desativando os protocolos usb para a porta USB e usando a porta como uma porta serial normal porta. Disseram-me, no entanto, que você não pode desligar a parte USB. Também ouvi dizer que o Linux deixa muito mais o funcionamento interno do sistema operacional aberto a alterações. O Linux permite alterar os protocolos USB e transformar uma porta USB em uma porta serial normal?
Responder1
USB não é "apenas uma porta serial" em nenhum sentido que corresponda ao antigo padrão de porta serial RS-232 (também conhecido como EIA/TIA-232). Você não pode transformar USB em RS-232 "desligando requisitos extras".
Ao contrário das portas seriais RS-232 clássicas, o USB usa sinalização diferencial: na verdade um pouco (muito pouco) como o RS-485, embora os níveis de sinal e outras características elétricas sejam muito diferentes.
RS-232 pode usar tensões de sinal de até +/- 15 volts: USB usa <0,3 V para baixa lógica e 2,8-3,6 volts para alta lógica nos modos USB 1; no modo USB 2 de alta velocidade as tensões são ainda menores que isso.
Mesmo que níveis lógicos TTL (0..5V) sejam usados no RS-232, o transmissor USB não será capaz de gerar um sinal de "espaço" RS-232 (=estado de tensão mais alta) de forma confiável. Os níveis de sinal simplesmente não correspondem a esses padrões: o sinal de um transmissor USB seria muito fraco para o receptor UART RS-232 e o sinal de saída RS-232 sobrecarregaria o receptor USB.
Você também não pode contornar a incompatibilidade com um circuito conversor de nível simples: em vez de enviar apenas um bit inicial, depois um byte de dados e, em seguida, um ou dois bits de parada, o transceptor USB lida com pacotes. No início do pacote, deve haver uma sequência de sincronização (8 bits para USB 1; 32 bits para transferências de alta velocidade USB 2), depois vários bytes são transferidos e, finalmente, o sinal de fim de pacote que não corresponderá qualquer um dos estados normais de "baixo lógico" ou "alto lógico". Tudo isso pode ser implementado em hardware para maior eficiência e, como normalmente não há razão para fazer algo diferente, provavelmente não há disposições para contorná-lo para "bater bits" nas linhas de dados reais no controle direto do software.
Compare os exemplos de sinalização deRS-232eUSB 1.1na Wikipédia.
Resumindo: não, o problema é que as diferenças entre USB e RS-232 são muito grandes no nível real do hardware.