티스토리 뷰

Hardware

UniHigh v2.1 & v2.2 와 드라이버 업데이트

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

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

 

계속해서 Default Control Endpoint를 통해 디바이스와 통신하는 방법을 연습해 보자.
오늘은 이전 강의 SETUPDAT 활용하기
Control Endpoint의 DATA stage 활용 - OUT편
을 unihigh.sys를 이용해서 어플리케이션에서 디바이스로 접근할 수 있도록 고쳐본다.

먼저 새로운 버전의 unihigh.sys를 다운받아서 드라이버 업데이트를 시켜야 한다.
UniHigh Driver v2.1
위의 드라이버를 다운 받아서 원하는 위치에 압축을 풀어 놓자.
(c: 같이 ASCII문자로만 구성되며, 공백이 없는 디렉토리에 풀어 놓는게 안전하다.)

드라이버를 업데이트 시키는 방법은 다음과 같다.
UniHigh 보드를 USB포트에 꽂고, EZ-USB Control Panel로 UniHigh Firmware v2.0을 다운로드 해서 장치관리자에 UniHigh보드가 나타나도록 한다.

Array

장치관리자에 잡힌 UniHigh Board를 선택해서 오른 버튼을 클릭하면 다음과 같은 대화상자가 나타난다.
거기서 “드라이버 업데이트”를 클릭하라.

Array

다음을 누른다.

Array

다운받아 놓은 드라이버의 위치를 지정해 준다.

Array

“드라이버 파일 검색결과” 대화창에 있는 “다른 드라이버 중 하나 설치” 체크박스를 체크하고 다음을 누른다.

Array

리스트 컨트롤 박스에서 새로 다운받은 드라이버를 지정하고, 다음을 누른다.

Array

마침을 누르면, 다음과 같이 장치관리자에 새 버전의 드라이버가 깔린 것이 보일 것이다.

Array

Array

오늘 살펴볼 코드는 두 개 이다.

UniHigh Firmware v2.1
UniHigh Firmware v2.2

UniHigh Application v2.1
UniHigh Application v2.2

UniHigh xxx에 v2.1에 코드를 추가하여 UniHigh xxx v2.2를 만들었으므로 v2.1은 다운 받지 않고 v2.2만 다운 받아도 된다.

위의 펌웨어 코드 밑 어플리케이션은 맨 앞에 언급한 강의에서 사용한 예제들과 완전히 동일한 동작을 하는 예제들이다.
달라진 건 ezusb.sys 대신 unihigh.sys 드라이버를 사용한다는 것이고, 테스트 어플리케이션이 EZ-USB Control Panel에서 UniHigh Application으로 바뀐 것 뿐이다,

펌웨어야 이전 v1.x버전과 VID, PID가 달라진 것 밖에 없으므로 설명을 생략하고, UniHigh Application v2.2만 대략 설명하겠다.

솔직히 설명 할 꺼리도 없다.
각각의 CONTROL_CODE의 경우에 DeviceIoControl을 어떻게 사용하는지만 보고,
나중에 행자들이 자신의 어플리케이션을 만들 때 참고하면 되겠다.

자 UniHigh Application v2.2 프로젝트를 열어보자.

LED Blink 버튼을 누르면 UniHighDlg.cpp의 OnButtonLEDBlink()로 들어오고, LED Signal 버튼을 누르면 OnButtonLEDSignal() 맴버함수로 분기한다.

각 함수에 대한 설명은 코드의 주석으로 대신한다.
그 코드들을 설명하는 것은 본좌가 정의한 어플리케이션과 드라이버간의 인터페이스를 설명하는 것에 불과하므로 USB를 공부하는 데는 별 도움이 안 된다.

다만 본좌가 제공한 예제를 응용해서 스스로 어플리케이션을 만들 때 인터페이스의 사용법을 익히는 정도면 족하다.
따라서 DeviceIoControl의 인자를 어떻게 주는지만 중점적으로 보시면 되겠다.

v2.1예제는 index와 value값만 사용하는 Control Request의 예이고,
v2.2예제는 Control Request의 Data Stage를 활용하는 예이다.