Tối Sáng
Hình 1. CAN FD là gì?

Tổng quan về CAN Flexible Data-rate (CAN FD) Để lại bình luận

Hình 1. CAN FD là gì?
Hình 1. CAN FD là gì?

Giao thức CAN FD (Controller Area Network – Flexible Data-Rate) là một bản mở rộng của giao thức CAN truyền thống (CAN 2.0). CAN FD được xem là phiên bản kế nhiệm của CAN 2.0, cung cấp khả năng hỗ trợ điều khiển thời gian thực trong hệ thống phân tán với mức độ bảo mật cao. Giao thức này được Bosch phát triển và sau đó được chuẩn hóa thành ISO 11898-1:2015, phù hợp cho các ứng dụng trong công nghiệp, ô tô và hệ thống nhúng nói chung.

Tuy nhiên, phiên bản gốc của Bosch (thường gọi là non-ISO CAN FD) không tương thích với phiên bản đã được chuẩn hóa (ISO CAN FD). Điều này có nghĩa là hai phiên bản này không thể giao tiếp trực tiếp với nhau do có một số khác biệt trong cách xử lý dữ liệu và kiểm tra lỗi.

Tại sao CAN FD lại xuất hiện?

Hình 2. Tại sao CAN FD lại xuất hiện?
Hình 2. Tại sao CAN FD lại xuất hiện?

Giao thức CAN đã xuất hiện từ năm 1986 và trở nên cực kỳ phổ biến. Hầu hết các phương tiện di chuyển ngày nay như ô tô, xe tải, thuyền, máy bay, robot đều sử dụng CAN.

Tuy nhiên, với sự phát triển nhanh chóng của công nghệ hiện đại, CAN truyền thống (Classical CAN) đang gặp nhiều thách thức:

  • Chức năng của phương tiện ngày càng tăng, dẫn đến khối lượng dữ liệu trao đổi bùng nổ.
  • Băng thông bị giới hạn ở 1 Mbit/s, gây ra tắc nghẽn mạng.
  • Các nhà sản xuất (OEMs) phải tạo ra các giải pháp phức tạp và tốn kém để khắc phục hạn chế này.

Một vấn đề lớn của Classical CAN là quá nhiều dữ liệu thừa (overhead) với hơn 50%, do mỗi khung dữ liệu chỉ chứa tối đa 8 byte dữ liệu. Ngoài ra, tốc độ truyền bị giới hạn ở 1 Mbit/s, gây khó khăn khi triển khai các tính năng yêu cầu truyền nhiều dữ liệu.

CAN FD ra đời để giải quyết các hạn chế trên, giúp giao thức CAN trở nên mạnh mẽ và phù hợp với tương lai.

Trong thực tế, CAN FD có thể cải thiện băng thông lên gấp 3 đến 8 lần so với CAN truyền thống (Classical CAN). Điều này giúp đơn giản hóa việc mở rộng hệ thống, đáp ứng nhu cầu trao đổi dữ liệu ngày càng tăng mà không cần đến các giải pháp phức tạp và tốn kém.

Xem thêm: Giao thức 1-Wire là gì? Tất cả những điều bạn cần biết

Giải pháp của CAN FD

Về lý thuyết, CAN FD có vẻ khá đơn giản: tăng tốc độ truyền dữ liệu và đóng gói nhiều dữ liệu hơn vào mỗi khung tin nhắn. Nhưng trong thực tế, điều này không hề đơn giản.

Thách thức 1: Tránh làm chậm các tin nhắn quan trọng

Hình 3. Tại sao không mở rộng khung CAN cũ lên 64 byte?
Hình 3. Tại sao không mở rộng khung CAN cũ lên 64 byte?

Câu hỏi: Tại sao không mở rộng khung CAN cũ lên 64 byte?

  • Nếu làm vậy, mỗi khung tin sẽ chứa nhiều dữ liệu hơn, giúp giảm overhead và đơn giản hóa xử lý dữ liệu.
  • Nhưng nếu không tăng tốc độ truyền, một khung lớn hơn sẽ chiếm dụng bus lâu hơn. Điều này có thể làm chậm các tin nhắn có độ ưu tiên cao, gây ảnh hưởng đến các chức năng quan trọng trong hệ thống.

Giải pháp của CAN FD: Tăng tốc độ truyền dữ liệu để khung tin lớn vẫn được gửi đi nhanh chóng mà không làm nghẽn mạng.

Thách thức 2: Duy trì độ dài dây dẫn hợp lý

