Loop de dados sem fim de dev / ttyUSB ao enviar comandos AT

2

Eu tenho problema ao enviar comandos AT para o meu modem USB. No começo eu tentei classe php-serial, mas quando eu estava lendo dados, eu tenho loop infinito com dados estranhos. Então eu tentei depurar o problema e abri o putty terminal, fiz o comando

cat /dev/ttyUSB0

e, em seguida, enviei o comando echo "AT" > /dev/ttyUSB0 depois disso, sempre obtive um loop sem fim de cat /dev/ttyUSB0 assim:

AT
AT^JAT^JAT^JAT^JAT^JAT^JAT^JAT^JAT^JAT^JAT^JAT^JAT^JAT^JAT^JAT^JAT^JAT^JAT^JAT^

e esse loop nunca termina. No Windows tudo funciona muito bem. Eu posso conectar ao modem USB via porta COM virtual e enviar comando / obter resposta.

A questão é por que não posso simplesmente receber a mensagem "OK" do console, mas, em vez disso, recebi esse loop de dados?

Tentei diferentes modems USB huawei e diferentes configurações stty e também configurações padrão para modems huawei:

Baud rate: 9600 / 115200
Parity: none
Data bits = 8
Stop bits = 1
Flow control = none


test dev # uname -a
Linux test 3.5.7-gentoo #3 SMP Sun Feb 17 04:58:22 EET 2013 x86_64 AMD Athlon(tm) 64 X2 Dual Core Processor 5200+ AuthenticAMD GNU/Linux

compilado novo kernel: 3.6.11-gentoo e agora ao enviar o comando:

echo "AT" > /dev/ttyUSB0

obteve resultado como:

OK
AT
OK
AT
OK
AT

nunca terminou, terminei o comando cat, depois enviei outro (comando make call):

echo "ATDT 27789388;" > /dev/ttyUSB0

e recebi resposta do gato sem alça.

systest ~ # cat /dev/ttyUSB0
ATDT 27789388;


OK

então por que o terminal tty está agindo tão estranho? talvez eu não saiba algo sobre envio / leitura de dados em portas seriais?

se puder ajudar, a saída do comando stty -a -F / dev / ttyUSB0 é:

speed 9600 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl -ixon -ixoff -iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
    
por user991 17.02.2013 / 14:58

5 respostas

1

Verifique se o modem-manager está sendo executado - e mate-o se estiver.

Se achar que o dispositivo é um modem, ele entrará e tentará discar também o modem. Isso foi corrigido como um problema similar para mim recentemente.

    
por 19.02.2013 / 06:52
1

Executar a comunicação do comando AT a partir da linha de comando com operações de shell simples não é confiável. Eu sugiro que você tente usar o programa atinout que é especificamente escrito para emitir o comando AT a partir da linha de comando:

$ echo AT | atinout - /dev/ttyUSB0 -
AT
OK
$
    
por 13.05.2015 / 20:23
0

Definitivamente, parece que a configuração do seu terminal está desarrumada. Verifique e brinque com essas configurações stty :

echo echoe echok -echonl -echoprt echoctl echoke

EDIT: O motivo pelo qual você obteve o loop AT - OK , é que você ativou o terminal local echo no seu terminal e no lado do modem no intérprete AT. Para desativar o eco no intérprete AT, emita: ATE0 (que é um zero) como seu primeiro comando.

    
por 02.07.2014 / 19:53
0

O comando:

stty -echo -F /dev/ttyUSB3

funcionou para mim

    
por 05.11.2017 / 17:53
0

Use "ATE0" antes

echo "ATE0" > / dev / ttyUSB0

    
por 14.09.2018 / 22:45