Por que minha porta serial fornece uma resposta sem um cabo de loopback?

1

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.

    
por trueCamelType 09.08.2018 / 03:39

0 respostas