CDC ACM не работает в пользовательском ядре Linux.

Вопрос или проблема

У меня есть cubieboard2 с установленной Arch Linux и кастомным ядром Linux. В cubieboard2 я подключил свое устройство usb-serial (например, arduino), оно распознается как CDC ACM. Мое ядро Linux имеет включенные опции CDC в конфигурации, как я увидел на этой странице, но я не могу использовать последовательный порт /dev/ttyACM0 с приложениями minicom или pyserial.

Minicom просто сообщает, что не может открыть последовательный порт. Pyserial может открыть порт, но когда я пытаюсь его прочитать, результат такой:

SerialException: устройству было сигнализировано о готовности к чтению, но данных не вернулось (устройство отключено или происходит множественный доступ к порту?)

Тем не менее, в pyserial, если я пытаюсь записать байт, результат другой:

SerialException: запись не удалась: [Errno 5] Ошибка ввода/вывода.

Другие странности происходят, когда я закрываю последовательный порт, его имя изменяется, другими словами, когда я закрываю /dev/ttyACM0, оно меняется на /dev/ttyACM1.

Я пробовал мое устройство на ноутбуке, и оно работает нормально с pyserial и minicom.

Информация о cubieboard2:

$ uname -a
Linux alarm 3.4.61-rt77-ARCH+ #10 SMP PREEMPT RT Thu Apr 17 13:58:20 BRT 2014 armv7l GNU/Linux

мой файл конфигурации ядра: http://pastebin.com/raw.php?i=6LfsRyek

Мое предположение в том, что не включена какая-то опция ядра, но я не знаю, какая именно.

Есть идеи?

Мне кажется, что проблема в вашем устройстве. Оно может правильно идентифицироваться, но ведет себя неожиданно при последующем выполнении коммуникации. Попробуйте использовать Wireshark с usbmon (или tshark, если у вас нет X-сессии). Имя ttyACM1 обычно возникает из-за повторной идентификации после неправильной коммуникации.

Ответ или решение

Решение проблемы с CDC ACM на пользовательском ядре Linux для Cubieboard2

На Cubieboard2 под управлением Arch Linux с пользовательским ядром могут возникнуть проблемы с использованием устройства USB-CDC ACM, например Arduino. Проблема проявляется в невозможности использования порта /dev/ttyACM0 через приложения minicom или pyserial.

Возможные причины и решение проблемы

  1. Ошибка конфигурации ядра:

    • Проверьте, что все необходимые параметры для поддержки CDC ACM действительно включены в конфигурации ядра. Это может быть, например, включение опции CONFIG_USB_ACM в конфигурационном файле. Ваше ядро устаревшее (версия 3.4.61), и возможно, оно не поддерживает все необходимые функции современных устройств. Рекомендуется обновить ядро до более новой версии, если это возможно, и заново проверить конфигурацию.
  2. Проблемы с драйверами:

    • Убедитесь, что драйверы загружаются корректно. Используйте команду dmesg для просмотра системного журнала сообщений и выявления возможных сбоев, связанных с загрузкой модулей или конфликтами.
  3. Проблема с правами доступа:

    • Проверьте права доступа к устройству /dev/ttyACM0. Убедитесь, что ваша учетная запись пользователя имеет все необходимые права для работы с этим устройством. Используйте ls -l /dev/ttyACM0 для просмотра прав и chmod или chgrp для их изменения, если это необходимо.
  4. Переподключение и переименование устройства:

    • Частое переименование устройства (например, с /dev/ttyACM0 на /dev/ttyACM1) обусловлено его перерегистрацией из-за ошибки коммуникации. Это может означать аппаратную проблему с проводом или неправильное обращение к устройству излучением (ЕМП).
  5. Используйте анализатор USB-трафика:

    • Для диагностики проблемы коммуникации используйте Wireshark с usbmon для мониторинга USB-трафика. Это может помочь выявить, где именно происходит сбой в передаче данных.
  6. Проверьте устройство на других платформах:

    • Так как устройство работает на вашем ноутбуке, рассмотрите возможность смены порта USB или используемого адаптера на Cubieboard2. Возможно, проблема в оборудовании, а не в ядре.

Заключение

На основании вышеизложенного, ваш случай может требовать как программной диагностики, так и проверки аппаратных аспектов. Попробуйте поочередно исключать возможные причины, начиная с проверки версии ядра и конфигурации до анализа физического состояния устройств и портов. Если проблемы продолжаются, можно рассмотреть использование альтернативной аппаратной платформы, более совместимой с вашей задачей.

Ваш опыт и результаты диагностики могут также быть полезны другим, поэтому, пожалуйста, обновите ваш файл конфигурации в соответствии с актуальными рекомендациями и свяжитесь с сообществом, если удастся найти решение.

Оцените материал
Добавить комментарий

Капча загружается...