Thiết bị truyền thông công nghiệp
Trang chủ » Giải pháp » Controller Area Network – CAN Bus là gì?

Controller Area Network – CAN Bus là gì?

Controller Area Network – CAN Bus là gì?

Controller Area networkCAN bus hay CAN là một công nghệ mạng nối tiếp dùng cho các phương tiện giao thông, đặc biệt là xe hơi. CAN được thiết kế để các vi điều khiển và các thiết bị giao tiếp với nhau mà không cần thông qua máy tính. Hiện nay CAN cũng đã trở thành một tiêu chuẩn phổ biến trong tự động hóa công nghiệp và các ngành khác.

Lịch sử phát triển

Việc phát triển mạng CAN được bắt đầu từ năm 1983 bởi Công ty Robert Bosch GmbH. Sau đó, giao thức được chính thức công bố vào năm 1986 tại đại hội của Hiệp hội Kĩ sư ô tô (Society of Automotive Engineers, SAE) ở Detroit, Michigan, Mỹ. Năm 1987, những chíp điều khiển CAN đầu tiên xuất hiện ở nhà sản xuất linh kiện bán dẫn Intel và sau đó là bởi Philips.

Năm 1992, Thành lập nhóm các nhà sử dụng và sản xuất CAN quốc tế: Hội CAN tự động hóa (CiA). Hội CiA xuất bản giao thức Lớp ứng dụng CAN (CAN Application Layer, CAL). Những chiếc xe Mercedes-Benz đầu tiên được trang bị CAN xuất hiện. Sau đó vào năm 1993, tiêu chuẩn ISO 11898 được xuất bản.

Tiêu chuẩn ISO 11898 được sửa đổi (định dạng khung mở rộng) năm 1995. CiA xuất bản giao thức CANopen.

CiA (CAN in Automation): Là nhóm các nhà sản xuất và sử dụng trên thế giới phát triển và hỗ trợ CANopen và các giao thức CAN cơ bản lớp cao hơn khác. Đây là tổ chức phi lợi nhuận được thành lập từ năm 1992 để cung cấp thông tin về công nghệ CAN cơ bản, sản xuất và tiếp thị. Có khoảng 500 công ty là thành viên của tổ chức phi lợi nhuận này và có trụ sở chính đặt tại Nuremberg, Đức.

DeviceNet và CANopen: là hai chuẩn quy định hoạt động của CAN ở lớp cao hơn (Application Layer) dựa trên chuẩn CAN (Chuẩn CAN quy định việc thực thi giao thức ở lớp Liên kết dữ liệu (Data Link Layer) và lớp vật lý (Physical Layer))

Ưu điểm

  • Đơn giản, chi phí thấp: bus CAN chỉ có 2 dây giúp kết nối các module điều khiển với nhau dễ dàng hơn khi so sánh với cách làm truyền thống.Kèm theo đó là nhiều lợi ích về việc dễ lắp đặt và dễ sửa chữa, bảo trì khi có sự cố.
  • Tạo ra một giao thức chung để nhiều nhà cung cấp khác nhau có thể phát triển các module điều khiển tương thích với nhau
  • Tính ưu tiên của thông điệp (Prioritization of messages): mỗi thông điệp được truyền ra từ một nút (node) hay trạm (station) trên bus CAN đều có mức ưu tiên. Khi nhiều thông điệp được truyền ra bus cùng lúc thì thông điệp có mức ưu tiên cao nhất sẽ được truyền. Cá thông điệp có mức ưu tiên thấp hơn sẽ tạm dừng và được truyền lại khi bus rảnh. Việc xác định mức ưu tiên của thông điệp dựa trên cấu tạo (cấu trúc) thông điệp và cơ chế phân xử quy định trong chuẩn chuẩn CAN.
  • Cấu hình linh hoạt: cho phép thiết lập cấu hình thời gian bit, thời gian đồng bộ, độ dài dữ liệu truyền, dữ liệu nhận, …
  • Nhận dữ liệu đa điểm với sự đồng bộ thời gian: một thông điệp có thể được nhận bởi nhiều node khác nhau trong bus cùng lúc. Tất cả các node trên bus đều có thể thấy thông điệp đang truyền trên bus, tùy vào cấu hình ở mỗi node mà node sẽ quyết định có chấp nhận thông điệp này hay không.
  • Nhiều master (multimaster)
  • Phát hiện và báo hiệu lỗi: Mỗi thông điệp có kèm theo mã CRC (Cyclic Redundancy Code) để thực hiện kiểm tra lỗi. Nếu lỗi xuất hiện, node nhận sẽ bỏ qua thông điệp lỗi và truyền khung báo lỗi (error frame) lên bus CAN. Mỗi node trong bus có bộ đếm quản lý lỗi truyền nhận riêng để xác định trạng thái lỗi của chính nó. Nếu lỗi xuất hiện quá nhiều, một node có thể tự động ngắt khỏi bus. Ngoài ra còn một số dạng lỗi khác có thể được phát hiện với chuẩn CAN.
  • Tự động truyền lại các thông điệp bị lỗi khi bus rảnh: Một thông điệp được truyền ra bus nếu bị lỗi thì sẽ không mất đi mà node truyền thông điệp này sẽ giữ nó lại và tự động phát lại thông điệp này khi bus CAN rảnh cho đến khi thành công. Điều này giúp đảm bảo tính toàn vẹn dữ liệu trong bus

