Control Endpoint의 DATA stage 활용 - OUT편
먼저 UniHigh Module의 VCC, GND마킹이 반대로 인쇄되었다는 비보를
행자들에게 알려야 하겠다.


회로도의 핀 OUT 그림이 옳고,
UniHigh PCB 중간부분 양쪽 가장자리에 인쇄된 VCC, GND는 반대로 인쇄되어 있으니,
추후 혼란을 방지하기 위해
행자들은 인쇄된 글자를 칼로 살살 긁어 지워 버리자.
(그리고 빨강 메직펜과 까망 메직펜이 있으면 회로도를 보면서 VCC/GND 옆에 각각의 색으로 점을 찍어두면 더 훌륭하리라.)



LED 가 켜지고 꺼지는 비트 설정이 반대네?
본좌. 의아해 하면서 기냥 넘어 갔드렜는데, 역쉬나. 뭔가 잘못 되어가고 있던 거시어따.

결과적으로 이틀 전에 보여준 LED 회로도도 반대로 되어야 한다.
본좌 구라대왕이 되어 버렸다.
미얀타.





흠.
오늘도 어제 그제에 이어 Default Control Endpoint를 통해 통신하는 법이다.
Endpoint 0를 통해 8바이트 이상의 데이터를 전송 해야 할 필요가 있을 때는 어이할까?
두 번에 나눠 보내면 된다.
물론 뻥~이다. ㅋㅋㅋ

8 바이트 이상의 데이터를 전송할 필요가 있을 때에는
SETUP stage다음에 DATA stage를 딸려 보내면 된다.

EZ-USB Control Panel에서는 “Dir” 항목을 0 OUT으로 놓고
그 옆의 에디트 박스에 자신이 원하는 16진수 데이터를 써 넣으면
어플리케이션과 드라이버가 알아서
SETUP stage의 Length필드에 데이터의 길이를 써 넣고,
DATA stage에 실 데이터를 채워서 디바이스로 보낸다.

만일 우리가 Cypress에서 제공하는 EZ-USB Control Panel 어플리케이션과 ezusb.sys 드라이버 대신에
우리가 만든 어플리케이션과 드라이버를 쓴다면,
어플리케이션 개발자와 드라이버 개발자가 서로 인터페이스를 상의하여
동일한 동작이 일어날 수 있도록 코딩을 해 주어야 한다.


T.R.M.의 P.1-23에 나온 것 처럼
EP 0의 버퍼 사이즈는 64byte 이므로 64바이트만 보낼 수 있느냐 하면
OUT transfer에서는 그렇다. 가 정답이고
IN transfer에서는 64바이트 짜리 DATA stage를 연달아 이어 보낼 수도 있으므로
아니다. 가 정답이다.

이 엔드포인트를 통해 우리가 주고자 하는 데이터를 호스트로 보낼 수도 있으므로,
Default Control Endpoint만 제대로 다루어도 오가는 데이터량이 많지 않은 웬만한 제어는 다 될 거 같은 예감이 들지 않는가?

오늘은 DATA stage를 이용해서 데이터를 보내는 펌웨어를 맹글어 보자.

DATA stage에 아래와 같은 데이터를 보내면
00 50 00 50 01 00 01 00 02 00 02 00 03 00 03 00 04 00 04 00


(잘 안보이면 그림을 클릭해서 크게 보시라.)

이를 4바이트씩 끊어서
첫번째 워드(2바이트)는 LED가 켜지는 시간(ms)
두번째 워드(2바이트)는 LED가 꺼지는 시간(ms).
(반복)…
요렇게 동작하도록 코딩을 해 보자.

본좌의 소스에는 예외처리를 넣지 않았으므로
행자들이 데이터를 잘못 입력한 경우에 어떤 일이 일어날지는 책임 못진다.
최악의 경우 지구가 멸망할 것이다.
조심하시라.

DATA stage를 사용하는 EP 0의 OUT transfer에서는
EP0BCL에 아무 숫자나 써주어야
우리는 비로소 EP0BUF[]의 데이터를 활용할 수 있게 되며,
FX2는 호스트에 데이터를 잘 받았다고 ACK를 날릴 수 있게 된다.


