2013-11-28 3 views
1

Qt에서 libusb를 사용하여 PIC 마이크로 컨트롤러 (18F2550)와 통신합니다. 문제는 3 바이트 이상을 보내거나 읽으려고 할 때까지 제대로 작동한다는 것입니다. 왜 그렇게됩니까?PIC 18F2550과 통신하기 위해 libusb를 사용하여 3 바이트를 읽거나 쓸 때 오류가 발생하는 이유는 무엇입니까?

bulk_read 전송 및 interrupt_read를 사용해 보았습니다. 버퍼의 크기를 3 이하로 설정하면 전송은 대량 또는 인터럽트를 사용하여 완벽하게 작동합니다. 이 크기가 3보다 크면 버퍼 1을 가져오고 [2] 버퍼를 버퍼링하지만 나머지는 잘못되었습니다.

내가 얻는 오류는 시간 초과입니다. 입력으로 나는 끝점 0x81을 사용하고 있습니다.

추가 정보 :

리턴 대량의 값 또는 판독 인터럽트 -116이다. 첫 번째 두 바이트 ([0] 및 1)의 PIC에서 PC로 보내는 숫자는 0x02D6입니다. 이 숫자를 사용하면 buffer[0] = -42 (0xD6 = 214 일 때) 및 buffer[1] = 2가 정확합니다. [2][3] 바이트의 숫자는 0x033D이고, [2] = 61 = 0x3D가됩니다. 맞습니까? [3] = -42 ??? (예 : [0]).

다섯 번째 바이트는 1이고 SW는 2???입니다. 마이크로 컨트롤러에서 HID USB로 프로그래밍하고 있기 때문에 마이크로 컨트롤러에서 문제가 될 수 있습니까?

답변

1

나는 HID가되는 것이 문제라고 생각하지 않습니다. 전에도 비슷한 문제가있었습니다. PIC는 큰 데이터가 전송 될 때 무작위로 타임 아웃합니다. MCU에서 약간의 전압 변동으로 판명되었습니다. 크리스털은 어때? VUSB에 콘덴서를 달아 조절합니까?

Building a PIC18F USB device

은 PIC HID 구축에 큰 튜토리얼이며,이 18F2550에 있지만 18F4550에 따라 아니더라도, 꽤 비슷해야하고, 난 당신이 회로도에서 많이 얻을 수있는 확신과 하드웨어 설정. 그것은 내 PIC-USB 프로젝트의 출발점이었습니다.

+0

팁 주셔서 감사합니다. 나는 당신의 포스트에 대해 "Vote Up"을 시도했지만 적어도 15 가지의 명성 점수를 받아야합니다. 롤. PIC가 OK (크리스탈 및 VUSB 캡 포함)로 연결되어 있지만 PIC 시간 초과를 확인하는 것은 좋은 생각입니다. 링크에 대한 또 다른 감사는 정말 좋은 것 같습니다. – Or10n