이전 직렬 포트를보고하는 간단한 가상 직렬 포트 장치를 쓰고 있습니다. 이 시점에서 나는 장치를 열거하고 문자를 보내고받을 수 있습니다.USB CDC 장치가 스톨 됨
호스트에서 장치로 다양한 대량 전송을 한 후 종단점이 데이터 전송을 포기하고 전송을 중지합니다. PC 쪽에서는 쓰기 오류가 발생하고 USBlyzer 추적에서 음악이 실속 (USBD_STATUS_STALL_PID)에서 멈 춥니 다. 그러나 내 코드는 의도적으로 해당 끝점에 STALL 조건을 발행하지 않으며 생성 된 상태 플래그는 결코 설정되지 않습니다.
요청과 STALL 발급 사이에 짧은 시간 (< 300μs)이 경과하면 시간 초과가 아닌 일종의 잘못된 응답으로 보입니다. 장치 측에서 버퍼의 데이터와 적절한 DATA0/1 동기화로 출력 엔드 포인트를 사용할 준비가되었지만 더 이상 발생하지는 않습니다.
"대용량"데이터를 보내기 시작할 때까지 오랫동안 장치가 작동하는 것처럼 보입니다. 가까운 곳에서 장치 열거/구성을 알 수 있으면 성공적으로 완료된 것처럼 보입니다. 아, 그리고 bulk-in 엔드 포인트는이 후에도 계속 잘 작동합니다.
기록을 위해 나는 표준 Windows usbser.sys 드라이버와 XMega128A4U μP를 사용하고 있습니다. 또한 여러 Windows Vista 및 7 컴퓨터에서 동일한 동작이 발생합니다.
내가 잘못하고있는 것에 대한 아이디어가 있습니까? 호스트 측의 출력 버퍼의 오버 플로우에 발생할 수 아웃 포인트 실속
USBlyzer log , USB CDC stack, test project
아, 그래도 CDC 장치에 대한 정규 NACK을 기반으로하는 흐름 제어 메커니즘이 있습니다. 속도가 어떻게 제한되는지 아는 사람? USBlyzer 로그가 믿어 지려면 장치가 실속하기 전 ~ 30ms 전에 데이터를 마지막으로 가져 왔습니다. – doynax