로그인 | 회원가입
   이용안내    장바구니    주문조회    마이쇼핑    게시판
상품검색 검색 
아이디  
비밀번호
보안접속 보안접속
회원가입
  아이디찾기
  비밀번호찾기
상품목록
  ARM
  PIC
  AVR
  DSP
  MAXQ
  MSP430
  OTHER
게시판
공지사항
자유게시판
강좌-USB기타
자료실
샘플 기획전
전화: 031-429-0845
팩스: 031-477-1407
운영시간
  09:00 ~ 18:00
 
현재위치: > 게시판 > 강좌-USB기타
강좌-USB기타
USB및 기타자료입니다.


찾기
제목 USB 프로토콜과 PDIUSBD12 맛보기 0  추천하기
작성자 글쓴이 작성일 2014-10-29 16:22:33 조회수 636
   
   이 강좌를 읽는 행자들이라면 한번씩은 COM포트를 통한 시리얼 통신을 해 보았으리라.
어렵던가? (어려웠다면. 흠. -.-;;)

마이크로프로세서 쪽에서 본다면
데이터를 보내기 위해서는 레지스터에 값을 써주기만 하면 되고,
인터럽트가 뜨면 레지스터를 읽기만 하면 된다.
간단하게 말하자면 말이다.

이제 통신하고 있는 RS232 케이블을 니퍼로 똑 잘라서
데이터가 어떻게 왔다갔다하는지 함 들여다 보자.
(들여다 보일 리가 없다. 선을 잘라버렸으니 통신이 될 리가 있나?
그러니까 자르지는 말고 살짝 껍데기만 벗겨서 데이터라인을 스코프로 찍어보자.)

원래 우리가 넣었던 8bit 데이터가 차례로 지나가는 게 보일 것이다.
거기다가 통신에러를 검출하기 위한 Parity bit이 추가되었을 뿐이다.
(Start Bit, Stop Bit도 있지만 간단하게 생각하기 위해 생략.)

RS232 통신을 하기 위한 하드웨어를 보자.
기본적으로 병렬데이터를 직렬데이터로 바꾸고, 거기다 패리티 비트를 추가하는 로직이다.
졸라 쉽지 않은가?

RS232 통신규약(프로토콜)은 이처럼 간단한데,
왜 USB는 스펙이 책 한 권 분량이 될 만큼 복잡할까?

기본적으로 RS232는 1대1 통신이고,
USB는 1대 다(多) 통신이기 때문이다.

1대1통신에서야 신호를 보내는 쪽과 받는 쪽이 항상 정해져 있으므로,
이쪽에서 야! 하면 저쪽은 당연히 자기한테 하는 말이므로 왜? 해야 한다.

근데, 1대다 통신에서는 1, 즉 호스트가 야! 하면 누가 대답을 해야 할까?
고걸 정해 줄려고, 데이터 앞에다가 번호(주소)를 붙여준다.
호스트가 2번 야! 하면 2번 디바이스가 왜? 대답하고, 나머지들은 자기 번호가 아니므로 기냥 생까고 있으면 된다.

그게 다일까?
당연히 RS232처럼 통신 에러를 검출하기 위한 무언가도 들어가 있을 테고,
거기에다가
일단 우리가 쓰는 컴만 봐도 USB장치가 마우스, 키보드, 저장장치, 등등등 한두 개가 아니니
이 넘들이 다들 자기가 먼저 데이터를 보내려고 안달복달하고 있을 테니 교통정리도 해 주어야 한다.(그렇다. 데이터가 오갈 버스를 사용하려는 놈은 많은데 불행히도 통신선은 하나 뿐이다.)
그래서 이 USB라는 이름의 버스의 주인(호스트, Host)이
자. 이번에 1번(키보드) 니가 1mS 동안 통신선을 써라,
다음엔 4번(프린터) 니가 써라. 등등 교통정리도 해 주어야 한다.