Cách thức hoạt động

CAN sử dụng CSMA / CD + AMP (Carrier Sense Multiple Access / Collision Detection with Arbitration on Message Priority). Trước khi gửi thông điệp, nút CAN sẽ kiểm tra xem bus có bận không. Nó cũng sử dụng để phát hiện khả năng trùng lặp. Những phương thức này cũng tương tự như Ethernet. Tuy nhiên, khi một mạng Ethernet phát hiện xung đột, cả hai nút gửi sẽ ngừng truyền. Sau đó, nó đợi một khoảng thời gian trễ ngẫu nhiên trước khi thử gửi lại. Điều này làm cho mạng Ethernet rất nhạy cảm với tải bus cao. Có thể giải quyết vấn đề này với nguyên tắc xác định quyền ưu tiên rất thông minh trong mạng CAN.

Nguyên tắc

Thông điệp dữ liệu được truyền từ bất kỳ nút nào trên bus CAN không chứa địa chỉ của nút truyền hoặc của bất kỳ nút nhận dự kiến ​​nào.

Thay vào đó, nội dung của thông điệp được gắn nhãn bởi một số nhận dạng (ID) là duy nhất trên toàn mạng. Tất cả các nút khác trên mạng đều nhận được thông điệp và mỗi nút thực hiện kiểm tra sự chấp nhận trên mã ID để xác định xem thông điệp có liên quan đến nút đó hay không. Nếu thông điệp có liên quan, nó sẽ được xử lý; nếu không thì nó bị bỏ qua.

ID & Trường xác định quyền ưu tiên (Arbitration Field)

ID là duy nhất và cũng để xác định mức độ ưu tiên của thông điệp. Giá trị số của mã ID càng thấp thì mức độ ưu tiên càng cao. Điều này cho phép phân xử nếu hai (hoặc nhiều) nút cạnh tranh để truy cập vào bus cùng một lúc.

Thông điệp có mức độ ưu tiên cao hơn được đảm bảo có được quyền truy cập bus như thể nó là thông điệp duy nhất được truyền đi. Các thông điệp có mức ưu tiên thấp hơn sẽ tự động được truyền lại trong chu kỳ bus tiếp theo hoặc trong một chu kỳ bus tiếp theo nếu vẫn còn các thông điệp khác mà có mức ưu tiên cao hơn đang chờ được gửi.

Mỗi thông điệp trong CAN có một mã ID là 11 bit (A) hoặc 29 bit (B). ID này là phần nguyên tắc của Arbitration Field trong CAN, trường này nằm ở đầu mỗi thông điệp CAN. ID xác định loại thông điệp, nhưng cũng là mức độ ưu tiên của thông điệp.

Các bit trong thông điệp mạng CAN có thể được gửi ở dạng cao hoặc thấp. Các bit thấp luôn chiếm ưu thế, có nghĩa là nếu một nút cố gắng gửi mức thấp và nút khác cố gửi mức cao, kết quả trên các bus sẽ là mức thấp. Một nút truyền luôn lắng nghe trên bus trong khi truyền. Một nút gửi mức cao trong Arbitration Field và phát hiện mức thấp biết rằng nó đã mất quyền ưu tiên. Nó ngừng truyền, để cho nút khác, với một thông điệp có mức độ ưu tiên cao hơn, tiếp tục mà không bị gián đoạn.

Hai nút trên mạng không được phép gửi thông điệp có cùng ID. Nếu hai nút cố gắng gửi một thông điệp với cùng một ID tại cùng một thời điểm, trường xác định quyền ưu tiên sẽ không hoạt động. Thay vào đó, một trong các nút truyền sẽ phát hiện ra rằng thông điệp của nó bị bóp méo bên ngoài Arbitration Field. Sau đó, các nút sẽ sử dụng trường xử lý lỗi của CAN, trong trường hợp này, cuối cùng sẽ dẫn đến việc một trong các nút truyền bị tắt (chế độ tắt bus).

