책 소개
					USB의 강력한 성능으로 제품을 업그레이드 하세요!
USB는 사용자가 컴퓨터 주변기기를 쉽고 친근하게 사용할 수 있게 하는 것을 목적으로 설계됐다. USB 주변장치는 데이터를 교환하고 전원을 관리하는 USB 프로토콜을 반드시 지원해야 한다. 이 책에서는 안정적이고 효율적으로 통신하는 주변장치를 설계하고 프로그래밍하는 데 필수적인 가장 기본적인 정보부터 임베디드 개발자가 알아야 할 모든 것을 설명한다.
[ 이 책에서 다루는 내용 ]
▶ 진행 중인 프로젝트에 적합한 컨트롤러 선택
▶ USB 디바이스 클래스를 사용한 개발시간 단축
▶ 비주얼베이직 닷넷이나 비주얼 C++ 닷넷 애플리케이션에서 USB 장치에 접근하는 방법
▶ 전원이 따로 필요 없는 USB 장치 개발
▶ USB OTG를 사용해 USB 장치들이 PC 없이도 서로 통신할 수 있게 하는 방법
▶ 디버깅과 적합성 테스트 툴을 사용한 조속한 문제 해결
[ 부가 정보 ]
USB와 관련한 최신 뉴스, 문서, 제품 또는 벤더 정보 및 USB 제품 개발에 관한 추가정보를 얻고 싶다면, 저자가 운영하고 있는 USB Central(http://www.lvr.com/usb.htm) 사이트를 확인하기 바랍니다.
			USB는 사용자가 컴퓨터 주변기기를 쉽고 친근하게 사용할 수 있게 하는 것을 목적으로 설계됐다. USB 주변장치는 데이터를 교환하고 전원을 관리하는 USB 프로토콜을 반드시 지원해야 한다. 이 책에서는 안정적이고 효율적으로 통신하는 주변장치를 설계하고 프로그래밍하는 데 필수적인 가장 기본적인 정보부터 임베디드 개발자가 알아야 할 모든 것을 설명한다.
[ 이 책에서 다루는 내용 ]
▶ 진행 중인 프로젝트에 적합한 컨트롤러 선택
▶ USB 디바이스 클래스를 사용한 개발시간 단축
▶ 비주얼베이직 닷넷이나 비주얼 C++ 닷넷 애플리케이션에서 USB 장치에 접근하는 방법
▶ 전원이 따로 필요 없는 USB 장치 개발
▶ USB OTG를 사용해 USB 장치들이 PC 없이도 서로 통신할 수 있게 하는 방법
▶ 디버깅과 적합성 테스트 툴을 사용한 조속한 문제 해결
[ 부가 정보 ]
USB와 관련한 최신 뉴스, 문서, 제품 또는 벤더 정보 및 USB 제품 개발에 관한 추가정보를 얻고 싶다면, 저자가 운영하고 있는 USB Central(http://www.lvr.com/usb.htm) 사이트를 확인하기 바랍니다.
목차
목차
- 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
 
 
도서 오류 신고
정오표
					 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장 뒷부분에서
			[ 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장 뒷부분에서


