CAN được phát triển lần đầu tiên bởi Robert Bosch GmbH, Đức vào năm 1986 khi họ được Mercedes yêu cầu phát triển một hệ thống liên lạc giữa ba ECU (bộ điều khiển điện tử) trên xe. Họ nhận thấy rằng UART không còn phù hợp trong tình huống này vì nó được sử dụng trong giao tiếp điểm – điểm. Nhu cầu về một hệ thống liên lạc đa chủ trở nên cấp thiết. Bởi vậy, mạng CAN đầu tiên đã xuất hiện vào năm 1987 bởi Intel chế tạo.
Về mặt lý thuyết, CAN có thể liên kết tới 2032 thiết bị (giả sử một nút với một mã ID) trên một mạng duy nhất. Nó cung cấp tốc độ truyền thông tốc độ cao lên đến 1 Mbits / giây do đó cho phép điều khiển thời gian thực. Ngoài ra, tính năng hạn chế lỗi và phát hiện lỗi làm cho nó đáng tin cậy hơn trong môi trường nhiễu nghiêm trọng.
Dựa trên đặc điểm thông số kỹ thuật của Bosch. Phiên bản 2.0 của CAN được chia thành hai phần:
- CAN tiêu chuẩn (Phiên bản 2.0A): sử dụng ID (Identifier) 11 bit.
- CAN mở rộng (Phiên bản 2.0B): sử dụng ID 29 bit.
Hai phần được định nghĩa bởi các ID khác nhau của thông điệp, với sự khác biệt chính là độ dài mã ID.
Có hai tiêu chuẩn ISO cho CAN. Sự khác biệt là ở lớp vật lý: ISO 11898 xử lý các ứng dụng tốc độ cao lên đến 1Mbit / giây và ISO 11519 có giới hạn trên là 125kbit / giây.
Tóm tắt lịch sử phát triển giao thức CAN
- Năm 1983: Bắt đầu dự án phát triển mạng trên xe hơi trong nội bộ hãng Bosch.
- Năm 1986: Chính thức giới thiệu giao thức CAN.
- 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à Philips.
- Năm 1991: Bosch xuất bản thông số kỹ thuật CAN 2.0.
- 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.
- Năm 1993: Xuất bản tiêu chuẩn ISO 11898.
- Năm 1994: CiA tổ chức Hội nghị CAN quốc tế lần thứ nhất (iCC). Allen-Bradley giới thiệu giao thức DeviceNet.
- Năm 1995: Xuất bản Tiêu chuẩn ISO 11898 sửa đổi (định dạng khung mở rộng). CiA xuất bản giao thức CANopen.
Trong đó:
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))
CAN/CANbus là gì?
Controller Area Network (CAN hoặc CAN Bus) là công nghệ mạng nối tiếp, tốc độ cao, bán song công, hai dây. Ban đầu CAN được thiết kế dành cho ngành công nghiệp ô tô, tuy nhiên 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.
Ưu điểm của CAN
- Đơ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
Những đặc điểm trên, bạn đọc có thể thấy rõ khi đi sâu vào nghiên cứu chuẩn này thông qua thông tin chia sẻ bên dưới:
CAN hoạt động như thế nào?
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 CAN Frame
Dữ liệu CAN được truyền dưới dạng các Frame (khung). Có 4 loại Frame khác nhau, đó là:
- 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.
- 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.
- 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.
- 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). Chúng ta sẽ tìm hiểu về cấu trúc các loại khung của các chuẩn giao thức trên.
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:
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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
- Lỗi được phát hiện bởi bộ điều khiển CAN (bộ phát hoặc bộ thu).
- Một Error Frame được truyền ngay lập tức.
- Thông điệp bị hủy ở tất cả các nút (tồn tại ngoại lệ).
- Trạng thái của bộ điều khiển CAN được cập nhật.
- 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:
- 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.
- 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:
- 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.
- 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ờ.
- 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:
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
Bit timing (định thời bit)
CAN có các tính năng nâng cao để khắc phục độ trễ thời gian trong độ dài bus (so với tốc độ bit) và khắc phục được sự khác biệt về tần số chrystal xung nhịp cho các nút trên bus.
Việc lựa chọn định thời bit là rất quan trọng vì nó quyết định tốc độ bit, điểm mẫu và khả năng tái đồng bộ hóa.
Bit segments (các đoạn bit – theo tiêu chuẩn của Bosch)
Mỗi bit được chia thành bốn phân đoạn – phân đoạn đồng bộ hóa, phân đoạn lan truyền và phân đoạn giai đoạn một và hai. Mỗi phân đoạn bao gồm một hoặc nhiều lượng tử thời gian.
Lượng tử thời gian là một lượng thời gian cố định được lấy từ đồng hồ của bộ điều khiển CAN với hệ số tỷ lệ đặt trước.
Phân đoạn đồng bộ hóa (Synch_Seg)
Phân đoạn đồng bộ hóa được sử dụng để đồng bộ hóa các nút khác nhau trên bus. Khi một bit được gửi trên bus, cạnh hàng đầu dự kiến sẽ nằm trong phân đoạn này. Đoạn này luôn dài một lần lượng tử.
Phân đoạn lan truyền (Prop_Seg)
Phân đoạn lan truyền là cần thiết để bù đắp cho sự chậm trễ của các bus.
Kích thước phân đoạn có thể thiết lập từ 1 đến 8 lượng tử thời gian.
Phân đoạn giai đoạn 1 (Phase_Seg1), Phân đoạn giai đoạn 2 (Phase_Seg2)
Các phân đoạn này có thể được sử dụng để kéo dài hoặc rút ngắn bằng cách đồng bộ hóa lại.
Phân đoạn bit (theo Intel 527 và C167CR)
Trong hầu hết các bộ điều khiển CAN, các phân đoạn dường như được triển khai theo một cách khác với mô tả trong tiêu chuẩn. Phân đoạn đồng bộ trông giống như trong tiêu chuẩn và bao gồm một lượng tử thời gian. Sự khác biệt lớn là phân đoạn truyền và phân đoạn giai đoạn 1 trong tiêu chuẩn đã được kết hợp thành một phân đoạn, TSEG1. Phân đoạn giai đoạn 2 được giữ nguyên, nhưng được đổi tên thành TSEG2.
Thông thường chỉ có một điểm mẫu cho mỗi bit. Trong trường hợp này, điểm lấy mẫu nằm ở rìa giữa TSEG1 và TSEG2. Tuy nhiên, một số bộ điều khiển CAN cũng có thể lấy mẫu mỗi bit ba lần. Trong trường hợp này, bit sẽ được lấy mẫu ba lượng tử liên tiếp, với mẫu cuối cùng được lấy ở rìa giữa TSEG1 và TSEG2.
Ba mẫu chỉ nên được sử dụng cho baudrat tương đối chậm.
Tính toán tốc độ truyền và điểm mẫu
Tốc độ truyền
Tốc độ truyền của bus có thể được tính từ:
Baudrate = fcrystal / (2 * n * (BRP + 1))
trong đó n là số lượng tử thời gian cho một bit và được định nghĩa là:
n = SYNCHSEG + TSEG1 + TSEG2
BRP là giá trị của BaudRate Prescaler.
Cảnh báo: một số bộ điều khiển CAN (như Intel 526) có một cách khác để tính số lượng tử thời gian trong một bit!
Điểm mẫu
Quantabeforesample = TSEG1 + 1
Quantaaftersample = TSEG2
Thường thì điểm mẫu được tính theo phần trăm thời gian bit. Đây là:
(TSEG1 + 1) / (TSEG1 + 1 + TSEG2)
Cảnh báo: một số bộ điều khiển CAN (như C167CR) sử dụng một cách khác để tính lượng dư lượng tử.
Tái đồng bộ hóa
Tái đồng bộ hóa được thực hiện để bù đắp cho độ trễ của bus và các nút có tần số tinh thể khác nhau. Đồng bộ hóa thường chỉ được thực hiện trên cạnh từ mức bus recessive đến mức bus dominant.
Tái đồng bộ hóa Hard
Khi bus không hoạt động và bộ điều khiển phát hiện một bit bắt đầu, nó sẽ tự đồng bộ hóa lại để cạnh nằm trong phân đoạn Synch. Tái đồng bộ hóa Hard chỉ có thể được thực hiện cho bit đầu tiên trong khung.
Tái đồng bộ hóa trong một khung
Bộ điều khiển CAN có khả năng đồng bộ hóa trên các cạnh bit cũng trong một khung. Độ rộng bước nhảy đồng bộ hóa (lại) (SJW – Synchronisation Jump Width) quyết định số lượng tử thời gian tối đa mà bộ điều khiển có thể tái đồng bộ mỗi bit.
- Quá trình đồng bộ hóa lại máy thu với máy phát chậm hơn được xử lý như sau:
Nếu cạnh từ recessive đến dominant xuất hiện bên trong TSEG1 và cạnh nhỏ hơn hoặc bằng lượng tử SJW bên trong, TSEG1 được khởi động lại. Nếu cạnh nhiều hơn lượng tử SJW bên trong, TSEG1 được kéo dài với lượng tử SJW.
- Tái đồng bộ hóa máy thu với máy phát nhanh hơn:
Nếu một cạnh từ recessive đến dominant xuất hiện bên trong TSEG2, TSEG2 được rút ngắn bởi số lượng tử cần thiết để làm cho cạnh nằm ngoài TSEG2. Tuy nhiên, TSEG2 có thể được rút ngắn không nhiều hơn lượng tử SJW.
Lớp vật lý CAN
Lớp vật lý không phải là một phần của tiêu chuẩn Bosch CAN. Tuy nhiên, tiêu chuẩn ISO được sử dụng cho các quá trình thu phát.
CAN truyền tín hiệu trên bus CAN bao gồm hai dây, CAN-High và CAN-Low. Hai dây này đang hoạt động ở chế độ vi sai, nghĩa là chúng mang điện áp ngược (để giảm nhiễu). Các mức điện áp, cũng như các đặc tính khác của lớp vật lý, phụ thuộc vào tiêu chuẩn đang được sử dụng.
ISO 11898
Các mức điện áp cho mạng CAN tuân theo tiêu chuẩn ISO 11898 (CAN tốc độ cao) được mô tả:
Signal | recessive state | dominant state | unit | ||||
min | nominal | max | min | nominal | max | ||
CAN-High | 2.0 | 2.5 | 3.0 | 2.75 | 3.5 | 4.5 | Volt |
CAN-Low | 2.0 | 2.5 | 3.0 | 0.5 | 1.5 | 2.25 | Volt |
Lưu ý rằng đối với trạng thái recessive, điện áp định mức cho hai dây là như nhau. Điều này làm giảm công suất thu được từ các nút thông qua các điện trở kết thúc. Các điện trở này là 120ohm và nằm trên mỗi đầu của dây dẫn. Một số người đã chơi với việc sử dụng các điện trở kết cuối trung tâm (nghĩa là đặt chúng ở một nơi trên bus). Điều này không được khuyến khích, vì cấu hình đó sẽ không ngăn chặn các vấn đề phản chiếu.
ISO 11519
Các mức điện áp cho mạng CAN tuân theo tiêu chuẩn ISO 11519 (CAN tốc độ thấp) được mô tả trong bảng dưới đây:
Signal | recessive state | dominant state | unit | ||||
min | nominal | max | min | nominal | max | ||
CAN-High | 1.6 | 1.75 | 1.9 | 3.85 | 4.0 | 5.0 | Volt |
CAN-Low | 3.1 | 3.25 | 3.4 | 0 | 1.0 | 1.15 | Volt |
Chiều dài bus
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.
Bus length (metres) | Maximum bit rate (bit/s) |
40 | 1 Mbit/s |
100 | 500 kbit/s |
200 | 250 kpit/s |
500 | 125 kbit/s |
6 km | 10 kbit/s |
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.
Phương thức triển khai mạng CAN
Không có tiêu chuẩn nào về cách triển khai các bộ điều khiển CAN hoặc cách chúng giao tiếp với bộ vi điều khiển master. Có hai phương thức triển khai chính: BasicCAN và FullCAN.
Sự khác biệt chính giữa các phương thức này là cách các thông điệp đặc biệt được lọc ra, đó là cách nó quyết định thông điệp nào đặc biệt và thông điệp nào không. Ngoài ra còn có sự khác biệt về cách các Remote Frame được phản hồi và cách thông điệp được lưu vào bộ đệm. Sự khác biệt sẽ ảnh hưởng đến lượng tải được đặt trên vi điều khiển master.
BasicCAN
BasicCAN thường được sử dụng trong các bộ điều khiển CAN độc lập rẻ hơn hoặc trong các bộ vi điều khiển nhỏ hơn với bộ điều khiển CAN tích hợp.
Bộ điều khiển BasicCAN thường có hai bộ đệm nhận và một bộ đệm truyền. Các bộ đệm nhận được sắp xếp theo cấu trúc FIFO và một thông điệp có thể được nhận vào một bộ đệm trong khi vi điều khiển đang đọc thông tin từ bộ đệm khác. Nếu một thông điệp được nhận trong khi cả hai bộ đệm nhận đều đầy, các thông điệp cũ nhất sẽ được giữ lại. Điều này có nghĩa là các thông điệp mới hơn có thể bị mất nếu bộ vi điều khiển master không đọc các thông điệp đủ nhanh.
Một thông điệp được gửi bằng cách ghi nó vào bộ đệm truyền.
Các thông điệp đặc biệt được lọc ra bằng cách sử dụng hai thanh ghi, hoạt động trên mã nhận dạng thông điệp. Mỗi bit trong mã ID được kiểm tra dựa trên bộ lọc. Nếu thông điệp khớp với bộ lọc, nó sẽ được lưu trữ trong một bộ đệm nhận.
Mỗi bit của bộ lọc ID có thể được đặt thành ‘1’, ‘0’ hoặc ‘không quan tâm’. Thường thì bộ lọc chỉ hoạt động trên tám trong số mười một bit trong ID (CAN tiêu chuẩn). Điều này có nghĩa là ba bit thấp hơn trong mã ID luôn là ‘không quan tâm’.
Khi sử dụng BasicCAN, điều quan trọng là phải chọn số nhận dạng một cách cẩn thận nhất để cửa sổ của bộ lọc có thể được giữ ở mức nhỏ nhất có thể. Tất cả thông điệp được cho qua bộ lọc phải được đọc và kiểm tra bởi bộ vi điều khiển. Điều này có nghĩa là quá trình lọc cuối cùng được thực hiện trong phần mềm.
Bộ điều khiển BasicCAN không có hỗ trợ phản hồi tự động các Remote Frame, có nghĩa là ứng dụng sẽ phải xử lý chúng. Điều này sẽ đặt thêm tải lên bộ vi điều khiển hoặc bộ xử lý, nhưng sẽ đảm bảo rằng giá trị trả về được cập nhật.
Các tính năng BasicCAN
Truyền | Ứng dụng điền vào thanh ghi Tx hoàn chỉnh bao gồm ID, RTR, datalength, data -> mọi ID đều có thể được truyền |
Nhận | Mọi thông điệp CAN đều có thể được nhận Thông thường có hai bộ đệm nhận trong cấu trúc FIFO Lọc thông điệp. Thông thường không thể thiết lập bộ lọc để chỉ những thông điệp đặc biệt được cho qua -> ứng dụng phải thực hiện lọc lần cuối |
Xử lý Remote Frame | Remote Frame được ứng dụng để phản hồi |
Ghi đè | Giữ lại thông điệp cũ nhất (thông điệp mới hơn sẽ bị mất) |
FullCAN
FullCAN được sử dụng trong các bộ điều khiển CAN và vi điều khiển hiệu suất cao, đắt tiền hơn. Bộ điều khiển FullCAN có một bộ đệm được gọi là hộp thư. Khi khởi tạo, mỗi hộp thư được gán một mã ID và được đặt để truyền hoặc nhận.
Khi bộ điều khiển CAN nhận được một thông điệp, nó sẽ kiểm tra các hộp thư để xem có hộp thư nhận có cùng số nhận dạng với thông điệp hay không. Nếu một hộp thư như vậy được tìm thấy, thư sẽ được lưu trữ trong đó và bộ điều khiển máy chủ sẽ nhận được thông điệp. Nếu không, thông điệp sẽ bị hủy.
Khi truyền một thông điệp, độ dài thông điệp và dữ liệu được ghi vào hộp thư truyền với số nhận dạng chính xác.
Nếu nhận được thông điệp từ xa, bộ điều khiển sẽ kiểm tra số nhận dạng từ xa dựa trên các hộp thư truyền. Nếu tìm thấy một kết quả trùng khớp, bộ điều khiển sẽ tự động gửi một thông điệp với mã ID và dữ liệu có trong hộp thư đó. Điều này có nghĩa là bộ vi điều khiển có tải thấp hơn và phần mềm không phải xử lý các thông điệp từ xa. Tuy nhiên, nếu hộp thư lâu ngày không được cập nhật thông tin gửi đến mạng sẽ bị cũ. Điều này phải được xem xét khi viết phần mềm.
Với bộ điều khiển FullCAN, chỉ có thể lọc ra chính xác các loại thông điệp đặc biệt. Loại bộ điều khiển này do đó sẽ cung cấp tải thấp hơn trên bộ vi điều khiển master. Tuy nhiên, số lượng hộp thư có hạn. Số lượng hộp thư lớn nhất hiện có trong bộ điều khiển CAN ngày nay là ???.
Với một số bộ điều khiển, có thể cấu hình lại các hộp thư động. Tuy nhiên, điều đó không hoàn toàn giải quyết được vấn đề. Do đó một số bộ điều khiển là bộ điều khiển CAN hỗn hợp, có nghĩa là chúng có hộp thư, nhưng cũng có bộ đệm BasicCAN.
Bộ điều khiển FullCAN có hỗ trợ tự động trả lời các Remote Frame. Điều này sẽ giảm tải trên bộ vi điều khiển hoặc bộ xử lý máy chủ, nhưng cũng có thể có nghĩa là thông tin cũ được gửi đi. Điều rất quan trọng là phải xem xét điều này khi viết đơn đăng ký của bạn.
Tính năng FullCAN
Truyền | Truyền hộp thư được khởi tạo một lần Chỉ các byte dữ liệu được ghi trước khi truyền |
Nhận | Chỉ những thư có ID được xác định trong hộp thư nhận mới có thể nhận được Không có bộ đệm kép cho hộp thư Lọc chấp nhận hoàn toàn (chỉ những ID thư chính xác mới được thông qua) |
Xử lý Remote Frame | Remote Frame được trả lời tự động bởi bộ điều khiển |
Ghi đè | Giữ lại thông điệp mới nhất (các thông điệp cũ có cùng ID sẽ bị mất) |
CAN FD
Giới thiệu về CAN FD
CAN FD hay CAN Flexible Data Rates là một sự cải tiến của CAN 2.0. CAN FD cũng được phát triển bởi tập đoàn Bosch và chính thức được phát hành vào năm 2012.
CAN FD có thể sử dụng chung tầng vật lý với CAN 2.0.
Những khác biệt chính giữa CAN 2.0 và CAN FD:
CAN 2.0 | CAN FD |
Tốc độ bit tối đa: 1 Mbps. | Tốc độ bit tối đa: 12 Mbps (ISO 11898-2 2015). |
Lượng dữ liệu tối đa trong 1 Frame: 8 byte. | Lượng dữ liệu tối đa trong 1 Frame: 64 byte. |
Nhiều Node có thể truyền thông điệp cùng một thời điểm. | Chỉ một Node có thể truyền thông điệp tại một thời điểm. |
Không có bit để thay đổi tốc độ truyền dữ liệu. | Có thêm các bit BRS, FDF, ESI có thể thay đổi tốc độ truyền dữ liệu. |
Trường CRC chứa 15 bit. | Trường CRC chứa 17 hoặc 21 bit. |
Dữ liệu ít bảo mật. | Dữ liệu được bảo mật tốt hơn. |
CAN FD cũng có 4 loại khung truyền như CAN 2.0: Data Frame, Remote Frame, Error Frame và Overflow Frame.
– Xét riêng về Data Frame của CAN FD cũng bao gồm 2 định dạng như CAN 2.0 đó là:
- Data Frame dạng CAN FD chuẩn (Standard Format): 11 bit ID
- Data Frame dạng CAN FD mở rộng (Extended Format): 29 bit ID
– CAN FD không định nghĩa một định dạng riêng cho Remote Frame, Error Frame và Overload Frame, mà nó có cùng cấu trúc với CAN 2.0 cho các loại khung này.
Cấu trúc Data Frame
Cấu trúc của khung này tạo nên sự khác biệt (cải tiến) giữa CAN FD và CAN 2.0.
Data Frame CAN FD cũng bao gồm 7 trường bit như CAN 2.0. Chúng ta sẽ tìm hiểu cấu tạo bit của từng trường để thấy được sự khác biệt của chúng.
1. Trường bắt đầu (Start Of Frame Field – SOF)
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).
2. Trường xác định quyền ưu tiên của tín hiệu (Arbitration Field)
Bit dùng phân biệt Data Frame và Remote Frame – RTR được thay thế bởi bit RRS (Remote Request Substitution) và luôn là một Dominant Bit.
3. Trường điều khiển (Control Field)
Ngoài bit quy định khung FD chuẩn hay mở rộng (bit IDE). Trường điều khiển có thêm các bit sau:
- FDF (Flexible Data Rate Format): Quy định việc có chuyển sang tốc độ truyền cao hơn hay không.
- BRS (Baud Rate Switch) là bit dùng để quyết định việc thay đổi tốc độ bit trong định dạng CAN FD. Nếu bit này là Recessive thì sau Arbitration Phase (pha xác định quyền ưu tiên), tốc độ bit hiện tại sẽ được chuyển thành một tốc độ bit khác đã được cấu hình trước, tốc độ bit mới được dùng cho Data Phase (pha dữ liệu).
- ESI (Error State Indicator) là cờ biểu thị trạng thái lỗi, là Dominant Bit nếu Node đang trong trạng thái tích cực với lỗi (Active Error) và là Recessive Bit nếu Node đang trong trạng thái lỗi bị động (Passive Error).
- Bit DLC của CAN FD sử dụng các giá trị từ 9 đến 15 để tăng số byte trường dữ liệu lên đến 64 byte cho phép truyền được nhiều dữ liệu hơn trong 1 lần truyền.
4. Trường dữ liệu (Data Field)
Kích thước dữ liệu tối đa có thể lên tới 64 byte.
5. Trường CRC
Vì độ dài trường dữ liệu tăng lên nên trường CRC cũng được điều chỉnh lại cho phù hợp.
Trường CRC không có độ dài cố định như CAN 2.0 mà thay đổi tùy theo độ dài trường dữ liệu. Cụ thể:
- Khung theo định dạng CAN sẽ dùng CRC_15 có đa thức sinh như chuẩn CAN 2.0 => độ dài CRC Sequence là 15 bit.
- Khung theo định dạng CAN FD có độ dài từ 16 byte trở xuống sử dụng CRC_17 => độ dài CRC Sequence là 17 bit.
- Khung theo định dạng CSN FD có độ dài trên 16 byte sẽ sử dụng CRC_21 => độ dài CRC Sequence là 21 bit.
Trong định dạng CAN FD, CRC được tính cho chuỗi bit đã được áp dụng luật chèn bit. Đây là điểm khác biệt so với định dạng CAN vì CRC của định dạng này không bao gồm các bit chèn.
CRC Delimiter chỉ là 1 Recessive Bit đối với định dạng CAN nhưng nó có thể là 1 hoặc 2 Recessive Bit trong định dạng CAN FD. Cụ thể, trong định dạng CAN FD, bộ truyền chỉ truyền 1 Recessive Bit nhưng phải chấp nhận có 2 Recessive Bit trước khi phát hiện cạnh từ Recessive chuyển sang Dominant của ACK Slot. Một bộ nhận sẽ vẫn gửi ACK của nó sau Recessive Bit đầu tiên của CRC Delimiter.
6. Trường ACK
Định dạng CAN FD chấp nhận trường ACK Slot có độ dài tối đa 2 bit để bù sự dịch pha giữa các bộ nhận trong khi định dạng CAN chỉ chấp nhận 1 bit ACK và coi bit ACK thứ 2 là một lỗi định dạng.
ACK Delimiter cũng được tăng lên thành 2 Recessive Bit trong định dạng CAN FD.
7. 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.
Ứng dụng của CAN
Hiện nay CAN được ứng dụng trong rất nhều lĩnh vực khác nhau như: Xe ôtô, tàu khách và tàu hàng, hệ thống điện tử hàng hải, điện tử máy bay và hàng không, tự động hóa nhà máy, điều khiển máy công nghiệp, tự động hóa tòa nhà, thang máy (thang nâng và thang trượt), thiết bị phụ tùng y tế,….với tốc độ bit có thể lên đến 1 Mbit/s.
- Ứng dụng mạng trong công ty: các hệ thống có thể sử dụng chuẩn CAN để xây dựng mạng phụ để thực thi khởi động hệ thống và hỗ trợ tháo lắp “nóng” (hot-swapping) thiết bị trên các bo PC lớn dùng để định tuyến.
- Trong bệnh viện, mạng CAN có thể sử dụng để điều khiển các thiết bị trong phòng như đèn, bảng điện tử, máy nội soi, máy X-quang, camera, máy in, …. (giao thức có thể sử dụng là CANOpen)
- Tự động hóa trong nhà máy: việc điều khiển tự động hóa các thiết bị có thể sử dụng giao thức DeviceNet, một giao thức xay dựng trên chuẩn CAN
- Hệ thống thang máy: Các bo điều khiển thông tin với nhau qua bus CAN ở các tầng và bo mạch chính
Trên đây, MESIDAS đã chia sẻ cho bạn các thông tin cơ bản về mạng CAN/CAN Bus (Controller Area Network). Hy vọng rằng, với lượng kiến thức trong bài sẽ giúp ích cho các bạn đang nghiên cứu, tìm hiểu, học tập hay làm việc với mạng CAN/CAN Bus. Xin cảm ơn!