Linux

我怎麼知道哪個串口對應一個PCI卡?

  • May 17, 2021

我有一台帶有用於蜂窩通信的內部 3G PCIe 卡的車載電腦,但我不知道必須使用哪個串列埠才能發送 AT 命令。

這台電腦還有一個板載GPS,我可以很好/dev/ttyS5的訪問,速度9600。我看了一些文件,看到3G卡速度應該是115200。這個3G PCI卡是**“泰利特HE910 Mini PCIe”數據卡”,我在Ubuntu 14.04**上執行。

另外,我一直在嘗試打開一個帶有n (0…5) 埠的串列 com,如下所示,但沒有結果:

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命令。

您可以使用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 埠…

$$ disabled $$") 那麼您可能需要使用 setpci 命令來啟用它。例如“setpci -d 151f:000 command=101”。151f 是供應商 ID,000 是從“lspci -n -v”獲得的設備 ID " 或來自 /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 命令的通用埠

引用自:https://unix.stackexchange.com/questions/230650