티스토리 뷰

Hardware

회로분석 그리고 Auto Enumeration

알 수 없는 사용자 2008. 3. 17. 13:25

출처 : http://muosys.egloos.com/50006

 

오늘은 어제 소개한 회로를 하나씩 뜯어보고 나서 이 보드를 USB 포트에 끼우면 어떤 일이 벌어지는지를 설명하도록 하겠다.

펌웨어 짬밥 좀 잡쉈다면야 본좌 오늘 강의의 초반전이 우스울 것이다.
그런 행자들은 픽 웃어주고 바로 후반전에 돌입하도록 한다. 실시.
본좌. 이렇게 자세한 설명을 하는 이유는
본좌가 개울가에 올챙이적에 꼬물꼬물 헤엄치던 때를 아직 잊지 않고 있기 때문이다.


자 강의에 빠져~봅시다~.

우선 전원부.

Array

아는 분들은 알고, 모르는 것들은 모르겠지만,
USB는 포트를 통해 5v 전원을 공급한다.
그런데 우리가 쓰려고 하는 FX2칩은 3.3v를 필요로 한다.
따라서 이 회로를 가지고 5v를 3.3v로 변환해야 하는 것이다.
이 LT1763CS8-3.3은 Linear에서 나온 LDO(Low Dropout Voltage Regulator)가 되겠다.
왜 이 비싼 칩을 썼느냐? 무려 1달러를 호가한다.
별 이유 없다. 그냥 CYPRESS의 데모보드 따라 했다.
본좌. 이 보드로 양산 들어갈 것도 아닌데 천원이면 어떻고 이천 원이면 또 어떤가.
신경 안 쓴다. 그저 잘 돌아가기만 하면 만족이다.
LDO 주위에 주렁주렁 매달린 커페시터와 저항은 Datasheet에 그렇게 하라고 나와 있으니,
그냥 까라는 대로 깠다.
행자들도 그냥 까기 바란다.
다들 눈치 챘겠지만, 뭐 굳이 저 칩을 쓸 필요는 없다.
눈치 못 챘다면 olo잡고 반성해라.
중요한 것은 5v를 3.3v로 바꾼다는 것이다.

여기에 하나 더 고려해야 할 것이 있다.
Bus-Powered Device 즉, 우리가 만들려는 장치처럼
USB포트로부터 전원을 공급받는 장치는 500mA이상을 버스로부터 끌어 쓰면 안 된다.
(USB Specification에 친절하게 나와 있다.)
이 말을 거꾸로 뒤집어 보면 우리는 500mA까지는 파워를 땡길 수 있다는 말 아닌가.
따라서, 어제 강의에 보인 회로에 앞으로 어떤 회로를 부가할지는 모르겠지만
LDO 용량은 500mA만 넘어가면 넉넉한 용량이 될 거라는 거다.
본좌가 고른 LT1763CS8-3.3의 Output Current는 500mA이다.
딱 이지 않은가?

더불어 USB 파워에 관해 한 가지 더 살짜쿵 밟고 넘어가야 할 사항은
USB 디바이스에 처음 전원이 인가되어 그 디바이스가 Configure 되기 전까지는
파워를 100mA이상 소비하면 안 된다.
왜냐? 그냥 USB 스펙이 그렇다.

또 디바이스가 Configure되는 게 뭐냐? 다음 회 강좌에 알려준다.
파워에 관해 후에 몇 가지 사항을 더 언급해야겠다.
본좌가 잊어버리면 할 수 없고.

두 번째 리셋부

Array

Active Low 리셋을 위한 뭐 평범한 R/C회로 되겠다.
커페시터와 저항값도 저 값으로 하라고 Technical Reference Manual(T.R.M.)에 친절하게 적어 놓으셨다.
다이오드는 파워가 제거되었을 때 커페시터의 전하를 빨리 제거하기 위한 용도인데,
(본좌. 너무 친절한가?)
저게 안 달리면
만든 USB 디바이스를 뺐다가 바로 다시 꽂을 때,
리셋에 문제가 생겨 장치가 올바르게 인식 안될 수 도 있다.

세번째 바이패스 커페시터

Array

쪼기 위에 친절하게 적힌 대로
Cypress의 FX2칩의 7개의 VCC 핀 옆에 하나씩 붙여 놓으시라.
Bypass Capacitor에 관해서는 여기에 설명이 짱 잘 되 있으니 궁금하면 누질러라.
http://www.pldworld.com/html/technote/bypass.htm

네번째 Analog 전원부

Array

뭐 별거 있나? 열라 허접한 아날로그-디지털 전원 분리의 예이다.
Technical Reference Manual(T.R.M.)에 이렇게 해도 충분하다고 나와 있으니
어저까나? 따를 수 밖에.

