Tin mới nhất

Menu

Chia Sẻ Khóa Học Lập Trình Embedded USB Trên STM32 - Xây Dựng Các Thiết Bị USB Thực [Khóa 5065 A]

Học USB firmware development trên vi điều khiển STM32 thông qua các dự án và ứng dụng hệ thống nhúng thực tế.

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

  • ✓ Build một USB HID mouse hoạt động được trên STM32 và quan sát con trỏ chuột của chính bạn di chuyển trên host PC.
  • ✓ Build một USB mass storage device được PC nhận diện như một ổ đĩa di động chứa các file text có thể đọc được.
  • ✓ Đọc và tự viết thủ công mọi USB descriptor chuẩn: device, configuration, interface, endpoint và string.
  • ✓ Hướng dẫn từng bước cách nhận dạng thiết bị USB, từ attach, reset đến gán địa chỉ và cấu hình.
  • ✓ Decode một USB control transfer.
  • ✓ Lựa chọn kiểu transfer phù hợp cho từng job và giải thích lý do: control, interrupt, bulk hoặc isochronous.
  • ✓ Capture live USB traffic trên máy của bạn với Wireshark và USBPcap, đồng thời đọc hiểu nội dung trao đổi giữa host và thiết bị.
  • ✓ Dump và decode các descriptor thực tế của một thiết bị bạn đang sở hữu bằng USB Device Tree Viewer hoặc lsusb.
  • ✓ Cấu hình STM32 USB peripheral trong STM32CubeMX: clock tree, pin và USB device middleware.
  • ✓ Đọc và chỉnh sửa USB code do ST tạo ra một cách tự tin thay vì coi nó như một black box.
  • ✓ Chẩn đoán các lỗi USB tốn hàng ngày trời ở các dự án thực tế: descriptor length mistake, clock misconfiguration, lỗi treo ở chế độ sleep và wakeup.
  • ✓ Giải thích USB signalling: DP & DM, NRZI encoding, bit stuffing, sync field, J & K state, SE0 & reset..
  • ✓ Viết các HID report descriptor cho mouse & keyboard report, đồng thời xử lý các lệnh SCSI mà một mass storage device phải phản hồi.
  • ✓ Hoàn thành dự án tổng kết biến mouse firmware của bạn thành một HID keyboard tùy chỉnh với các macro key.

Lưu ý: Khóa học này vẫn đang trong quá trình phát triển. Giảng viên liên tục bổ sung các video mới mỗi tuần.

Bạn có muốn xây dựng các kỹ năng USB thực tế hữu ích trong việc phát triển sản phẩm nhúng thực tế không? Vậy thì đây chính là khóa học dành cho bạn.

USB là một trong những interface được sử dụng rộng rãi nhất để kết nối các thiết bị nhúng với máy tính. Bàn phím, chuột, webcam, thiết bị lưu trữ, thiết bị đo lường, thiết bị âm thanh và nhiều sản phẩm khác đều dựa vào USB để giao tiếp với một host system.

Tuy nhiên, việc triển khai USB trong một hệ thống nhúng phức tạp hơn đáng kể so với việc làm việc với các interface như UART, SPI hoặc I2C.

Một trong những khó khăn chính là USB không đơn thuần chỉ là một peripheral interface. Nó là một giao thức giao tiếp do host kiểm soát với nhiều layer hoạt động, các device class chuẩn, các descriptor, endpoint, transfer type, quy tắc cấu hình, timing requirement và các kỳ vọng từ phía host.

Các kỹ sư học về USB thường gặp phải một số thách thức chung.

Thông số kỹ thuật USB rất rộng và sử dụng thuật ngữ có thể khó hiểu nếu chưa xây dựng được một mô hình giao thức rõ ràng. Các khái niệm như enumeration, descriptor, configuration, interface, endpoint, control transfer, interrupt transfer, bulk transfer, device class, request, packet, transaction và transfer scheduling có mối liên hệ mật thiết với nhau. Hiểu được một khái niệm thường phụ thuộc vào việc hiểu rõ vài khái niệm khác.

USB development cũng đòi hỏi phải hiểu rõ sự tương tác giữa nhiều layer:

  • ✓ USB electrical interface.
  • ✓ USB protocol.
  • ✓ USB device controller bên trong microcontroller.
  • ✓ Device descriptor và các class-specific descriptor.
  • ✓ Cấu hình Endpoint.
  • ✓ Các USB device class.
  • ✓ MCU vendor HAL hoặc low-level driver.
  • ✓ USB middleware.
  • ✓ Host operating-system behavior.
  • ✓ Host-side driver & class support.