그거 뿐인가?
디지털 데이터 통신을 하려면 어떤 신호(클럭)에 맞추어서
이거이 첫번째 비트, 고 다음거이 두번째 비트….(잘 보내래이~, 틀리면 마이 아파~.)
이딴식으로 통신해야 되는데,
USB에서는 그렇게 clock 신호를 위한 선을 추가하면 돈 마이 든다고 과감히 없애버렸다. -.-;
그래서 데이터 라인에다가 신호의 동기를 맞추기 위한 뭐시기도 섞어 보내야 한다..

그래서 앞전에서처럼 USB 케이블을 똑 잘라서 오가는 신호들을 들여다보면,
아 여기부터가 데이터가 시작되고, 그 다음이 데이터고, 여기는 패리티비트고 하는 것을
도통 알수가 없다. (알면 용타.)
그 신호를 들여다 보려면 USB Protocol Analyzer라는 장비를 써야
그래도 우리가 쫌 알아먹을 수 있는 형태로 분석해서 보여준다.

아~ 졸라 복잡하네.
이거 다 언제 공부하냐? 라고 생각하는 행자들은 지금 떠나라.
.
.
.
.
.
.
.
.
.
.
.
.
.

다 갔나? ㅋㅋㅋ
농담이닷. 사실 본좌가 말한 거 하나도 몰라도 된다.
이제 본좌가 소개하려고 하는 SIE(Serial Interface Engine)이 앞서 말한 여러 가지 복잡다난 것들을 다 알아서 처리해 주고,
우리에게는 데이터(원래 우리가 주고 받으려던 바로 그것)만 똑 떼내어서 던져주기 때문이다.


앞서 강좌에서 사용했던 Cypress의 FX2칩은 이 SIE와 8051이 하나의 칩 안에 들어있는 형태고,
이제 우리가 써보려고 하는 Philips의 D12칩은 딸랑 SIE만 있는 칩이다.

FX2강좌를 따라온 행자들은 알 것이다. 그 칩이 얼마나 사용하기 편한지를.
우리가 거의 아무것도 안 해도 알아서 USB 장치로 잡혀주고, 통신도 할 수 있다.
근데 왜 굳이 SIE만 있는 칩을 쓸까? 왜냐? 싸다.
FX2처럼 USB 기능이 통합되어 있는 칩은 쓰기 편한 대신에 좀 비싸고,
D12처럼 SIE만 구현되어 있는 칩은 구현하기는 좀 귀찮은 대신 싸다.

거기다가 기존에 마이크로프로세서나 DSP가 있는 보드에 그냥 PDIUSBD12를 하나 추가하고,
선만 연결해주면 USB로 통신을 할 수 있다. 기존 하드웨어 디자인을 많이 안 바꾸어도 되는 장점이 있다는 말이다.
물론 USB통신을 할 수 있는 펌웨어를 추가해 주어야 하지만 말이다.
(고게 이제 본좌가 이 강좌에서 알리고자 하는 일이다.)




일단 우리가 다뤄야 하는 하드웨어(D12)가 어떻게 생겨 먹었는지 보고 넘어가자.

일단 D12의 핀을 살펴보자.
우선 전원과 그라운드가 있어야 할 것이다.



있는 거 확인했으면 됐다. 그리로 전원 먹이면 된다.
설명이 끝난 건 복잡하니 지우자.




그 다음엔 D12의 기능 중 하나인 DMA(Direct Memory Access)에 필요한 핀들이 있다.
우리가 사용할 마이크로 컨트롤러(ATmega128)는 DMA기능을 지원하지 않을 뿐 아니라,
그 기능이 필요할 정도로 강력한 프로세서들은 요새는 이미 자체에 USB엔진을 가지고 있기 때문에 D12를 붙일 필요가 없다.
따라서 D12의 DMA기능을 사용할 일은 거의 없다고 보면 될 거 같다.



지우자.



