USB Full Speed 데이터 전송속도
Ethernet to USB 보드 제작할때 일이다. FTP에서 데이터를 보내서 USB보드에 저장하는 장치 인데 FTP에서 속도 측정 결과 최대속도 340KByte/s 가 나왔다.
의뢰한 클라이언트의 말
"12M USB가 이것밖에 안돼?"
황당하다~
USB는 여러개의 트랜젝션(Setup, Data IN, Data OUT. Status IN, Status Out)으로 전송된다. 하나의 트랜젝션은 여러개의 패킷으로 나누어지는데 엔드포인터의 최대 전송 수에 관계된다.
벌크 전송의 예로 100바이트의 데이터를 전송하는 트랜젝션은 64 + 36 두개의 트랜젝션으로 나누어진다.
[OUT 트랜젝션 1]
1)C -> D : OUT Token Packet
2)C -> D : 64byte Data Packet
3)D -> C : HandShaking Packet
[OUT 트랜젝션 2]
1)C -> D : OUT Token Packet
2)C -> D : 36byte Data Packet
3)D -> C : HandShaking Packet
USB 보드를 제작하고 클라이언트 들에게 자주 듣는 예기로 "USB는 12Mbps 인데 왜이리 느린거야?"는 말이다.
단순히 USB 스펙의 12Mbps만을 생각하기 때문이다.
12Mbit/s -> 1.5Mbyte/s이고
1.5MB/3(tranjaction) -> 500Kbyte 가 최대 전송속도가 된다.
하지만 실제 소형 마이컴에서 이 속도 내기는 무리다. 대부분 USB컨트롤러를 이용하므로 컨트롤러 제어하고 인터럽트 처리 데이터 카피등으로 인해 느려지고 데이터 받아서 뭔가 처려하려고 들면 훨씬더 느려진다. 그리고 Bulk전송만 한다면 모르지만 트랜젝션 전환이 많으면 많을수록 훨씬 더 느려진다.
요즘은 MCU + USB포함된 MCU가 많이 출시되므로 좀 달라졌겠지만 400KByte/s 이상 나오는것 잘 못본것 같다.
반응형