Audio

PCIe 卡相互干擾功能

  • April 15, 2018

我有一台執行 Fedora 24 的現代 PC,帶有實時更新檔(CCRMA 音頻工具),並在 PCIe 上安裝了 ASUS Essence STX II 立體聲音效卡。有了它,我們執行一個播放/擷取應用程序。此外,我們需要將 CAN(控制器區域網路)和 BLE(低功耗藍牙)集成到系統中,並為這些功能中的每一個配備一個 PCIe 卡。CAN PCIe 卡來自 PEAK(PCAN-PCI Express 2-ch),BLE 卡是 HP 放在 PCIe 卡(AFAIK)上的 Intel 8260 M2 卡。

只安裝了音效卡就可以正常工作(使用 ALSA 作為 API)。安裝 CAN 和 BLE 時,會觀察到以下情況:

  • 播放和以前一樣。
  • 一個擷取通道在所有樣本中僅返回零 (0) 或負一 (-1)。
  • 另一個擷取通道返回 -2..2 範圍內的值(預期為 -100..100),並且在應用我們的應用程序信號處理時呈現低質量但可檢測的預期結果。
  • ALSA API 報告設置和配置沒有問題。
  • CAN 和 BLE 按預期執行。

如果沒有更深入的 PCIe 經驗,我懷疑 CAN 和/或 BLE PCIe 卡會混淆音效卡功能的映射。我在我面前看到了一些設置腳本來解開卡片,但不知道(!)從哪裡開始。

有人可以:

  • 告訴我我的預感是否在球場上?
  • 告訴我我可以去哪裡獲取有關如何糾正問題的資訊?
  • …或者,分享您對類似問題的解決方案?

謝謝!

更新

arecord -l為所有卡組合(僅音頻卡、BLE + 音頻和 CAN + BLE + 音頻)提供相同的報告。

dmesg不喊怪,但我沒資格說。

lspci -vv,安裝了所有三張卡後,我有

Bus: primary=00, secondary=01, subordinate=01, sec-latency=0
Bus: primary=00, secondary=02, subordinate=02, sec-latency=0
Bus: primary=00, secondary=03, subordinate=03, sec-latency=0
Bus: primary=00, secondary=04, subordinate=05, sec-latency=0
Bus: primary=04, secondary=05, subordinate=05, sec-latency=0

從所有聲稱是 PCI 網橋的條目中。我將其解釋為一種結構,其中主 (00) 匯流排有四個子匯流排 (01-04),而子匯流排 04 連接有另一個子匯流排(匯流排 05)。

音效卡具有 BDF 05:04.0 並使用 IRQ 16,通過 00-04-05 橋 04:00.0 傳播。現在,在 00:1f.4 有一個“SMBus”設備也使用 IRQ 16。該設備也存在,僅安裝了音效卡(當音頻按預期工作時),然後也使用 IRQ 16。第四個(! ) IRQ 16 的使用者是 PEAK CAN 網路控制器,在 01:00.0。列出的所有其他設備都有唯一的 IRQ 編號。

我正在按分鐘學習,但無法確定非唯一 IRQ 是否有問題。這是個問題嗎?lspci我應該看一下更好的/其他資訊嗎?

我們已經解決了!似乎我們插入其他 PCI 卡影響了ALSA 驅動程序中的混音器,將擷取轉移到主機板內置聲音功能的前置麥克風。最重要的是,該麥克風的音量設置為 0。這適用於我們所看到的診斷(單通道擷取,信號電平非常低)。我們錯過了正確設置 ALSA 配置,允許它被其他程序控制。一個可能的罪魁禍首可能是允許遠端音頻控制的脈衝音頻過程。

可以使用我們發現影響我們應用程序的差異的位置找到混音器設置以及有關所有目前音頻設置的最全面的資訊集。alsa-info.sh

現在,我們已經明確設置了 ALSA 驅動程序的所有音頻功能配置,並驗證了所有 PCI 卡上的功能。此連結/etc/modprobe.d/alsa.conf顯示如何保存混音器設置,我們還通過配置文件明確設置音頻驅動程序。

嗬嗬!

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