2017-01-03 3 views
-2

Я работаю над проектом, в котором я должен передавать данные с микроконтроллера на ПК с помощью USB-протокола. Я работаю с микроконтроллером STM32F407 для передачи данных на ПК с помощью USB-протокола.Передача данных с STM32F407 на libusb через USB CDC класс

Я использую libsub для передачи данных в ОС Windows 7.  

Я написал программу с STM32cubeMX и настройки USB библиотеки классов устройств. Я могу передавать данные с виртуального COM-порта CDC, но я хочу передать данные с помощью libusb. Я устанавливаю драйвер libusb для своего устройства, но когда я отправляю данные с микроконтроллера на ПК, ничего не посылает !!!!

В чем моя проблема? Как я могу отправить данные с устройства USB на ПК с USB и высокой скоростью?

Enter image description here

ответ

0

В протоколе USB хост-устройство инициирует любую передачу, например объемной передачи. Я предполагаю, что ST32f407 является устройством , а компьютер находится на хосте, поэтому ST32 не может инициировать передачу через USB. Связь через виртуальный COM работает, потому что виртуальный COM, как туннель, но этот туннель был также Инициирован и (логически) поддерживалась хост (ПК)

Массовых операции

Как и все другие USB-передача, хост всегда инициирует передачу . Связь происходит между хостом и конечной точкой . В протоколе USB не применяется какой-либо формат данных , отправленных в массовой транзакции.

источник: https://msdn.microsoft.com/de-de/library/windows/hardware/ff539199%28v=vs.85%29.aspx

Все данные переводы инициируются и контролируются хостом и USB периферийные устройства рабы в ответ на принимающей команды

источник: https://www.midi.org/articles/basic-of-usb

в USB даже прерываниям приходится ждать, пока хост-опросы:

Любой, у кого был опыт запросов на прерывание на , микроконтроллеры будут знать, что прерывания генерируются устройством. Однако под USB, если устройство требует внимания хоста, оно должно подождать, пока хост не опросит его, прежде чем он сможет сообщить, что ему нужно срочное внимание!

Источник: http://www.beyondlogic.org/usbnutshell/usb4.shtml#Interrupt

См http://www.beyondlogic.org/usbnutshell/usb4.shtml#Bulk для передачи больших объемов данных

Таким образом, вы можете отправить данные от устройства к хосту, но хозяин должен установить значение связи имеет «спросить» для данных ,Это делается с помощью насыпью в конечной точке, которая используется для чтения данных из устройства в хост

+0

Спасибо. Также осознано, что у моего драйвера проблемы из вашего ответа. Как я могу решить эту проблему? –

+0

вам не нужен драйвер libusb на ST32, потому что ST32 является устройством USB. Драйвер libusb должен быть установлен на хост USB (ПК). Затем вы можете использовать 'lsusb -v', чтобы увидеть структуру USB, которая реализована на ST32 с помощью прошивки или операционной системы. Если вы знаете структуру дерева USB на ST32 (устройство, класс USB, интерфейс, конфигурацию, конечную точку, ...), вы можете использовать * libusb *, чтобы инициировать массовый перенос на одну из конечных точек, используя, например, 'libusb_bulk_transfer (...) 'или управление передачей ... –

-1

У меня есть проект, используя STM32F4 и libusb в GitHub, но с Linux. Он работает выше 256 Кбайт/с.

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