Como posso saber qual porta serial corresponde a uma placa PCI?

4

Eu tenho um computador de veículo com uma placa PCIe 3G interna para comunicações celulares, mas não consigo descobrir qual porta serial eu tenho que usar para enviar comandos AT.

Este computador também inclui um GPS onboard onde eu posso acessar muito bem através de /dev/ttyS5 com uma velocidade de 9600. Eu tenho lido alguns documentos e tenho visto que a velocidade do cartão 3G deve ser 115200. Esta placa PCI 3G é um "cartão de dados Telit HE910 Mini PCIe" e estou em execução no Ubuntu 14.04 .

Além disso, tenho tentado abrir uma porta serial com portas n (0 ... 5) como abaixo, sem resultados:

stty -F /dev/ttySn ispeed 115200 && cat </dev/ttySn

Executando sudo setserial -g /dev/ttyS[012345] , ele gera:

/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4  
/dev/ttyS1, UART: 16550A, Port: 0x02f8, IRQ: 3  
/dev/ttyS2, UART: 16550A, Port: 0x03e8, IRQ: 5  
/dev/ttyS3, UART: 16550A, Port: 0x02e8, IRQ: 7  
/dev/ttyS4, UART: 16550A, Port: 0x02f0, IRQ: 11  
/dev/ttyS5, UART: 16550A, Port: 0x02e0, IRQ: 10

Por favor, ajude a descobrir como acessar este cartão 3G através de uma porta serial para enviar comandos AT.

    
por vudu 19.09.2015 / 03:16

1 resposta

4

Você pode usar lspci -v para listar as informações do dispositivo PCI, juntamente com seus IRQs. Correlacione o IRQ listado por meio de lspci com as informações de setserial que você já reuniu, e isso deve informar o que tty corresponde a qual placa PCI.

Além disso, se a porta estiver desativada, você poderá ativá-la usando setpci . Mais informações sobre como determinar isso e como ativá-lo podem ser encontradas aqui: link

If the port communicates via an IO address then "lspci -vv" should show "Control: I/O+ ..." with + meaning that the IO address is enabled. If it shows "I/O-" (and "I/O ports at ... [disabled]") then you may need to use the setpci command to enable it. For example "setpci -d 151f:000 command=101". 151f is the vendor id, and 000 is the device id both obtained from "lspci -n -v" or from /proc/bus/pci or from "scanpci -v". The "command=101" means that 101 is put into the command register which is the same as the "Control" register displayed by "lspci". The 101h sets two bits: the 1 sets I/O to + and the 100 part keeps SERR# set to +. In this case only the SERR# bit of the Control register was initially observed to be + when the lspci command was run. So we kept it enabled to + by setting bit 8 (where bit 0 is I/O) to 1 by the first 1 in 101. Some serial cards don't use SERR# so if you see SERR#- then there's no need to enable it so then use: command=1. Then you'll need to set up "setserial" to tell the driver the IO and IRQ.

De acordo com a documentação da Telit, parece que o modem 3G faz o ACM. Verifique se você tem dispositivos / dev / ttyACM *. Em caso afirmativo, de acordo com a documentação, você pode usá-los para enviar comandos AT. A documentação também tem instruções sobre como carregar o módulo do kernel, se ainda não estiver carregado. link

Of those only the following devices can be used:

/dev/ttyACM0: data port for PPP connections and AT commands

/dev/ttyACM3: generic port for AT commands

    
por 19.09.2015 / 03:27