Рейтинг:
2
Jochen Arndt
Цитата:
- номер последовательного порта иногда меняется
Это может произойти при подключении преобразователя USB-to-Serial к другому разъему. Но этого не должно произойти, если не отсоединить преобразователь.
Цитата:
- другое приложение может "украсть" порт и убить связь
COM-порты-это эксклюзивные ресурсы. Это относится и к виртуальным портам. Это означает, что после того, как приложение открыло его, оно больше не может быть открыто другим приложением (или даже тем же самым приложением). Таким образом, связь не может быть убита другим приложением. Однако другое приложение может открыть порт раньше вашего.
Цитата:
- он не зашифрован
Это не связано с физическим интерфейсом и низкоуровневым протоколом связи. При необходимости вы можете использовать какое-то шифрование для передачи данных.
Цитата:
Каковы мои варианты связи между Arduino/микроконтроллером и ПК?
Их много в зависимости от типа доступных или устанавливаемых интерфейсов. Для низкой скорости можно даже использовать SPI и I2C.
Я предполагаю, что у вас есть конвертер USB-to-Serial на стороне ПК. Если у него есть чип FTDI, вы можете использовать
Прямые драйверы D2XX[
^] (с другими чипами могут быть аналогичные драйверы). Используя это, вы можете получить доступ к конвертеру по VID и PID вместо виртуального COM-порта и избежать проблемы смены COM-портов. Вы даже можете удалить или отключить драйвер виртуального COM-порта, чтобы другие приложения должны были использовать тот же метод для доступа к конвертеру.
Member 12254962
Привет, Йохен, спасибо за подробный ответ! Я хочу, чтобы мое устройство работало по принципу plug and play, поэтому деинсталляция / деактивация драйверов - это не вариант, но идея с драйвером FTDI и доступом к устройству по VID и PID звучит великолепно. У меня нет чипа FTDI, так как я работаю с Arduino Leonardo, но я почти уверен, что LibUsb / LibUsbDotnet (https://github.com/libusb/libusb, http://libusbdotnet.sourceforge.net/V2/Index.html ) можно сделать то же самое, поэтому я попробую это. Знаете ли вы, есть ли возможность реализовать класс CDC на микроконтроллере, чтобы он НЕ распознавался компьютером как (виртуальный) COM-порт, но каким-то образом оставался доступным с помощью LibUsb? Я не боюсь углубляться в протокол USB для этого, но я не хочу писать драйвер ^^
Jochen Arndt
Итак, вы подключаете USB-порт Arduino к своему компьютеру (почему это мне не пришло в голову).
Насколько я знаю, Arduino (по крайней мере, оригинальный) использует чип FTDI. Тогда вы сможете использовать драйвер D2XX. Это хорошая новость.
Плохая новость заключается в том, что чип FTDI представляет собой преобразователь USB-to-Serial, который управляется через USB-порт, но Arduino подключен к последовательной стороне. Таким образом, вы не можете создать какой-то класс CDC на Arduino.
Я предлагаю попробовать драйвер D2XX, создающий тестовое приложение. Если это сработает, то можно будет написать драйвер устройства клавиатуры, который использует библиотеку D2XX для связи. Но это сложная задача (я не очень хорошо знаком с драйверами устройств Windows). Затем вы создадите INF-файл для своего драйвера, аналогичный драйверу виртуального COM-порта, но укажите его как драйвер клавиатуры. То есть: ваш драйвер заменяет драйвер COM-порта.
LibUSB очень мощный, но до сих пор я использовал его только с Linux. Но использовать библиотеку D2XX здесь было бы проще.
Если бы вы заставили все это работать, это была бы прекрасная статья здесь, в CodeProject.