Một khó khăn khác là debugging. Một thiết bị USB có thể biên dịch và chạy chính xác trên vi điều khiển nhưng vẫn thất bại trong việc nhận diện trên host. Một lỗi nhỏ trong một descriptor field, endpoint definition, USB clock configuration, request response, hoặc middleware configuration có thể khiến hệ điều hành từ chối thiết bị.

Các tài liệu học tập cũng có thể bị phân mảnh. Một số tài liệu chỉ tập trung vào thông số kỹ thuật USB, trong khi các tài liệu khác lại demo code do vendor tạo ra mà không giải thích đầy đủ giao thức đứng đằng sau nó. Do đó, các project mẫu có thể rất khó sửa đổi vì mối quan hệ giữa generated firmware, các USB descriptor, middleware và host behavior không phải lúc nào cũng rõ ràng.

Khóa học này được thiết kế để giải quyết những vấn đề này một cách có hệ thống.

Phương pháp tiếp cận của khóa học:

Khóa học bắt đầu với kiến trúc và giao thức USB trước khi chuyển sang phần triển khai trên STM32.

Trước tiên, bạn sẽ hiểu rõ các câu hỏi như:

  • ✓ USB là gì?
  • ✓ Vai trò của USB host là gì?
  • ✓ Vai trò của thiết bị USB là gì?
  • ✓ Tại sao USB lại do host kiểm soát?
  • ✓ Thiết bị phát hiện và thiết lập một kết nối với host như thế nào?
  • ✓ Điều gì xảy ra trong quá trình nhận diện thiết bị (USB enumeration)?
  • ✓ Thiết bị cung cấp thông tin gì trong quá trình enumeration?
  • ✓ USB descriptor là gì?
  • ✓ Các configuration, interface và endpoint được biểu diễn như thế nào?
  • ✓ Control, interrupt, bulk và isochronous transfer là gì?
  • ✓ Host xác định driver hoặc USB class nào nên xử lý một thiết bị bằng cách nào?

Các khái niệm này được giải thích trước khi đi sâu vào phần triển khai USB trên STM32 để firmware được tạo ra có thể được hiểu trong ngữ cảnh của USB protocol.

Các Project thực hành:

Khóa học bao gồm hai bản triển khai thiết bị USB hoàn chỉnh:

1. USB HID Mouse:

Bạn sẽ cấu hình một vi điều khiển STM32 thành một USB Human Interface Device và triển khai một USB mouse.

Project này giới thiệu HID class và demo các khái niệm bao gồm:

  • ✓ HID descriptor.
  • ✓ Report descriptor.
  • ✓ Interrupt endpoint.
  • ✓ HID report.
  • ✓ Host polling.
  • ✓ Device enumeration.
  • ✓ Mouse movement data.
  • ✓ Tương tác với standard HID driver của hệ điều hành.

Host PC sẽ nhận diện STM32 là một USB mouse mà không cần cài đặt một custom driver riêng.

2. USB Mass Storage Device:

Sau đó, bạn sẽ cấu hình STM32 thành một USB Mass Storage Class device để có thể được gắn kết (mount) bởi hệ điều hành host như một ổ đĩa lưu trữ.

Project này giới thiệu một USB class hoàn toàn khác và cho phép bạn tìm hiểu:

  • ✓ Mass Storage Class descriptor.
  • ✓ Bulk endpoint.
  • ✓ Bulk transfer.
  • ✓ Host storage request.
  • ✓ USB Mass Storage middleware.
  • ✓ Storage abstraction.
  • ✓ Tương tác với Host file-system.

Mục đích của việc sử dụng hai USB class khác nhau là để demo cách một kiến trúc USB hỗ trợ các thiết bị có yêu cầu giao tiếp hoàn toàn khác nhau như thế nào.

Bài tập tổng kết:

Sau khi hoàn thành việc triển khai HID mouse, bạn sẽ mở rộng các khái niệm HID bằng cách phát triển một HID keyboard tùy chỉnh với các macro key.

Mục đích của bài tập này là áp dụng các khái niệm protocol một cách độc lập thay vì chỉ sao chép lại một bản triển khai có sẵn.

