
CAN bus là gì? Giao thức truyền dữ liệu nền của xe hơi
CAN bus là giao thức truyền dữ liệu nối tiếp được thiết kế cho ô tô và máy công nghiệp, cho phép nhiều bộ điều khiển (ECU) cùng chia sẻ một đường truyền hai dây với tốc độ lên tới 1 Mbit/s. Nhờ chi phí thấp, khả năng chống nhiễu mạnh và cơ chế tự phát hiện lỗi, CAN bus đã trở thành xương sống của mọi hệ thống điện tử trên xe ô tô hiện đại, từ hệ thống phanh ABS, túi khí đến động cơ và hộp số.
CAN do hãng Bosch phát minh và đặt tên chuẩn hoá là ISO 11898. Chuẩn này được hiệp hội CAN in Europe (CiA) quản lý và đã có mặt trên thị trường từ những năm 1980. Tuy không phải giao thức mới, CAN bus vẫn là lựa chọn mặc định cho mọi hệ thống điện tử trong xe ô tô, xe tải, xe máy, và cả trong thiết bị y tế, máy công nghiệp.

Cấu trúc khung tin CAN
Một khung tin CAN bao gồm các trường cố định, mỗi trường có độ dài tính bằng số bit quy định sẵn. Khung chuẩn (base frame) dùng mã định danh 11 bit; khung mở rộng (extended frame) dùng mã định danh 29 bit, chia thành 11 bit định danh A và 18 bit định danh B.
| Trường | Số bit | Chức năng |
|---|---|---|
| SOF | 1 | Bắt đầu khung |
| Identifier | 11 | Mã định danh khung |
| RTR | 1 | 0 là khung dữ liệu, 1 là khung yêu cầu |
| IDE | 1 | Phân biệt khung chuẩn và mở rộng |
| r0 | 1 | Bit dự phòng |
| DLC | 4 | Độ dài trường dữ liệu, 0 đến 8 byte |
| Data | 0 đến 64 | Dữ liệu cần truyền |
| CRC | 15 | Mã kiểm tra CRC-15 |
| CRC delimiter | 1 | Dấu phân cách |
| ACK slot | 1 | Xác nhận nhận đúng |
| ACK delimiter | 1 | Dấu phân cách |
| EOF | 7 | Kết thúc khung |
| IFS | 3 | Khoảng nghỉ giữa các khung |
Ngoài trường dữ liệu, khung CAN còn có mã kiểm tra CRC-15 giúp bộ nhận phát hiện lỗi truyền mà không cần gửi lại. Nếu CRC không khớp, bộ nhận sẽ gửi tín hiệu lỗi và khung đó bị loại bỏ.

Bốn kiểu khung tin CAN
CAN định nghĩa bốn kiểu khung tin, mỗi kiểu phục vụ một mục đích khác nhau trong vận hành bus:
- Khung dữ liệu (Data frame): mang dữ liệu thực tế từ node gửi tới node nhận.
- Khung yêu cầu (Remote frame): không chứa dữ liệu, dùng để hỏi một giá trị mà node gửi đang giữ.
- Khung lỗi (Error frame): phát ra khi phát hiện lỗi trong khung nhận được.
- Khung quá tải (Overload frame): báo cho các node khác tạm dừng gửi khi node nhận không kịp xử lý.
Quy tắc nhồi bit (bit stuffing) đảm bảo tín hiệu trên bus luôn chuyển mạch đủ thường xuyên để đồng bộ. Khi có năm bit cùng giá trị liên tiếp, hệ thống chèn thêm một bit ngược giá trị. Chuỗi sáu bit giống nhau trong vùng nhồi là lỗi. Quy tắc này không áp dụng cho vùng phân cách CRC, trường ACK và cuối khung.
Cơ chế tranh chấp phi phá hủy
Điểm đặc biệt của CAN là cơ chế tranh chấp phi phá hủy. Nhiều node cùng lúc muốn gửi, mỗi node tự đặt mức ưu tiên theo giá trị mã định danh: giá trị nhỏ hơn là ưu tiên cao hơn. Bit ở mức chiếm (dominant) luôn thắng bit ở mức lùi (recessive), giống hệt phép toán AND logic trên dây. Node thua sẽ tự động nhường và gửi lại sau, mà khung đang thắng vẫn được giữ nguyên trên bus.
Nhờ vậy không cần bộ điều phối trung tâm nào cả. Bus CAN hoàn toàn phân tán và không cần địa chỉ theo kiểu ưu tiên cứng, chỉ cần gán mã định danh ưu tiên thấp cho những khung cần phản hồi nhanh như dữ liệu phanh.

