- Chapter 1 Introduction - Motivation of USB - "If you can plug it in, it works" - Chapter 4 Architectural Overview - Devices and hosts (Bus topology) - Types of USB; this presentation only covers Full Speed, USB 2.0 - Won't discuss hubs - Chapter 6 Mechanical - Mostly won't cover this because people have seen USB devices before - Insertion force & extraction force - Chapter 7 Electrical - 4 wires, their names and colors - 7.2 Power distribution - Current limits (briefly show Figure 7-47) - Suspend current - Inrush current limiting (7.2.4.1) - Dynamic detach (7.2.4.2, Device Capacitance ECN) - 7.1 Signalling - Pull-ups and pull-downs on device and host side (Figure 7-20) - J/K signals - NRZI (Figure 7-31) - Bit stuffing - Sync pattern - End-of-packet - Chapter 8 Protocol Layer - Addresses (5.3.1) - Endpoints (5.3.1) - Structure of a USB packet (8.1, 8.2, 8.3, 8.4) - sync, pid, address, endpoint, data, crc16 - Bulk/interrupt transactions - IN NAK - IN DATA ACK - OUT DATA NAK - OUT DATA ACK - IN STALL - OUT DATA STALL - Data toggle and how it helps handle errors (5.7.5, 8.6) - Bulk/interrupt transfers (5.7, 5.8) - Transfer data until you get a short packet or full amount - Control transfers (from section 5.5, 8.5.3, 9.3) - The importance of USB ECNs == The stuff above this line could easily be a full presentation == - Chapter 9 USB Device Framework - This is the chapter that firmware writers really need - Goals: assigning unique addresses, identify the device, load drivers - USB device states - Descriptors - Device descriptor - VID/PID (and why they should have more bits) - Class/subclass/protocol - String descriptors - Product, manufacturer, serial number - Configuration descriptors - Interface descriptors - Endpoint descriptors - Class-specific descriptors - How this stuff maps to USB drivers - Microsoft OS 1.0/2.0 Descriptors - libusbp - device - generic interface - generic handle - control transfers - synchronous read - asynchronous read - USB device classes - General idea