Bulk IN 실험
오늘 실험할 Bulk IN 트렌스퍼는 절차가 약간 복잡하다.
페러렐 포트를 통해 UniHigh 보드로 데이터를 전송해야 하기 때문에 그렇다.
아래의 절차를 빼먹지 말고 잘 따라가시라.

1. 페러렐 포트를 제어하기 위한 드라이버 설치

먼저 port95nt.exe를 다운받아 설치한 후, 컴퓨터를 재시작 한다.
http://electoy.cafe24.com/blog/?no=121&category=13의 아랫쪽
“Win98/2000에서 병렬포트 쉽게 사용하기” 에 다운받을 수 있는 다른 곳과 자세한 사용법이 나와 있다.
이 프로그램을 깔면 페러렐포트의 레지스터를 직접 제어할 수 있도록 해주는 드라이버가 깔린다.
이 드라이버는 DLPORTIO.lib라는 라이브러리를 통해 사용할 수 있는데,
본좌는 이 라이브러리를 이용해 Parallel.exe라는 어플리케이션을 만들었다.


2. Parallel.exe 어플리케이션 설치 및 데이터 전송 준비

Parallel이라는 어플리케이션은 본좌가 디자인한 프로토콜에 따라 페러렐포트를 통해 데이터를 전송하는 일을 한다.
전송할 데이터는 저번 강좌와 동일한 data.bin파일이다.
Parallel.exe를 실행시켜, “file” 버튼을 눌러 전송 할 데이터 파일(data.bin)을 선택한다.
그럼 “File Length”에 숫자가 나타날 것이다.
이 숫자를 잘 봐두자.


3. 회로 세팅

UniHigh보드를 아래 회로에 맞게 세팅한다.
(점선 부분은 그냥 데이터가 오가는 과정을 우리 눈으로 확인하려고 설치한 부분이므로 생략해도 상관 없다.)

* 우측 상단의 핀 설명은 Parallel Pin 1 (STROBE), 10 (ACK), 17 (SELECT)임.


4. 펌웨어 다운로드 및 데이터를 받을 준비

UniHigh1.6을 다운받아 C:CypressUSBExamplesFX2에 복사해 넣는다.
EZ-USB Control Panel을 실행시켜, 보드로 UniHigh1.6을 다운로드한다.

Get Pipe 버튼을 누른다.
“Pipe0 : Endpoint 6 IN” 파이프가 잡힐 것이다.
Length에 앞서 Parallel.exe의 “File Length” 에디트 박스에 나타난 숫자를 적어준다.
그리고, “Bulk/Int” 버튼을 누른다.
이제 EZ-USB Control Panel은 Endpoint 6 IN 파이프에서 데이터가 들어오기를 기다리는 상태가 되었다.



5. 페러렐 포트를 통해 데이터 전송

데이터를 보내는 것은
Parallel.exe의 “Transfer” 버튼을 누르면 된다.



6. 결과 확인

그럼 Paraller포트를 통해 데이터가 전송되고, 이에 따라 LED가 깜빡 거리면서
이 데이터가 다시 USB를 통해 호스트로 전송될 것이다.
전송된 결과는 EZ-USB Control Panel에 나타난다.




웹캠으로 찍었더니만 누락되는 프레임이 생겨서, LED의 깜빡임이 약간 부자연 스럽게 보인다.
원래는 "Bulk Endpoint로 데이터 날리기"에서 처럼 자연스럽게 깜빡인다.

여기까지의 절차를 주의 깊게 따라해라.
하나만 삐끗해도 뭔가 잘 안될 것이다.

본좌가 Q&A 게시판에 관련 파일들을 모두 올려 놓을 테니,
다운로드가 잘 안되는 행자들은 거기서 다운 받으시라.

Parallel.exe 소스 코드

펌웨어 소스코드에 대한 설명은 내일로 미룬다.

펌웨어 소스코드를 보려면
본좌가 만든 울트라 허접 프로토콜도 알아야 하기 땜시
부지런한 행자들을 위해 프로토콜을 설명하는 그림과
간락한 설명을 미리 포스팅한다.



데이터 전송절차 (번호는 윗 그림의 번호와 동일)
1. 호스트는 Select를 Low로 세팅하여, 데이터 전송이 시작될 것임을 디바이스에게 알린다.
디바이스는 Select가 Low가 되면 데이터를 받을 준비를 한다.
디바이스에게 준비할 시간을 주기 위해 100mS를 delay한 후 2.로 넘어간다.
2. 호스트는 Ack가 Low인지 체크한다.
3. Ack이 Low이면 디바이스가 데이터를 받아들일 준비가 되 있는 것이므로, 버스에 Data를 싣는다.
4. 호스트는 Strobe를 Low로 세팅한다.
5. Strobe가 Low가 되면 디바이스는 호스트가 데이터를 실었다는 것을 알아채고,
Ack를 High로 세팅한다.
6. 디바이스는 버스의 데이터를 FIFO로 넣은 후, Ack를 Low로 세팅한다.
7. 호스트는 3번 이후, Ack가 High가 될 때까지 기다린 다음
Ack가 High가 되면 Strobe를 High로 세팅 한 후,
전송할 데이터가 남았다면 2번부터 반복한다.
8. 데이터를 모두 전송했으면 호스트는 Select를 High로 세팅한다.


디바이스 입장에서 본 데이터 전송절차
1. Select를 Low가 되면 데이터를 전송할 준비를 한다.
(우리의 예제에서는 아무일도 하지 않는다.)
2. Strobe가 Low가 되면 데이터가 도착한 것이므로
3. Ack를 High로 세팅한다.
4. Data를 FIFO에 넣는다.(미리 설정된 길이대로 패킷을 날린다.)
5. Ack를 Low로 세팅한다.
6. Select를 High가 되면, FIFO의 나머지 데이터를 날린다.
by 바람처럼날다 | 2005/05/02 20:36 | FX2 펌웨어 강좌 | 트랙백 | 핑백(1) | 덧글(2)
트랙백 주소 : http://muosys.egloos.com/tb/120711
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Linked at 두번째 Bulk In &laq.. at 2008/04/01 01:33

... Bulk IN 실험</a>”을 참조하시라. 우선 아래와 같은 회로를 꾸미자.이전 강의(Bulk IN 실험)의 회로와 약간 다르니, 이전 강의의 회로도를 참조해서 실험하면서 왜 안되나요? 라고 물으면 대략 즐. 바로 전 실험을 하면서 이미 꾸며져 있는 회로에 Parallel Port와 인터페이스 할 배선만 추가하면 된다.전체사진 세부사진1(Parallel Port 쪽) 세부사진2(LED 쪽) 세부사진3(버튼 쪽) 펌웨어는 v2.5에 v1.6을 추 ... more

Commented by 바람처럼날다 at 2005/05/09 20:59
설명 중 빠진 것 하나.
Parallel Port의 모드는 ECP 모드로 되어 있어야 합니다.
컴퓨터 (리)부팅시 CMOS Setup으로 들어가서
(제 경우에는 Del키를 열라 누름)
Peripheral xxx 메뉴의 하위 메뉴에서 "Parallel"을 찾아 ECP (only)로 세팅하고, Save & Exit 하세요.
안 그럼 아마 예제가 실행이 안될껍니다. -.-;
오늘 제가 SPP모드에서 해 보았더니 안되더군요.
Commented by ILOVEWIND at 2008/06/12 16:52
WINDOWS XP에서는 안되네요

:         :

:

비공개 덧글

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