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

안녕하세요.
항상 이솝사이트를 통해서 정보를 얻고있는 엔지니어입니다.
OS를 사용하지 않고 FW만으로 USB slave driver를 구현하기 위해 혼자서 고민하다가 진전이 없어 게시판에 글을 올립니다.
고수님들의 조언을 부탁합니다.

제가 개발환경과 현재 상태는 아래와 같습니다.
1. 보드 : SMDK2413(S3C2413)
2. FW : S3C2413mon.bin의 소스를 이용하여 USB Driver구현 (컴파일러:RVDS)
3. GUI : DNW V0.51A 소스를 이용하여 GUI 구현 (컴파일러:VS2003)
 
현재 PC와 SMDK2413 보드를 USB로 연결하면 잘 인식하고 있습니다.
-. EP0 : 컨트롤
-. EP1 : In Pipe (Host에서)
-. EP3 : Out Pipe (Host에서)

DNW소스와 같이 File Download 기능은 EP3를 통해서 구현하였고,
Read 기능은 EP1를 이용하여 임의의 데이터를 S3C2413에서 GUI로 올리도록 구현하였습니다.

저는 이런 기능을 이용하여 EP3를 통한 File download packet의 첫번째 word(32bit)를 CMD로 사용하여
S3C2413에서 이부분을 해석하여 Host에 전송할 데이터를 EP1 Fifo에 준비토록 구현하였습니다.

호스트 GUI의 CMD 버튼을 클릭하면 EP3를 통해 여러종류의 CMD를 한번 내리고, 다시 GUI에서 Read 버튼을 클릭하면 내려온 CMD에 대해서 S3C2413이 준비한 데이터를 올려줍니다.
하지만 저는 버튼을 클릭하지 않고 일정한 주기(예:1초간격)마다 이와 같은 동작을 규칙적으로 반복하는 기능을 구현하고자 합니다. 
그리고 여기에 문제가 있습니다.

GUI에서 Window Timer를 이용하여 1초간격으로 CMD를 S3C2413로 전송하면 S3C2413에서 CMD를 수신하고 해석합니다.
그리고 데이터를 FIFO에 준비합니다. (debugger를 통해 확인)
Window timer를 다시 이용하여 10msec 후에 Read CMD를 전송하였습니다.
하지만 ReadFile함수를 통해서 가져온 데이터는 0byte입니다. 

왜 read버튼을 클릭하면 데이터가 정상적으로 올라오는데, 주기적으로 Write CMD를 보내고 Read CMD 보내기를 반복시키면 Data가 올라오지 않는 걸까요? 무엇이 문제인지 방향을 잡지 못하고 있어 고수님들의 조언을 구하고자 글을 올립니다.
그리고 이와 같은 방법외에 다른 방법은 무엇이 있을까요?

답변 부탁드립니다.
즐거운 주말 되세요... ^^

문제해결했습니다. 감사합니다.

송의석

2009.02.07 07:09:50
*.140.1.97

제가 제대로 이해 한 것인지는 모르겠으나 Windows Program에 문제로 생각됩니다. write CMD를 보내고 read CMD를 보내는데 얼마의 시간 간격이 있나요.   write CMD를 하고 바로 read CMD를 하는 것이 아닌가 생각됩니다. 그러면 보드에서는 데어터를 보낼 준비를하는 동안에 이미 host에서는 read를 하려고 하니까 아무 데이터가 없는 것이 아닌가요? windows program에서 기다렸다가 데이터를 받거나  callback function 또는 read와 관련된 thread를 구현하여 분리하여야 할 것 같습니다. 버튼을 이용하면 정상동작된다고 하셨습니다. 사람이 버튼을 클릭하는 것이 사람입장에서는 정말 빠르다고 생각할 수 있으나 CPU입장에서는 엄청나게 긴시간입니다.

정민우

2009.02.12 03:13:33
*.199.146.129

그리고 한가지 문제가 더 있었습니다.
read cmd 실행 시간 interval이 너무 짧아서 문제가 되었습니다.

정민우

2009.02.09 20:34:24
*.199.146.129

먼저 답변 감사드립니다.
Window에서 Write CMD를 보내고 Read CMD를 보내는 interval은 10msec으로 설정하였습니다.
10msec간격이면 충분한 시간으로 생각되어 이렇게 설정하였습니다.
그리고 문제는 하드웨어적인 문제였습니다.

감사합니다. 오늘도 즐거운 하루되세요.

정민우

2009.02.12 03:17:03
*.199.146.129

최종질문
제가 위와 같이 Write CMD로 S3C2413에서 data를 준비하도록 하고, Read CMD를 이용하여 data를 읽어오게 한 이유는
S3C2413의 IN EP Register의 크기가 64byte였기 때문에 위와 같이 구현했습니다.

64byte이상의 데이터(1KB or 2KB etc...)를 S3C2413에서 읽어올 수 있을까요?
만약 있다면 S3C241x의 USB slave device를 어떻게 구현해야 할까요?
도움 부탁드립니다.

오늘도 행복하세요 ^^
List of Articles
번호 제목 글쓴이 날짜 조회 수sort

(수정) 안드로이드 USB Device에 외부 장치를 연결, 외부장치를 어... [3]

[해결] usb device attach 후 dhcpcd 동작을 위한 방법 문의 [3]

  • woox
  • 2012-10-31
  • 조회 수 1653

suspend와 early suspend의 차이점?? [2]

안드로이드 부팅시 커널 패닉 두번째 현상

[C110] 마이크 입력관련문의.. [2]

[완료] 삼성 NAND Flash 제어 질문입니다. ^^ [4]

Exynos5250 LPDDR3 속도 [3]

i2c 에 관한 질문입니다. [2]

  • NNEUL
  • 2012-07-26
  • 조회 수 1650

mjpg-streamer를 사용해 보신분 계신가요?? [1]

U-Boot 또는 Linux Code에서 RTL8196B Processor 관련 레퍼런... [6]

init: cannot open '/initlogo.rle' 후 멈춤

  • 리상
  • 2010-12-01
  • 조회 수 1647

ffmpeg 에 c언어 문법좀 갈쳐주세요.. [2]

구글 마켓 및 위치기반 서비스 문의 [1]

u-boot 커널 부팅 실패의 원인이 알고싶습니다. [3]

windows용 adb usb driver를 구하는 법? [3]

6410보드 에서 cam 영상 저장하는 소스 컴파일 에러 관련 문의 [3]

  • 53%
  • 2012-06-05
  • 조회 수 1644

arndale 보드에서 DVFS를 끄고 무조건 최고 클럭으로 돌리고 싶습... [3]

[RE] S3C241X(S3C2440)의 usb 드라이버 구현 관련 [4]

안드로이드 부팅시 커널 패닉 나는 문제 [2]

Origen보드용 새 SD카드 사용하기 문의 [2]

  • 다콩
  • 2012-03-09
  • 조회 수 1642

사용자 로그인