Hình 4. Duy trì độ dài dây dẫn hợp lý ở CAN FD
Hình 4. Duy trì độ dài dây dẫn hợp lý ở CAN FD

Câu hỏi: Vậy tại sao không tăng tốc toàn bộ khung tin luôn?

  • Trong CAN, có nhiều thiết bị có thể gửi dữ liệu cùng lúc. Khi đó, cơ chế arbitration (phân xử) sẽ xác định node nào có độ ưu tiên cao nhất được tiếp tục gửi dữ liệu, còn các node khác phải nhường đường.
  • Trong giai đoạn arbitration, mỗi bit time (thời gian truyền một bit) phải đủ dài để mọi node trên mạng đều kịp phản ứng.
  • Nếu tăng tốc độ trong giai đoạn arbitration, thì các node xa có thể không nhận kịp tín hiệu, gây lỗi giao tiếp.

Ví dụ:

  • Với CAN truyền thống chạy ở 1 Mbit/s, chiều dài tối đa của dây là 40m (thực tế khoảng 25m).
  • Nếu tăng tốc độ arbitration, chiều dài dây dẫn bị rút ngắn, không còn phù hợp với nhiều hệ thống thực tế.

Giải pháp của CAN FD:

  • Sau khi arbitration kết thúc, chỉ còn một thiết bị duy nhất đang gửi dữ liệu. Lúc này, mạng không còn tranh chấp, giống như một đường cao tốc trống – có thể tăng tốc độ truyền dữ liệu để gửi nhanh hơn.
  • CAN FD tận dụng điều này để tăng tốc độ chỉ trong giai đoạn truyền dữ liệu.
  • Nhưng trước khi đến giai đoạn ACK (các node xác nhận đã nhận dữ liệu đúng), tốc độ phải giảm lại về mức bình thường để đảm bảo mọi thiết bị đều có thể theo kịp.

Xem thêm: Inter-IC sound (I2S) là gì? Hiểu về giao thức truyền âm thanh số

CAN FD Frame

Hình 5. So sánh giữa CAN FD và CAN truyền thống
Hình 5. So sánh giữa CAN FD và CAN truyền thống

CAN FD là phiên bản cải tiến của giao thức CAN truyền thống (Classical CAN), giúp:
• Gửi được nhiều dữ liệu hơn (tối đa 64 byte thay vì chỉ 8 byte).
• Tốc độ truyền cao hơn (lên đến 5 Mbit/s so với 1 Mbit/s).

1. Loại bỏ khung yêu cầu từ xa (RTR → RRS)

• CAN truyền thống: Có khung yêu cầu dữ liệu (Remote Frame) – giúp một thiết bị trên mạng yêu cầu dữ liệu từ thiết bị khác mà không cần tự gửi dữ liệu.
• CAN FD: Không còn Remote Frame nữa, nên bit này luôn có giá trị 0 (dominant), nghĩa là một thiết bị không thể yêu cầu dữ liệu từ thiết bị khác bằng cách gửi một khung trống.

2. Thêm bit FDF để phân biệt với CAN truyền thống

• CAN truyền thống: Có một bit dự trữ gọi là r0 (luôn bằng 0).
• CAN FD: Đổi r0 thành FDF (FD Format) và đặt giá trị 1 (recessive) để báo hiệu đây là khung CAN FD. Nếu một thiết bị CAN truyền thống gặp FDF = 1, nó sẽ báo lỗi.

3. BRS – Tăng tốc độ truyền dữ liệu

• BRS = 0 (dominant) ➝ Dữ liệu gửi với tốc độ bình thường (tối đa 1 Mbit/s).
• BRS = 1 (recessive) ➝ Dữ liệu gửi với tốc độ cao hơn (tối đa 5 Mbit/s).

4. ESI – Báo hiệu trạng thái lỗi của thiết bị

• ESI = 0 (dominant) ➝ Thiết bị đang ở chế độ bình thường (error active).
• ESI = 1 (recessive) ➝ Thiết bị đang ở chế độ bị lỗi (error passive).

5. CAN FD mở rộng kích thước dữ liệu

Hình 6. DLC của CAN truyền thống và CAN FD
Hình 6. DLC của CAN truyền thống và CAN FD

• CAN truyền thống: Mỗi khung dữ liệu chỉ chứa tối đa 8 byte.
• CAN FD: Có thể chứa tối đa 64 byte bằng cách mở rộng mã DLC (Data Length Code): ví dụ: DLC = 9 nghĩa là có 12 byte, DLC = 15 nghĩa là có 64 byte.

6. Cải thiện độ tin cậy bằng SBC & CRC

