티스토리 뷰

Hardware

EEPROM에 펌웨어 구워넣기

알 수 없는 사용자 2008. 4. 1. 01:26

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

 

오늘은 잠깐 곁가지로 새서, EEPROM에 펌웨어를 구워보자.

이제까지 우리는 작성한 펌웨어를 EZ-USB Control Panel을 써서 CY7C68013으로 다운로드 해 왔다.
하지만 이러한 방법은 개발할 때에나 쓸 수 있는 것이고, USB장치를 사용할 때마다 사용자더러 이렇게 번거로운 절차를 행하라고 시킬 수는 없는 일 아닌가?

따라서 펌웨어를 EEPROM에 구워 넣고, 장치를 USB 포트에 끼워 넣으면 바로 우리가 코딩한 펌웨어에 따라 동작하는 USB 디바이스로 인식되게끔 만들어 보자.

먼저 EEPROM의 시작번지 첫 두 바이트에 0xFF 0xFF를 써 주어야 한다.
요 짓을 왜 하느냐 하면 아래에 설명하겠지만, EEPROM 이미지(xxx.iic 파일)를 EEEPROM(24LC64)에 써 넣는 일도 EZ-USB Control Panel을 사용해서 하는데, 만약 첫 두 바이트가 0xC0 0xXX 요렇게 이미 세팅되어 있다면 EZ-USB Control Panel이 '아! EEPROM이 이미 프로그램 되어 있구나' 하고 알아차리고는 덮어쓰기를 거부해 버린다.
따라서 EEPROM을 굽기 앞서 이 두 바이트를 지워주는 절차로서 “0xFF 0xFF”를 써주는 것이다.

자 어떻게 하는냐?
EEPROM이 소켓에 잘 끼워져 있는지 확인부터 하시라.
끼워져 있는가?
그럼 빼시라. ㅋㅋㅋ
(Tip. 처음 새 EEPROM을 끼울 때에는 접촉불량이 생길 수 있으므로, 그냥 세네번 끼웠다 뺐다를 반복해 주시라. 다리가 휘지 않도록 조심 하면서. 핀셋으로 하면 캡숑 좋다.)

EEPROM을 “뺀” 상태에서 UniHigh 보드를 USB 포트에 꼽는다.
그리고 나서 EEPROM을 끼워라.

이제 EZ-USB Contrrol Panel을 연다.
먼저 EZ-USB Contrrol Panel의 “Download” 버튼을 누른다.

Array

C:CypressUSBExamplesFX2Vend_ax 폴더의 Vend_Ax.hex를 선택해서 다운로드한다.

Array

아래와 같이 세팅하고 “Vend Req” 버튼을 누른다.

Array

이제 24LC64의 첫 두 바이트가 지워졌다.

이제 리셋버튼을 누르거나 USB 포트에서 분리 후 다시 장착해서 장치관리자를 들여다 보자.

Array

위와 같이 나오면 EEPROM이 잘 초기화 된 것이다.

이제 EEPROM을 프로그램 할 차례이다.

EZ-USB Contrrol Panel의 “EEPROM” 버튼을 누른다.

Array

굽고자 하는 펌웨어의 iic파일을 선택해 준다.

Array

확인을 누르면 프로그램이 한 10초정도 응답이 없다가, 다 구워지면 커서가 깜빡거린다.

Array

리셋버튼을 누르거나 USB 포트에서 분리 후 다시 장착해서 장치관리자를 들여다 보자.
우리가 짠 펌웨어대로 장치가 나타날 것이다.

이제는 우리가 만든 USB 디바이스를 아무 컴터에나 꼽기만 하면 인식이 될 것이다.
(물론 드라이버가 깔려있거나, 깔아야 하고, 테스트 프로그램도 있어야 하지만…)

사족.
펌웨어 소스를 빌드한 결과물은 hex파일이고, EEPROM이미지는 iic파일이다.
hex파일을 iic파일로 바꾸어주는 툴은 c:cypressusbbin 폴더의 hex2bix.exe이다.

이 hex2bix.exe를 사용한 예는 Keil u-Vision으로 예제 프로젝트를 열고, ( 왼쪽 창에서 “Target 1”이 선택된 상태에서) 메뉴의 Project->Options for Target “Target 1”을 선택한 후에 “Output” 탭을 선택하면 아래와 같이 볼 수 있다.

Array

UniHigh 펌웨어와 BulkLoop 펌웨어의 세팅을 비교해 보시라.
hex2bix를 실행시킬 때 파라메터가 어덯게 다른지.
디바이스 디스크립터의 VID와 PID를 바꾸면 이 파라메터도 같이 바꾸어 주어야 한다.