Các loại Frame CAN

Dữ liệu CAN được truyền dưới dạng các Frame (khung). Có 4 loại Frame khác nhau, đó là:

  1. Data Frame (khung dữ liệu): là khung mang dữ liệu từ một bộ truyền dữ liệu đến các bộ nhận dữ liệu. Khung này có vùng để mang các byte dữ liệu.
  2. Remote Frame (khung yêu cầu hay điều khiển): là khung được truyền từ một Node bất kỳ để yêu cầu dữ liệu từ Node khác. Khi Node khác đó nhận được yêu cầu sẽ  truyền lại dữ liệu có ID (Identifier) trùng với ID được gửi trong Remote Frame.
  3. Error Frame (khung lỗi): là khung được truyền bởi bất kỳ Node nào khi Node đó phát hiện lỗi từ Bus.
  4. Overflow Frame (khung báo tràn): mỗi Node trong CAN Bus có thể truyền bất kỳ khi nào nếu phát hiện Bus rảnh. Hoặc nếu một Node nhận quá nhiều dữ liệu và không xử lý kịp, nó sẽ gửi Frame này để các Node khác không gửi thêm dữ liệu cho nó.

Data Frame và Remote Frame làm việc theo cơ chế phân xử quyền ưu tiên của tín hiệu vì thế cấu trúc của chúng có vùng phân xử quyền ưu tiên, nơi chứa ID của khung. Và chúng có hai định dạng khác nhau là định dạng chuẩn (Standard) và định dạng mở rộng (Extended):

  • Định dạng khung chuẩn sử dụng ID có độ dài 11 bit
  • Định dạng khung mở rộng sử dụng ID có độ dài 29 bit

Các loại giao thức CAN

Giao thức CAN hiện có: CAN 2.0, CAN FD. Sự khác biệt giữa các loại giao thức CAN nằm trong cấu trúc của các loại khung (Frame).

CAN 2.0

Chuẩn giao thức CAN 2.0 được Bosch công bố lần đầu vào năm 1991. Tốc độ truyền tối đa của chuẩn này là 1 Mbps, lượng dữ liệu truyền tối đa là 8 byte.

Trong hệ thống mạng CAN, dữ liệu được truyền và nhận bằng Data Frame. Data Frame mang dữ liệu từ một nút truyền đến một hoặc nhiều nút nhận.

Giao thức CAN hỗ trợ hai định dạng Data Frame:

  • CAN tiêu chuẩn (CAN 2.0A) – Standard Data Frame
  • CAN mở rộng (CAN 2.0B) – Extended Data Frame

Hầu hết các CAN 2.0A chỉ truyền và nhận các thông điệp định dạng chuẩn, mặc dù một số (2.0B Passive) sẽ nhận các thông điệp định dạng mở rộng nhưng sau đó bỏ qua chúng. CAN 2.0B có thể gửi và nhận thông điệp ở cả hai định dạng.

Data Frame (khung dữ liệu)

CAN 2.0A

Data Frame CAN (Phiên bản 2.0A) tiêu chuẩn bao gồm bảy trường bit khác nhau:

  1. Trường bắt đầu khung (Start Of Frame Field – SOF)

Với cả 2 định dạng của chuẩn CAN 2.0 thì trường bắt đầu là vị trí của bit đầu tiên trong khung. Trường này chiếm 1 bit dữ liệu. Bit đầu tiên này là một Dominant Bit (mức logic 0) đánh dấu sự bắt đầu của một Data Frame.

  1. Trường xác định quyền ưu tiên (Arbitration Field)

Định dạng vùng xác định quyền ưu tiên là khác nhau đối với dạng khung chuẩn và khung mở rộng.

  • Định dạng chuẩn: vùng xác định quyền ưu tiên có độ dài 12 bit, bao gồm 11 bit ID và 1 bit RTR.
  • Định dạng mở rộng: trường xác định quyền ưu tiên có độ dài 32 bit, bao gồm có 29 bit ID, 1 bit SRR, 1 bit IDE và 1 bit RTR

Trong đó:

Bit RTR (Remote Transmission Request)

  • Là bit dùng để phân biệt khung là Data Frame hay Remote Frame.
  • Nếu là Data Frame, bit này luôn bằng 0 (Dominant Bit).
  • Nếu là Remote Frame, bit này luôn bằng 1 (Recessive Bit).
  • Vị trí bit này luôn nằm sau bit ID.

