Разница между последовательными и USB-устройствами в Linux? - PullRequest
0 голосов
/ 12 декабря 2018

Я подключил два MCU к системе Linux, один с последовательным интерфейсом, а другой с интерфейсом USB. Система Linux распознает последовательный интерфейс как ttys1, а интерфейс USB как 28. Для последовательного интерфейса я могу отправлять и получать данные через устройство / dev / ttys1.файл.Однако для интерфейса USB я не могу отправлять и получать данные, используя файл устройства / dev / usb / 001/28.

  1. Почему мы не можем получить доступ к USB-устройствам в Linux, используя определенный файл устройства, такой же, какпоследовательный интерфейс?
  2. Как мы можем отправлять и получать данные на и с подключенных USB-устройств? Я уже прочитал этот пост он говорит, что мы должны написать код, используя библиотеку libusb. Если такзачем нам это нужно?

    For serial interface:
    echo -e "\0x20" > /dev/ttys1
    success
    
    For USB interface:
    echo -e "\0x20" > /dev/ttys1
    write error: Invalid argument
    

1 Ответ

0 голосов
/ 12 декабря 2018

Файлы типа /dev/bus/usb/001/28 создаются основным драйвером USB в системе Linux (см. usb / core / devio.c ).Этот драйвер ничего не знает о последовательных портах, он просто знает о USB.Таким образом, команды, которые вы можете отправить в этот файл, такие как «прочитать 32 байта из конечной точки 2» или «отправить 11 байтов в конечную точку 3», и вы бы использовали библиотеку, такую ​​как libusb или libusbp, для отправки этих команд.

Тем не менее, я не рекомендую делать это, если вы можете добиться того же, используя фактические драйверы последовательного порта, которые создают узлы устройства в форме /dev/tty*, а также создают символические ссылки в /dev/serial/by-id.Возможно, вы сможете читать и писать с этих устройств, используя оболочку, как вы это делали, но я часто обнаруживаю, что она работает не так, как я ожидал.Вы можете использовать программу последовательного терминала, такую ​​как PuTTY или screen, для отправки и получения байтов ASCII через последовательный порт (т.е. вы вводите символы для их отправки).Вы также можете написать C-программу для открытия порта, установки параметров ее последовательного порта с помощью termios , а затем чтения из и записи к этому.

...