Bulk Endpoint로 데이터 날리기
오늘은 BULK OUT 트렌스퍼를 연습해 보자.

UniHigh1.5.zip

IN/OUT의 주체가 호스트란 것은 이미 설명 했으니,
이번 연습이 호스트가 데이터를 디바이스로 보내는 것이라는 것은 설명 안 해도 다들 잘 알고 계시리라.
라고 하면서 설명해 버렸다. -.-;

무엇부터 해야 될까?

빙고.
엔드포인트 디스크립터부터 추가해 주어야 하겠다.
그래서 본좌가 추가해 주었다.
Full/High Speed 똑같이 말이다.
이전 강의에서 Full Speed에서 Bulk Transfer의 Max Packet Size는 8, 16, 32, 64 byte중에 하나여야 하고,
High Speedd에서는 최대 512byte여야 한다고 언급한 적이 있다.
근데 본좌가 High Speed Endpoint Descriptor의 Max Packet Size도 64로 세팅해버린 데는 남다른 사연이 있다.
바로 본좌의 귀차니즘 때문이다. -.-;
디바이스가 High Speed로 동작할 때와 Full Speed로 동작할 때를 따로 코딩해야 한다고 생각하니
너무 너무 귀찮은 생각이 들어서,
기냥 High Speed건 Full Speed건 상관없이 본좌가 코드 짜기 편하게끔 두 디스크립터를 똑같이 해버렸다.

행자들은 부디 본좌보다 부지런하길 바라며,
Fx2.h에 선언된 EZUSB_HIGHSPEED() 매크로를 이용하면
내 장치가 구닥다리 컴퓨터에 붙여져서 Full Speed로 동작하는지,
아니면 최신형 신삥에 붙어서 High Speed로 동작하는 지 알 수 있다.

EZUSB_HIGHSPEED()를 사용하는 예는 Bulkloop.c의 ISR_Highspeed() 함수를 참조하시라.

추후에는 본좌가 암말 않터라도 위의 매크로를 이용해 Full/High Speed로 동작할 때,
달리 코딩해 주어야 하는 부분은 if 문으로 구분해서 코딩해 주시라.

사설이 길어졌는데….
어쨌든 Bulk Endpoint Descriptor를 추가 했으니
Desc.a51에 가서 휙~ 둘러보고 오시라.
디스크립터에 관한 설명은 이전에도 했고 해서 따로 안한다.

TD_Init()에 PortB를 output으로 설정하는 초기화 코드를 추가 했고,


SYNCDELAY;
EP2BCL = 0x80; // arm EP2OUT by writing byte count w/skip.
SYNCDELAY;
EP2BCL = 0x80;

도 추가했다.

EP2CFG = 0xA2;
요 초기화 코드는 위 코드의 앞에서 생략된 것으로 보심 되는데,
디폴트 값이기 때문이다.
T.R.M. 가서 휘딱 디비고 오시라.

EP2BCL에 아무 값이나 써 넣는 것은 OUT Endpoint Buffer를 쓰기 전에 꼭 우리가 해주어야 할 짓거리다.
http://muosys.egloos.com/81469를 참조하시라.

TD_Poll()의 마지막에 추가한 if문은 이전에 Bulkloop를 분석할 때
본 거를 쬐끔 변형한 것이므로 생각이 안 나면
http://muosys.egloos.com/75316를 다시 함 보시든지,
병원 가서 치매 치료를 받아보시라.

소스 설명은 끝이고…
아래의 회로를 꾸미시라.
Host에서 날라오는 데이터 대로 LED가 점등되도록 함 해보자.



어떻게 테스트를 하냐 하면
펌웨어를 다운로드 한 후에,
Get Pipe 하고, Pipe 1을 선택한 후에,
File Transfer버튼을 눌러 본좌가 제공한 파일을 지정해 주면 LED가 파일의 데이터 대로 깜빡거린다.
data.bin


이전에는 Hex … 리스트박스에 우리가 직접 데이터를 적어 넣어 주었지만,
길이가 긴 데이터는 매번 그렇게 하기가 번거로우므로
File Transfer 기능을 사용한 것이다.
이거나 그거나 데이터를 디바이스로 날린다는 거는 매한가지다.



본좌가 만든 bin파일은 Visual Studio같은 바이너리 파일이 편집 가능한 툴로 편집할 수 있다.

그렇게 데이터를 날리면 아래와 같이 호스트가 날린 테이터에 따라 LED가 깜빡인다.
LED가 너무 빨리 깜빡이면 우리 눈에는 안 보이므로
본좌가 TD_Poll()의 마지막 if문에서 delay를 준 것이다.


by 바람처럼날다 | 2005/04/27 21:19 | FX2 펌웨어 강좌 | 트랙백(1) | 핑백(3) | 덧글(9)
트랙백 주소 : http://muosys.egloos.com/tb/109906
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Tracked from at 2014/03/11 00:26

제목 : http://helenmccrory.org/
line5...more

Linked at Bulk Endpoint로 데.. at 2008/03/31 23:32