Trường hợp nếu Data Frame và Remote Frame có cùng ID được gửi đi đồng thời thì Data Frame sẽ được ưu tiên hơn.

Bit SRR (Substitute Remote Request)

  • Bit này chỉ có ở khung mở rộng.
  • Bit này có giá trị là 1 (Recessive Bit).
  • So với vị trí tương ứng trong khung chuẩn thì bit này trùng với vị trí của bit RTR nên còn được gọi là bit thay thế (Substitute).

Giả sử có hai Node cùng truyền, một Node truyền Data Frame chuẩn, một Node truyền Data Frame mở rộng có ID giống nhau thì Node truyền khung chuẩn sẽ thắng phân xử quyền ưu tiên vì đến vị trí sau ID, khung chuẩn là bit RTR = 0, còn khung mở rộng là bit SRR = 1. Như vậy, khung chuẩn chiếm ưu thế hơn so với khung mở rộng khi có ID như nhau.

Bit IDE (Identifier Extension)

  • Đây là bit phân biệt giữa loại khung chuẩn và khung mở rộng: IDE = 0 quy định khung chuẩn, IDE = 1 quy định khung mở rộng.
  • Bit này nằm ở trường xác định quyền ưu tiên với khung mở rộng và ở trường điều khiển với khung chuẩn.
  1. Trường điều khiển (Control Field)

Khung chuẩn và khung mở rộng có định dạng khác nhau ở trường này:

  • Khung chuẩn gồm IDE, r0 và DLC (Data Length Code).
  • Khung mở rộng gồm r1, r0 và DLC.

Trong đó:

Bit IDE

Dùng phân biệt loại khung (đã được trình bày ở trên).

Bit r0, r1 (hai bit dự trữ)

Tuy hai bit này phải được truyền là Recessive Bit bởi bộ truyền nhưng bộ nhận không quan tâm đến giá trị 2 bit này. Bộ nhận có thể nhận được các tổ hợp 00, 01, 10 hoặc 11 của r1 và r0 nhưng không coi đó là lỗi mà bỏ qua và nhận thông điệp bình thường.

DLC (Data Length Code)

  • Có độ dài 4 bit quy định số byte của trường dữ liệu của Data Frame
  • Chỉ được mang giá trị từ 0 đến 8 tương ứng với trường dữ liệu có từ 0 đến 8 byte dữ liệu. Data Frame có thể không có byte dữ liệu nào khi DLC = 0.
  • Giá trị lớn hơn 8 không được phép sử dụng. Hình dưới mô tả các loại mã bit mà DLC có thể chứa để quy định số byte của trường dữ liệu.
  1. Trường dữ liệu (Data Field)

Trường này có độ dài từ 0 đến 8 byte tùy vào giá trị của DLC ở trường điều khiển.

  1. Trường kiểm tra (Cyclic Redundancy Check Field – CRC)

Trường kiểm tra hay trường CRC gồm 16 bit và được chia làm hai phần là:

  • CRC Sequence: gồm 15 bit CRC tuần tự
  • CRC Delimiter: là một Recessive Bit làm nhiệm vụ phân cách trường CRC với trường ACK
  • Mã kiểm tra CRC phù hợp nhất cho các khung mà chuỗi bit được kiểm tra có chiều dài dưới 127 bit, mã này thích hợp cho việc phát hiện các trường hợp sai nhóm (Bus Error). Ở đây, tổng bit từ trường bắt đầu (SOF) đến trường dữ liệu (Data Field) tối đa là 83 bit (khung định dạng chuẩn) và 103 bit (khung định dạng mở rộng).

=> Trường CRC bảo vệ thông tin trong Data Frame và Remote Frame bằng cách thêm các bit kiểm tra dự phòng ở đầu khung truyền. Ở đầu khung nhận, cũng sẽ tính toán CRC như bộ truyền khi đã nhận dữ liệu và so sánh kết quả đó với CRC Sequence mà nó đã nhận được, nếu khác nhau tức là đã có lỗi, nếu giống nhau tức là đã nhận đúng từ trường SOF đến trường dữ liệu.

  1. Trường báo nhận (Acknowledge Field – ACK)

