기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.
항상 글을 읽기만 하다가, 문제가 발생하여 이렇게 질문 올립니다.
HID 모드로 동작하는 USB Device의 접속 속도를 변경할 수 있는 방법을 아시는 고수 분이 있는지요?
삼성 4210 kernel 2.6을 사용합니다.
EHCI driver에 버그가 있는지 HID device가 high-speed로 접속될경우, 접속 해제를 몇번 (3~20 여번) 반복하면, kernel이 죽거나, EHCI driver가 죽어 버립니다.
외장 허브를 사용하여, full-speed로 접속되면, 정상 동작합니다.
혹시 커널의 코드를 수정하여, 해당 device의 접속 속도를 강제로 full-speed로 바꾸는 방법을 아시는 분이 있으시면 알려 주시면 감사 하겠습니다.
물론 EHCI driver를 사용하지 않고, OHCI driver만 사용하면, full-speed로 접속되고, 잘 동작 합니다만, USB disk 같은것들도 지원해야 해서 EHCI driver를 사용하지 않기는 힘든 실정입니다.
예 4210입니다. 위에 적었듯이 kernel version은 2.6.35 입니다. 제가 테스트 해도 mass sotrage는 문제 없구요, 대부분의 HID Device(keyboard, mouse..)는 문제 없습니다. 그리고 대부분의 HID device는 full-speed로 접속 되는군요.
문제는 저희가 사용하는 HID Device(keyboard나 mouse가 아닌 특수 device입니다.) 가 high-speed로 접속되었을 때 생기는 문제며, device쪽 수정이 불가능 하기 때문에, host쪽에서 해결 해야 합니다. 저희가 사용하는 HID device만 full-speed로 고정하고(사실 low-speed로 접속되어도 될거 같긴 합니다.), 다른 mass storage등은 high-speed로 접속되어야 합니다.
예전에 USB쪽 개발할 때 기억을 더듬어서 설명을 좀 드리자면....
USB High Speed와 Full Speed는 장치 인식하는 과정이 동일하고 (D+ 라인을 가지고 장치 인식)
Speed Negociation은 Qualifier Descriptor로 하는 것으로 알고 있습니다.
Qualifier Descriptor을 제공하지 않으면 자동적으로 Full Speed로 붙고
제공하면 High Speed로 붙습니다.
따라서, Device쪽에서 Qualifier Descriptor을 제공하지 않도록 하는 방법이 가장 쉽고요.
Device쪽 수정이 불가능하다면 HOST EHCI 드라이버 단을 수정해야 할텐데....
그 작업은 만만치 않을 꺼라 예상됩니다.
방법은 EHCI 드라이버에서 사용하시려는 HID 장치의 VID와 PID를 검출해서
강제로 Full speed로 붙게 만드는 방법이 있습니다.
하지만, 과연 그 복잡한 USB Host 스택을 누가 감히 고칠 수 있을까요?
그리고, 수정한 드라이버가 다른 장치와는 무관하게 동작할꺼라 어떻게 검증할지도 문제입니다.
아무튼 만만치는 않은 작업이 될 것 같습니다.
꼼수를 하나 알려드리자면 HID 장치를 USB 1.1만 지원되는 USB Hub에 연결한 뒤에
그것을 USB Host 에 연결하면 Full Speed로 동작할 껍니다.
아무튼 도움이 되셨으면 좋겠습니다.
답변들만 보고 답변을 달았는데 원문을 이제야 읽어봤네요. ㅎㅎ
음... 제가 볼땐 EHCI 드라이버에서 강제로 Full Speed로 동작하도록 수정할 것이 아니라
커널이나 USB Host쪽 버그를 수정해야 할 듯 싶네요.
HOST쪽이 잘못되었는지 아니면 커널이 잘못되었는지 모르겠지만
HID 디바이스가 High Speed 동작한다고 해도 커널이나 드라이버 단이 죽으면 안됩니다.
USB Spec에 HID가 High Speed로도 붙어서 동작할 수 있기 때문에
당연히 그렇게 동작해야 합니다.
아마도 Host나 커널쪽에서 미처 그부분까지 고려하지 않고 코드를 작성한게 아닌가 싶습니다.
도움이 안되는 답변이지만 궁극적 해결 방법은 버그를 수정해야 되겠네요.
Exynos4210인가요? kernel version은요?
작년 project에서 mass storage를 가지고 여러가지 시험을 했었었는데, mass에서는 문제가 없었습니다.
HID는 시험항목에 따로 있었는지 담당자에게 물어봐야 알 수 있는데, 저속 bulk device관련해서 여러번 테스트 했던 것으로 기억은 납니다.
speed는 아마도 고정시킬 수 있기는 하겠지만, 그러면 usb mass에서는 문제가 안 터질지가 고민이네요.