Top

[임베디드 USB 장치 개발을 위한]
USB 완전정복

  • 원서명USB Complete 3rd edition (ISBN 1931448027)
  • 지은이Jan Axelson
  • 옮긴이전준걸, (주)하제소프트
  • ISBN : 8989975808
  • 35,000원
  • 2006년 01월 19일 펴냄
  • 페이퍼백 | 600쪽 | 185*230mm
  • 시리즈 : 임베디드 시스템

판매처

개정판

책 소개

USB의 강력한 성능으로 제품을 업그레이드 하세요!

USB는 사용자가 컴퓨터 주변기기를 쉽고 친근하게 사용할 수 있게 하는 것을 목적으로 설계됐다. USB 주변장치는 데이터를 교환하고 전원을 관리하는 USB 프로토콜을 반드시 지원해야 한다. 이 책에서는 안정적이고 효율적으로 통신하는 주변장치를 설계하고 프로그래밍하는 데 필수적인 가장 기본적인 정보부터 임베디드 개발자가 알아야 할 모든 것을 설명한다.


[ 이 책에서 다루는 내용 ]

▶ 진행 중인 프로젝트에 적합한 컨트롤러 선택
▶ USB 디바이스 클래스를 사용한 개발시간 단축
▶ 비주얼베이직 닷넷이나 비주얼 C++ 닷넷 애플리케이션에서 USB 장치에 접근하는 방법
▶ 전원이 따로 필요 없는 USB 장치 개발
▶ USB OTG를 사용해 USB 장치들이 PC 없이도 서로 통신할 수 있게 하는 방법
▶ 디버깅과 적합성 테스트 툴을 사용한 조속한 문제 해결


[ 부가 정보 ]

