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

안녕하세요 안드로이드의 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
번호 제목 글쓴이 날짜 조회 수sort
5608 6410 sleep mode 질문 드립니다. [1] 서비 2013-05-17 1670
5607 임베디드 리눅스를 보드에 타겟팅 했을 때 부팅이 되지 않는 이유는... [2] 혜민아빠 2012-03-07 1668
5606 이솝 2차 보드 나름대로 포팅 중 이해가 가지 않는 부분이 있습니... [7] 김영수 2008-01-30 1667
5605 텔레칩스 chip들에 관련 질문.... [3] 이성호 2009-07-24 1667
5604 현재 사용중인 하드웨어 추출 [2] dong880510 2014-04-07 1666
5603 잡담) 친절한 고현철님... 멍청한 나.... 지금 OTL중..... [1] 임장욱 2007-10-22 1665
5602 USB host와 gadget을 동시에 사용하는게 가능한가요? [2] 문철민 2012-05-17 1665
5601 WiFi EAP-FAST 관련 [1] 신현호 2014-04-02 1665
5600 안드로이드 터치 상하좌우 반전현상 [1] 나영찬 2011-08-03 1663
5599 고도리님 현재까지는 OpenCL은 동작은 ARM만 시킬 수 있습니다. ... [1] 김영준 2013-06-25 1663
5598 임베디드 리눅스 shutdown시에 필요한 전원 on상태의 유지시간? [2] 김민욱 2014-07-11 1663
5597 엑시노스 디코딩에 관련된 질문입니다. [3] seeman2 2012-02-19 1659
5596 gdb core dump 디버깅 질문 드립니다. [3] 석헌영 2009-09-30 1658
5595 Video와 network관련 문의드립니다. [4] 김경식 2013-06-27 1658
5594 비실시간 스케쥴링 관련 질문 드립니다. tezboy 2013-10-08 1658
5593 uboot 1.3.40을 쓰고 있는데요..파일시스템 40MB정도를 tftp를 통해... [3] 혜민아빠 2012-04-26 1656
5592 aesop-6410 board에서의 adb 사용 질문 [1] 김영문 2009-05-01 1656
5591 arm 보드에 APM 올리기 질문드립니다. [4] 은민아빠 2013-05-14 1656
5590 Odroid상에서 새로운 I2C device driver 등록하는방법 [1] 성빈아빠 2010-05-03 1654
5589 프로젝트 부품을 구하려하는데 조언부탁드립니다. [1] 시그인트 2014-02-27 1654

사용자 로그인