0

Я использую openwrt (встроенный linux, который работает на маршрутизаторах). Я использую преобразователь USB-to-serial, который отображается как /dev/ttyACM0.последовательное устройство на Linux зависает после нескольких минут передачи данных

[ 2430.460000] usb 1-1: new full-speed USB device number 4 using ehci-platform 
[ 2430.630000] cdc_acm 1-1:1.0: This device cannot do calls on its own. It is not a modem. 
[ 2430.630000] cdc_acm 1-1:1.0: ttyACM0: USB ACM device 

Я написал небольшой код для OpenWRT который открывает данный последовательный порт, /dev/ttyACMO, ждет на select() системного вызова для событий чтения/записи на последовательный порт fd.
Всякий раз, когда происходит событие чтения, сообщение сбрасывается до stdout.
Я не включил аппаратное управление потоком на последовательном порту.

Я сделал подключенное периферийное устройство для отправки определенного предопределенного сообщения каждые 2 секунды на последовательной ссылке.
Теперь, когда я запускаю свой код в openwrt, чтобы напечатать серийное сообщение, я могу видеть сообщение, исходящее из периферии.
Проблема заключается в том, что после нескольких минут последовательная связь падает. На последовательном интерфейсе больше нет событий чтения.
Сброс периферийных устройств также не помогает. Единственный способ заставить его работать снова - полностью удалить периферийное устройство с USB и начать снова.
Такая же настройка отлично работает на моем ящике Ubuntu. Я использую тот же интерфейс драйвера, то есть usb-acm (в /dev/ttyACM0). Здесь система работает навсегда без последовательного зависания.

Любая идея или предложение о том, что происходит?

ответ

0

я хотел бы попробовать: используя серийник на медленной скорости 9600, вы можете попытаться воспроизвести проблему с помощью какой-то эмулятор терминала на стороне WRT - вы соединитесь с ним и попробовать:

(while :;do echo .;sleep 1m;done) >> /dev/serialdevicename 

У меня есть один более совет: попытайтесь связать какую-то программу для последовательной консоли с помощью inittab

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

w при разрыве соединения ...

  • Есть сообщения в dmesg?
  • если ваш USB-штекер имеет светодиоды для rx/tx, они должны мигать бит каждые 2 секунды ... после того, как он зависает или нет?

canliy no-op Подсказка: земля подключена правильно? проверьте с помощью мультиметра

0

Если вы используете маршрутизатор на базе AR9331 (очень распространенный), есть известная проблема с устройствами CDC ACM через USB. Сценарий USB подключен к «полной скорости» 12 Мбит/с, а Wi-Fi настроен как клиент И не связан с AP. USB будет повесить. Это, по-видимому, аппаратная ошибка в AR9331, для которой нет необходимости в программном обеспечении.

Отключение интерфейса wifi должно решить эту проблему, рабочий процесс, который сохраняет Wi-Fi, составляет , используя USB 2.0 для эффективного преобразования скорости соединения в AR9331 до USB2.0 High Speed ​​(480 Мбит/с); единственная проблема, с которой вы можете столкнуться, заключается в том, что некоторые концентраторы USB 2.0 уступают, поэтому вам может понадобиться попробовать один или два.

Смежные вопросы