Autoplay
Autocomplete
Previous Lesson
Complete and Continue
Advanced USB Baremetal Device Development: Architecture, Drivers, and Applications
Welcome
Course Intro (Same as Promo) (2:01)
Course Requirements
USB History and Standards
Getting the best out of this course (1:32)
Why Universal Serial Bus? (4:12)
Benefits for Developers and Users (3:53)
The History of USB Standards (7:32)
Overview of USB Type-C (1:28)
The Most Recent Standards (4:45)
Understanding USB OTG (3:37)
The USB Pinout and Signals (2:57)
Understanding USB Connector Types (5:37)
USB Naming Schemes (5:14)
Summary of USB Standards (4:24)
The USB Architecture
USB Device Descriptors (5:39)
Endpoints and Pipes (4:12)
Transfer Types (4:17)
The USB Topology (4:59)
Responsibilities of the Host (5:14)
Hosts, Devices and Hubs (4:02)
A closer look at USB Device Classes (7:17)
Understanding the USB Descriptor Hierarchy (3:29)
USB-OTG vs. Host (2:34)
The Enumeration Process
Understanding USB Descriptors (5:14)
Understanding the Enumeration Process (3:01)
Detecting the Device and the Speed of the Device (4:59)
Determining What Device is Attached (2:40)
Completing the Enumeration Process (4:06)
USB Data Transfers
A Closer Look at Endpoints (5:49)
Factors for Selecting Transfer Types (5:33)
Control, Interrupt, Isochronous and Bulk Transfers (8:34)
Priority Access of Bandwidth for Transfer Types (2:49)
Priority Access Case Study (1:31)
The USB Ptotocol
Understanding USB Endpoints (4:35)
The USB Transaction Types (4:11)
Understanding USB Pipes (1:44)
The USB Packet Types (3:16)
The 3 Phases of the Transaction Workflow (4:57)
The Packet IDs and their Names (1:41)
The Interrupt Transcation Flow (7:13)
The Bulk Transcation Flow (3:47)
The Isochronous Transcation Flow (2:42)
The STM32 USB OTG_FS Subsystem
USB Integration accross the STM32 Family (7:37)
Introduction to the STM32_USB_OTG_FS (4:10)
Overview of the OTG_FS Capabilities (3:07)
Key Features for Host Mode and Device Mode (4:17)
The USB OTG_FS Block Diagram (5:35)
The Clock Source and CPU Interaction of the USB Core (3:00)
Data Transmission and Reception (1:35)
The Peripheral Endpoints (5:50)
The Endpoint Control Features (1:03)
Endpoint and Peripheral Core Interrupts (1:41)
The Host Enumeration Process and Registers for Management (4:18)
The USB Data FIFOs (3:38)
The USB Host Data FIFOs (3:43)
The STM32 USB Configuration and Management Registers
Classification of the USB Registers (2:50)
The USB Core Global Registers (4:42)
The Host Mode Registers (6:25)
The Device Mode Registers (2:38)
The Data FIFO Access Registers (1:32)
The USB Software Stack
Overview of the USB Stack (1:17)
Analyzing the various Layers of the USB Stack (7:10)
The USB Device States (1:25)
The USB Data Transfer Flow (3:41)
Initializing and Starting the USB Device (1:51)
Adding Custom Endpoints (2:39)
Overview of Key Files and Functions
Some Parameters for Configuring the USB Device Driver (3:25)
Overview of Some Key Files and Functions of the USB Stack (7:48)
Overview of the HID Class Driver Functions (1:43)
Developing the Low Level Driver Files
Programming: Creating the Workspace (3:20)
Programming: Getting the Required Documentation for the Microcontroller (3:26)
Programming: Integrating the Right Packages (10:21)
Programming: Implementing the Correct Folder Structure (6:05)
Programming: Setting Up the Project Paths (11:39)
Programming: Definining the Main Enumerator Types (8:09)
Programming: Definining the USB Configuration Structure (3:26)
Programming: Definining the USB Endpoint Type Structure (4:02)
Programming: Definining the USB Host Channel Type Structure (4:04)
Programming: Defining Some Macros for Holding Mode and Speed Values (3:31)
Programming: Defining Macros for the Frame Interval, Frequency and MPS (7:44)
Programming: Defining Macros for the Endpoint Configuration (3:01)
Programming: Defining Macros for the Status Codes (2:09)
Programming: Defining Macros for Host Channel and Test Modes (3:52)
Programming: Defining Macros for Some Key USB Registers (6:36)
Programming: Defining Macros for Dealing with Interrupts (3:19)
Programming: Implementing the Device Definitions File (5:51)
Programming: Implementing the USB Core Initialization Function (10:32)
Programming: Implementing the USB Core Reset Function (6:34)
Programming: Implementing the Function for Setting the Turnaround Time (7:44)
Programming: Implementing the Functions for Enabling and Disabling Global Interrupts (0:49)
Programming: Creating the Timebase Files (3:55)
Programming: Analyzing the System Clock Tree (6:15)
Programming: Configuring the System Clock Tree (5:49)
Programming: Analyzing the Documentation for Systick (4:31)
Programming: Implementing the Timebase Initialization Function (10:27)
Programming: Implementing the Delay Function (3:11)
Programming: Implementing the Function for Setting the Current Mode (4:24)
Programming: Implementing the get_mode() Function (2:03)
Programming: Implementing the Device Initialization Function(Pt.1) (6:42)
Programming: Implementing the Device Initialization Function(Pt.2) (3:16)
Programming: Implementing the Device Initialization Function(Pt.3) (11:22)
Programming: Implementing the set_device_speed( ) Function (2:10)
Programming: Implementing the get_device_speed( ) Function (2:23)
Programming: Implementing the TX and RX FIFO Flush Functions (7:09)
Programming: Implement the usb_activate_endpoint( ) Function (9:10)
Programming: Implement the usb_deactivate_endpoint( ) Function (4:31)
Programming: Implement the endpoint_start_transfer( ) Function(Pt.1) (8:07)
Programming: Implement the endpoint_start_transfer( ) Function(Pt.2) (5:37)
Programming: Implement the endpoint_start_transfer( ) Function(Pt.3) (2:51)
Programming: Implement the endpoint_start_transfer( ) Function for the Control Endpoint (4:46)
Programming: Implementing the Endpoint Stop Transfer Function (4:08)
Programming: Implementing the USB Write Packet Function (3:17)
Programming: Implementing USB Read Packet Function (4:11)
Programming: Implemeing the Endpoint Stall Functions (3:31)
Programming: Stopping the USB Device (3:11)
Programming: Setting the Device Address (1:31)
Programming: Implementing the USB Connection Functions (2:03)
Programming: Implementing the Functions for Returning Global Interrupt Status (2:07)
Programming: Implementing the Functions for Returning OUT and IN Interrupt Status (5:05)
Programming: Getting the Interrupt Status of a Particular Endpoint (3:55)
Programming: Getting the USB Mode (1:41)
Programming: Activating EP0 for Setup Transactions (1:39)
Programming: Implementing the EP0 Out Start Function (10:29)
Programming: Initializing the USB for Host Mode Operation (17:51)
Programming: Resetting the USB Host Port (3:48)
Programming: Getting the Host Speed and Current Frame (1:44)
Programming: Implementing the Host Channel Initialization Function (14:53)
Programming: Implementing the Host Start Transfer Function(Pt.1) (7:32)
Programming: Implementing the Host Start Transfer Function(Pt.2) (6:20)
Programming: Halting the Host Channel (9:46)
Programming: Implementing the 'Do Ping' Function (3:13)
Programming: Stopping the USB Host Core (3:55)
Programming: Activating and Deactivating Remote WakeUp (2:01)
Programming: Exposing the USB Low Level Functions (2:37)
The Peripheral Controller Device(PCD) Interface File
Programming: Defining the Link Power Panagement(LPM) States (3:56)
Programming: Creating the PCD Files (2:59)
Programming: Defining the Battery Charger Detection(BCD) States (3:20)
Programming: The PCD Handle Typedef (4:03)
The PCD Initialization and De-Initialization
Programming: The PCD Initialization Function (7:00)
Programming: The PCD De-Initialization Function (4:44)
Programming: Starting and Stopping the PCD (4:27)
Programming: Interrupts and PHY Clock Gating (4:55)
The PCD Interrupt Request(IRQ ) Handler
Programming: Declaing the Required Local Variables (3:17)
Programming: Verifying Device Mode and Preliminary Checks (2:50)
Programming: Handling RxFIFO Level(RXFLVL) Interrupt (8:35)
Programming: Handling OUT Endpoint(OEPINT) Interrupts(Pt.1) (6:55)
Programming: Handling OUT Endpoint(OEPINT) Interrupts(Pt.2) (8:49)
Programming: Handling OUT Endpoint(OEPINT) Interrupts(Pt.3) (1:59)
Programming: Handling IN Endpoint(IEPINT) Interrupts(Pt.1) (7:30)
Programming: Handling IN Endpoint(IEPINT) Interrupts(Pt.2) (5:35)
Getting the best out of this course
Lesson content locked
If you're already enrolled,
you'll need to login
.
Enroll in Course to Unlock