2013-06-04 3 views
3

우리는 libusb v1.0.9.0을 C++ 코드 (Java 프런트 엔드 포함)로 사용하고 있습니다. 여러 Windows 버전과 다양한 USB   2.0/3.0 컨트롤러를 사용하는 여러 대의 컴퓨터에서 테스트 중이며 몇 가지 매우 나쁜 문제를 발견했습니다.Windows에서 libusb는 일부 포트를 볼 수 없습니다

Windows에서   7, "Intel USB 3.0 확장 호스트 컨트롤러"플랫폼의 포트를 볼 수 없습니다.

Windows Server 2008에서는 USB 2.0 및 3.0 컨트롤러의 특정 포트를 볼 수 없습니다. 2.0 허브의 일부 포트는 작동하고 3.0 허브의 일부 포트는 작동하지만 다른 포트는 동일한 장치에서 모든 장치에 보이지 않습니다.

첫 번째 컨트롤러는 곧 지원 될 컨트롤러 고유성 일 수 있지만 두 번째 컨트롤러는 실제로 걱정됩니다. 이런 종류의 행동이 일반적입니까? 우리가 어떻게 고칠 수 있니?

우리는 libusb_get_device_list() 또는 libusb_open_device_with_vid_pid()을 사용하고 있습니다.

+0

수정 : 이것은 주류 libusb v1.0.9.0입니다. libusbx가 아닙니다. 누군가 프로젝트에 잘못된 형식의 문자열을 넣었습니다. –

답변

1

상황에 따라 조금 다를지라도 특정 USB 3.0 포트에 관해서도 몇 가지 문제가있었습니다. 그래서 내가 당신을 도울 수 있는지 잘 모르겠다. 하드웨어 문제와 관련이 있다고 생각한다. 그러나 다음과 같은 사실을 명심 : 3.0 하드웨어가 아직 잘 (아직 개발) 설정되지 않은

USB - 일부 포트 특히이 아주 싼 것 (즉, 시간이 지남에 따라 그 기능을 잃어버린하는 내장 포트와 메인 보드에 인텔 칩셋). 현재 USB 3.0 및 데이터 전송 속도는 USB 2.0보다 훨씬 높기 때문에 저렴한 포트로 구성된이 포트가 쉽게 끊어지는 것은 기적이 아닙니다.

다른 케이블을 사용해도 허브는 말할 것도없고 차이가 있습니다. 적어도 사용 된 프로토 타입 인 것처럼 보입니다.

xHCI의 최신 드라이버를 정기적으로 확인하십시오. 그 안에 고치기 쉬운 버그가 종종 있습니다.

마지막으로, xHCI로 보내는 패킷의 크기가 다양합니다. 실제로 원하는 크기는 64  KB이므로이 크기의 블록으로 데이터를 분할하십시오. 이는 거대한 패킷에 의해 발생하는 인터럽트 문제와 관련이 있습니다. 일부 xHCI의 경우 이는 이미 항복하는 이유입니다 (특히 USB 2.0에서 실행중인 경우).

전혀 다른 xHCI (Renesas, Intel, ..)의 동작은 상당히 다릅니다. 그 이유는 분명하지 않기 때문에 대부분 짜증이납니다.

마지막 제안 : USBlyzer과 같은 도구를 사용해보세요. 마지막 옵션은 약 30,000 달러 정도를 쓰고 싶다면 Voyager M3i (프로토콜 분석기)과 같습니다.