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

안녕하세요 안드로이드의 USB데이타 전송 중 계속 문제가 발생해서 고수분들의 도움을 요청드립니다.


안드로이드에 USB Host API 를 사용하여 USB의 연속적인 데이타를 읽어오는 중에

packet Buffer size가 16384B(16KB)로 제한되어있어

영상 싱크가 깨져서 데이타를 다 받아오지 못하는 현상이 발생합니다.

(한 프레임 당 약 300KB) 안드로이드에서 버퍼를 키워서(최대 64KB?) 해결하고자 합니다.

혹시 안드로이드의 커널 소스에서 어느 부분을 수정해야 문제를 해결 할 수 있을까요?

host api 소스 작성에서희 해결 가능한 tip이 있을까요?


많은 도움 부탁드립니다.





고등어

2012.11.13 04:16:09
*.115.216.70

보내고 받을때 frame을 여러조각으로 나눠서 보내세요.

패킽버퍼크기는 4kbytes정도면 충분할겁니다.


임형각

2012.11.13 17:08:49
*.219.240.126

빠른 답변 감사합니다.

pipe size와 동일하게 하면 되는 것 같아서 512 X 8 Byte : 4KByte로 조각내 보았지만.

그다지 효과적이지는 않더군요.

커널 수정을 통해서 USB data packet size를 늘리는 방법은 없을 런지요?

고등어

2012.11.14 03:31:15
*.115.216.70

필요한 대역폭이 맞나 확인해보세요.

안드로이드에 USB연결하면 FS에서 5~6Mbps, HS에서 60~80Mbps정도는 나옵니다.


임형각

2012.11.15 00:46:02
*.219.240.126

답변 정말 감사합니다.


대역폭은 HS가 나오는 것을 확인 하였습니다.

저희 디바이스가 cypress의 EZ USB에 CMOS(RGB)를 연결한 것으로 한 프레임이 300k가량 됩니다.

문제는 디바이스에 버퍼가 거의 없는 관계로 300K의 영상데이타를 영상취득과 동시에 Bulk전송을 하게 되는데

USB packet buffer data size가 최대 16KB이기 때문에 전송받은 데이타를 이동시키고 다시 Bulk로 데이타를 받게 되는데 이 중간 중간의 Delay가 불규칙적으로 발생해서 전송 받은 영상데이타의 싱크가 안맞게 되거나 300K를 다 받지 못하는 경우가 90%가량 발생합니다. 따라서 USB packet data buffer size를 키우면 (최대 64KB?)

이 현상이 많이 해결되지 않을까 하는 상황 입니다.


고등어

2012.11.15 03:30:44
*.115.216.70

안드로이드쪽 USB 호스트는 문제없을 겁니다.

USB 디바이스 EP의 더블버퍼를 사용해보세요.

임형각

2012.11.15 22:39:03
*.219.240.126

제가 저희가 사용하고 있는 다른 개발보드 업체에 문의해서 답변을 받았습니다^^


수정 부분은 아래와 같으나....

저희 방향이 다소 수정되어.  USB Host API를 사용하지 않고 libusb library 적요하고 NDK를 사용하는

하게 되었네요...


나중에 시간이 되는데로 테스트 해보고 결과를 올리도록 하겠습니다.


그동안 도움 주신 것 정말 감사합니다.



/ics/system/core/libusbhost/폴더에 있는 “usbhost.c”파일에서 사이즈를 수정해 보시길 바랍니다.



.............
// From drivers/usb/core/devio.c
// I don't know why this isn't in a kernel header
#define MAX_USBFS_BUFFER_SIZE 16384
..........
    // need to limit request size to avoid EINVAL
    if (length > MAX_USBFS_BUFFER_SIZE)
        length = MAX_USBFS_BUFFER_SIZE;
..........
    // need to limit request size to avoid EINVAL
    if (req->buffer_length > MAX_USBFS_BUFFER_SIZE)
        urb->buffer_length = MAX_USBFS_BUFFER_SIZE;

List of Articles
번호 제목 글쓴이 날짜 조회 수
5608 make_ext4fs를 통해 파일 시스템을 만들려고 하는데 error는 왜 나... file 혜민아빠 2012-11-27 1449
5607 어플에서 uboot 버전정보 보기? [4] lveritas 2012-11-27 1569
5606 삼성의 AP series 대리점에 대한 문의드립니다. [1] 어떤이의꿈 2012-11-26 1491
5605 이더넷 칩 선택 [3] 정창환 2012-11-23 1407
5604 터치동작관련 질문입니다~ [3] 박한수 2012-11-23 1241
5603 softfloat, hardfloat에 대해 궁금합니다. [1] 하나만파자 2012-11-23 1168
5602 linux wifi 관련 질문요.. ㅠ.ㅠ [2] 딴따라 2012-11-22 1377
5601 i.MX53 Start-Kit이용 Linux 개발환경 구성 문제 [3] 카보 2012-11-21 1719
5600 리눅스 디렉토리 자동이동구현에 대해 질문있습니다. file 원더풀 2012-11-20 957
5599 [ORIGEN-4412] 앱에서 /sdcard에 디렉토리, 파일 생성 시 이슈 건 [1] 램퍼 2012-11-17 1349
5598 ioremap에 관한 문제 - S5PV210 kernel-2.6.32 [2] 아침햇살 2012-11-16 1337
5597 리눅스 상에서 작은 파일시스템 만들고 있습니다. 저장 루틴 관련해... [3] 나론 2012-11-15 1313
5596 네트웍에 연결된 임베디드 장비들을 검색하는 방법에 관한 문의입니다... [2] mr 2012-11-14 1271
5595 [S3C6410] NAND ERASE 시 에러가 발생합니다. [1] 만년설화 2012-11-13 1401
» 안드로이드 USB Host API의 packet buffer size 관련 질문 입니... [6] 임형각 2012-11-13 1716
5593 6410 USB OTG DEVICE 질문 문철민 2012-11-12 931
5592 Fimc 출력질문드립니다 [2] 공돌이남 2012-11-10 1263
5591 다음 주소의 게시글에 달린 자료 부탁드립니다.. Byed 2012-11-10 712
5590 안드로이드 overlay 질문입니다. [1] 공돌이남 2012-11-10 1031
5589 BT656 도움 부탁드립니다. [1] 사악깨비 2012-11-09 1406

사용자 로그인