내가 아는 한, 등시성 전송을 사용하는 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%만 등시성 전송 및 인터럽트 전송과 같은 주기적 전송에 할당될 수 있다는 점에 유의하는 것이 중요합니다.