我怎么知道哪个串口对应一个PCI卡?

vud*_*udu 5 linux ubuntu pci modem serial-port

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

这台电脑也有板载GPS /dev/ttyS5,9600的速度可以很好的上网。我看了一些资料,看到3G卡的速度应该是115200。这个3G PCI卡是“Telit HE910 Mini PCIe”数据卡”,我在Ubuntu 14.04上运行。

另外,我一直在尝试打开一个带有n (0...5) 个端口的串行 com,如下所示,但没有结果:

stty -F /dev/ttySn ispeed 115200 && cat </dev/ttySn
Run Code Online (Sandbox Code Playgroud)

执行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
Run Code Online (Sandbox Code Playgroud)

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

ali*_*nth 5

您可以使用lspci -v来列出 PCI 设备信息及其 IRQ。将通过列出的 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 端口在... [禁用]”),那么您可能需要使用 setpci 命令来启用它。例如“setpci -d 151f:000 command=101”。151f 是供应商 ID,000 是从“lspci -n -v”或从 /proc/bus/pci 或从“scanpci -v”获得的设备 ID。“command=101”表示将101放入命令寄存器,与“lspci”显示的“Control”寄存器相同。101h 设置两个位:1 将 I/O 设置为 +,而 100 部分将 SERR# 设置为 +。在这种情况下,当运行 lspci 命令时,最初只观察到控制寄存器的 SERR# 位为 +。因此,我们通过将第 8 位(其中第 0 位是 I/O)设置为 1 来将其启用为 + 由 101 中的第一个 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 命令的通用端口