Linux 커널은 등시성 USB 끝점에 할당할 대역폭의 양을 어떻게 결정합니까?

Linux 커널은 등시성 USB 끝점에 할당할 대역폭의 양을 어떻게 결정합니까?

내가 아는 한, 등시성 전송을 사용하는 USB 엔드포인트에는 "wMaxPacketSize" 매개변수가 연결되어 있으며, 이는 엔드포인트에 대한 특정 대역폭을 보장하기 위해 커널에서 사용됩니다.

내 기억이 정확하다면 이 최대 패킷 크기는 0에서 1024바이트(고속 전송의 경우) 사이일 수 있습니다. 이 매개변수는 Linux 시스템에서 고속 컨트롤러의 대역폭 할당(Mbps)으로 어떻게 변환됩니까?

USB 대역폭 할당은 어떤 다른 요인에 따라 달라지나요?

감사해요!

답변1

약간의 조사를 마친 후 이제 내 질문에 답할 수 있습니다. 고속 장치의 최대 등시성 패킷 크기는 1024바이트입니다. 각 마이크로프레임은 최대 3개의 패킷을 가질 수 있으며 마이크로프레임의 너비는 125마이크로초입니다. 이는 밀리초마다 8개의 마이크로프레임이 전송될 수 있음을 의미합니다.

이는 3*1024*8*1000 = 23.438MB/s의 최대 대역폭 할당을 제공합니다(편집: mbps를 의미하는 데 사용됨).

wMaxPacketSize 매개변수는 각 패킷의 최대 크기와 마이크로프레임당 패킷 수를 저장하는 비트맵을 포함하는 2바이트 값입니다.

따라서 대역폭 할당은 다음과 같습니다.

(패킷/마이크로프레임) * (max_packet_size) * (8 마이크로프레임/ms) * (1000ms/s)

또한 USB 2.0 사양에 따르면 총 대역폭의 80%만 등시성 전송 및 인터럽트 전송과 같은 주기적 전송에 할당될 수 있다는 점에 유의하는 것이 중요합니다.

관련 정보