Я использую libusb в Qt для связи с микроконтроллером PIC, 18F2550. Дело в том, что все работает нормально, пока я не попытаюсь отправить или прочитать более трех байтов. Почему это происходит?
Я пытался использовать объемную передачу и interrupt_read. Когда я помещаю размер буфера равным или меньшим, чем три, тогда передача работает отлично, используя объем или прерывание. Когда этот размер больше трех, я получаю буфер1 и буфер [2] ОК, но остальные ошибаются.
Ошибка, которую я получаю от таймаута. В качестве ввода я использую конечную точку 0x81.
Дополнительная информация:
Возвращаемое значение от объемного чтения или чтения прерывания равно -116. Числа, которые я посылаю с PIC на ПК в двух первых байтах ([0] и 1) в шестнадцатеричном виде это 0x02D6. С этим номером buffer[0]
= -42 (когда должно быть 0xD6 = 214) и buffer[1]
= 2 это правильно.
в [2]
а также [3]
число байтов 0x033D, и я получаю [2]
= 61 = 0x3D. Это правильно и [3]
= -42 ??? (лайк [0]
).
И пятый байт равен 1, а SW показывает 2???
, Может быть, проблема в микроконтроллере, потому что я программирую его как HID USB?
Я не думаю, что быть скрытым — это проблема. У меня была похожая проблема раньше; PIC будет случайным образом превышать время ожидания при передаче больших данных. Оказалось какое-то колебание напряжения на MCU. Как вы соединяете кристалл? У вас есть конденсатор на VUSB, чтобы регулировать его?
Сборка USB-устройства PIC18F Это отличное руководство по созданию PIC HID, и, хотя оно не основано на 18F2550, а на 18F4550, оно должно быть очень похожим, и я уверен, что вы многое сможете получить от схемы и настройки оборудования. Это было отправной точкой для моих проектов PIC-USB.
Других решений пока нет …