Trường báo nhận hay trường ACK có độ dài 2 bit và bao gồm hai phần là ACK Slot và ACK Delimiter.

  • ACK Slot: có độ dài 1 bit, một Node truyền dữ liệu sẽ thiết lập bit này là Recessive. Khi một hoặc nhiều Node nhận chính xác giá trị thông điệp (không có lỗi và đã so sánh CRC Sequence trùng khớp) thì nó sẽ báo lại cho bộ truyền bằng cách truyền ra một Dominant Bit ngay vị trí ACK Slot để ghi đè lên Recessive Bit của bộ truyền.
  • ACK Delimiter: có độ dài 1 bit, nó luôn là một Recessive Bit. Như vậy, ta thấy rằng ACK Slot luôn được đặt giữa hai Recessive Bit là CRC Delimiter và ACK Delimiter.
  1. Trường kết thúc (End Of Frame Field – EOF)

Trường EOF là trường thông báo kết thúc một Data Frame hay Remote Frame. Trường này gồm 7 Recessive Bit.

CAN 2.0B

Định dạng CAN 2.0B cung cấp mã ID 29 bit so với mã ID 11 bit trong 2.0A.

Phiên bản 2.0B được phát triển để cung cấp khả năng tương thích với các giao thức truyền thông nối tiếp khác được sử dụng trong các ứng dụng ô tô ở Hoa Kỳ. Để phục vụ cho việc này và vẫn cung cấp khả năng tương thích với định dạng 2.0A, Data Frame phiên bản 2.0B có định dạng mở rộng.

Sự khác biệt giữa CAN 2.0A & CAN 2.0B:

  • Trong phiên bản 2.0B Arbitration Field chứa hai trường bit ID. Đầu tiên (ID cơ sở) dài mười một (11) bit để tương thích với Phiên bản 2.0A. Trường thứ hai (phần mở rộng ID) dài mười tám (18) bit, để cho tổng độ dài là hai mươi chín (29) bit.
  • Sự phân biệt giữa hai định dạng được thực hiện bằng cách sử dụng bit ID Mở rộng (IDE).
  • Một bit Substitute Remote Request (SRR) được bao gồm trong Arbitration Field. Bit SRR luôn được truyền dưới dạng Recessive Bit để đảm bảo rằng, trong trường hợp phân xử giữa Khung dữ liệu chuẩn và Khung dữ liệu mở rộng, Khung dữ liệu chuẩn sẽ luôn được ưu tiên nếu cả hai thông điệp có cùng số nhận dạng cơ sở (11 bit) .

Tất cả các trường khác trong Data Frame 2.0B giống hệt với các trường ở Standard Data Frame.

Khả năng tương thích 2.0A và 2.0B

CAN 2.0B hoàn toàn tương thích ngược với CAN 2.0A và có thể truyền và nhận thông điệp ở một trong hai định dạng.

Tuy nhiên, lưu ý rằng có hai loại CAN 2.0A:

  • Loại đầu tiên chỉ có khả năng truyền và nhận thông điệp ở định dạng 2.0A. Với loại CAN 2.0 này, việc nhận bất kỳ thông điệp 2.0B nào sẽ gắn cờ lỗi.
  • Loại thứ hai của CAN 2.0A (2.0B Passive) cũng có khả năng gửi và nhận thông điệp 2.0A, nhưng ngoài ra, các thiết bị này sẽ xác nhận đã nhận thông điệp 2.0B và sau đó bỏ qua chúng.

Do đó, trong các hạn chế được đề cập ở trên, có thể sử dụng cả CAN 2.0A (với 2.0B Passive) và CAN 2.0B trên một mạng duy nhất.

Tuy nhiên, do thiếu khả năng tương thích hoàn toàn của thiết bị 2.0A với thiết bị 2.0B nên chỉ có các thông điệp ở định dạng chuẩn là có ý nghĩa trong các hệ thống sử dụng cả hai loại.

Số lượng ID duy nhất có sẵn cho người dùng, trên một mạng 2.0A, là 2.032 (2 cho nguồn 11 – 2 cho nguồn 4).

Số lượng ID duy nhất có sẵn trên mạng 2.0B là > 500 triệu!

Remote Frame (khung yêu cầu hay điều khiển)

Bên cạnh Data Frame được sử dụng để vận chuyển dữ liệu, còn có Remote Frame – loại khung này được sử dụng để yêu cầu dữ liệu, tức là Data Frame, từ bất kỳ Node nào trên cùng Bus. Tuy nhiên, các khung này hầu như không được sử dụng trong các ứng dụng ô tô, vì việc truyền dữ liệu không dựa trên yêu cầu, mà chủ yếu dựa trên sự chủ động của thông tin từ thông số kỹ thuật của ô tô đó.

