Por que as pessoas usam comandos AT na comunicação serial?

21

Preciso saber por que as pessoas nos sistemas embarcados usam comandos AT?
Quando perguntei, as pessoas dizem que é um padrão.

Então, minha pergunta é: O que significa "AT"? Por que as pessoas continuam dizendo que é um padrão?

xsari3x
fonte
1
+++ ATH0 alguém?
21712 kinokijuf
@kinokijuf o que você quer dizer?
Xsari3x
1
why people in embedded systems use AT commands- não há nada específico sobre a sua pergunta ou o uso de AT em um link serial. Pode ser que você tenha visto isso em um sistema embarcado, mas sua origem é explicada abaixo e não é específica para sistemas embarcados. (Tenha cuidado para não pintar as coisas com muito ampla de um pincel.)
Radian
1
O comando AT foi implementado em algo chamado modemu: um programa Unix que cria um dispositivo pseudo-tty mestre / escravo e simula um modem que realmente passa pelo telnet. Você "disca" um host com ATD<hostname>. O engraçado é que o programa saiu quase exatamente no momento em que eu precisava, por volta de 1996: versão 0.0.1. Eu não precisava disso desde então. E ainda é 0.0.1! Usei-o em conjunto com o minicom para fazer transferências do zmodem pelo telnet para hosts remotos que só poderiam ser alcançados dessa maneira.
Kaz
@kinokijuf Por favor, não coloque isso nos comentários. Você acabou de fazer o StackOverflow desligar-me! :-)
Curt J. Sampson

Respostas:

31

Um detalhe raramente apreciado sobre os comandos "AT" é que muitos modems começariam no modo "auto-baud / auto-parity". Inicialmente, o modem começava a não tentar decodificar dados seriais, mas simplesmente observava um pulso baixo e alto consecutivos cujas larguras correspondiam ao mesmo período de bits válido (por exemplo, 3.333ms para 300 baud, 833us para 1200 baud, etc. .). Ao descobrir isso, eles veriam se o próximo pulso baixo tinha cinco vezes essa largura. Nesse caso, eles procurariam outro alto-baixo-alto ou pelo menos 1,5 bit vezes mais alto. Encontrar um desses indica que o modem acabou de ver um 0x41 ou 0xC1 (ou seja, "A") da taxa de transmissão identificada. Indicaria ainda que o computador conectado estava usando 8-N-1 ou 7-E-1 ou que estava usando 7-N-1 ou 7-O-1. Nos dois casos, ele procuraria o próximo caractere como 0x54 ou 0xD4 (ou seja, "T"). Isso permitiria ao modem categorizar ainda mais as configurações de comprimento e paridade de caracteres.

Observe que tudo o que foi recebido antes do "AT" seria ignorado. Se o eco estivesse ativado, os dados retornariam ao computador conectado simplesmente espelhando todas as transições de linha sem nenhuma decodificação serial. Se um computador enviasse dados anteriores ao "AT" em, por exemplo, 247 baud, eles ecoariam nessa velocidade.

Atualmente, alguns dispositivos usam um "A" inicial para detecção da taxa de transmissão automática, mas, caso contrário, o fato de os comandos começarem com "AT" é basicamente uma curiosidade histórica.

supercat
fonte
1
ehm ... o que você quer dizer com "7-N-1" ??
Xsari3x
1
Sete bits de dados, sem paridade, um bit de parada. Permite que os dados sejam enviados 11% mais rápido que o 8-N-1, se um não enviar dados com o conjunto de bits alto.
7898 supercat
Exceto que o auto-bauding foi (e é) normalmente feito na parte +++ de um comando +++ AT ou +++ <tempo de guarda> AT. Veja en.wikipedia.org/wiki/Time_Independent_Escape_Sequence
david
1
@ David: Eu não vejo nenhuma menção de auto-bauding no artigo da sequência de escape independente do tempo, nem nunca vi um modem aceitar +++ em qualquer taxa de transmissão diferente daquela que estava sendo usada para comunicação. Os caracteres 0x9E 0x86 enviados lado a lado em 2400-8-N-1 (ou ^ N ^ F em 2400-7-O-1) produziriam exatamente as mesmas transições de linha que um caractere "+" a 1200 baud, então eu consideraria "+" uma escolha estranha para um personagem de treinamento de transmissão.
precisa
A referência da Wikipedia (!) Era apenas para pessoas que não conhecem o +++. Hardware Uso trens em 'U', trens de software em strings personalizadas. Você conhece um padrão? Todas as seqüências de conexão usadas para iniciar +++, portanto, o auto-bauding foi concluído antes de qualquer outra comunicação.
David #
22

