Ưu đãi trong tuần: Nhập mã UD50 giảm 50k cho đơn từ 300k!
Trang chủ
Menu

USB Behind the Scenes: Hands-on HID Firmware Development

USB Hậu Trường: Phát Triển Firmware HID Thực Hành

USB Hậu Trường: Phát Triển Firmware HID Thực Hành

Khóa học video số 1 hướng dẫn từng bước lập trình firmware "bare-metal" cho thiết bị giao diện người dùng USB (HID).

4.7
(787 đánh giá)
5,457 học viên
Giảng viên
Mohammed Noureldin
Phụ đề Việt chất lượng cao Phụ đề tiếng Anh Bán chạy Đánh giá cao
50.000đ 349.000đ -86%
✓ Xem giỏ hàng và thanh toán
Bao gồm phụ đề tiếng Việt, tiếng Anh
14.5 giờ video
166 bài giảng
Truy cập vĩnh viễn
Học trên mọi thiết bị
Cập nhật: 30/05/2026

Bạn sẽ học được gì

Viết firmware "bare-metal" cho thiết bị giao diện người dùng USB 2.0 (HID) mà không cần dùng bất kỳ thư viện bên thứ ba hay công cụ sinh mã nào.
Triển khai driver thiết bị USB và khung giao thức USB 2.0.
Lập trình một con chuột USB hoàn chỉnh từ con số không.
Hiểu rõ về USB descriptors chung và descriptors đặc thù cho lớp thiết bị giao diện người dùng (HID).
Làm việc trực tiếp với USB gốc (KHÔNG chuyển đổi sang UART).
Sử dụng vi điều khiển ARM Cortex-M4 (STM32F4xx), một trong những MCU nổi tiếng và được phát triển mạnh nhất thế giới.
Gỡ lỗi giao tiếp USB bằng Wireshark và Linux SysLog.
Đọc các phần khác nhau trong tài liệu tham khảo ARM Cortex-M4 và trích xuất thông tin quan trọng một cách hiệu quả.
Hiểu cách thức hoạt động của giao thức USB 2.0 ở chế độ full speed.
Hiểu về endpoints, pipes, các loại truyền dữ liệu, packets, transactions, frames, nguồn cấp điện, topology và nhiều khái niệm khác.
Tìm hiểu các thông số kỹ thuật cơ bản về cơ và điện của USB (đầu nối, cáp, điện trở xác định tốc độ, và nhiều hơn nữa).
Biết về lịch sử và động lực đằng sau việc phát triển universal serial bus (USB).
Học cách sử dụng Single Wire Output (SWO) để gửi log tới máy chủ gỡ lỗi.
Tăng năng suất và khả năng di chuyển mã nguồn bằng cách sử dụng ARM CMSIS.
Tạo tài liệu cho mã nguồn bằng cú pháp Doxygen.

Yêu cầu

Kiến thức cơ bản về ngôn ngữ lập trình C (được khuyến nghị).
Kiến thức cơ bản về thiết kế hệ thống nhúng.
Bất kỳ vi điều khiển STM32F4 nào (dựa trên ARM Cortex-M4) trên board Discovery hoặc Nucleo để áp dụng kiến thức.

Đối tượng phù hợp

Dành cho bất kỳ ai muốn hiểu cách thức hoạt động phức tạp của hệ thống USB đằng sau hậu trường.
Kỹ sư nhúng muốn phát triển thiết bị USB.
Kỹ sư muốn mở rộng kiến thức về hệ thống nhúng nói chung.
Kỹ sư muốn viết firmware có tính module cao và dễ bảo trì.

Nội dung khóa học