Khi truyền dữ liệu trên mạng CAN (Controller Area Network), ta cần đảm bảo dữ liệu không bị lỗi trong quá trình truyền. Để làm được điều đó, CAN FD sử dụng hai cơ chế quan trọng:
• SBC (Stuff Bit Count) → Giúp kiểm soát các bit nhồi nhằm tránh lỗi truyền.
• CRC (Cyclic Redundancy Check) → Giúp kiểm tra lỗi toàn bộ khung dữ liệu.

Xem thêm: Tìm hiểu về Universal Serial Bus (USB)

a. SBC (Stuff Bit Count)

Vấn đề khi truyền dữ liệu trong CAN:
• Trong CAN, nếu có quá nhiều bit giống nhau liên tiếp (ví dụ: 000000 hoặc 111111), đồng hồ của các thiết bị có thể mất đồng bộ, gây lỗi truyền dữ liệu.
• Để khắc phục, bit nhồi (Stuff Bit) được chèn vào khi có quá nhiều bit giống nhau liên tiếp, giúp đường truyền ổn định hơn.

Vai trò của SBC trong CAN FD: SBC giúp kiểm soát số lượng bit nhồi trong khung dữ liệu để đảm bảo việc phát hiện lỗi chính xác hơn.

SBC bao gồm:
• 3 bit mã Gray: Lưu số lượng bit nhồi được thêm vào.
• 1 bit chẵn lẻ (Parity Bit): Giúp phát hiện lỗi trong SBC.
• 1 bit nhồi cố định (Fixed Stuff Bit): Giống như một bit chẵn lẻ thứ hai để tăng độ tin cậy.

b. CRC (Cyclic Redundancy Check) – Kiểm tra lỗi khung dữ liệu

CRC là một dãy bit đặc biệt được tính toán từ dữ liệu gốc. Khi gửi dữ liệu, bên gửi sẽ tính toán CRC và gửi kèm theo khung dữ liệu. Bên nhận cũng tính toán CRC từ dữ liệu nhận được, rồi so sánh với CRC nhận được từ bên gửi:
• Nếu khớp nhau → Dữ liệu không bị lỗi.
• Nếu khác nhau → Dữ liệu bị lỗi và phải gửi lại.

CAN truyền thống (CAN 2.0): CRC có 15 bit.
CAN FD:
• Nếu khung dữ liệu có ≤ 16 byte, CRC có 17 bit.
• Nếu khung dữ liệu có 20 – 64 byte, CRC có 21 bit.
• Thêm 4 bit nhồi cố định để giảm lỗi trong truyền tốc độ cao.

Lợi ích của CRC dài hơn trong CAN FD:
• CAN FD truyền dữ liệu nhiều hơn (tối đa 64 byte so với 8 byte của CAN truyền thống).
• CRC dài hơn giúp bảo vệ dữ liệu tốt hơn, tránh sai sót khi truyền tốc độ cao.

7. Giữ nguyên cơ chế xác nhận (ACK)

Giống CAN truyền thống, các thiết bị nhận dữ liệu phải xác nhận bằng cách kéo bit ACK xuống 0 (dominant).

Xem thêm: Tìm hiểu về Digital-to-Analog Converter (DAC)

Hiệu suất và tốc độ của CAN FD

1. Overhead là gì?

Overhead là phần dữ liệu không phải payload nhưng vẫn phải truyền để đảm bảo giao tiếp đúng và ổn định.

Ví dụ trong CAN bus:
• Overhead: Các bit bổ sung như ID, CRC, ACK, Start/Stop bits,… giúp kiểm soát lỗi và đảm bảo dữ liệu đến đúng nơi.
• Payload: Phần dữ liệu thực sự được truyền (ví dụ: tốc độ động cơ, nhiệt độ, cảm biến, v.v.).

Nếu overhead chiếm quá nhiều so với payload, hiệu suất sẽ thấp. Ngược lại, nếu payload nhiều hơn so với overhead, hiệu suất sẽ cao hơn.

2. Overhead trong CAN FD so với CAN truyền thống

Có phải CAN FD giúp giảm overhead?
• KHÔNG! Thực tế, CAN FD thêm nhiều bit mới như BRS, ESI, CRC lớn hơn → tổng số bit nhiều hơn.
• Nếu chỉ gửi ít dữ liệu (dưới 8 byte), hiệu suất của CAN FD còn kém hơn CAN truyền thống do overhead tăng.

