두번째 Bulk In
오늘은 Bulk IN transfer를 실험해 보자.

이전 강의 “Bulk IN 실험”을 참조하시라.

우선 아래와 같은 회로를 꾸미자.
이전 강의(Bulk IN 실험)의 회로와 약간 다르니,
이전 강의의 회로도를 참조해서 실험하면서
왜 안되나요? 라고 물으면 대략 즐.


바로 전 실험을 하면서 이미 꾸며져 있는 회로에
Parallel Port와 인터페이스 할 배선만 추가하면 된다.

전체사진


세부사진1(Parallel Port 쪽)


세부사진2(LED 쪽)


세부사진3(버튼 쪽)


펌웨어는 v2.5에 v1.6을 추가하는 형식으로 수정하였다.
Unihigh Firmware v2.6

어플리케이션 소스
Unihigh App v2.6
실행파일


새로 추가된 (맴버) 함수는 다음과 같다.

OnButtonBulkIn()
BulkInThread(…)
ReadDataArrived( … )
UpdateListBoxScroll(…)


리소스에 새로 추가된 에디트 박스에 읽을 바이트 수를 써 넣고서,
“Read” 버튼을 누르면 OnButtonBulkIn() 함수가 호출된다.

OnButtonBulkIn() 함수는
데이터를 기다리는 동안 메인 쓰레드를 홀딩시키지 않기 위해
BulkInThread(…)를 생성 한 후 리턴된다.

BulkInThread(…)에서는
ReadFile(…)을 이용해서 디바이스로부터 데이터를 읽어오는데,
여기서 이전 쓰레드(GetMsgThread)와 다른 점이 있다면
WaitForSingleObject( stOverlapped.hEvent, dwWaitTime );
이전에는 두번째 인자에 INFINITE를 주었었는데,
이번에는 dwWaitTime로 유한한 시간(1분)을 준다.
즉 “Read” 명령을 주고 나서 1분내에 그 ReadFile이 리턴되지 않으면
에러 메시지를 출력하도록 되어 있다.

성공적으로든 아니면 에러가 나든
BulkInThread(…)를 마치면
ReadDataArrived(…)가 호출되는데,
여기서 받아온 데이터를 ListBox에 출력한다.
그리고 데이터를 위한 버퍼를 해제한다.


UpdateListBoxScroll(…)은 리스트 박스의 스크롤을 갱신하기 위한 함수로서
USB 강좌에서 설명할 성질의 것은 아니므로 패쓰.



자. 이제 테스트를 해보자.
이전 강의(Bulk IN 실험)에 썼던 Parallel.exe를 다시 줏어오자.

펌웨어를 UniHigh 보드에 다운로드 시키고,

다음은 Parallel.exe를 실행시켜 놓고 나서,
(물론 컴터에 패러렐 포트는 꽂혀 있어야 한다.)
다운로드 할 데이터 파일(data.bin)을 지정해 준다.

그리고 나서,
Unihigh App v2.6를 실행시키고
“Read Byte” 에디트 박스에
Parallel.exe에 나타난 데이터의 크기(377, 즉, 우리가 읽어올 데이터의 크기)를 입력한다.
그리고, “Read” 버튼을 누른다.

이제 기다리면 되느냐?
아니다.
Parallel.exe의 “Transfer” 버튼을 눌러줘야
패러렐 포트를 통해 UniHigh 보드로 데이터가 날아가고,
UniHigh 보드는 받은 데이터를 Bulk In USB 파이프를 통해 호스트로 전송한다.

by 바람처럼날다 | 2005/06/02 23:54 | FX2 펌웨어 강좌 | 트랙백 | 핑백(1) | 덧글(1)
트랙백 주소 : http://muosys.egloos.com/tb/203067
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Linked at 두번째 Bulk In &laq.. at 2008/04/01 01:33

... http://muosys.egloos.com/203067 ... more

Commented by 바람처럼날다 at 2005/06/03 00:02
이거이 어찌된 일이고?
본좌 디버깅을 하다가 컴터를 리붓 시키고, USB 포트도 새로 꼽았다.
근데. 허걱!! 장치관리자에 UniHigh 보드가 떠 있는 것이다.
펌웨어를 다운로딩 안 함은 물론, EEPROM도 안 꼽혀있는데 말이
다.
귀신이 곡할 노릇이었당. 본좌 순간 쫄았다.

나중에 곰곰히 생각해 보니
계속연결되어 있던 패러렐 포트로 약한 전력이 계속 공급되어
리붓시켜도 FX2의 메모리가 완전히 지워지지 않았던 것 같다.

실험해 보니 역시나...
디버깅시 뭐가 안되서 컴터 리붓할 때
패러렐 포트도 뺏다가 리붓후에 다시 꼽아주자.

:         :

:

비공개 덧글

< 이전페이지 다음페이지 >