Refere-se ao conjunto de comandos Hayes, que é o padrão há muito tempo para emitir comandos para modems (e outros equipamentos) em uma linha serial.

Em vez de os comandos e os dados terem duas linhas separadas, apenas uma linha é usada e para alternar para o modo de comando a partir dos dados, uma certa sequência é enviada, por exemplo, +++ seguida de uma pausa de duração definida. Os próximos dados são vistos como um comando pelo equipamento receptor.
O motivo para usar algo assim é o fato de evitar a necessidade de outro par de linhas, que em muitos casos simplesmente não estão disponíveis, especialmente em pequenos sistemas embarcados.

Dê uma olhada na página do Wiki e nos links na parte inferior - há muitos detalhes lá.

No entanto, existem todos os tipos de extensões para o conjunto AT original, então eu não apostaria em tudo que menciona o AT para realmente usar todos os comandos originais do Hayes. Por exemplo, eu tenho um chip serial bluetooth aqui que o IIRC usa seu próprio conjunto de tipos AT.
Eu não sou especialista nisso, apenas me lembro de hackear com comandos em alguns dias de discagem e BBS.

Oli Glaser
fonte
13

O conjunto de comandos "AT" era para resolver um problema de necessidade de informações de controle fora da banda nos mesmos dados arbitrários enviados pelo canal de fluxo de bytes. Esse era um problema comum dos modems, quando eram caixas externas conectadas aos computadores por meio de um cabo serial.

Hayes era um fabricante de tais modems e ganhou muita popularidade no início. Sua solução para o problema fora da banda foi enviar ao modem, na maioria das vezes, comandos de controle ASCII de duas letras com uma sequência especial para colocá-lo no modo de passagem de dados. Para reduzir a probabilidade de coisas aleatórias parecerem comandos, todas as seqüências de comandos começaram com o comando AT, que significava "atenção".

Hayes ganhou tanta participação de mercado que outros fabricantes de modem tiveram que implementar o mesmo conjunto de comandos para serem compatíveis. Dessa forma, os clientes poderiam usar seus modems sem precisar reescrever o software, que já estava configurado para operar um modem Hayes.

Hoje em dia, esse esquema é raramente usado, mas é claro que algo tão difundido permanece nos cantos escuros até hoje.

Olin Lathrop
fonte
1
Eu gostei desta nota histórica sobre Hayes & como ele forçou ele próprio padrão, concatenando a sua resposta com a acima de dois resposta é mais do que suficiente :)
xsari3x
Aliás, muitos modems mais novos não parecem mais exigir que os caracteres "AT" estejam em maiúsculas, o que aumenta a frequência com que uma desconexão no meio do envio de um arquivo de texto causará um comportamento incorreto do modem.
Supercat 07/02
O código de controle Band-Break é +++ AT ou +++ <tempo de guarda>. AT são os dois primeiros caracteres de um conjunto de controle padrão e representam ATtention.
david
0

por que as pessoas em sistemas embarcados usam comandos AT?

Eu não sou uma dessas "pessoas em sistemas embarcados", mas eu diria que os ATcomandos ainda estão em uso porque eles vêm de um padrão bem definido de baixa sobrecarga para sinalização em linha.

O que isso significa é que você pode usar o mesmo canal de comunicação para sinalizar (comandos AT para gerenciar a comunicação) e dados (dados reais que você deseja enviar). O ATpadrão especifica como diferenciar os dois para que você e seu dispositivo serial não fiquem confusos ao conversar um com o outro.

O que significa "AT"?

ATé para atenção

Por que as pessoas continuam dizendo que é um padrão?

Bem, porque é. Eu diria que é na verdade uma mistura de padronização de facto e um par de "reais" normas e algumas recomendações .

Luke404
fonte
Isso parece não dizer nada que ainda não foi dito em outras respostas anos atrás. Se você pretende cavar uma pergunta antiga, deve realmente dizer algo importante que não foi dito antes.
Chris Stratton