다섯번째 USB 커넥터

Array

USB 버스로부터 공급되는 5v는 LDO로 넣어주고,
그라운드는 회로의 다른 그라운드와 물려주면 되겠다.
D+/D-는 데이터 라인이니 FX2의 D+/D-핀으로 넣어주면 되고,
Shell은 화살표로 표시한 부분이 되겠다.
Array
이 회로는 후에 약간 손 볼 필요가 있다.
나중에 얘기하자.
마지막 FX2 칩과 크리스탈

Array

VCC에 3.3v 넣어주고, 그라운드는 서로 묶고
클럭 넣어주고, 입출력 핀은 일단은 그냥 놔두고.
봐라. 뭐 별거 없다.
이런 회로를 만들어 USB에 팍 쎄리 꽂으면 돌아 갈까?
돌아간다.


자 여기서부터 후반전이다.
여러 행자들의 부족한 상상력을 up 하기 위해 본좌가 그림을 하나 준비했다.

Array

쨔쟌.
(http://www.hasointech.com/develop_tools/develop_tools_04.php에서 쎄벼 옴)
이거이 우리가 만들 USB 장치랑 같다고 보시면 되겠다.
우리는 56pin 짜리 FX2를 쓰므로 요것보다 쫌 더 콤펙트 하겠당. ㅋㅋㅋ
(저 사진도 실물보다 많이 크게 보인다.)
우리가 이걸 만들었다 치자.
납땜이 끝나자 마자 USB 포트에다가 딱 꽂으면
에그머니

Array

저렇게 떡하니 장치관리자에 뜬다.
이상하지 않은가?
우린 아직 펌웨어도 짜 넣지 않았는데,
어찌하여 요놈이 USB장치로 인식이 된단 말인고?

안 이상하다는 행자들 다시 olo잡고 5분간 반성하시라.

본좌. 지금부터 그 미스터리를 풀어드린다.
FX2에는 CYPRESS에서 자랑하고 돌아 댕기는
automatically-enumerated USB device 기능 때문이다.
즉 우리가 암짓 안 해도 지가 알아서 USB장치로 인식된다는 말이다.
이 말을 뒤집어 보면 USB장치로 인식되기 위해서는 원래는 우리가 어떤 짓을 해 주어야 한다는 말이다.
근데 이넘이 자동으로 “어떤 짓”을 해주니,
우리는 암짓도 안 해도 될까?
아니다. 앞으로 해야 한다.

그렇다면 저 automatically-enumerated 기능이 무에 필요가 있을까?
그건 FX2가 USB 포트를 통해 펌웨어를 다운받기 위해서이다.
처음에는 automatically-enumerated USB device
(앞으로는 Default USB Device 로 부르겠다.)
로 인식되어서 누가 펌웨어를 USB를 통해 넣어주면
그 펌웨어를 램에 저장한 후 자신에게 리셋을 건다.
(물론 램의 내용은 유지된다.)
그러면 흡사 Default USB Device를 USB 포트로부터 제거하고,
우리가 만든 USB 디바이스를 포트에 새로 꽂은 것처럼 짜잔 하고 장치관리자에 나타난다.
PIC이나 AVR의 ISP의 USB버전 이라고 보심 되겠다.

이 기능은 보나마나 개발 시 아주 편리하다.
EEPROM을 새로 프로그램 할 때마다 꽂았다가 뺐다가 하는 것보다 백배 편리하다.
거기에다가 이 기능을 이용하면 펌웨어를 인터넷을 통해 업데이트 할 수도 있다.
이 걸 위해 CYPRESS에서는 드라이버도 지원 한다.
근데 본좌가 얼핏 본 바로는 펌웨어 소스코드가 드라이버에 하드코딩 된 형태만을 지원하는 것 같더이다.
본격적인 업데이트를 하기 위해서는 드라이버를 손봐야 할 것 같더라.
(아니, 드라이버 소스코드는 제공하지 않으니 새로 짜야.)
아! 오늘 USB Initial Configuration까지 진도를 나가려고 했는데,
너무 길어졌다.

본좌. 의사의 권유사항인 휴식을 위해 그만 줄인다.

'Hardware' 카테고리의 다른 글

디지털 HD 비디오 캠코더 HVR-A1N  (0) 2008.03.18
GoStream Plus DataSheet  (0) 2008.03.18
CYPRESS FX2 소개 및 기본회로  (0) 2008.03.17
[펌] Intel 80386 Protected Mode  (0) 2008.03.13
임베디드 시스템의 개요  (0) 2008.03.11