Remote Frame giống như Data Frame, nó có hai điểm khác biệt quan trọng:

  • Nó được đánh dấu rõ ràng là Remote Frame (bit RTR trong trường xác định quyền ưu tiên là Recessive Bit, ở Data Frame nó là một Dominant Bit).
  • Không có trường dữ liệu.

Remote Frame có thể được truyền ở cả 2 định dạng tiêu chuẩn và định dạng mở rộng. Và có cấu trúc gồm 6 trường bit như Data Frame (chỉ không có trường dữ liệu – Data Field).

Tùy thuộc vào việc triển khai mạng CAN, phản hồi có thể được gửi tự động. Bộ điều khiển CAN đơn giản (BasicCAN) không thể phản hồi tự động. Trong trường hợp này, bộ vi điều khiển Master nhận biết được yêu cầu từ xa và phải gửi dữ liệu chủ động.

Phát hiện lỗi và hạn chế lỗi

Việc phát hiện lỗi, cảnh báo và hạn chế lỗi được xác định trong tiêu chuẩn CAN làm cho CAN Bus rất đáng được tin cậy. Tính năng phát hiện lỗi và cảnh báo lỗi cùng được tích hợp vào bộ điều khiển đảm bảo rằng thông tin truyền nhận là chính xác và nhất quán. Các nút bị lỗi sẽ chuyển sang chế độ mà không làm phiền đến truyền tải trên bus.

Quy trình xử lý lỗi trong CAN

  1. Lỗi được phát hiện bởi bộ điều khiển CAN (bộ phát hoặc bộ thu).
  2. Một Error Frame được truyền ngay lập tức.
  3. Thông điệp bị hủy ở tất cả các nút (tồn tại ngoại lệ).
  4. Trạng thái của bộ điều khiển CAN được cập nhật.
  5. Thông điệp được truyền lại. Nếu một số bộ điều khiển cùng gửi thông điệp, trường xác định quyền ưu tiên sẽ được sử dụng như bình thường.

Phát hiện lỗi

Bộ điều khiển CAN có khả năng phát hiện lỗi tự động. Các lỗi được phát hiện là:

Lỗi bit:

  1. Lỗi nhồi bit – thông thường một nút truyền sẽ chèn mức cao sau năm bit thấp liên tiếp (và mức thấp sau năm mức cao liên tiếp). Điều này được gọi là nhồi bit. Một nút nhận phát hiện vi phạm (hơn năm bit liên tiếp) sẽ thấy cảnh báo lỗi vi phạm nhồi nhét bit.
  2. Lỗi bit: Một nút truyền luôn đọc lại thông điệp khi nó đang gửi. Nếu nó phát hiện một giá trị bit trên bus khác với giá trị mà nó đã gửi và bit đó không phải là một phần của Arbitration Field hoặc trong trường xác nhận thì cảnh báo phát hiện lỗi xuất hiện.

Lỗi thông điệp:

  1. Lỗi tổng kiểm tra – mỗi nút nhận kiểm tra thông điệp CAN để tìm lỗi tổng kiểm tra.
  2. Lỗi khung – có một số giá trị bit được xác định trước phải được truyền tại các điểm nhất định trong bất kỳ Khung thông điệp CAN nào. Nếu khi nhận phát hiện một bit không hợp lệ ở một trong những vị trí này, lỗi biểu mẫu (hay lỗi định dạng) sẽ được gắn cờ.
  3. Lỗi xác nhận – nếu máy phát xác định rằng thông điệp không được xác nhận ACK thì lỗi ACK được gắn cờ.

Các chế độ xử lý lỗi

Bộ điều khiển CAN có thể ở một trong ba trạng thái:

  • Lỗi hoạt động – chế độ hoạt động bình thường của bộ điều khiển. Có thể nhận và truyền thông điệp. Khi phát hiện lỗi, một cờ lỗi hoạt động sẽ được gửi.
  • Lỗi bị động – chế độ được kích hoạt khi bộ điều khiển gặp sự cố thường xuyên khi truyền hoặc nhận thông điệp. Có thể nhận và truyền thông điệp. Khi phát hiện lỗi trong khi nhận, một cờ lỗi thụ động sẽ được gửi.
  • Tắt Bus – được kích hoạt nếu bộ điều khiển gặp sự cố nghiêm trọng với việc truyền thông điệp. Không thể nhận hoặc truyền thông điệp nào cho đến khi bộ điều khiển CAN được bộ vi điều khiển hoặc bộ xử lý master đặt lại.