11 phần • 166 bài giảng
1 Giới thiệu
2 Làm thế nào để tận dụng tối đa khóa học này?
3 Máy chủ Discord để học viên trao đổi
4 Tại sao chọn Vi điều khiển STM32F429ZI (dựa trên ARM Cortex-M4)?
5 Đánh giá trên Udemy
1 Định nghĩa và Động lực
2 Lịch sử
3 Cáp và Đầu nối
4 Cấu trúc Cáp USB 2.0
5 Tính năng Chính
6 Bus Topology và Chức năng
7 VBUS
8 Thông số kỹ thuật Cấp nguồn
9 Bộ sạc Thông minh
1 Trạng thái Vi sai
2 Trạng thái Bus
3 Dung sai Thời gian
4 Xác định Tốc độ USB 2.0
5 Bit Stuffing
6 Non-Return-to-Zero Inverted (NRZI)
7 Bộ điều khiển Máy chủ (Host Controllers)
8 Frames
9 Endpoints
10 (PDF) Các loại Packet và Transaction
11 Packets
12 Các loại Packet và Trường dữ liệu Packet
13 Transaction
14 Packet Identifiers
15 Token Packets
16 Data Packets
17 Handshake Packets
18 Địa chỉ Thiết bị
19 Bus Polling
20 USB là Host Driver
21 Trình diễn USB là Host Driver
22 Các loại Endpoint (Các loại Truyền dữ liệu)
23 Truyền dữ liệu Ngắt (Interrupt Transfer)
24 Truyền dữ liệu Khối (Bulk Transfer)
25 Truyền dữ liệu Đồng bộ (Isochronous Transfer)
26 Truyền dữ liệu Điều khiển (Control Transfer)
27 Các giai đoạn của Truyền dữ liệu Điều khiển
28 Phân bổ Băng thông Bus
1 Cài đặt STM32CubeIDE
2 Tạo một Dự án Mới
3 Thêm ARM CMSIS
4 Loại bỏ Sysmem và Syscalls
5 Ghi log tới Debugger bằng SWO
6 Công cụ hỗ trợ Ghi log
7 Cấu hình Debugger và SVW để Ghi log
8 Mã nguồn dự án
1 KHÔNG SINH MÃ TỰ ĐỘNG TRONG STM32CubeMX
2 Phương pháp của tôi để giải thích về Clocking
3 Tạo Dự án STM32CubeMX Tạm thời
4 Module USB yêu cầu Tín hiệu 48 MHz
5 Hiểu các Yêu cầu về Tần số Clock
6 Hiểu về PLL, Bộ chia tần số (Prescalers), SYSCLK và HCLK
7 Hiểu về Bộ chia MCO
8 Các bước Đầu tiên để Cấu hình Clock
9 Thao tác Bit trong CMSIS
10 Cấu hình Flash Latency
11 Macro CMSIS Fld2Val và Val2Fld
12 Bật HSE
13 Bật và Cấu hình PLL
14 Cấu hình APB-Prescaler
15 Tắt HSI
16 Sửa lỗi bẫy cấu hình PLL
17 Kiểm tra Cấu hình Clock
18 Cấu hình MCO
19 Xác minh Tần số Clock bằng Oscilloscope
20 Cấu hình lại Tần số Clock SWO
1 Cài đặt Wireshark trên Linux
2 Xem Linux System Log
1 Kiến trúc Firmware chúng ta sẽ sử dụng
2 Tạo các tệp Nguồn và Header cho Driver và Truy cập các vùng USB
3 Cấu hình GPIO thành các chân USB
4 Mẹo để đạt được lợi ích tối đa
5 Lướt qua phần Cấu hình Lõi và Thiết bị
6 Khởi tạo Lõi USB
7 Khởi tạo Ngắt cho Lõi USB
8 Kết nối Thiết bị USB vào Bus (Sử dụng Firmware)
9 Kiểm thử việc Kết nối Thiết bị USB với Host
1 Ngắt Toàn cục của Lõi USB
2 Trình xử lý Ngắt Toàn cục USB
3 Các bước Xử lý Tín hiệu Reset USB
4 Trình xử lý Reset USB
5 Cấu hình Endpoint 0
6 Cấu hình các Endpoint IN
7 LƯU Ý về bài giảng "Hủy cấu hình Endpoint"
8 Hủy cấu hình Endpoint
9 LƯU Ý: Kiểm tra Tham số và Tạo tài liệu Mã nguồn
10 Hiểu về Bộ nhớ FIFO chuyên dụng
11 Cấu hình Kích thước FIFO
12 Cấu hình Độ lệch FIFO
13 Cấu hình FIFO trong khi Cấu hình Endpoints
14 Xóa sạch FIFOs
15 Truy cập các FIFO
16 Ngắt Hoàn thành Truyền dữ liệu
17 Trình xử lý Hoàn thành Xác định Tốc độ USB
18 Triển khai Trình xử lý Ngắt RxFIFO Không rỗng
19 Dữ liệu Trạng thái Hoàn thành SETUP và OUT Transfer
20 Lấy dữ liệu ra khỏi RxFIFO (Từ một endpoint OUT)
21 Đẩy dữ liệu vào TxFIFO (Tới một endpoint IN)
22 Sửa lỗi Biên dịch (Sắp xếp lại một số Hàm)
23 Định nghĩa Kiểu Driver USB
1 Polling ở Mức độ Ngắt
2 Định nghĩa Kiểu Sự kiện USB
3 Định nghĩa Trạng thái Thiết bị USB
4 Định nghĩa Các giai đoạn Truyền dữ liệu Điều khiển USB
5 Định nghĩa Cấu trúc Thể hiện Thiết bị USB
6 Bắt đầu Cấu hình Thể hiện Thiết bị USB
7 Triển khai Trình xử lý Reset USB
8 [DRIVER] Triển khai USB Set Address
9 Kích hoạt Sự kiện Reset USB (Gọi Trình xử lý)
10 Đọc các Yêu cầu đã Nhận
11 Hiểu Cấu trúc Yêu cầu USB
12 Hiểu các Yêu cầu Thiết bị Chuẩn USB
13 Định nghĩa Cấu trúc của các Yêu cầu USB
14 Bắt đầu Xử lý các Yêu cầu
15 Phân tích Yêu cầu Đầu tiên
16 Định nghĩa Cấu trúc Descriptor
17 Viết Device Descriptor
18 Định nghĩa các Macro Yêu cầu Chuẩn (wValue)
19 Lỗi Định nghĩa Biến sau Switch Case
20 Chỉ ghi một Packet KHI Endpoint trống
21 Bắt đầu Triển khai Bộ xử lý Giai đoạn Điều khiển
22 Xử lý Yêu cầu GET DEVICE Descriptor
23 Xử lý Giai đoạn IN-DATA
24 Xử lý Ngắt IN và OUT Endpoint
25 Xử lý Hoàn thành Truyền dữ liệu IN và OUT
26 Gửi Packet Cuối cùng của Transactions
27 Xử lý Giai đoạn OUT-STATUS
28 Xử lý Giai đoạn con IN-DATA Zero
29 Gọi các Hàm đã Triển khai Trước khi Kiểm thử
30 Xem Giao tiếp Thành công Đầu tiên trong SysLog
31 Xem Giao tiếp Thành công Đầu tiên trong Wireshark
32 Xử lý Yêu cầu SET ADDRESS
33 Đặt Địa chỉ Thiết bị sau khi hoàn thành transaction
34 Xử lý Giai đoạn IN-STATUS
35 Xem lỗi không có SET ADDRESS trong SysLog
36 Xem Yêu cầu và Phản hồi SET ADDRESS trong Wireshark
37 Xem toàn bộ phản hồi GET DEVICE DESCRIPTOR trong Wireshark
38 Xem yêu cầu GET CONFIGURATION trong Wireshark
39 Hiểu ý tưởng kết hợp các descriptors
40 Định nghĩa placeholder cho CONFIGURATION descriptor
41 Kết hợp CONFIG-Combination thành một định nghĩa duy nhất
42 Xử lý yêu cầu GET CONFIGURATION DESCRIPTOR
43 Hiểu kích thước của CONFIG-Combination
44 Xử lý yêu cầu SET CONFIGURATION
45 Định nghĩa hàm cấu hình cụ thể cho use-case
1 Thông số kỹ thuật Chuột USB Đơn giản
2 Viết CONFIGURATION descriptor
3 Viết INTERFACE descriptor
4 Viết ENDPOINT descriptor
5 Viết HID descriptor
6 Giới thiệu HID Report descriptor / Cấu trúc HID report
7 Mô tả các nút HID
8 Mô tả các trục HID
9 Nén gọn HID report descriptor
10 Đóng gói các lớp dữ liệu (không căn chỉnh theo từ)
11 Giới thiệu các yêu cầu Set Idle và Get HID Report descriptor
12 Xử lý yêu cầu SET IDLE
13 Xử lý yêu cầu GET HID REPORT descriptor
14 Phản hồi với các token INTERRUPT IN
15 Kiểm thử Chuột USB HID
16 Thay đổi thứ tự descriptors (tương thích Windows)
1 Kết luận, Bước tiếp theo và Lời cảm ơn!