Bạn sẽ cần phải sửa đổi cấu hình HID, report descriptor, report format và application behavior theo các yêu cầu của thiết bị mới.

Tại sao USB là một kỹ năng hệ thống nhúng quan trọng:

USB là một kỹ năng có giá trị đối với sinh viên kỹ thuật, các kỹ sư mới vào nghề và các chuyên gia nhúng có kinh nghiệm. Nó giúp bạn vượt qua các dự án GPIO, UART, SPI và I2C cơ bản để làm việc với các sản phẩm thực tế giao tiếp trực tiếp với một PC. Hiểu rõ về USB descriptor, enumeration, endpoint, device class và debugging sẽ củng cố kỹ năng thực tế, cải thiện cơ hội nghề nghiệp và giúp bạn tự tin xử lý các nhiệm vụ USB development & debugging thực tế.

Khóa học nhằm mục đích cung cấp cả kiến thức về protocol lẫn kinh nghiệm thực tế cần thiết để tiếp cận USB device development một cách có hệ thống.

Phần cứng và phần mềm sử dụng trong khóa học:

1. Phần cứng:

Để test tất cả code bài tập và các project xuyên suốt khóa học này, chúng tôi sử dụng bo mạch FastBit Nano board, dựa trên vi điều khiển STM32F303CC.

Tuy nhiên, bạn không bắt buộc phải dùng đúng bo mạch này. Bạn có thể sử dụng bất kỳ bo mạch STM32 development nào hoặc thậm chí một bo mạch từ một MCU vendor khác, miễn là vi điều khiển hỗ trợ ngoại vi USB Full-Speed (USB FS). Có thể cần một số thay đổi nhỏ về code hoặc cấu hình tùy thuộc vào bo mạch bạn sử dụng.

2. Phần mềm:

Chúng tôi sử dụng STM32CubeIDE và STM32CubeMX xuyên suốt khóa học để phát triển và cấu hình. Cả hai công cụ này đều miễn phí tải xuống và sử dụng.

Lưu ý: Khóa học này vẫn đang trong quá trình phát triển. Giảng viên đang tích cực bổ sung video mới mỗi tuần.

Mục lục:

  • ✓ 1. USB từ đầu: What & Why.
  • ✓ 2. USB Physical & Electrical Layer.
  • ✓ 3. Các khái niệm về USB Protocol.
  • ✓ 4. Enumeration, Descriptor & Detection ban đầu.
  • ✓ Còn nữa...!

Khóa học này dành cho:

  • ✓ Các kỹ sư nhúng muốn bổ sung kỹ năng USB device development vào bộ kỹ năng của mình.
  • ✓ Sinh viên và người có sở thích.




Copyright Disclaimer:
This site does not store any files on its server. We only index and link to content provided by other sites. Please contact the content providers to delete copyright contents if any and email us, we'll remove relevant links or contents immediately.
Tuyên bố miễn trừ bản quyền:
Trang web này không lưu trữ bất kỳ tệp nào trên máy chủ của nó. Chúng tôi chỉ lập chỉ mục và liên kết đến nội dung được cung cấp bởi các trang web khác. Vui lòng liên hệ với các nhà cung cấp nội dung để xóa nội dung bản quyền nếu có và gửi email cho chúng tôi, chúng tôi sẽ xóa các liên kết hoặc nội dung có liên quan ngay lập tức.

Chia sẽ bài viết lên:

Nhà Sách Tin Học

Chào mừng các bạn đến với Blog Nhà Sách Tin Học. Thông qua Blog này mình muốn chia sẻ đến các bạn những kiến thức về tin học, các tài liệu hay giáo trình mà mình có hoặc siêu tầm được... Mình rất mong được sự ủng hộ nhiệt tình của các bạn bằng cách comment bài viết, chia sẻ bài viết hoặc liên hệ với mình qua blog này! Mình xin cảm ơn!

No Comment to " Chia Sẻ Khóa Học Lập Trình Embedded USB Trên STM32 - Xây Dựng Các Thiết Bị USB Thực [Khóa 5065 A] "

  • To add an Emoticons Show Icons
  • To add code Use [pre]code here[/pre]
  • To add an Image Use [img]IMAGE-URL-HERE[/img]
  • To add Youtube video just paste a video link like http://www.youtube.com/watch?v=0x_gnfpL3RM