기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.

항상 글을 읽기만 하다가, 문제가 발생하여 이렇게 질문 올립니다.


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를 사용하지 않기는 힘든 실정입니다.


고도리

2012.06.18 05:28:18
*.127.19.87

Exynos4210인가요? kernel version은요?


작년 project에서 mass storage를 가지고 여러가지 시험을 했었었는데, mass에서는 문제가 없었습니다.


HID는 시험항목에 따로 있었는지 담당자에게 물어봐야 알 수 있는데, 저속 bulk device관련해서 여러번 테스트 했던 것으로 기억은 납니다.


speed는 아마도 고정시킬 수 있기는 하겠지만, 그러면 usb mass에서는 문제가 안 터질지가 고민이네요.

lyreisis

2012.06.18 18:14:40
*.149.184.145

예 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로 접속되어야 합니다.

신현호

2012.06.18 19:47:51
*.66.95.30

hid driver쪽에서 USB class 보고 HID이면 capability(descripter)를 full speed만 지원하도록 바꾸면 되지 않을까요?(꼼수긴 하지만)

lyreisis

2012.06.18 19:53:12
*.149.184.145

예, 그렇게 하면 될것 같은데.. 혹시 driver상에서 어느 부분인지 제가 보기 시작해야될 포인트라도 알려 주실 수 있는지요?


그리고 HID driver쪽은 이미 접속이 완료된 이후에 처리되는 부분 아닌가요?, 제가 USB쪽은 거의 아는것이 없어서요..

참고로 App쪽은 /dev/hidraw 인터페이를 사용하고 있습니다.

정장석

2012.06.20 01:49:27
*.94.171.142

예전에 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로 동작할 껍니다.

아무튼 도움이 되셨으면 좋겠습니다.

lyreisis

2012.06.20 02:13:30
*.149.184.145

답변 감사합니다.

첫글에 언급한바와 같이 full-speed hub를 통해 연결하면 정상 동작 합니다.

다만 그런식으로 H/W를 구성 하려면, high-speed용 hub IC와 full-speed용 hub IC 2 가지를 사용해야 되며, 해당 device는 항상 특정 포트에 연결 하도록 해야 되는군요..


그외 방법은  EHCI 드라이버를 수정하는 방법밖에 없네요..

여튼 답변 감사 합니다.

정장석

2012.06.20 05:03:55
*.94.171.142

답변들만 보고 답변을 달았는데 원문을 이제야 읽어봤네요. ㅎㅎ

음... 제가 볼땐 EHCI 드라이버에서 강제로 Full Speed로 동작하도록 수정할 것이 아니라

커널이나 USB Host쪽 버그를 수정해야 할 듯 싶네요.

HOST쪽이 잘못되었는지 아니면 커널이 잘못되었는지 모르겠지만

HID 디바이스가 High Speed 동작한다고 해도 커널이나 드라이버 단이 죽으면 안됩니다.

USB Spec에 HID가 High Speed로도 붙어서 동작할 수 있기 때문에

당연히 그렇게 동작해야 합니다.

아마도 Host나 커널쪽에서 미처 그부분까지 고려하지 않고 코드를 작성한게 아닌가 싶습니다.

도움이 안되는 답변이지만 궁극적 해결 방법은 버그를 수정해야 되겠네요.

lyreisis

2012.06.21 21:43:10
*.149.184.145

관심 가져 주셔서 감사합니다.

Kernel 자체의 버그라기 보다는 EHCI driver 버그라고 보여 집니다. OHCI Driver와 연결되면 잘 동작 하니까요. 제가 강제로 full speed로 접속되도록 하는 방법을 찾은 이유는, EHCI driver 코드를 보니 상당히 난해 하더군요...

그래서 버그를 수정하지는 못해도 피해 갈 수 는 있지 않을 까 해서입니다.

List of Articles
번호 제목 글쓴이 날짜 조회 수
5408 BMA150 이 3축 가속도 센서가 과세 품목인가요? [4] 땜철학자 2012-06-21 1717
5407 u-boot 환경설정에 관해서 질문드립니다. [1] 라창균 2012-06-20 925
5406 misc_register()와 register_chrdev()의 차이점 [2] 김경식 2012-06-20 1553
5405 Exynos 4210 GPS관련 [2] lyreisis 2012-06-18 1370
5404 3D 가속기 관련 [2] 박영호 2012-06-18 1291
5403 nand 4Gb+8Gb를 동시에 붙일수있나요? [5] 문철민 2012-06-17 1188
» USB Device속도 관련 [8] lyreisis 2012-06-16 1507
5401 android preview thread [1] 강유 2012-06-16 1071
5400 release build시 certificate 설정 [4] 동전귀신 2012-06-16 1239
5399 6410, CS5 사용방법 질문 비바1005 2012-06-16 1072
5398 FFmpeg arm cross compile 오류 관련 [1] 53% 2012-06-15 1145
5397 exynos 4210 가격 [7] 김장균 2012-06-14 1454
5396 s5pv310 시스템에서 u-boot에 data cache enable시 interrupt stat... [2] sonbong 2012-06-13 1382
5395 안드로이드 커널 포팅 및 스터디 [1] 조현호 2012-06-13 2358
5394 질문 하나만 더드립니다. serial 통신과 오류 [3] Supsupi 2012-06-13 1404
5393 jffs2파일을 데스탑 host에서 mount하는 방법 ^^초보님들 도움 되시길... [1] 혜민아빠 2012-06-12 1214
5392 MFC 인코딩시 fps문제 [4] jclab 2012-06-12 1444
5391 rc.local을 이용하여 부팅시 자동으로 프로그램이... [4] Supsupi 2012-06-12 1957
5390 제가 만들고 있는 파일 시스템에서 root계정을 생성는 어디서 해야... [1] 혜민아빠 2012-06-12 1174
5389 jffs2파일 시스템을 만들어 부팅을 하면 나는 에러에 대해서 문의가... 혜민아빠 2012-06-12 2288

사용자 로그인