USB Bulk Transfer cho debug dump là gì?

Bulk IN cho RAM dump trên STM32G0: state machine chunk 64 byte, DataIn callback pipeline, tại sao không dùng ZLP, Zadig cho Windows và throughput thực đo.

Cập nhật 1 phút đọc
USB cover

Bulk Transfer phù hợp cho data lớn một chiều: không có latency guarantee nhưng throughput cao và tự động retry khi có lỗi.

Pipeline chunk-to-chunk

Main loop: VendorDump_Run() gửi chunk đầu tiênDataIn ISR: VendorDump_OnTxCplt() gửi chunk tiếp theo ngay lập tức... lặp cho đến sDumpOffset >= kDumpSize ...ISR set sDumpDone = trueMain loop: log completion từ CdcLog_Printf

Chunk đầu từ main loop, chunk tiếp theo từ DataIn callback. Giữ pipeline đầy, không để CPU idle giữa các chunk.

Tại sao không ZLP

147456 = 2304 × 64 (bội số chính xác của max packet size). Lý thuyết cần ZLP. Nhưng host đã biết acceptedLength=147456 từ response START_RAM_DUMP, nên host tự dừng đọc khi đủ byte. Không phụ thuộc behavior ZLP của từng OS.

Zadig trên Windows

Vendor-specific interface (bInterfaceClass=0xFF) không có inbox driver. Phải dùng Zadig bind WinUSB hoặc libusbK vào đúng Interface 3. Không cài nhầm vào Interface 0 (HID sẽ ngừng hoạt động).

Throughput thực đo

418.7 KB/s trên USB Full Speed (STM32G0, vendor_test.py). Bottleneck là pyusb overhead phía host, không phải firmware.

Xem chi tiết: bài 7 Vendor Request và Bulk

Bài viết này hữu ích với bạn?

Chia sẻ, góp ý, hoặc ủng hộ nếu bạn thấy nội dung này có giá trị.

Góp ý

Nội dung liên quan

Một số bài viết, ghi chú hoặc project có liên quan đến nội dung bạn vừa đọc.

Biến note thành bài viết hoàn chỉnh

Notes là nơi ghi nhanh khái niệm.