Se alguém usar o controle de fluxo de hardware RTS / CTS, a serial bloqueará a espera pelo RTS (Ready-To-Send). Você provavelmente deseja habilitar o controle de fluxo de software, desabilitando o CTS e o RTS:
stty -F /dev/ttyS0 -crtscts
Eu tenho um dispositivo serial definido para o modo raw com stty -F /dev/ttyS0 raw
. Quando eu tento enviar dados através dele com echo 'hello' > /dev/ttyS0
, o seguinte acontece:
Nenhum dado é recebido pelo outro lado; O osciloscópio mostra que nenhum dado está sendo enviado
Nenhum prompt aparece por aproximadamente 40 segundos, o terminal parece estar travando
Qual poderia ser o motivo desse comportamento?
P.S. As configurações da porta serial como saída com stty -F /dev/ttyS0 -a
são:
speed 9600 baud; stty: /dev/ttyS0 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 -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 -isig -icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
Se alguém usar o controle de fluxo de hardware RTS / CTS, a serial bloqueará a espera pelo RTS (Ready-To-Send). Você provavelmente deseja habilitar o controle de fluxo de software, desabilitando o CTS e o RTS:
stty -F /dev/ttyS0 -crtscts
Após uma longa pesquisa pelo possível motivo, eu passei pela solução. Isso teve a ver com um certo erro durante a inicialização do meu hardware no Linux. A solução foi manualmente (bem, a partir de um programa executado com elevação) definir um sinalizador que controlasse o nível de sinal para interrupções.
Depois disso, a porta serial começou a funcionar conforme o esperado.
Encontrei a solução aqui: fóruns do linux.org . Faz referência a superiotool como inspiração