A interface serial RS-232 "completa" tinha muitos sinais e pedia um conector DB-25, de 25 vias, do mesmo tamanho da porta paralela.
Muitos desses sinais existiam para controlar modems "burros". Antes que alguém pergunte, modem "inteligente" é o que aceita comandos de software, geralmente comandos "AT" do padrão Hayes.
Tive um único contato com RS-232 de 25 vias, indiretamente, em 1991, quando o pessoal do Banco do Brasil veio instalar um modem num cliente nosso para enviar e receber dados CNAB. O modem que eles trouxeram era de concepção bem antiga, "configurável" por jumpers na placa de circuito.
Eu mesmo nunca tive de lidar com esse tipo de modem, então nunca aprendi realmente para que servem todos os sinais RS-232. Por conta disto é que escrevo este texto, é uma mistura de arqueologia digital com nostalgia.
No meu tempo de profissión, o conector RS-232 mais comum era o DB-9, de 9 vias, utilizado por todo tipo de dispositivo, de mouses a modems inteligentes, de impressoras a leitores de código de barras. Muitos cabos nem tinham realmente 9 vias, mas apenas o mínimo necessário para funcionar, não raro o mínimo absoluto de três: terra, RX e TX.
Hoje em dia, mesmo a interface RS-232 de 9 pinos é cada vez menos comum, eu mesmo não vejo uma há tempos. Ela resiste em alguns nichos, como balanças de supermercado. Consoles seriais de alguns dispositivos utilizam o conector RJ-45, o mesmo da Ethernet.
Para quem não tem a mínima ideia de como funciona a comunicação serial assíncrona, também conhecida como UART, este texto procura explicar o mecanismo básico. Também há esta outra referência. Antes de entrar na questão dos sinais RS-232, preciso mencionar um par de questões acessórias.
A comunicação serial baseia-se em níveis de sinal "alto" e "baixo". O significado físico do que seria isso é definido pela interface elétrica. No padrão RS-232, o nível alto é definido como acima de 3V. O nível baixo é definido como abaixo de -3V.
Quem mexe com Arduino e IoT tem muito contato com a interface UART "TTL", onde TTL significa que os níveis de tensão são 5V ou 3.3V para o nível alto, e 0V para o nível baixo.
Portanto, UART TTL não é RS-232 e não pode ser misturado com RS-232, embora a lógica da comunicação assíncrona seja a mesma para ambos. Se houver um conversor de voltagem entre os dois, eles podem "conversar" diretamente.
Outra coisa que eles têm em comum é a lógica "inversa" de sinais de controle: DTR, RTS, etc. No estado inativo, esses sinais mantém a tensão correspondente ao nível alto. No estado ativo, eles mantém a tensão correspondente ao nível baixo.
O padrão RS-232 define dois tipos de dispositivo: DTE e DCE.
Para conectar o computador a um modem, o cabo serial DTE-DCE deve ser "direto", ou seja, cada sinal de controle RS-232 do DTE é conectado ao equivalente exato no DCE: TX com TX, RX com RX, RTS com RTS, CTS com CTS, etc.
Já para conectar dois DTEs diretamente, por exemplo dois computadores, ou um computador e um terminal console, o cabo é outro. Deve ser um cabo "cruzado", "crossover" ou "null modem". O sinal RTS de um é conectado ao CTS de outro, o TX de um é conectado ao RX do outro, etc.
Uma vez que este é conector serial mais comum em nossa era, vamos ver os sinais que ele carrega.
Terra, RX e TX: suficientes para comunicação serial se o protocolo faz controle de fluxo por software, ou nenhum controle de fluxo.
Num cabo crossover, o fio TX de um lado deve ser conectado ao pino RX do outro, e vice-versa.
CTS (Clear To Send) e RTS (Request to Send): implementam o controle de fluxo por hardware RTS/CTS. Quando o DTE deseja transmitir, ativa o sinal RTS, e aguarda o DCE (ou o outro DTE) ativar o sinal CTS.
Um cabo serial só precisa possuir esses sinais se a aplicação faz controle de fluxo RTS/CTS. Se o cabo for crossover, deve conectar o fio RTS de um lado com o pino CTS do outro e vice-versa.
Pode acontecer de uma ponta exigir controle de fluxo RTS/CTS e a outra ponta não implementá-la. Neste caso, faz-se uma gambiarra, curto-circuitando RTS com CTS dentro do conector, para enganar o controle de fluxo. (Situações análogas podem acontecer com outros sinais, como DSD, DTR e DSR.)
Em tese, os sinais a seguir são utilizados apenas por modems, e só precisariam existir em cabos para modems.
RI (Ring Indicator): sinal enviado pelo DCE (modem) indicando que uma chamada telefônica está entrando. Se quiser que a ligação seja atendida, o DTE responde habilitando o sinal DTR.
DTR (DTE Ready): sinal enviado pelo DTE (computador) autorizando o modem a trocar dados. Historicamente, habilitar este sinal faz o modem atender à chamada telefônica e iniciar a conexão. Desabilitá-lo em qualquer momento posterior faz o modem desconectar.
Em mouses seriais, o sinal DTR não é utilizado, então acaba virando a fonte putativa de energia ao mouse. (Nenhum pino de nenhum conector serial é destinado a fornecer energia, porém o truque funciona se o dispositivo for de baixo consumo.) Alguns mouses extraem energia do pino RTS.
DSR (DCE Ready): sinal enviado pelo DCE (modem) indicando que a ligação foi atendida.
DCD (Data Carrier Detected): sinal enviado pelo DCE (modem) indicando que existe portadora. DCD e DSR ambos habilitados significa que o canal de comunicação de dados está aberto.
DTR/DSR formam um par análogo a RTS/CTS, porém DTR/DSR controlam o fluxo do estabelecimento da conexão, enquanto RTS/CTS controlam o fluxo de dados dentro da conexão.
Para aumentar a confusão, existem dispositivos que usam DTR/DSR para controle de fluxo de dados, então o real significado de cada sinal depende do dispositivo concreto. Além do cabo serial ter de possuir todas as vias utilizadas pelos dispositivos, pode mesmo ser necessário que um cabo crossover cruze DTR com DSR.
Modems inteligentes fazem uso dos sinais RS-232 supracitados, mas também enviam mensagens de controle pelo próprio canal serial para sinalizar as mesmas condições. Por exemplo, a mensagem "RING" corresponde ao sinal RI, a mensagem "CONNECT" corresponde ao sinal DCD, e assim por diante. Isto permite controlar o modem com menos sinais de hardware, ou mesmo nenhum.
A intenção deste texto é listar os sinais RS-232 e os respectivos significados. Se precisa saber a pinagem de um conector DB-9 ou DB-25, este guia é o que vai resolver seu problema.
O conector RJ-45 de 8 vias, quando utilizado para comunicação RS-232, possui os mesmos sinais do conector DB-9, exceto pelas omissões de DCD e RI. (Fonte)
Em modems inteligentes, os sinais DCD e RI são tornados obsoletos por mensagens de controle, então um cabo serial RJ-45 seria suficiente para controlar esse tipo de modem.
O chip FT232RL é um conversor USB-serial nível TTL (não é RS-232!) muito utilizado na seara de IoT, Arduino, ESP32, etc.
O conversor possui todos os sinais encontráveis num cabo DB-9. Em geral, vem montado numa plaquinha com pinos pré-soldados expondo os sinais RX, TX, DTR e CTS. Pode-se soldar pinos adicionais para expor RTS, DCD, DSR e RI. Na prática, apenas RX e TX são utilizados em 99,9% do tempo.
Essas plaquinhas, extremamente populares no universo IoT, conectam-se ao computador via USB, e embutem um conversor USB-serial, que intermedia a comunicação com o microcontrolador.
Elas fazem uso criativo dos sinais de controle serial. Por exemplo, nas plaquinhas ESP32, RTS reseta o microcontrolador, e DTR coloca-o em modo de flash. O circuito de suporte impede que os dois aconteçam ao mesmo tempo.
Em relação ao conector DB-9, o conector DB-25 expõe os seguintes sinais adicionais:
Canal secundário: S.TX, S.RX, S.DCD, S.CTS, S.RTS: estes pinos implementam um canal serial adicional, independente do principal.
STF (Select Transmit Channel): seleciona a transmissão entre canal principal ou secundário. Raramente usado, nem todo conector DB-25 possui este pino. O Gemini diz que este pino é comandado pelo DCE, mas não encontrei documentação 100% positiva.
Data Signal Rate Selector: conforme o nível estiver alto ou baixo, escolhe entre duas velocidades preconfiguradas em ambos os dispositivos DTE e DCE. O sinal pode ser comandado por qualquer dos dois, mas não por ambos ao mesmo tempo.
LL (Local Loopback): sinal emitido pelo DTE, coloca o modem (DCE) em modo de teste fim-a-fim, fazendo "eco local" dos dados, modulando para sinal analógico e fazendo o resultado passar pelo demodulador.
RL (Remote Loopback): sinal emitido pelo DTE, coloca o modem (DCE) em modo de "eco remoto", modulando e reenviando os dados que recebe do lado remoto.
TM (Test Mode): sinal emitido pelo DCE, quando ele é um modem e está em modo de teste, seja porque um dos sinais LL ou RL está ativo, seja porque algum outro tipo de teste, iniciado por qualquer outro método, estiver ativo no modem.
RS-232 também tem uma previsão para modo serial síncrono (raramente usada; modens digitais síncronos utilizavam a interface V.35). Os pinos a seguir são relevantes apenas para RS-232 síncrono.
TC (Transmitter Timing): Sinal de clock gerado pelo DCE, que regula a transmissão de dados no pino TX. Cada transição de sinal no TC sinaliza que um bit novo deve ser enviado via TX.
Salvo quando o modem estiver em algum modo de diagnóstico, este sinal de clock deve ser gerado continuamente, devido à natureza da comunicação síncrona (que nunca pára, mesmo sem dados a transmitir).
RC (Receiver Timing): Idem a TC, porém regula a recepção de dados no pino RX. Cada transição de sinal em RC sinaliza que há um bit novo para ser lido em RX.
ETC (Transmitter Element Timing): quando o DCE não gera os sinais de clock TC e RC, o DTE pode fazer esse papel, fornecendo o sinal de clock ao DCE através do pino ETC. No mais, seu funcionamento é análogo a TC e RC, inclusive quanto à necessidade de ser gerado continuamente.
O padrão RS-232 é de 1960, ancestral para os padrões da nossa guilda, do tempo que muitos DTEs eram terminais de teletipo eletromecânicos. Os desafios típicos de protocolos de comunicação eram resolvidos com garrucha, facão e hardware.
Desde então, sobreveio a tendência de controlar tudo "in-band", através do próprio canal de comunicação, analogamente ao TCP/IP. Em troca, houve o progressivo abandono dos mecanismos de sinalização "out-of-band". Mesmo no início dos anos 1990, muitos usos de comunicação serial já aconteciam sobre apenas três fios (RX, TX e terra), omitindo todos os sinais de controle.
De toda forma, é curioso conhecer a história desses sinais, porque as situações que motivaram sua invenção continuam existindo, e a forma que essas situações eram resolvidas no passado podem nos sugerir soluções "neoclássicas" no futuro.