USB와 관련한 최신 뉴스, 문서, 제품 또는 벤더 정보 및 USB 제품 개발에 관한 추가정보를 얻고 싶다면, 저자가 운영하고 있는 USB Central(http://www.lvr.com/usb.htm) 사이트를 확인하기 바랍니다.

저자/역자 소개

[ 저자 소개 ]

Jan Axelson

Jan Axelson은 임베디드 네트워킹(Embedded Ethernet & Internet Complete), Serial Port Complete을 저술했으며, Circuit Cellar, EDN, Nuts & Volts 등 기술 간행물에 수많은 기사를 기고해왔다. PC매거진의 Bill Machone은 Jan의 저술 스타일을 “명확함과 간결함의 모델”이라고 표현한다.


[ 저자 서문 ]

누군가의 도움 없이 책을 저술하기에 USB는 너무나 광범위한 주제였기에 고맙게도 많은 분의 도움을 받았다.
책의 수준을 높여준 피드백을 제공한 기술 감수자들께 우선 크나큰 감사의 말씀을 전한다(그래도 혹여 이 책에 오류가 있다면 그것은 모두 내 책임이다).
MCCI 부사장, 아키텍처와 USB-IF 디바이스 워킹그룹장인 Paul E. Berg에게 감사한다. USB-IF의 비디오 디바이스 워킹그룹의 David Goll, Lucio DiJasio, Microchip Technology의 Rawin Rojvanit, usb-by-example.com의 John Hyde, USB-IF의 오디오 디바이스 워킹그룹의 Geert Knapen, Walter Oney Software의 Walter Oney, System Solutions의 Marc Reinig에게도 감사의 마음을 전한다. 그 밖에도 Cypress Semiconductor의 Glenn M. Roberts, FTDI Chip의 Fred Dart와 Keith Dingwall, Keil Software의 Wendy Dee, DeVaSys Embedded Systems의 Michael DeVault, Saelig Company Inc.의 Alan Lowne, Ellisys의 Laurent Guinnard, RPM Systems Corporation의 Rich Moran, NCR Corporation의 Bob Nathan에게도 감사한다.
마지막으로 한국의 독자를 위해 에이콘출판사가 드디어 『USB Complete』 한국어판, 『USB 완전정복』을 출간하게 되었다는 소식을 들으니 매우 기쁘다. USB 서적에 대한 한국 개발자들의 열망에 부응하는 훌륭한 책이 될 것으로 믿어 마지 않고, 한국의 독자가 이 책을 읽고 제품을 개발하는 데 유용하게 활용할 수 있게 되기를 바란다.
- Jan Axelson


[ 역자 소개 ]

전준걸

성균관대학교에서 전자공학을 전공하고 대학원에서 정보공학 석사학위를 취득했다. 졸업 후 LG전자연구소에서 근무하면서 통신과 임베디드 시스템에 관한 실무를 진행했다. UCSB에서 ECE석사학위를 취득하고 현재 UT Dallas에서 네트웍 관련 박사과정을 밟고 있다.


㈜하제소프트 www.hajesoft.co.kr

(주)하제소프트(대표 이봉석)는 ‘모든 하드웨어 디바이스의 제어 통제’라는 비전을 내걸고 1998년 7월에 설립되었다. 그간 국내외의 다양한 디바이스 드라이버 및 보안 솔루션들을 개발해오면서 쌓은 노하우로 세계 디바이스 드라이버 개발 시장에서도 경쟁력을 갖고 겨룰 수 있는 시스템 소프트웨어 기술력을 확보하고 있다. 특히 윈도우와 윈도우 CE 디바이스 드라이버 분야에서는 그 내용과 매출에서 두각을 나타내고 있으며, 2005년 7월 법인화에 즈음해 ‘(주)하제소프트 부설 시스템 소프트웨어 연구소’를 병설하여 “회사의 모든 경쟁력은 기술에서 나온다”는 기치 아래 미래를 대비할 신제품 및 솔루션 개발에 힘쓰고 있다.주요 제품 및 솔루션으로는 ‘PC Protected Engine’, ‘USB! 머하니?’, ‘MSP(Mobile Solution Package) 시리즈’ 등이 있으며 앞으로 WirelessUSB 분야의 다양한 솔루션 제품을 개발할 계획이다.


[ 역자 서문 ]

USB는 기존 레거시 포트(시리얼, 패러렐, PS/2)의 느린 속도와 제한된 장치 연결에 따른 불편을 해결하기 위한 인터페이스로 만들어 졌습니다. 일부 신형 PC는 레거시 포트를 아예 제거하고 USB만 탑재해 나오기도 하고 매우 다양한 주변기기가 USB를 사용할 정도로 광범위하게 사용되고 있습니다.

하지만 실제 USB를 자신의 제품에 넣기를 원하는 경우 실제 도움이 되는 자료를 구하기는 쉽지가 않습니다. 이 책 『USB 완전정복』은 『USB Complete』이라는 원서명에서도 볼 수 있듯이, USB 스펙을 제외하고 구할 수 있는 자료 중에 가장 광범위한 주제를 다루면서도 실제에서 쉽게 적용할 수 있게 쓰여진 책입니다. 『USB Complete』은 1999년 초판을 찍어낸 이후, 2001년 개정2판, 2005년 개정 3판을 펴내는 등 USB에 관한 한 전세계에서도 유례를 볼 수 없는 독보적인 책이며 이는 여러 전문가들이 격찬을 하는 이유이기도 합니다.

- 전준걸


USB와 관련해 자타 공인 세계 최고의 책이라 일컬을 만한 이 책의 원서 『USB Complete 3rd edition』 표지에는 ‘Everything You Need to Develop Custom USB Peripherals(맞춤 USB 주변장치를 개발하기 위해 여러분이 알아야 할 모든 것)’이라는 문장이 적혀있다. 이 글귀만큼 이 책을 정확히 설명하는 문장은 더 이상 없을 것 같다. 이렇듯 USB에 관한 모든 내용을 총괄하는 이 멋진 책을 번역하고 감수한 역자의 입장으로서 이 책의 특장점을 몇 가지로 간추리는 것이 더 어렵지만 특별히 두 가지만 꼽아 이야기해보겠다.

첫째, 이 책은 USB에 대한 전반적인 설명과 더불어 MS 윈도우 운영체제에서의 USB 디바이스 드라이버와 관계된 부분에 대해서도 많은 설명을 할애하고 있다. 따라서 독자는 USB는 물론이고 USB 디바이스와 호스트(MS 윈도우)를 포함한 전체 시스템을 이해하는 데 많은 도움을 받을 수 있다. 또한 MS 윈도우가 제공하는 USB 디바이스 드라이버와 관계된 여러 가지 API를 사용한 예제 코드를 비주얼 C++뿐 아니라 비주얼 베이직으로도 제공하고 있어서, 비주얼 베이직 개발자도 드라이버와 통신하는 프로그램을 쉽게 개발할 수 있다.

둘째는 USB와 관련된 로고(logo)에 관한 설명이다. USB 로고에는 Certified USB 로고와 Microsoft Windows 로고가 있다. 이 두 로고는 최종 사용자에게 USB 디바이스를 배포하기 전에 필수적으로 획득해야 하는 것이다. (물론 이 로고가 없어도 최종 사용자에게 판매할 수는 있다. 하지만 최종 사용자는 로고를 획득한 제품을 구매하는 경향이 높다. 또한 해외로 수출할 경우 거의 대부분 로고 획득은 필수적이다). 많은 업체 관계자들이 이런 로고가 있는지조차 모르는 경우가 많아 개발 일정이 지연되는 일이 종종 발생하곤 한다. 그만큼 이 두 로고에 대한 설명이 이 책에 간략하게나마 포함되어 있는 것 또한 큰 장점이라 할 수 있다.

역자가 언급한 이 작은 내용들 외에도 『USB 완전정복』에서는 이 책의 부제처럼 ‘USB 장치 개발을 위한’ 필수적인 많은 내용을 접할 수 있을 것이다. 부디 많은 개발자들에게 도움을 주는 유익한 책이 되기를 바란다.

- ㈜하제소프트

목차

목차
  • 1장 USB의 기초
  • USB의 장점
    • 사용자 측면의 이점
    • 개발자 측면의 이점
    • USB는 만능?
  • 인터페이스의 진화
    • 오리지널 USB
    • USB 2.0
    • USB On-The-Go
    • 무선 USB
    • 비교: USB 대 IEEE-1394
  • 비교: USB 대 이더넷
  • 버스 구성요소
    • 토폴로지
    • 용어 정의
  • 작업 분할
    • 호스트의 역할
    • 주변기기의 역할
    • 속도에 관해
  • 디바이스 개발
    • 구성요소
    • 개발 도구
    • 프로젝트 개발 단계
  •   
  • 2장 USB 전송 세부사항
  • 전송의 기초
    • 열거 통신
    • 애플리케이션 통신
    • 버스 상의 데이터 관리
    • 호스트 스피드와 버스 속도
  • 전송의 구성요소
    • 디바이스 엔드포인트: 데이터를 만들거나 소비하는 곳
    • 파이프: 엔드포인트를 호스트에 연결
    • 전송방식
    • 스트림 파이프와 메시지 파이프
    • 전송 개시
    • 트랜잭션: 전송의 구성요소
    • 트랜잭션 페이즈
  • 전송이 성공했는지 보증
    • 핸드쉐이킹
    • 제어전송 상태 보고
    • 에러확인
  •   
  • 3장 용도별 전송 방식
  • 제어 전송
    • 가용성
    • 구조
    • 데이터 크기
    • 속도
    • 에러감지와 에러처리
  • 벌크 전송
    • 가용성
    • 구조
    • 데이터 크기
    • 속도
    • 에러검출과 에러처리
  • 인터럽트 전송
    • 이용가능성
    • 구조
    • 데이터 크기
    • 속도
    • 에러검출과 에러처리
  • 등시성 전송
    • 가용성
    • 구조
    • 데이터 크기
    • 속도
    • 에러검출과 에러처리
  • 시간이 중요한 전송
    • 버스 대역폭
    • 디바이스 기능
    • 호스트 기능
    • 호스트 지연
  •   
  • 4장 열거: 호스트가 디바이스 정보를 가져오는 방법
  • 과정
    • 열거 단계
    • 허브 열거
    • 디바이스 제거
    • 성공적인 열거를 위한 팁
  • 디스크립터
    • 디스크립터 타입
    • 디바이스 디스크립터
    • 디바이스 한정자 디스크립터
    • 컨피규레이션 디스크립터
    • 다른 스피드 컨피규레이션 디스크립터
    • 인터페이스 연관 디스크립터
    • 인터페이스 디스크립터
    • 엔드포인트 디스크립터
    • 문자열 디스크립터
    • 다른 표준 디스크립터
    • 마이크로소프트 OS 디스크립터
  • 2.0 준수 디바이스의 디스크립터
    • 1.x디스크립터가 2.0을 준수하게 만들기
    • 듀얼스피드 디바이스의 속도 알아내기
  • 5장 제어전송: 중요 데이터를 위한 구조화된 리퀘스트
  • 제어전송의 요소
    • 셋업 스테이지
    • 데이터 스테이지
    • 상태스테이지
    • 에러 처리
    • 디바이스 펌웨어
  • 리퀘스트
    • Get_Status
    • Clear_Feature
    • Set_Feature
    • Set_Address
    • Get_Descriptor
    • Set_Descriptor
    • Get_Configuration
    • Set_Configuration
    • Get_Interface
    • Set_Interface
    • Synch_Frame
  • 다른 제어리퀘스트
    • 클래스 한정 리퀘스트
    • 제조사 한정 리퀘스트
  • 6장 칩 선택
  • USB 디바이스의 요소
    • USB 컨트롤러
    • 그 밖의 디바이스 요소
  • 디바이스 개발 쉽게 하기
    • 디바이스 요구사항
    • 칩 문서
    • 드라이버 선택
    • 디버깅 툴
  • 임베디드 CPU가 있는 컨트롤러
    • Microchip PIC18F4550
    • Cypress EZ-USB
    • Cypress enCoRe II
    • Freescale MC68HC908JB16
    • Freescale MCF5482 ColdFire
  • 외부 CPU와 인터페이스하는 컨트롤러
    • National Semiconductor USBN9603
    • Philips Semiconductors ISP1181B
    • Philips Semiconductors ISP1581
    • PLX Technology NET2272
    • FTDI Chip FT232BM과 FT245BM
  • 7장 디바이스 클래스
  • 클래스란
    • 디바이스 워킹그룹
    • 클래스 스펙 요소
  • 정의된 클래스
    • 오디오
    • 칩/스마트카드 인터페이스
    • 통신디바이스: 모뎀과 네트워크
    • 컨텐츠 보안
    • 디바이스 펌웨어 업그레이드
    • 휴먼 인터페이스
    • IrDA 브릿지
    • 대용량 저장장치
    • 프린터
    • 정지이미지 캡쳐: 카메라와 스캐너
    • 시험과 측정
    • 비디오
  • 비표준 기능 구현
    • 표준 또는 맞춤 드라이버?
    • RS-232로부터 변환
    • 패러렐포트로부터 변환
    • PC-to-PC 통신
    • 포괄적 드라이버 사용
  • 8장 호스트가 통신하는 방법
  • 디바이스 드라이버의 기초
    • 애플리케이션은 디바이스의 세부사항을 고려하지 않아도 된다
    • USB 디바이스를 위한 옵션 235
    • 사용자모드와 커널모드
  • WDM 드라이버
    • 계층적 드라이버
    • 통신 흐름
    • 추가 예제
  • 맞춤 드라이버 제작
    • 드라이버 작성
    • 드라이버 툴킷
  • GUID
    • 디바이스 셋업 GUID
    • 디바이스 인터페이스 GUID
  • 9장 디바이스에 맞는 드라이버 찾기
  • 장치관리자
    • 디바이스 보기
    • 속성 페이지
  • 레지스트리의 디바이스 정보
    • 하드웨어 키
    • 클래스 키
    • 드라이버 키
    • 서비스 키
  • INF 파일 내부
    • 문법
    • 섹션
  • 디바이스 식별 문자열
    • 일치하는 것 찾기
    • INF 파일을 제공할 필요가 있는가?
  • 툴과 진단 도구
  •  INF 파일 사용 팁
  •   화면에 표시되는 내용
  • 10장 디바이스 감지
  • API 함수 호출에 관한 개요
    • 관리된 코드와 관리되지 않은 코드
    • 문서
    • 비주얼 C++ .NET 사용
    • 비주얼 베이직 .NET 사용
  • 디바이스 감지
    • 디바이스 인터페이스 GUID 얻기
    • 디바이스 정보 셋에 대한 포인터 요청
    • 디바이스 인터페이스 확인
    • 디바이스 패스명을 가진 구조체 요청
    • 디바이스 패스명 추출
    • 통신 끝내기
  • 핸들 얻기
    • 통신 핸들 요청
    • 핸들 닫기
  • 연결과 제거 감지
    • 디바이스 통보에 관해
    • 디바이스 통보 등록
    • 디바이스 변경 메시지 잡기
    • 디바이스 변경 메시지 읽기
    • 메시지에서 디바이스 패스명 가져오기
    • 디바이스 통보 멈추기
  • 11장 휴먼 인터페이스 디바이스: 제어와 인터럽트 전송
  • HID란?
    • 하드웨어 요구사항
    • 펌웨어 요구사항
  • HID 식별
    • HID 인터페이스
    • HID 클래스 디스크립터
    • 리포트 디스크립터
  • HID 한정 리퀘스트
    • Get_Report
    • Get_Idle
    • Get_Protocol
    • Set_Report
    • Set_Idle
    • Set_Protocol
  • 데이터 전송
    • 예제코드에 관해
    • 인터럽트 전송으로 리포트 보내기
    • 인터럽트 전송으로 리포트 받기
    • 제어 전송을 사용해 리포트 보내기
    • 제어 전송으로 리포트 받기
  • 12장 휴먼 인터페이스 장치: 리포트
  • 리포트 구조
    • HID 디스크립터 툴 사용
    • 컨트롤과 데이터 아이템 값
    • 아이템 타입
  • 메인 아이템 타입
    • 입력, 출력, 특성 아이템
    • 컬렉션과 컬렉션 끝 아이템
  • 전역아이템 타입
    • 리포트 식별
    • 데이터 사용에 관한 설명
    • 단위 변경
    • 원본 데이터 변환
    • 데이터 크기와 포맷 설명
    • 전역아이템 저장과 가져오기
  • 로컬아이템 타입
    • 물리적 디스크립터
    • 패딩
  • 13장 휴먼 인터페이스 장치: 호스트 애플리케이션
  • HID API 함수
    • HID에 관한 정보 요구
    • 리포트 보내고 받기
    • 리포트 데이터 제공과 사용
    • HID통신 관리
  • 디바이스 식별
    • 제조사 ID와 제품 ID 읽어오기
    • 디바이스 기능이 있는 버퍼 포인터 가져오기
    • 디바이스 기능 가져오기
    • 버튼과 값 기능 가져오기
  • 리포트 보내고 받기
    • 디바이스로 출력리포트 보내기
    • 디바이스에서 입력리포트 읽기
    • 디바이스로 특성리포트 보내기
    • 디바이스에서 특성리포트 읽기
    • 통신 닫기
  • 14장 벌크 전송
  • 두 가지 프로젝트
    • 비동기 시리얼 인터페이스
    • 패러렐 인터페이스
  • 호스트 프로그래밍
    • D2XX 다이렉트 드라이버
    • 드라이버 선택
  • 성능 향상을 위한 팁
    • 스피드에 대한 고려사항
    • 지연 최소화
    • 데이터 손실 방지
  • EEPROM 프로그래밍
    • EEPROM 데이터
    • 데이터 수정
  • 15장 허브: 디바이스와 호스트 사이의 연결
  • 허브의 기본 사항
    • 허브 리피터
    • 트랜잭션 번역기
    • 허브 컨트롤러
    • 스피드
    • 아이들 버스 유지
    • 허브를 직렬로 몇 개까지 연결할 수 있는가?
  • 허브 클래스
    • 허브 디스크립터
    • 허브 클래스 리퀘스트
    • 포트 지시자
  • 16장 전원 관리
  • 전원 옵션
    • 전압
    • 어떤 주변기기가 버스전원을 사용할 수 있는가?
    • 필요한 전원
    • 호스트에 알려주기
  • 허브 전원
    • 전원 소스
    • 과전류 보호
    • 전원 스위칭
  • 전원 절약
    • 전체와 선택적 서스펜드
    • 서스펜드 디바이스의 전류제한
    • 통신 재개
    • 윈도우에서 전원 관리
  • 17장 테스트와 디버깅
    • 하드웨어 프로토콜 애널라이저
    • 소프트웨어 프로토콜 애널라이저
    • 트래픽 발생기
  • 테스트
    • 적합성 테스트
    • WHQL 테스트
  • 18장 시그널과 인코딩
  • 버스 상태
    • 로우스피드와 풀스피드 버스 상태
    • 하이스피드 버스 상태
  • 데이터 인코딩
    • 동기 유지
    • 타이밍 정확도
  • 패킷 포맷
    • 필드
    • 패킷간 지연
  • 테스트 모드
    • 테스트 모드 진입과 빠져나오기
    • 모드
  • 19장 전기적 인터페이스
  • 송수신기와 시그널
    • 케이블 세그먼트
    • 로우/풀스피드 송수신기
    • 하이스피드 송수신기
  • 시그널 전압
    • 로우스피드와 풀스피드
    • 하이스피드
  • 케이블
    • 접점
    • 커넥터
    • 분리 가능 케이블과 캡티브 케이블
    • 케이블 길이
  • 시그널 품질 보장
    • 노이즈 소스
    • 평형 선로
    • 트위스티드 페어
    • 차폐
    • 에지 레이트
    • 분리된 인터페이스
  • 무선 링크
    • Cypress WirelessUSB
    • 무선 USB 이니셔티브
    • 기타 옵션
  • 20장 USB OTG를 이용한 이중 역할 디바이스
  • 디바이스와 호스트가 하나로
    • 기능과 한계
    • OTG 디바이스 요구사항
    • OTG 디스크립터
    • HNP를 위한 기능코드
  • OTG 컨트롤러 칩
    • Philips ISP1362
    • TransDimension TD242LP
    • Cypress CY7C67200 EZ-OTG

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안

정오표

 1쇄 오류/오탈자 

[ pxi 12행 ]
버스 대폭 81 → 버스 대폭 81

[ p26 '칩으로 오는 통신 감지' 절 4행 ]
이 기능은 대다수의 칩에서 이 기능은
→ 이 기능은 대다수의 칩에서

[ p42 절 제목 ]
제어 전송은 메시지 파이프를 사용한다
→ 제어 전송은 양방향을 사용한다

[ p43 1행 ]
다른 모든 전송은 스트림 파이프를 사용한다
→ 다른 모든 전송은 단방향을 사용한다

[ p45 5행 ]
3개의 트랜잭션 타입은 목적과 데이터 흐름 방향에 따라 정의되어 있다.
→ 용도와 데이터 흐름 방향에 따라 3개의 트랜잭션 타입은 정의되어 있다.

[ p45 9행 ]
이 경우 서비스는 → 여기서 서비스란

[ p290 절 제목 ]
디바이스 찾기 → 디바이스 감지

[ p319 장 제목 ]
휴먼 인터페이스 장치: 제어와 인터럽트 전송 사용
→ 휴먼 인터페이스 장치: 제어와 인터럽트 전송

[ p518 표 19-2 5행 3열 ]
0.440V → 0.440V

 2, 3쇄 오류/오탈자 

[ p53 표 2-4 1행 3~5열 ]
데이터 패킷 내용 패킷 소스 | 핸드쉐이크 패킷 내용 | 핸드쉐이크
→ 데이터 패킷 내용 | 핸드쉐이크 패킷 소스 | 핸드쉐이크 패킷 내용

[ p63 3행 ]
2장 뒷부분에서 → 3장 뒷부분에서