설명하나 마나 감으로 딱 알 수 있듯이
EP0BUF[]는 DATA Stage의 데이터가 들어와 앉는 자리이다.

UniHigh1.2.zip
by 바람처럼날다 | 2005/04/21 23:55 | FX2 펌웨어 강좌 | 트랙백 | 핑백(3) | 덧글(11)
트랙백 주소 : http://muosys.egloos.com/tb/96567
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Linked at UniHigh v1.0 &la.. at 2008/03/31 19:04

... http://muosys.egloos.com/96567</a>에 잘못된 PCB 마킹에 대한 사항이 있으니 꼭 참고하시라. 꼭~.( * 역시 UniHigh v1.0에만 해당 됨) 오늘은 디바이스가 준비되었다고 가정하고, 강좌를 진행 하겠다.그림이 작아서 글씨가 잘 안보이는 것들은 그림을 클릭하여서 조금 크게 보자.우리가 만든 UniHigh 모듈을 USB포트에 연결시키면, 장치관리자에 다음과 같이 인식이 된다. 장치관리자는 시작-&gt; 설정 ... more

Linked at Control Endpoint.. at 2008/03/31 19:24

... http://muosys.egloos.com/96567</a> 먼저 UniHigh Module의 VCC, GND마킹이 반대로 인쇄되었다는 비보를 행자들에게 알려야 하겠다. 회로도의 핀 OUT 그림이 옳고, UniHigh PCB 중간부분 양쪽 가장자리에 인쇄된 VCC, GND는 반대로 인쇄되어 있으니, 추후 혼란을 방지하기 위해 행자들은 인쇄된 글자를 칼로 살살 긁어 지워 버리자.(그리고 빨강 메직펜과 까망 메직펜이 있으면 회로도를 보면서 ... more

Linked at UniHigh v2.1 &am.. at 2008/04/01 01:01

... Control Endpoint의 DATA stage 활용 - OUT편 ... more

Commented by 초짜가이. at 2005/04/22 11:01
HELP!. HELP!. HELP!.
이제 보드를 완성하여 USB 케이블에 꼽았습니다.
led는 들어오고 장치 관리자에
Cypress EZ-USB FX2 (68613) - EEPROM missing
이라고 까지 나옵니다.
즉 HW가 제대로 땜이 되어 Enumeration 되었단 것이죠?
제가 HW는 이상없이 땜 하였다고 단정, 안정, 인정 할 수 있는거죠?

그런데 그 다음단계인 bulkloop.hex 파일을 다운로드 해도
장치관리자에 계속
Cypress EZ-USB FX2 (68613) - EEPROM missing
라고 되어있습니다.
-..-
GetPipes를 꼭꼭 눌러서 읽어보면
" Get PipeInfo
Interface Size 16 "
이라고 밖에는 안나오고
"Bulkloop 테스트" 강의부분의
5번째 그림에 나와있는
Pipe : 0 Type: BLK Endpoint : 2 OUT MaxPktSize : 0x200
...
이런게 나오지 않습니다.

혹 EEPROM을 안꼽아서 그런가 해서 EEPROM을 꼽아서 해도 마찬가지이고요.
혹시 대교주님께서 이전에 강의하신 부분에 소스를 고쳐서 컴파일한 부분이 있나...보았는데 그런것 같지도 않고요.
첨에 Enumeration이 되었으니까 usb 케이블이 혹시 삐꾸인가...
이거 의심 안해도 되는거 아닌가용?