XTAL1/2에는 6MHz 클럭을 먹이면 되고,
CLKOUT은 외부에 클럭이 필요한 것이 있다면 여기서 뽑아 쓰라고 나온 핀이다.
우린 안 쓴다. 지우자.



A0, ALE, CS_N핀은 데이터 버스를 외부 메모리(즉, 우리가 쓸 ATmega128의 외부메모리)와 데이터 버스를 공유할 때,
그리고 그 데이터 버스는 어드레스라인과 데이터버스를 겸하는 것일 때 사용하는 핀들이다.
일단, 우리는 외부메모리를 안 쓸 거니깐, (전용 데이터 버스를 쓸 것이기 때문에) 이 핀들은 필요없다.
(UniFull 보드는 저항만 한 두개 바꾸면 외부메모리와 버스를 공유하도록 세팅할 수는 있지만, 일단은 패쓰)
지워버리자.



GL_N핀은 USB로 데이터가 잘 오가고 있다는 것을 표시할 Good Link Indicator로 LED를 연결시키라고 마련해 놓은 핀이고,
RESET_N은 외부에서(그니깐 우리 경우에는 Atmega128이) D12칩을 리셋 시키기 위해 마련해 놓은 핀이다.
(D12는 내부에 Power On Reset회로를 가지고 있어서 이 핀에 리셋회로를 연결할 필요가 없다.)
SUSPEND핀은 이 핀을 이용해 D12를 절전대기 상태로 만들거나, 아니면, D12가 Suspend 상태에 있음을 알린다.
현재로선 설명의 범위를 벗어나므로 지우자.



자 뭐가 남았는가?




남은 핀들이 우리가 집중해서 봐야 할 핀들이다.

D+/D-라인을 통해 시그널이 들어오면 D12는 거기에서 자질구레한 프로토콜들을 제거하고 데이터만 쏙 뽑아내어 128로 넘긴다.

워떠케 넘기냐 하면,
데이터가 도착하면 Interrupt핀을 통해 신호를 주면,
128이 신호가 도착했음을 알아차리고,
Read신호를 주는데, 한번 신호를 줄 때마다 한 바이트씩 읽어 들일 수 있다.

반대로 128이 데이터를 보내려고 할 때에는 버스에 데이터를 실은 다음
Write신호를 주면 D12가 알아차리고,
이를 받아서 USB를 통해 전송하게 된다.

간단히 말하자면 그렇다는 거다. 후후.

INT, READ,WRITE 뒤에 다 _N이 붙은 걸로 봐서,
이 핀들이 Active Low라는 것 쯤은 이미 다 눈치 까셨을 텐데…
Active Low핀은 평상시에는 High 상태를 유지하고 있다가
이 넘이 Low로 떨어질 때가 뭔가 일이 일어났을 때라는 것조차
본좌가 설명할 필요가 없으리라. 과잉친절인가? ㅋㅋㅋ

PDIUSBD12 데이터쉬트 한번 훝어보기 바란다. 쫌 부실하지만…


오늘은 이만.
딴지 환영
댓글달기 회원에게만 댓글 작성 권한이 있습니다. 회원가입하여 정보공유를 하면 좋겠습니다.
첨부파일
답변
  스팸신고 스팸해제
글쓰기
 
이전글 Endpoint 0를 통해 디바이스에서 데이터 가져오기
다음글 직접 보드를 꾸밀 행자를 위하여
 
 
| 회사소개 | 이용약관 | 개인정보취급방침 | 이용안내
Copyright ⓒ 2010 KitKorea All rights reserved.
전화 : 031-429-0845 FAX : 031-477-1407
Contact open@kitkorea.com for more information.
법인명(상호):인터전자 주식회사 주소:14120 경기도 안양시 동안구 흥안대로 112-1 (호계동)
사업자 등록번호 안내 [138-81-28277] / 통신판매업 신고 제 안양 1753호 [사업자정보확인]
개인정보보호책임자 :홍성호(open@kitkorea.com) / 대표자(성명):홍성호
cafe24