... http://muosys.egloos.com/109906</a> 오늘은 BULK OUT 트렌스퍼를 연습해 보자. UniHigh1.5.zip IN/OUT의 주체가 호스트란 것은 이미 설명 했으니, 이번 연습이 호스트가 데이터를 디바이스로 보내는 것이라는 것은 설명 안 해도 다들 잘 알고 계시리라.라고 하면서 설명해 버렸다. -.-; 무엇부터 해야 될까? 빙고.엔드포인트 디스크립터부터 추가해 주어야 하겠다.그래서 본좌가 추가해 주었다.Full/ ... more

Linked at Bulk In &laquo; .. at 2008/03/31 23:48

... Bulk Endpoint로 데이터 날리기</a>&#8220;에서 처럼 자연스럽게 깜빡인다. 여기까지의 절차를 주의 깊게 따라해라.하나만 삐끗해도 뭔가 잘 안될 것이다. 본좌가 Q&amp;A 게시판에 관련 파일들을 모두 올려 놓을 테니, 다운로드가 잘 안되는 행자들은 거기서 다운 받으시라. Parallel.exe 소스 코드 펌웨어 소스코드에 대한 설명은 내일로 미룬다. 펌웨어 소스코드를 보려면 본좌가 만든 울트라 허접 프로토콜도 알아야 하기 땜시 부지런 ... more

Linked at Bulk Out Pipe(PI.. at 2008/04/01 01:21

... Bulk Endpoint로 데이터 날리기를 ... more

Commented by 나선랑 at 2005/04/28 21:34
감동임다... 더이상 무슨 말이 필요하리오..

아 말을 더해야 겠네요.. 혹 책을 내실 생각은 엄스신지.. 제가 돌아다니며 홍보해드리지요.. ^^;; 그라고 이제까지 강의하신 내용 전부 Doc파일로 정리(토시하나 안틀리고)해 놓았으니 혹 필요하신 분들이나 날다님 필요하시면 붙여드리겠습니다. 택배로.. ㅡ.ㅡ;; (역시 내 유머는 3류라니까 쩝.)
Commented by Ori at 2005/05/06 09:12
펌웨어를 다운로드하고 Get Pipe를 눌러서 Endpoint 2를 out으로 설정한 후 data.bin을 File Transfer하면... 원하는대로 동작하지 않습니다.
바람님이 보여주신 동영상대로 회로를 꾸미면 data.bin의 파일 트랜스퍼가 이루어지지 않는다는데...
화면 상에는 UniHigh 1.4(버튼 입력을 받아보자)를 테스트 할때 붙여 놓았던 버튼 입력 회로가 빠져 있는데 문제가 있습니다.
아시다시피 UniHigh 시리즈는 처음 작성된 코드에서 계속 그 기능을 추가 하면서 실험을 진행하게 되어 있는데, UniHigh 1.4에서는 버튼 입력을 Active High 일때 입력으로 인정하게 됩니다. 문제는 버튼 입력 회로를 제거하게 되면 PA6 입력단이 "High"상태를 유지하기 때문에
Commented by Ori at 2005/05/06 09:12
if(PA6 == 1 && !bButtonMask)
{
bButtonMask = TRUE;
...
}

이 if문에 빠져 들어서 아무일도 못하게 되는 것이죠. 왜냐하면 "PA6 == 1"(논리 회로상에서 입력이 오픈되어 있으면 "High" 상태를 유지하는것과 같은 효과가 있습니다.) 이기 때문입니다.
파일 트랜스퍼를 제대로 실험 하려면 스위치 회로를 정상적으로 붙여 놓던가("Low" 상태 유지) 아니면 위의 if문을 막아 놓던가 해야 합니다.
Commented by Ori at 2005/05/06 09:13
이미 알고 계셨다구요??? 저만 혼자서 끙끙댄거 아닌지 모르겠습니다. 쩌비... 이거 해결하는데 3일 정도 걸렸습니다.
혹시라도 여기에 막혀서 진도 못나가시는 다른 사람이 있을까봐 몇 자 끄적였습니다.

이 강좌는 공부 할 수록 점점 더 그 재미에 빠져드는것 같습니다. 훌륭한 강좌에 대해서 진심으로 감사드립니다.
Commented by 바람처럼날다 at 2005/05/07 12:41
브라보! 결국 문제의 원인이 버튼이 빠진 회로도와 동영상이었군요.
Commented by 바람처럼날다 at 2005/05/07 12:58
훌륭한 디버깅 실력을 갖추셨군요. 앞으로 게시판 뒤지기 신공만 더 익히면 하산해도 될 듯. 저두 olo 잡구 반성 좀 해야겠군요.
Commented by 농땡이띠 at 2008/01/04 17:44
갈수록 태산이네요. 갈수록 못알아듣겠네요.
Commented by kkadin at 2011/09/04 10:32
Commented by 김재인 at 2013/02/14 17:00
bulk endpoint 의 뜻이 무엇입니까 ??

:         :

:

비공개 덧글

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