setserial / dev / ttyS * O UART é indefinido

3

Estou trabalhando na placa nvidia jetson tk1 que tem uma porta serial rs232 e estou tentando fazer um teste de loopback encurtando o pino 2 e o pino 3. Estou usando o terminal de comunicação da porta serial gtkterm, mas quando Eu tento escrever no terminal, não consigo fazer os personagens ecoarem de volta, nem os personagens aparecerão na tela. Eu estou usando o Ubuntu. Eu usei o comando setserial -g /dev/ttyS* e setserial -g /dev/ttyTHS* para ver as informações sobre as portas, mas a saída que obtive é

/dev/ttyS0, UART: undefined, Port: 0x0000, IRQ: 122
/dev/ttyS1, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyS2, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyS3, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyTHS0, UART: undefined, Port: 0x0000, IRQ: 68
/dev/ttyTHS1, UART: undefined, Port: 0x0000, IRQ: 69
/dev/ttyTHS2, UART: undefined, Port: 0x0000, IRQ: 78

Então, tenho algumas perguntas aqui:

  • quais são as portas REAIS,
  • por que diz que a UART é indefinida e
  • por que parece que eles não são fisicamente mapeados?

Eu também fiz uma pequena pesquisa e você pode alterar o UART com este comando sudo setserial /dev/ttyS1 uart 16550A mas eu não conheço o tipo de modelo UART, eu verifiquei o documento e as partes do quadro e tudo o que posso dizer é o O tipo UART é o console serial DB-9 UART.

    
por Nesibe Yavuz 21.07.2015 / 12:54

2 respostas

3

IIRC Jetson TK1's DB9 está conectado a /dev/ttyS0 no kernel do Linux. E a distribuição padrão do Ubuntu configura como dispositivo de console do kernel (veja cat /proc/consoles ) e executa getty nele. Você precisa pará-los para que seu aplicativo use /dev/ttyS0 exclusivamente.

Para parar getty , você pode executar stop ttyS0 . Eu não sei como desanexar /dev/ttyS0 dos dispositivos de console do kernel, você tem que remover console=ttyS0,... do parâmetro de inicialização. De qualquer forma, para o primeiro teste é altamente recomendável conectar o DB9 de outro PC com um cabo cruzado.

Eu estou afraind a saída de setserial é sem sentido e inútil em TK1. /dev/ttyS0 está pronto na inicialização e você pode configurá-lo usando a API termios do Linux, portanto, use apenas stty ou outro software de terminal sofisticado como kermit . Eu nunca usei gtkterm , mas ele também serve. Você poderia conseguir nada a menos que se livrasse do processo de getty ou shell da porta, embora.

Para usar kermit , faça apt-get install ckermit e crie o arquivo ~/.kermrc com o seguinte conteúdo:

set modem type none
set line /dev/ttyS0
set speed 115200
set carrier-watch off
set flow none

Em seguida, inicie kermit em um terminal. Digite connect no prompt para conectar a porta serial. Na sessão digitando Ctrl + \ seguido por c para voltar ao prompt, q para sair do kermit.

$ kermit
C-Kermit 9.0.302 OPEN SOURCE:, 20 Aug 2011, for Linux+SSL+KRB5 (64-bit)
 Copyright (C) 1985, 2011,
  Trustees of Columbia University in the City of New York.
Type ? or HELP for help.
(/home/yaegashi/) C-Kermit>connect
Connecting to /dev/ttyS0, speed 115200
 Escape character: Ctrl-\ (ASCII 28, FS): enabled
Type the escape character followed by C to get back,
or followed by ? to see other options.
----------------------------------------------------

Closing /dev/ttyS0...OK
    
por 21.07.2015 / 14:49
0

Acabei de experimentar um problema semelhante com portas seriais UART indefinidas e Linux, com um PC ARCHMI. dmesg | grep serial não estava mostrando nenhum resultado. Depois de muitas tentativas, notei que era um problema de BIOS. Depois de desabilitar a opção "Quick Boot", tudo funcionou bem e as portas seriais foram carregadas corretamente com o UART, o dmesg mostrou resultados. Apenas no caso de ajudar por acaso.

    
por 27.01.2017 / 04:44