2014-04-22 6 views
0

Windows 호스트에서 WinUSB를 사용하여 내 WINUSB USB 장치와 통신합니다. 내 USB 장치가 최고 속도 장치입니다. 장치 핸들을 가져와 OUT 및 IN 데이터 전송을 수행 할 수 있습니다.WinUSB 대량 전송 크기가 최대 패킷 크기보다 큰 경우 전송이 실패합니다.

FS WinUSB 장치의 Bulk IN 전송 문제가 있습니다. 내가 PC에서 장치로 그리고 다시 PC로 데이터를 되 돌릴 때, 1에서 64까지의 크기가 잘 작동한다. 65 바이트를 전송하면 처음 64 바이트는 PC에서 다시 읽을 수 있습니다. 그러나 마지막 바이트가 누락되었습니다.

누구나 같은 종류의 문제에 직면하거나 해결책을 제안 할 수 있습니까?

안부, Nisheedh

+0

기기에서 실제로 컴퓨터로 65 바이트를 다시 전송했는지 알고 있습니까? USB 로직 분석기 또는 오실로스코프가 있습니까? –

답변

0

먼저 당신이 MAXIMUM_TRANSFER_SIZE을 읽어야합니다. 보내기 위해 WinUSB "필요한 경우 적절한 크기의 청크로 버퍼를 나눕니다." (source).

또한 WinUsb_ReadPipe의 발언을 확인 :

장치에 의해 반환 된 데이터는 최대 전송 길이보다 크면 WinUSB 최대 전송 거리의 작은 요청에 요청을 분할하고 제출 연속적으로. 전송 길이가 이고 끝점의 최대 패킷 크기 (WINUSB_PIPE_INFORMATION 구조체의 MaximumPacketSize 구성원을 통해 검색 할 수있는 )의 배수가 아닌 경우 WinUSB는 전송 크기를 MaximumPacketSize의 배수 으로 늘립니다.

USB 패킷 크기는 읽기 요청에 대한 전송을 고려하지 않습니다. 장치가 클라이언트 버퍼에 비해 너무 큰 패킷으로 응답하는 경우 읽기 요청의 동작은 파이프에 설정된 유형과 일치합니다. 파이프의 정책 유형이 ALLOW_PARTIAL_READS 인 경우 WinUSB는 나머지 데이터를 다음 전송의 시작 에 추가합니다. ALLOW_PARTIAL_READS가 설정되지 않은 경우 읽기 요청이 실패합니다. 정책 유형에 대한 자세한 내용은 WinUSB 파이프 정책 수정 기능을 참조하십시오.

설정을 확인하고 마지막 바이트가 두 번째 전송으로 전송되는지 확인하십시오. 실제로 몇 바이트의 쓰기/읽기가 수행되었는지 테스트해야합니다.