如何知道PCI卡对应的是哪个串口?

如何知道PCI卡对应的是哪个串口?

我有一台带有用于蜂窝通信的内部 3G PCIe 卡的车载计算机,但我不知道必须使用哪个串行端口才能发送 AT 命令。

这台电脑还带有一个板载GPS,我可以很好地访问,/dev/ttyS5速度为9600。我看了一些文档,我看到3G卡的速度应该是115200。这个3G PCI卡是一个《泰利特 HE910 Mini PCIe 数据卡》我正在继续乌班图14.04

另外,我一直在尝试打开一个串行通信n(0...5) 端口如下,没有结果:

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

执行sudo setserial -g /dev/ttyS[012345]它会产生:

/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

请帮忙弄清楚如何通过串口访问该3G卡发送AT命令。

答案1

您可以用来lspci -v列出 PCI 设备信息及其 IRQ。将 via 列出的 IRQlspcisetserial您已经收集的信息相关联,这应该告诉您哪个 tty 与哪个 PCI 卡匹配。

此外,如果端口被禁用,您可以使用 启用它setpci。有关如何确定以及如何启用它的更多信息,请参见此处:http://www.tldp.org/HOWTO/Serial-HOWTO-8.html#ss8.7

如果端口通过 IO 地址进行通信,则“lspci -vv”应显示“Control: I/O+ ...”,其中 + 表示 IO 地址已启用。如果它显示“I/O-”(以及“I/O ports at ... [disabled]”),那么您可能需要使用 setpci 命令来启用它。例如“setpci -d 151f:000 命令=101”。 151f 是供应商 ID,000 是设备 ID,两者均从“lspci -n -v”、/proc/bus/pci 或“scanpci -v”获取。 “command=101”表示将101放入命令寄存器中,与“lspci”显示的“Control”寄存器相同。 101h 设置两个位:1 将 I/O 设置为 +,100 部分将 SERR# 设置为 +。在这种情况下,当运行 lspci 命令时,最初观察到控制寄存器的 SERR# 位为 +。因此,我们通过将 101 中的第一个 1 的第 8 位(其中第 0 位是 I/O)设置为 1,将其保持为 + 启用状态。某些串行卡不使用 SERR#,因此如果您看到 SERR#-,则无需启用它,然后使用:command=1。然后你需要设置“setserial”来告诉驱动程序IO和IRQ。

根据 Telit 的文档,看起来 3G 调制解调器可以执行 ACM。检查您是否有 /dev/ttyACM* 设备。如果是这样,根据文档,您可以使用它们发送 AT 命令。该文档还包含有关如何加载内核模块(如果尚未加载)的说明。http://teleorigin.com/file_upl/pliki/1/Telit_HE910_HE863_GE910_UL865_Linux_Driver_UserGuide_r2.pdf

其中只能使用以下设备:

/dev/ttyACM0:PPP连接和AT命令的数据端口

/dev/ttyACM3:AT 命令的通用端口

相关内容