Sou novo em usar portas seriais e tenho um cabo de loopback para serial em uma máquina Centos 7. Eu tenho algo em python que testa a porta, mas descobri que o programa retorna os valores esperados mesmo quando o meu loopback não está conectado. Existe algum tipo de loopback de software que já existe para portas no Linux?
Caso seja uma informação útil, estou usando o pySerial mostrado abaixo (eu tive que digitar alguns deles da memória, então peço desculpas se houver erros, mas minha pergunta não é sobre o código tanto quanto é como essas portas realmente funciona)
import serial
BAUD_RATE = 9600
def main():
tx = b"A"
COM_PORT='/dev/ttyS0'
ser = serial.Serial(COM_PORT, BAUD_RATE, timeout=1, parity=serial.PARITY_NONE, rtscts=False, dsrdtr=False)
ser.setDTR(False)
ser.flush()
print("Port " + COM_PORT)
for y in range (0,10):
print("Sent: " + str(tx))
ser.write(tx)
rx = ser.read(1)
print("Received: " + str(rx))
if(len(rx) > 0):
print(COM_PORT + " - " + str(rx))
ser.close()
if __name__ == "__main__":
main()
O mesmo acontece quando uso o teste serial muito mais curto e simples mostrado abaixo
Terminal 1
cat /dev/ttyS0
Terminal 2
echo "test" > /dev/ttyS0
Como eu disse, recebo a saída esperada de ambos os testes, mas recebo a mesma saída, independentemente de o cabo estar conectado ou não.
Saída dos testes
Verificando se a interface é realmente um dispositivo de caractere
ls -l /dev/ttyS0
saída: crw-rw----, 1 user group 4, Date /dev/ttyS0
Verifique se nenhum outro processo está aberto
sudo lsof /dev/ttyS0
saída: erro terei que copiar mais tarde. Se eu correr sem sudo, recebo uma linha em branco
Verificando o UART
sudo setserial -v /dev/ttyS0
saída: /dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
CTS e pinos semelhantes mudam quando o sinal é aplicado
sudo statserial /dev/ttyS0
saída: /dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
Não há alteração nesta saída quando o comando echo para a porta está sendo executado com ou sem o cabo conectado.
Verifique se os números de transmissão e recepção mudam
sudo cat /proc/tty/driver/serial
saída:
0: uart:16550A port:000003F8 irq:4 tx:8335 rx:8301
1: uart:16550A port:000002F8 irq:3 tx:0 rx:0
//There's a few more serial ports, but they all have 0 tx and rx, and on port 03F8, the tx and tx increase when I send to the serial port ttyS0
Outro problema / sintoma que pode estar relacionado é que depois de executar o script python, não consigo mais usar / dev / ttys0
Então, eu posso catar esse arquivo a qualquer momento antes de executar o script python, quantas vezes eu quiser, mas imediatamente depois que eu executo esse Python, eu não consigo catar o arquivo, ele imediatamente retorna sem nada. Eu verifiquei e o arquivo ainda não está aberto. Não sei por que isso aconteceria.
Atualizar
Após testar as outras portas que mostravam 0 em transmitir e receber, notei que realmente estou vendo o valor de transmissão aumentar, mas elas não conseguem receber. Existe alguma coisa que poderia estar bloqueando seu recebimento que eu não tentei? Mais uma vez, suponho que algo esteja configurado de forma diferente, já que a primeira porta esperava um comportamento (além do loopback automático que eu não esperava), mas não encontrei nenhuma regra aplicada a nenhuma das portas.
Tags python3 tty serial-port centos