No que diz respeito à minha compreensão das portas do computador,
- Uma porta serial é um plugue de 9 pinos, como o mostrado aqui, e também é chamada de porta COM.
- As portas USB são um padrão diferente das portas seriais.
Por que, então, muitas vezes vejo portas USB chamadas "portas seriais" e, por exemplo, no Arduino IDE, as portas USB são identificadas pelo prefixo COM? Além disso, por que às vezes é necessária uma porta COM virtual se não há nenhuma porta serial envolvida? (Exemplo: adaptador Prologix GPIB-USB.)
Esse uso do mesmo nome para descrever duas coisas diferentes, acho que pode ser um pouco confuso.
Respostas:
Essas não são portas USB conhecidas como portas seriais. No seu exemplo, o Arduino possui um dispositivo USB para serial (na forma de um segundo microcontrolador ou um chip FTDI). Isso usará o USB para se comunicar com o computador e formar uma porta serial real para o mundo exterior - semelhante a dongles USB Wi-Fi ou adaptadores USB LAN, adaptadores USB SATA, etc.
A chave é que, em muitos casos, a porta serial não está disponível diretamente para o usuário, pois é "conectada fisicamente" no dispositivo (nesse caso, conectada diretamente ao microcontrolador que você está programando).
Na teoria estrita, qualquer porta que use comunicação serial (quase qualquer barramento moderno - incluindo USB, que significa "Universal Serial Bus", se minha memória me servir)) é uma "porta serial". No entanto, na maioria dos casos, quando as pessoas se referem à "porta serial", na verdade elas se referem a uma porta compatível com RS-232.
fonte
É confuso porque as portas COM do Windows são provenientes de um sistema de nomes definido no MS-DOS (n. 1980). Isso foi praticamente copiado do CP / M (n. 1974) com algumas idéias tiradas do Unix. Eles não previram a adição de um barramento intermediário de 'transporte' como USB.
Algumas coisas no Windows são sobreviventes da evolução do CP / M-> MS-DOS, como unidades de disco com nome de letra, extensões de nome de arquivo com três letras, arquivos .exe e .com e a interface de comando do prompt de comando.
Outro são os nomes dos dispositivos: geralmente três letras, sempre terminando em dois pontos. COM: é uma 'porta de comunicação' serial, LPT: uma 'impressora de linha' (geralmente pendurada em uma porta Centronics), NUL: despeja tudo o que é enviado a ela, CON: é o 'console' (teclado e tela). Alguns dos quais você pode ter vários são numerados para diferenciar entre eles. As portas COM: assim como as portas LPT: se tornam COM1: e LPT1: e assim por diante.
Uma porta COM: é um "ponto final": a extremidade mais distante do link de comunicação do ponto de vista de um PC com Windows. Como muitas coisas na computação, a ponte é ignorada e é o componente mais distante em que você está pensando, não o USB. Isso também se aplica a um teclado de PC (vinculado como CPU-PCIe-USB-kbd) ou a uma unidade de rede (vinculada como CPU-PCIe-LAN-LAN-PCIe-CPU-PCIe-SATA ou similar).
O USB também usa a ideia de terminais. Um controlador USB pode conectar um PC host a todos os tipos de hardware e fornecê-los como recursos. Então, quando você vê o hardware conectado por USB, vê esses pontos de extremidade. Uma porta COM virtual em um dispositivo USB é simplesmente uma porta serial que sai desse dispositivo escravo USB como um ponto de extremidade. O Windows fornecerá um número (COM1 :, COM27: etc.) e essa porta serial pode ser reconhecida e usada por qualquer programa usando a API padrão do Windows para portas COM:.
Algum hardware conectado a USB pode preferir se passar por uma porta serial, pois facilita o desenvolvimento do software Windows. Nenhum driver de dispositivo precisa ser gravado, o que economiza muito trabalho - o dispositivo USB informa ao Windows que é uma porta serial. Do ponto de vista do PC, tudo bem se ele se comportar como uma porta serial (os bytes são enviados e recebidos em um fluxo serial sem fim, sempre aberto). Portanto, existem benefícios para o desenvolvedor.
fonte
type file.txt > lpt1
sem dois pontos. E no gerenciador de arquivos padrão do Windows, Explorer, você não pode criar um arquivo chamado, por exemplo, COM ou LPT1 (pelo menos no Windows XP, talvez mais tarde também). Onde se pode realmente ver os dois pontos após o nome do dispositivo?copy con:filename.txt nul
funciona muito bem, exatamente o mesmo quecopy c:filename.txt nul
. Pelo menos no MS-DOS 6.22, o cólon pode ser omitido na maioria dos casos, pois não apresenta nenhuma ambiguidade; ao contrário dos nomes de unidades, esses dispositivos têm nomes reservados, para que você não tenha problemascopy file.txt c
(devo copiar o arquivo para o diretório atual na unidade c ou para um arquivo chamado "c" no meu diretório atual?) .Para adicionar à resposta de Joren Vaes : lembre-se de que alguns aplicativos de software (como o Arduino IDE) instalam um driver do Windows que cria portas "virtuais COM". Quando essas portas são ativadas, os sistemas operacionais informam aos programas que existe uma porta COM, que se parece com uma porta serial padrão [*], para a qual programas (como o Arduino IDE, mas também qualquer outro) podem enviar e receber bits como a qualquer porta serial. Sob o capô, no entanto, esses bits são enviados para um cabo USB. Dentro da placa do Arduino, ocorre algo análogo.
[*] E, por "porta serial padrão", entendemos o protocolo RS-232, o tipo tradicionalmente transmitido via conector DB-9 ou DB-25. Em nosso contexto, não importa que o USB também seja "serial".
fonte
Sua compreensão da diferença entre porta COM e porta USB está correta.
Responda rapidamente à sua pergunta: por que algumas portas USB são mapeadas pelo SO como portas "COM", é: existem dispositivos USB que implementam o CDC USB (classe de dispositivo de comunicação). Esses dispositivos fornecem uma ponte da interface USB extremamente complicada para uma interface padrão do tipo UART / RS-232. Para transparência dos usuários, o sistema operacional carrega drivers USB que imitam a camada de transporte como porta COM, uma porta virtual. Seguem alguns detalhes históricos e justificativas para essa abordagem.
A porta COM usa conectores DB-9 / DB-15 (também conhecido como RS-232 serial ou UART), e os controladores dessas portas são mapeados fisicamente no hardware do PC, para endereços específicos no espaço de E / S. Esse controlador COM está ficando obsoleto nos PCs modernos e é extinto.
Ao mesmo tempo, muitos MCU ainda usam a comunicação serial RS-232 como principal meio de comunicação com o mundo periférico. O motivo é que o hardware (e software) para esse tipo de link é muito simples e fácil de implementar. Além disso, toda a comunicação moderna de desenvolvimento / depuração do Android é feita no estilo da porta COM. Além disso, muitos dispositivos de "comunicação" (como modems, incluindo 4G LTE e superior), ainda usam a interface no estilo UART com protocolo de controle do tipo ASCII em várias portas "COM".
Agora os desenvolvedores têm um dilema: como se comunicar com esses microcontroladores se o PC de desenvolvimento host não possui portas COM? A solução foi usar portas USB e dispositivos USB especiais que fazem a ponte do protocolo USB com a interface RS-232 da porta COM. Existem dispositivos USB dedicados como chips FTDI, e muitos outros (Cypress, Microchip, etc.) produzem dispositivos que executam essa função de ponte.
Agora, toda a comunicação nativa com esses MCUs ainda é expressa em termos do protocolo RS-232, e a maioria dos exemplos de aplicativos pressupõe o uso de algum aplicativo Terminal (TeraTerm, HyperTerminal, etc.) para usar o link. Para conveniência do usuário, as pontes de USB para UART são fornecidas com drivers que representam a porta como uma porta COM virtual. Todo software moderno usa virtualização de hardware COM, o que fornece uma transição suave para PCs "sem COM". Torna-se uma prática comum adicionar uma ponte FTDI dedicada às portas UART em uma plataforma de desenvolvimento de MCU (e usar drivers FTDI no PC host para fazer com que a porta USB se pareça com a porta COM) ou incorporar o código de ponte adequado ao próprio MCU (se possui funcionalidade USB nativa).
A abordagem correta é usar uma placa USB-UART externa e conectar o UART ao MCU em desenvolvimento. Ou, se uma placa já possui o conector DB-9, existem dongles USB que podem ser conectados diretamente a ela.
Em todos os casos, o controle UART nativo do MCU aparecerá no lado do host como uma porta COM virtual, ignorando todas as transformações intermediárias de sinal / protocolo. É por isso que hoje em dia as pessoas freqüentemente ignoram a distinção entre pontes USB-UART e portas COM.
fonte
É muito confuso, mas você não precisa se preocupar com isso. Primeiro, pense em um UART que seja um termo genérico, mas pense em um que produza um protocolo com um bit de início, um ou dois bits de parada, 7 ou 8 geralmente bits de dados e, às vezes, paridade par ou ímpar; pode variar a partir daí, o que a torna muito pior.
O UART está nos níveis TTL, o que quer que isso signifique. Costumava ser 5 V e agora 3,3 V, 1,8 V ou o que for; talvez TTL seja o termo errado. ENTÃO você tinha / possui RS-232, RS-422, etc. Estes são padrões de VOLTAGEM E PIN, não de protocolo. É incorreto misturar os termos e dizer RS-232 quando você quer dizer algum tipo de UART.
No passado, seu UART estava em suas placas-mãe e você desejava algum tipo de conector para o mundo exterior com níveis de tensão que na época faziam sentido e algum tipo de pinagem / cabo padrão. Portanto, um padrão popular de 25 e 9 pinos foi freqüentemente encontrado para vários periféricos e, no mundo dos PCs Wintel, isso era chamado de porta de comunicação ou, às vezes, porta serial.
Certamente, uma porta que transporta dados seriais pode e é chamada de porta serial, SPI, I²C, MDIO, UART, HDLC, SDLC, etc., e talvez até USB e SCSI; você pode enlouquecer com isso. Normalmente, uma porta serial significa alguns pinos que você pode obter em um UART.
O mundo Unix / Linux diz em
tty
vez decom
/serial
/uart
, mas é a mesma coisa.Agora existe a IMPLEMENTAÇÃO. Você pode comprar algum chip UART com alguma interface (sim, você pode ter um SPI UART, que é serial nas duas extremidades, ou I²C UART ou algum barramento dedicado ou USB, etc.). Mesmo naquela época, o UART tinha um barramento de um lado pelo qual a CPU estava se comunicando. Hoje, temos o FTDI e outros fornecedores que oferecem boas soluções USB UART, não diferenciam algumas camadas da interface entre o software e o UART e, em seguida, o outro lado do UART possui alguma interface, seja no nível TTL / chip ou RS-232C ou RS-422, etc.
Nos primeiros Arduinos, você costumava usar uma placa USB-UART FTDI que também fornecia energia ao Arduino. Alguns têm essa energia USB e serial / UART na placa Arduino e, em seguida, são conectados através da placa ao UART no chip AVR (da mesma forma que alguns processadores com algumas camadas de barramentos para permitir que o software se comunique com um UART que tenha alguma interface do outro lado, neste caso os pinos na borda do AVR, nos níveis de tensão do chip, TTL).
Como a funcionalidade UART não mudou em décadas, por que a terminologia do software ou mesmo os aplicativos de software devem mudar no nível do aplicativo? Escreva um aplicativo TTY Linux / Unix há 10 a 15 anos contra um chip UART na sua placa-mãe e existe uma boa chance de ele ainda funcionar hoje com um nível USB para TTL ou USB para RS-232C ou RS-422 ou qualquer outro pino / definição de nível. O mesmo vale para o Windows, e eu tenho um código antigo que ainda funciona em ambos. No mundo do Windows, o termo COM é usado.
Eu não uso a sandbox do Arduino há algum tempo e, se estiver, estaria no Linux, mas não ficaria surpreso se o programa Java, se bem me lembro, for genérico e usar o nome do sistema
ttyS2
no Linux e COM2 no windows.Relendo sua pergunta, isso pode ir muito mais longe, aproveitando a quantidade de software já existente que usa essas chamadas de API. Novamente, há décadas, não há razão para que você não possa criar uma porta virtual em software que transporta esses dados bidirecionais para praticamente qualquer coisa em que possa pensar. O UART to Ethernet é muito comum e, nas salas de servidores em que os servidores ainda usam muito as portas COM / TTY / RS-232, você pode ter um servidor de terminal com várias interfaces que podem ser conectadas a vários servidores, depois Ethernet do outro lado; se você optar por não fazer a telnet, poderá instalar um driver de porta virtual COM.
Em seguida, seu aplicativo no computador pensa que está falando com uma porta COM, mas, de fato, o fluxo de bytes está entrando na Ethernet e atingindo o servidor de terminal, ENTÃO, em um nível de UART para RS-232C (mas não necessariamente pinagem) para o servidor e volte da mesma maneira.
Às vezes, não há motivo para realmente torná-lo um UART real, por qualquer motivo que virtualize uma porta COM, para que o software que foi escrito para essas chamadas de API ainda funcione. Talvez você possa pensar no software bancário antigo que ainda usamos, que possui um terminal estúpido para uma interface UART que talvez antigamente fosse conectada por fio ou que entrou em um modem para eventualmente um servidor. Você pode fazer com que o software ainda funcione, através de várias quantidades de emulação, incluindo uma porta COM virtual que hoje provavelmente liga a Ethernet ao servidor como um fluxo serial (TCP / IP, por exemplo).
fonte