У меня есть современный ПК под управлением Fedora 24 с патчем реального времени (аудиоинструменты CCRMA) со стереофонической звуковой картой ASUS Essence STX II, установленной на PCIe. С его помощью мы запускаем приложение воспроизведения/захвата. Также нам необходимо интегрировать в систему CAN (локальную сеть контроллеров) и BLE (Bluetooth Low Energy) и иметь PCIe-карту для каждой из этих функций. Карта CAN PCIe от PEAK (PCAN-PCI Express 2-ch), а карта BLE — это карта Intel 8260 M2, которую HP установила на карту PCIe (AFAIK).

С установленной только звуковой картой все работает нормально (используя ALSA в качестве API). При установке CAN и BLE наблюдается следующее:

  • Воспроизведение работает как прежде.
  • Один канал захвата возвращает только ноль (0) или минус один (-1) во всех выборках.
  • Другой канал захвата возвращает значения в диапазоне -2..2 (ожидаемое -100..100) и при применении нашего приложения для обработки сигналов низкого качества, но поддающиеся обнаружению, представлены ожидаемые результаты.
  • API ALSA сообщает об отсутствии проблем с установкой и конфигурацией.
  • 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. Теперь есть устройство «SMBus» в 00:1f.4, также использующее IRQ 16. Это устройство также присутствует только с установленной звуковой картой (когда звук работает должным образом), а затем также использует IRQ 16. Четвертое (! ) пользователем IRQ 16 является сетевой контроллер PEAK CAN, в 01:00.0. Все остальные перечисленные устройства имеют уникальные номера IRQ.

Я учусь с каждой минутой, но не могу решить, являются ли неуникальные IRQ проблемой. Это проблема? Есть ли в lspci лучшая/другая информация, на которую мне следует обратить внимание?

3
Braiam 15 Апр 2018 в 21:07
1
Регионы PCIe не должны смешивать отображения друг друга; процесс настройки должен гарантировать, что этого не произойдет. Если захват вообще работает, маловероятно, что связь PCIe каким-то образом нарушена, это приводит к гораздо более серьезным ошибкам. Первый шаг для проверки — посмотреть на lspci -vv сопоставления и просмотреть dmesg от начала до конца после загрузки, чтобы увидеть, есть ли что-то странное.
 – 
dirkt
24 Янв 2018 в 22:40
Можете ли вы предоставить ссылку на спецификации для карт CAN и BLE? или, по крайней мере, краткое описание того, что они собой представляют, эти аббревиатуры имеют много значений - я полагаю, что CAN не означает «автомобильная сеть». Предоставляет ли какой-либо из них какой-либо аналоговый вход, который может представлять собой вход какой-то звуковой карты? Если это так, это может привести к смещению номеров каналов захвата для вашей реальной звуковой карты.
 – 
cas
25 Янв 2018 в 03:07
1
Попробуйте запустить arecord -l только с установленной звуковой картой, а затем еще раз с установленной одной или обеими другими картами.
 – 
cas
25 Янв 2018 в 03:09
Обновлено с некоторыми уточнениями. Звуковая карта имеет аналоговый вход и выход, CAN также имеет аналоговый вход/выход, но не работает при возникновении проблем. Доступ к карте CAN осуществляется с помощью SocketCAN,
 – 
peso
25 Янв 2018 в 11:43
1
Вы пытались запустить arecord -l? у меня нет конкретных знаний об этой CAN-карте, но если система регистрирует ее как какой-то звук в устройстве, тогда не имеет значения, активно ли она используется одновременно с аналогом звуковой карты. вход или нет - ему все равно будет назначен номер входного канала, и это может сместить номер устройства ввода, назначенный звуковой карте. т. е. проверьте вывод arecord -l и перенастройте программное обеспечение обработки сигналов, чтобы при необходимости использовать новое правильное устройство ввода.
 – 
cas
25 Янв 2018 в 13:03

1 ответ

Лучший ответ

Мы решили это! Похоже, что установка другой карты PCI повлияла на микшер в драйвере ALSA, перенаправив захват на передний микрофон встроенной звуковой функции материнской платы. Кроме того, громкость для этого микрофона была установлена ​​на 0. Это работает с диагностикой, которую мы видели (одноканальный захват с очень низким уровнем сигнала). Мы упустили возможность правильно настроить конфигурацию ALSA, чтобы ею могли управлять другие процессы. Одним из возможных виновников мог быть процесс pulseaudio, позволяющий удаленно управлять звуком.

Настройки микшера, а также наиболее полный набор информации обо всех текущих настройках звука можно найти с помощью alsa-info.sh, где мы обнаружили несоответствия, влияющие на наше приложение.

Теперь мы убедились, что делаем явную настройку конфигурации драйвера ALSA для всех аудиофункций и проверили функциональность на всех картах PCI. По этой ссылке показано, как сохранить настройки микшера, а также мы явно настраиваем аудиодрайверы через /etc/modprobe.d/alsa.conf файл конфигурации.

Ого!

2
peso 31 Янв 2018 в 13:28