Giới thiệu khóa học

Have you ever wanted to develop your own device that can be connected to a computer using USB? Are you familiar with using USB <-> UART adapters but want to take your USB knowledge and understanding to the next ultimate level? If yes, then this course is absolutely for you!

I made the whole content of slides and code by myself after a lot of preparation and fine-tuning to give you the best experience you can find today online to learn and understand USB protocol and framework in theory and in practice.

Your journey with me in this course should save you from any frustration that could happen when you try to learn or understand USB from any other online source. USB is for most a mystery and a very complex protocol, and most engineers try to avoid it or at least try to convert it to other simpler protocols. However, after taking this course, you will be able to be a confident native USB engineer, and you will be able to develop your first bare-metal USB device with me without using any library, which will give you full control over the powers of USB. Even if you want in your career to use a USB library, taking this course will give you a full understanding of what is going on behind the scenes, and will allow you to be able to develop and fine-tune and USB device you want, because, after the end of this course, I would expect from you to have a full understanding of the concept of USB and how it works.

In this course, we will:

- Start with some theoretical information about USB.

- Understand the essential details of USB protocol.

- Take our time to understand how to configure the clock of any embedded system correctly.

- Implement a bare-metal USB firmware for ARM Cortex M4 based microcontroller (STM32F4xx family).

- Implement a bare-metal USB framework.

- Develop our own USB HID mouse from zero to fully functional!

Of course, the source code of the project we are going to develop together in this course will be available for you to download. You may use it as a template (fully or partially) for your projects in the future.

This course is in its early stages and some new additional content will be added or enhanced if necessary frequently. Nevertheless, the current content is full and sufficient to get a fully functional USB human interface device.

Happy engineering! See you inside the course!

Khóa học liên quan

Khám phá thêm các khoá học cùng chủ đề

Hiển thị tất cả khoá học C Programming
Hiển thị tất cả khoá học Embedded Systems
Hiển thị tất cả khoá học Firmware Development
Zalo
Tôi có thể tư vấn khoá học cho bạn 😊