Ba trạng thái xử lý lỗi của một node CAN
Mỗi node CAN theo dõi hai bộ đếm lỗi: TEC báo lỗi khi gửi và REC báo lỗi khi nhận. Dựa trên hai bộ đếm này, node chuyển giữa ba trạng thái:
- Error Active: trạng thái bình thường. Khi phát hiện lỗi, node gửi cờ lỗi gồm 6 bit chiếm, buộc khung hiện tại bị hủy.
- Error Passive: khi TEC hoặc REC vượt ngưỡng 127. Node vẫn hoạt động nhưng gửi cờ lỗi bằng 6 bit lùi để tránh làm gián đoạn bus.
- Bus Off: khi TEC vượt 255. Node ngừng hoàn toàn việc gửi để tránh làm sập bus. Node chỉ trở lại hoạt động sau khi quan sát đủ chuỗi bit lùi liên tiếp để bus ổn định.
Cơ chế ba trạng thái này giúp một node lỗi không kéo theo toàn bộ hệ thống. Nếu không có trạng thái Bus Off, chỉ một bộ điều khiển hỏng cũng có thể làm treo toàn bộ xe.
Định nghĩa điện thế và chiều dài bus
Trên bus tốc độ cao ISO 11898-2, bit chiếm tương ứng điện áp khoảng 3,5 V trên dây CAN_H và 1,5 V trên dây CAN_L, chênh lệch khoảng 2 V. Ở bit lùi, chênh lệch gần bằng 0 V. Bộ nhận dùng ngưỡng dưới 0,5 V để phân biệt hai mức.
Chiều dài bus phụ thuộc trực tiếp tốc độ truyền. Bảng dưới đây là các giá trị tham khảo thực tế, càng tốc độ cao thì bus càng phải ngắn:
| Tốc độ | Chiều dài bus tối đa | Chuẩn liên quan |
|---|---|---|
| 1 Mbit/s | Khoảng 40 m | ISO 11898-2 tốc độ cao |
| 500 kbit/s | Khoảng 100 m | ISO 11898-2 |
| 125 kbit/s | Khoảng 500 m | ISO 11898-3 chịu lỗi |
| 40 đến 125 kbit/s | Topo tuyến, hình sao, đa hình sao | ISO 11898-3 chịu lỗi |
Hai đầu bus bắt buộc có điện trở kết thúc 120 ôm. Với bản ISO 11898-3 chịu lỗi, tổng trở kết thúc phân tán ra nhiều node và nằm gần mức 100 ôm, cho phép nối dây chịu được điện áp từ -27 V đến +40 V, rất thích hợp cho xe tải và xe thương mại.
Chuẩn CAN FD mở rộng tốc độ
CAN FD là phiên bản mở rộng của CAN, cho phép trường dữ liệu tối đa 64 byte thay vì 8 byte, và pha dữ liệu chạy tới 5 Mbit/s trong khi pha tranh chấp vẫn giữ 1 Mbit/s. Nhờ đó CAN FD chuyển một khối dữ liệu lớn trong thời gian ngắn hơn nhiều, giảm tải cho bus và rút ngắn thời gian phản hồi.
Điểm quan trọng là CAN FD tương thích ngược với CAN cổ điển: một node CAN FD có thể giao tiếp trên cùng bus với node CAN thông thường, phần tranh chấp vẫn diễn ra theo luật cũ.
Khi nào nên chọn CAN bus
CAN bus phù hợp khi cần truyền lệnh và trạng thái giữa các thiết bị với độ trễ thấp, độ tin cậy cao, trong môi trường nhiều nhiễu điện từ như xe, máy công nghiệp, thiết bị y tế. Ưu điểm lớn nhất là chỉ cần hai dây cho nhiều node, dễ nối và dễ chẩn đoán.
CAN bus không phù hợp với băng thông lớn như truyền video, không phù hợp với hệ thống cần truyền hàng trăm megabit mỗi giây, và cũng không phải lựa chọn cho truyền dữ liệu qua khoảng cách hàng chục kilomet.
Nếu cần truyền dữ liệu lớn hơn nhiều, hãy cân nhắc các chuẩn khác như CAN XL, Ethernet công nghiệp hoặc hệ thống truyền thông ô tô hiện đại. Còn nếu cần tốc độ cao nhưng vẫn giữ mô hình bus nối tiếp, CAN FD là bước nâng cấp tự nhiên từ CAN cổ điển.
Nguồn tham khảo: bài viết tổng hợp CAN bus trên Wikipedia, đặc tả kỹ thuật của hiệp hội CAN in America (CiA), bài viết kỹ thuật CAN FD trên Wikipedia, và tài liệu transceiver SN65HVD230 của Texas Instruments cùng datasheet kỹ thuật của hãng.