Chế độ của bộ điều khiển được điều khiển bởi hai bộ đếm lỗi – bộ đếm lỗi truyền (tx_count) và bộ đếm lỗi nhận (rx_count). Các quy tắc sau được áp dụng:

  • Bộ điều khiển CAN đang ở chế độ kích hoạt lỗi nếu tx_count <= 127 VÀ rx_count <= 127.
  • Chế độ thụ động được sử dụng nếu (tx_count> 127 HOẶC rx_count> 127) VÀ tx_count <= 255.
  • Tắt Bus được kích hoạt nếu tx_count> 255.

Sau khi bộ điều khiển CAN đã chuyển sang trạng thái tắt bus, nó phải được đặt lại bởi bộ vi điều khiển hoặc bộ xử lý master để có thể tiếp tục hoạt động. Ngoài ra, chế độ này chỉ được phép kích hoạt khi nhận được 128 lần xuất hiện của 11 Recessive Bit liên tiếp.

Các bộ đếm được cập nhật như sau:

  1. Khi bên nhận phát hiện ra lỗi, số lượng rx_count sẽ tăng lên 1, ngoại trừ khi lỗi được phát hiện là lỗi bit trong quá trình gửi cờ lỗi hoạt động hoặc cờ quá tải.
  2. Khi bộ thu phát hiện một bit chi phối là bit đầu tiên sau khi gửi cờ lỗi, số rx_count sẽ tăng lên 8.
  3. Khi máy phát gửi một cờ lỗi, tx_count sẽ tăng lên 8.
    • Ngoại lệ 1: Nếu máy phát bị lỗi thụ động và phát hiện ra lỗi ack do không phát hiện dominant ack và không phát hiện dominant bit trong khi gửi cờ lỗi thụ động của nó.
    • Ngoại lệ 2: Nếu máy phát gửi một cờ lỗi vì lỗi nội dung xảy ra trong quá trình phân xử, theo đó bit nội dung nằm trước bit RTR và lẽ ra phải là recessive bit, và đã được gửi dưới dạng recessive nhưng được gửi là dominant.
  4. Nếu máy phát phát hiện lỗi bit trong khi gửi cờ lỗi hoạt động hoặc cờ quá tải, thì tx_count sẽ tăng 8.
  5. Nếu máy thu phát hiện lỗi bit trong khi gửi cờ lỗi hoạt động hoặc cờ quá tải, số rx_count sẽ tăng lên 8.
  6. Bất kỳ nút nào chỉ chấp nhận tối đa 7 dominant bit liên tiếp sau khi gửi cờ lỗi tích cực hoặc thụ động hoặc cờ quá tải. Sau khi phát hiện dominant bit liên tiếp thứ 14 (trong trường hợp cờ lỗi hoạt động hoặc cờ quá tải), hoặc sau khi phát hiện dominant bit thứ 8 liên tiếp theo sau cờ lỗi thụ động và sau mỗi chuỗi 8 dominant bit liên tiếp, mỗi bộ phát sẽ tăng tx_count lên 8 và mọi bên nhận tăng rx_count của nó lên 8.
  7. Sau khi truyền thông điệp thành công (nhận được ack và không có lỗi cho đến khi kết thúc khung) tx_count giảm đi 1 trừ khi nó đã là 0.
  8. Sau khi nhận thành công một thông điệp (tiếp nhận mà không có lỗi cho đến ack slot và gửi thành công ack bit), rx_count sẽ giảm đi 1 nếu nó nằm trong khoảng từ 1 đến 127. Nếu rx_count là 0, nó vẫn là 0 và nếu nó lớn hơn 127, nó sẽ được đặt thành giá trị từ 119 đến 127.

Lưu ý: Nếu một nút là nút duy nhất trên bus (hoặc trong khi khởi động nút duy nhất đã hoạt động) và nó truyền một thông điệp, nó sẽ gặp lỗi xác nhận và sẽ truyền lại thông điệp. Điều này có thể dẫn đến việc nút đó chuyển sang chế độ thụ động lỗi, nhưng không dẫn đến việc nó bị tắt bus (ngoại lệ 1).

Cảnh báo lỗi

Khi một nút được phát hiện lỗi, nó sẽ gửi một cờ báo lỗi trên bus. Điều này ngăn không cho bất kỳ nút nào khác chấp nhận thông điệp và đảm bảo tính nhất quán của dữ liệu trong toàn mạng.

