책 소개
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장 뒷부분에서