Home  |   방명록 2021-10-23 (토) 
Untitled Document
  S e a r c h
M e n u
프로그램
개발자료
고전음악실
대청마루
집주인
비망록
갤러리
  B o a r d
게시판
Untitled Document
개발자료 Software / Hardware 개발 관련 정보

USB 인터페이스 : USB 디바이스 개발 정보

USB 인터페이스

1. Philips PDIUSBD12 와 8051을 이용한 디바이스 구성

C를 이용한 예제는 Philips 홈페이지 등에서 구할 수 있다. 어셈블리 예제는 아래에서 구할 수 있다.
8051 어셈블리 코드

출처: USB Design By Example, Second Edition (Intel Press)
 

2. 윈도우즈 디바이스 드라이버

Programming the Microsoft Windows Driver Model (Microsoft Press) : WDM 드라이버의 기본 코드를 생성해주는 VC++용 커스텀 위저드 제공. 한글 번역판 있음

BlockIO driver : 위 책을 기초로 만든 소스

Writing Windows WDM Device Drivers (R&D) : 한글 번역판 있음

Windows 2000 DDK BulkUsb sample : 98DDK 샘플의 업그레이드 버전
BulkUsb_PipeWithName() 에서 nameLen = FileName->Length/2; 로 수정한다.

* Programming the Microsoft Windows Driver Model의 샘플은 윈98에서 중간중간에 데이터의 일부가 전달되지 않는 버그가 있다. BlockIO driver 소스를 참고해 수정하도록 한다.
 

3. 어플리케이션 인터페이스

  • 어플리케이션은 CreateFile("\\\\.\\장치명", ...) 과 CloseHandle()을 통해 장치를 열고 닫는다. (드라이버 구성에 따라 다름)
  • ReadFile() 또는 WriteFile()을 통해 장치와 데이터를 주고 받을 수 있다.
  • DeviceIoControl()을 통해 커스텀 컴멘드를 전달하거나 정보를 읽어올 수 있다.
  • WM_DEVICECHANGE 메시지를 처리해 장치가 갑자기 빠지는 경우에 대비해야 한다.
  • WM_POWERBROADCAST 메시지를 처리해 윈도우즈 슬립모드에 대응해야 한다.


4. 유틸리티

SrcToDsp : DDK의 소스를 VC++에서 빌드가 가능하도록 프로젝트 파일을 만들어준다.
DbgView : 커널 모드에서 드라이버가 출력하는 디버그 메시지를 보여준다.
USB Compliance Test Suite: USB 장치의 스펙 준수 여부를 테스트 해 준다.
USB Sniffer : USB의 송수신 데이터를 중간에서 캡처해 소프트웨어적으로 기록해 준다.


5. USB to Serial

단순히 시리얼 통신을 대체하기 위해 USB를 사용하려면 FDTI의 FT232BM 등의 칩을 사용하면 별도의 프로그램 개발이 불필요하다. MCU와의 인터페이스도 간단하고 윈도우즈에 제공되는 드라이버를 설치하면 가상 COM 포트로 잡힌다.


6. CDC (Communication Device Class)

디바이스가 USB CDC 스펙을 지원하면 윈도우즈에서 가상 COM 포트로 잡힌다. 드라이버는 윈도우즈의 usbser.sys 파일을 사용하지만 inf 파일을 따로 제공해야 하며 640Kbps 정도로 속도가 느리고 윈2000에서 WM_DEVICECHANGE 메시지가 잘 동작하지 않는다는 말도 있다.
샘플 코드는 마이크로컨트롤러 제조사 홈페이지의 디자인 노트에서 구할 수 있다.

여러 제품을 사용하다 보면 COM 포트가 계속 증가하는 문제가 생기는데 같은 칩을 사용한 제품이라도 윈도우즈가 다른 장치로 인식해서 COM 포트 번호를 따로 할당하기 때문이며 레지스트리를 이용해 막을 수 있다.
먼저 장치관리자를 이용하거나 해서 VID 와 PID를 알아내고, regedit을 실행한다.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\UsbFlags 키에서 새로 만들기 -- 이진값 -- IgnoreHWSerNumXXXXXXXX 를 입력한다. 그리고 값을 01을 입력한다.
여기서 XXXXXXXX 8개 값은 VID와 PID 이다.
예를들어 프로리픽 제품은 VID=067B PID=2303 이라면 IgnoreHWSerNum067B2303 이라고 입력 한다.
아니면 아래 내용을 복사해 com.reg 파일로 저장하고 더블클릭하면 자동으로 입력된다.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\UsbFlags]
"IgnoreHWSerNum067B2303"=hex:01

이전에 추가된 포트를 지우려면 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports 에서 불필요한 것을 지운다.


7. Mass Storage Class 샘플코드

http://www.at91.com: ATmel SAM
LPCUSB: Philips LPC214x
YAGARTO: STR710, STR711
USB-MSD-RD: C8051 USB Mass Storage Reference Design


8. National USBN9602/ USBN9603 / USBN9604 디바이스 C라이브러리

http://usbn2mc.berlios.de


9. Link

USB Developer Forum
USB Central
Beyond Logic

2004-06-14 [조회: 32767]

이전글: SoftICE : SoftICE의 간단한 사용법
다음글: Atmel AVR : 8비트 RISC 마이크로 컨트롤러

목록보기
 
이름 암호
(스팸 방지용)오늘의 날짜를 숫자만으로 입력하세요.(예: 12)

비밀번호
목록보기
 
Copyright ⓒ 2021 All Rights Reserved.