Cờ lỗi hoạt động bao gồm sáu bit thấp và được sử dụng nếu nút truyền khung lỗi ở trạng thái lỗi hoạt động. Vì mức thấp chiếm ưu thế, tất cả các nút khác sẽ phát hiện vi phạm nhồi nhét bit và gửi cờ lỗi của riêng chúng. Sau đó, các nút muốn truyền (bao gồm cả nút gửi thông điệp bị gián đoạn) sẽ bắt đầu thực hiện. Như thường lệ, nút có thông điệp có mức ưu tiên cao nhất sẽ chiếm được quyền ưu tiên và gửi thông điệp của nó.

Nếu bộ điều khiển CAN ở chế độ lỗi thụ động, khung lỗi sẽ bao gồm sáu bit thụ động (cao). Vì cờ lỗi chỉ bao gồm các bit thụ động nên bus không bị ảnh hưởng. Nếu không có nút nào khác phát hiện ra lỗi, thông điệp sẽ được gửi không bị gián đoạn. Điều này đảm bảo rằng một nút gặp vấn đề với việc nhận không thể chặn bus.

Tất cả việc xử lý lỗi nâng cao này được thực hiện tự động bởi bộ điều khiển CAN mà không cần bộ vi điều khiển master làm bất cứ điều gì. Đây là một trong những lợi thế lớn của CAN.

Trong đó:

Error Frame (khung lỗi)

Error Frame là một loại khung đặc biệt khác biệt với các quy tắc định khung của tin nhắn CAN. Nó được truyền đi khi một Node phát hiện ra lỗi và sẽ khiến tất cả các Node khác phát hiện ra lỗi – vì vậy chúng cũng sẽ gửi Error Frame. Sau đó, bộ truyền sẽ tự động cố gắng truyền lại tin nhắn.

Error Frame bao gồm Error Flag (cờ lỗi) có 6 bit có cùng giá trị và Error Delimiter là 8 Recessive Bit. Error Delimiter cung cấp một số khoảng trống trong đó các Node khác trên Bus có thể gửi Error Flag khi chúng phát hiện Error Flag đầu tiên.

Overload Frame (khung báo tràn)

Overload Frame được đề cập ở đây chỉ để hoàn thiện. Nó rất giống với Error Frame về mặt định dạng và nó được truyền bởi một Node khi Node đó quá bận rộn. Overload Frame không được sử dụng thường xuyên, vì ngày nay các bộ điều khiển CAN đủ thông minh để không sử dụng nó. Trong thực tế, bộ điều khiển duy nhất sẽ tạo ra Overload Frame là 82526 đã lỗi thời.

Tốc độ và khoảng cách

Chiều dài bus tối đa cho mạng CAN phụ thuộc vào tốc độ bit được sử dụng. Yêu cầu là mặt trước sóng của tín hiệu bit phải có thời gian để di chuyển đến nút ở xa nhất và quay trở lại trước khi bit được lấy mẫu. Điều này có nghĩa là chiều dài bus với tốc độ bit được sử dụng tối ưu, và nên chọn điểm lấy mẫu một cách cẩn thận.

Dưới đây là bảng các độ dài bus khác nhau và tốc độ bit tối đa tương ứng.

Baud (bit/sec) Ideal Bus Length (metres)
1M 25
800K 50
500K 100
250K 250
125K 500
50K 1000
20K 2500
10K 5000

Cáp CAN

Theo tiêu chuẩn ISO 11898, trở kháng của cáp phải là 120 +/- 12 ôm. Nó phải được xoắn ngang, được che chắn hoặc không được che chắn. Hoạt động đang được tiến hành trên tiêu chuẩn một dây SAE J2411.

Bus length [m] Bus cable Termination resistance [Ω] Baudrate
Length-related resistance [mΩ/m] Wire cross-section [mm2]
0 ~ 40 70 0.25 ~ 0.34 124 1000 at 40 m
40 ~ 300 <60 0.34 ~ 0.6 150 ~ 300 >500 at 100 m
300 ~ 600 <40 0.5 ~ 0.6 150 ~ 300 >100 at 500 m
600 ~ 1000 <26 0.75 ~ 0.8 150 ~ 300 >50 at 1 km
Wire cross-section[mm2] Maximum length [m]
Node = 32 Node = 64 Node = 100
0.25 200 170 150
0.5 360 310 270
0.75 550 470 410

Hiện nay CAN được ứng dụng trong rất nhều lĩnh vực khác nhau như: Phương tiện vận tải: ôtô, tàu, hệ thống điện tử hàng hải, hàng không, tự động hóa nhà máy, máy công nghiệp, tự động hóa tòa nhà, thiết bị y tế,…

Chia sẻ: