USB CDC ACM là gì?
CDC ACM trên STM32: tại sao giống UART về trải nghiệm nhưng khác về implementation, SET_CONTROL_LINE_STATE, DTR và điểm dễ nhầm khi dùng với terminal.
CDC ACM (Communication Device Class - Abstract Control Model) làm USB device trông như một cổng serial trên host OS. Không cần driver riêng trên Windows 10+, Linux và macOS.
Giống UART về trải nghiệm
Cắm cáp, mở Tera Term, chọn COM port, đọc log. Trải nghiệm y hệt UART qua
USB-UART converter. Về firmware, cũng có hàm gửi (CDC_Transmit_FS) và callback
nhận (CDC_Receive_FS).
Khác UART về implementation
- Không có baud rate thật sự (USB Full Speed cố định 12 Mbps)
- Không có mức điện áp CMOS/TTL
- Phải kích hoạt lại endpoint sau mỗi lần nhận (UART tự động nhận liên tục)
- Cần IAD trong composite device để Windows nhận đúng
SET_CONTROL_LINE_STATE
Khi terminal mở COM port, driver gửi SET_CONTROL_LINE_STATE:
Value=0x0000 DTR=0, RTS=0 → driver Windows tự bind, KHÔNG phải app mở portValue=0x0003 DTR=1, RTS=1 → terminal (Tera Term...) thật sự mở portPhân biệt hai value này quan trọng khi cần log “greeting” lúc kết nối.
Bắn log ngay khi Value=3 thường vẫn bị miss vì app chưa kịp bắt đầu đọc.
Delay 100ms sau Value=3 là giải pháp thực tế.
Conflict COM port
CDC chỉ cho một connection tại một thời điểm. Nếu Tera Term đang giữ COM port, Python tool (pyserial) không thể connect - phải đóng Tera Term trước.
Xem chi tiết: bài 6 CDC Debug Channel
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ị.
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.
USB Enumeration Process là gì?
Chuỗi hỏi–đáp qua Endpoint 0 từ lúc device cắm vào đến khi host giao address và chọn configuration. 7 bước, điểm nào dễ fail và cách debug từ dưới lên.
USB Transfer Types là gì?
So sánh Control, Interrupt, Bulk và Isochronous transfer: dùng ở đâu, đảm bảo gì, và dễ debug sai ở điểm nào — đặc biệt là cách bInterval thực sự hoạt động trên Windows.
Firmware Log với USB CDC Debug Channel
Triển khai CDC debug channel trên STM32G0: descriptor CDC, ring buffer, ISR-safe logging và tránh xung đột DTR khi host mở COM port.
Biến note thành bài viết hoàn chỉnh
Notes là nơi ghi nhanh khái niệm.