Commented by 초짜가이. at 2005/04/22 17:12
RE:HELP!.
-..-
제가 Bulkloop 소스를 컴파일 하고 다운받으니까...
잘 동작합니다. -..-
그냥 깔기만 한 툴에 있는 hex파일이랑 컴파일 한번 한거랑
좀 다른가 봅니다.
대주교님께 살짝 건의드려봅니다.
저와 같은 초짜들을 위해...
엄숙한 강의 방에 낙서하지 않도록 질문방 같은거 하나 만들어보실 생각은 없으신지...
Commented by Single at 2005/04/22 18:55
안녕하세요.
강좌 정말 잘보고 있고 많은 도움이 되고 있습니다.
이 보드에 GPIF를 이용해서 NAND-Flash 억세스가 가능할까요?
T.R.M을 읽어봤는데 영 아리까리 하네요..
광명의 빛을 주소서 교주여.... !!!!
Commented by 궁금이 at 2005/04/23 14:16
안녕하세요?
강의 잘 보고 있습니다.
근데 궁금 한게 한두가지 있습니다.
저는 이동식 디스크를 만들고 싶은데 벌크 온리 매스스토리지를 만들려고 합니다. 그런데 벌크온리로 통신 하려고 해도 처음에 셋업을 위해서 콘트롤 트랜스퍼를 하는데 셋업이 끝나고 나면 그다음 부터는 벌크 온리로만 통신을 하면 되나요 아니면 계속 콘트롤 트랜스퍼하고 벌크 트랜스퍼하고 섞어서 통신을 하나요.
그리고 궁금 한거 하나더는 예를 들면 이동식 장치로 쓰다가 usb audio 를 쓸려고 하면 인터페이스를 두가지로 설정 해줘야 된다고 하셨는데 이부분에 관련된 자료나 개념적으로 어드바이스좀 해주시면 고맙겠습니다.
바쁜 시간 내서 강의 해줘서 감사 합니다.그럼 수고 하세요.
Commented by 바람처럼날다 at 2005/04/23 14:47
호스트에서 어디에 있는데이터를 얼마만큼 줘. 하고 신호를 보낼려면 데이터 파이프가 아닌 컨트롤 파이프도 있어야 하겠죠.
나머지 질문은 강의내용 이상으로 더 자세히 설명드리기엔 제 시간이 부족하군요.
Commented by 바람처럼날다 at 2005/04/23 14:52
NAND-Flash는 100/128핀 FX2로 가능할 껍니다.
(제가 하드웨어쟁이가 아니라서 해보지는 안했음다만)
UniHigh는 56핀이라서 Addresss핀이 없어서 불가.
Commented by ccamang at 2005/04/23 23:44
저기 동작을 하다보니 cy7c68013 칩에서 열이 많이 나요..
이거 그냥사용해도 이상이 없을 까요
Commented by 바람처럼날다 at 2005/04/24 09:50
원래 손가락을 대보면 뜨겁게 느껴질 정도의 열이 납니다.
칩의 회로상에 480MHz로 동작하는 부분이 있어서 그런다네요.
56핀짜리는 칩 면적이 적어서 그런지 큰 넘들보다는 더 뜨겁게 느껴지더라구요.
Commented by 바람처럼날다 at 2005/04/24 10:07
to 궁금이
똑같은 하드웨어 두개를 가지고 하나는 이동식장치를 만들고, 하나는 오디오를 만듭니다.
두 장치의 코드를 하나의 전역변수 값에 따라 선택적으로 동작하게끔 합칩니다.
인터페이스 디스크립터를 두개 둬서,
호스트에서 Set Interface 요청이 올 때
해당 요청에 맞게 전역변수의 값을 바꿔주어,
다른 기능으로 동작하게 만들면 되지 않을까요?
Commented by 바람처럼날다 at 2005/04/24 10:10
to Single
플래쉬 메모리는 원래 입출력속도가 그리 빠르지 않은걸로 알고 있는데, 맞나요?
그렇다면 굳이 GPIF 이용할 필요 없이
FX의 I/O핀을 Address, Data, Control라인으로 활용해서
플래쉬를 읽고 쓰기 할 수 있지 않을 까요?
Commented by 궁금이 at 2005/04/24 14:03
바람님 답변 감사 합니다.
제가 요즘 이동식 디스크를 구현 할려고 USB 스펙을 보고 있는데 스펙을 보면 이해가 가나 구현 할려면 좀 막막 합니다. 이유는 USb 스펙은 단편적으로 되어 있고 연속적이지가 않아서입니다.
처음 막히는 부분은 EP0를 통해서 enumelation작업을 수행학 EP0를 통해서 명령을 수신 하는것 까지는 대충 이햐가 되지만 SCSI Command를 수신하는것은 EP0로 하고 데이타 송수신은 EP0이 아닌 다른 endpoint를 사용하는게 맞는거 같은데 아직 확신이 없어서요...USb스펙을 연속적으로 이해를 하는게 어렵습니다.
아직은 잘몰라서 두서없는 질문에 죄송 합니다.
감사 합니다.

:         :

:

비공개 덧글

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