Khi nào CAN FD hiệu quả hơn?
• CAN FD cho phép gửi đến 64 byte dữ liệu trong 1 frame, trong khi CAN truyền thống chỉ tối đa 8 byte.
• Khi số byte tăng lên, tỷ lệ giữa payload và overhead tăng, giúp hiệu suất truyền dữ liệu tốt hơn.
• Ở mức 64 byte, hiệu suất có thể đạt 90%, so với khoảng 50% của CAN truyền thống.

3. Tại sao CAN FD hiệu quả hơn khi gửi nhiều dữ liệu?

Hình 7. Hiệu suất giữa CAN truyền thống và CAN FD
Hình 7. Hiệu suất giữa CAN truyền thống và CAN FD

Hiệu suất = (Số bit dữ liệu thực / Tổng số bit của frame) × 100%

CAN truyền thống (Max 8 byte payload):
• Một frame CAN chứa khoảng 50-60 bit overhead.
• Nếu chỉ có 8 byte (64 bit) dữ liệu, tổng số bit của frame là khoảng 120 bit.
• Hiệu suất = 64 / 120 ≈ 53%

CAN FD (Max 64 byte payload):
• Vẫn có overhead (và còn tăng nhẹ do CRC lớn hơn), nhưng payload tối đa là 64 byte (512 bit).
• Tổng số bit của frame lúc này khoảng 570 bit.
• Hiệu suất = 512 / 570 ≈ 90%

Vì sao cần tăng tốc độ truyền dữ liệu?

• Trong CAN truyền thống, tốc độ tối đa thường chỉ là 1 Mbit/s. Nếu gửi 64 byte dữ liệu, thời gian truyền sẽ khá lâu, dễ làm tắc nghẽn bus.
• CAN FD có thể chuyển sang tốc độ cao hơn khi truyền dữ liệu, giúp giảm thời gian chiếm dụng bus, tăng hiệu suất hệ thống.

Giải pháp: Bit Rate Switching (BRS) – cho phép tăng tốc độ chỉ trong phần dữ liệu của frame CAN FD:
• Khi bit BRS = 1, tốc độ truyền dữ liệu (payload) sẽ tăng lên, ví dụ từ 1 Mbit/s → 5 Mbit/s.
• Nhưng phần arbitration (tranh chấp bus) vẫn giữ tốc độ thấp hơn (ví dụ 1 Mbit/s) để đảm bảo tất cả các node đều có thể nghe thấy.
• Tốc độ tăng 5 lần, giúp tiết kiệm băng thông và giảm độ trễ.

Pha trộn giữa CAN truyền thống và CAN FD

Nếu tất cả các node đều hỗ trợ CAN FD → có thể truyền cả frame CAN cổ điển và CAN FD mà không vấn đề gì.
Nếu có node CAN cổ điển trong mạng → cần đảm bảo chúng không bị lỗi khi thấy frame CAN FD. Một số cách để tránh lỗi:
• Tắt các node CAN cổ điển khi cần gửi dữ liệu lớn qua CAN FD (ví dụ khi cập nhật firmware ECU).
• Chỉ dùng frame CAN cổ điển khi giao tiếp với node cũ.

Tốc độ tối đa của CAN FD là bao nhiêu?

Có nhiều thông tin khác nhau về tốc độ tối đa của CAN FD:
Thực tế: 5 – 8 Mbit/s (tùy vào thiết kế bus và điều kiện môi trường).
Lý thuyết: có thể lên đến 12 – 15 Mbit/s trong điều kiện lý tưởng (ngắn, ít nhiễu, nhiệt độ ổn định).
Trong ô tô: Hầu hết các hãng xe chỉ dùng ≤ 5 Mbit/s, vì:
• Không có chuẩn công nghiệp cho tốc độ cao hơn.
• Nếu cần tốc độ cao hơn, có thể dùng Ethernet ô tô (10BASE-T1).

Tóm lại, CAN FD mang đến một bước tiến lớn so với giao thức CAN truyền thống, giúp nâng cao băng thông, giảm độ trễ và tối ưu hiệu suất truyền dữ liệu. Nhờ khả năng hỗ trợ tốc độ cao và dung lượng dữ liệu lớn hơn trong mỗi khung tin, CAN FD trở thành lựa chọn lý tưởng cho các hệ thống yêu cầu giao tiếp nhanh và ổn định, đặc biệt trong ngành công nghiệp ô tô, tự động hóa và hệ thống nhúng. Việc hiểu rõ về CAN FD không chỉ giúp tối ưu thiết kế hệ thống mà còn đảm bảo tính tương thích và hiệu quả trong quá trình triển khai thực tế.

Xem thêm: Analog-to-Digital Converter (ADC): Nguyên lý và Ứng dụng


Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *