CANbus là gì? CAN được phát triển lần trước 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 thích 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 trước 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ó phân phối tốc độ truyền thông tốc độ cao lên tới 1 Mbits / giây do vậy 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 khái niệm bởi những 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ý những ứng dụng tốc độ cao lên tới 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: khởi đầu dự án phát triển mạng trên xe tương đố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 trước 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 những 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 trước 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 những nhà sản xuất và sử dụng trên toàn cầu phát triển và hỗ trợ CANopen và những 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 để phân phối thông tin về công nghệ CAN cơ bản, sản xuất và tiếp thị. Có khoảng 500 đơn vị 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 tiếp nối, 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 ngày 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à những ngành khác.
Ưu điểm của CAN
- đơn thuần, kinh phí thấp: bus CAN chỉ có 2 dây giúp kết nối những 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à sản xuất khác nhau có thể phát triển những 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 ngừ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ả những 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 như 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 như 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 những thông điệp bị lỗi khi bus rảnh: Một thông điệp được truyền ra bus nếu như 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 tới 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, độc giả có thể thấy rõ khi đi sâu vào trong nghiên cứu chuẩn này thông qua thông tin chia sẻ bên dưới:
CAN hoạt động 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ể khắc phục 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ả những 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 tới nút đó hay không. nếu như thông điệp có liên quan, nó sẽ được xử lý; nếu như 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. trị giá 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 như 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. những 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 như vẫn còn những 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.
những bit trong thông điệp mạng CAN có thể được gửi ở dạng cao hoặc thấp. những bit thấp luôn chiếm ưu thế, tức là nếu như một nút phấn đấu gửi mức thấp và nút khác cố gửi mức cao, kết quả trên những bus sẽ là mức thấp. Một nút truyền luôn lắng tai 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 như hai nút phấn đấu gửi một thông điệp với cùng một ID tại cùng một thời khắc, trường xác định quyền ưu tiên sẽ không hoạt động. Thay vào đó, một trong những 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 đó, những nút sẽ sử dụng trường xử lý lỗi của CAN, trường hợp này, cuối cùng sẽ dẫn tới việc một trong những nút truyền bị tắt (chế độ tắt bus).
những loại CAN Frame
Dữ liệu CAN được truyền dưới dạng những 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 tới những bộ nhận dữ liệu. Khung này có vùng để mang những 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 như phát hiện Bus rảnh. Hoặc nếu như 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 để những 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ì vậy 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
những 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 những loại giao thức CAN nằm trong cấu trúc của những loại khung (Frame). Chúng ta sẽ tìm hiểu về cấu trúc những loại khung của những 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 tới 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 những CAN 2.0A chỉ truyền và nhận những thông điệp định dạng chuẩn, mặc dù một số (2.0B Passive) sẽ nhận những 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 khởi đầu khung (Start Of Frame Field – SOF)
Với cả 2 định dạng của chuẩn CAN 2.0 thì trường khởi đầu là vị trí của bit trước tiên trong khung. Trường này chiếm 1 bit dữ liệu. Bit trước tiên này là một Dominant Bit (mức logic 0) đánh dấu sự khởi đầ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 sử dụng để phân biệt khung là Data Frame hay Remote Frame.
- nếu như là Data Frame, bit này luôn bằng 0 (Dominant Bit).
- nếu như 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 như 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ó trị giá 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ì tới vị trí sau ID, khung chuẩn là bit RTR = 0, còn khung mở rộng là bit SRR = 1. tương tự, 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
sử 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 tới trị giá 2 bit này. Bộ nhận có thể nhận được những 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 thông 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 trị giá từ 0 tới 8 tương ứng với trường dữ liệu có từ 0 tới 8 byte dữ liệu. Data Frame có thể không có byte dữ liệu nào khi DLC = 0.
- trị giá lớn hơn 8 không được phép sử dụng. Hình dưới mô tả những 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 tới 8 byte tùy vào trị giá 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ù thống nhất cho những 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 những trường hợp sai nhóm (Bus Error). Ở đây, tổng bit từ trường khởi đầu (SOF) tới 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 những 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 như khác nhau tức là đã có lỗi, nếu như giống nhau tức là đã nhận đúng từ trường SOF tới 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 chuẩn xác trị giá 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. tương tự, 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 phân phối 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 để phân phối khả năng tương thích với những giao thức truyền thông tiếp nối khác được sử dụng trong những ứng dụng ô tô ở Hoa Kỳ. Để phục vụ cho việc này và vẫn phân phối 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. trước 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, 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 như cả hai thông điệp có cùng số nhận dạng cơ sở (11 bit) .
Tất cả những trường khác trong Data Frame 2.0B y sì với những 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 trước 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, những 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 vậy, trong những 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ó những thông điệp ở định dạng chuẩn là có ý nghĩa trong những hệ thống sử dụng cả hai loại.
Số lượng ID duy nhất có sẵn cho người sử 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)
kế bên 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, những khung này hầu như không được sử dụng trong những ứ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 thuần (BasicCAN) không thể phản hồi tự động. trường hợp này, bộ vi điều khiển Master nhận diện đượ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à chuẩn xác và nhất quán. những nút bị lỗi sẽ chuyển sang chế độ mà không làm phiền tới truyền tải trên bus.
trình tự 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 tức thời.
- Thông điệp bị hủy ở tất cả những 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 như 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ư thông 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. những 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 tục (và mức thấp sau năm mức cao liên tục). Đ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 tục) 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 như nó phát hiện một trị giá bit trên bus khác với trị giá 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ố trị giá bit được xác định trước phải được truyền tại những điểm nhất định trong bất kỳ Khung thông điệp CAN nào. nếu như khi nhận phát hiện một bit không hợp thức ở 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 như 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ờ.
những 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 thông 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 thụ độ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 như 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 tới 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). những quy tắc sau được vận dụng:
- Bộ điều khiển CAN đang ở chế độ kích hoạt lỗi nếu như tx_count <= 127 VÀ rx_count <= 127.
- Chế độ thụ động được sử dụng nếu như (tx_count> 127 HOẶC rx_count> 127) VÀ tx_count <= 255.
- Tắt Bus được kích hoạt nếu như 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 tục.
những 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 trước 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 như 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 như 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 như 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 như 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 tục 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 tục thứ 14 (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 tục theo sau cờ lỗi thụ động và sau mỗi chuỗi 8 dominant bit liên tục, 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 tới 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 tới ack slot và gửi thành công ack bit), rx_count sẽ giảm đi 1 nếu như nó nằm trong khoảng từ 1 tới 127. nếu như rx_count là 0, nó vẫn là 0 và nếu như nó lớn hơn 127, nó sẽ được đặt thành trị giá từ 119 tới 127.
Lưu ý: nếu như một nút là nút duy nhất trên bus (hoặc trong khi phát độ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 tới việc nút đó chuyển sang chế độ thụ động lỗi, nhưng không dẫn tới 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 như 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ả những 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 đó, những nút muốn truyền (bao gồm cả nút gửi thông điệp bị gián đoạn) sẽ khởi đầ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 như 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 những bit thụ động nên bus không bị tác động. nếu như 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 tăng 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 những 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ả những 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 phấn đấu truyền lại tin nhắn.
Error Frame bao gồm Error Flag (cờ lỗi) có 6 bit có cùng trị giá và Error Delimiter là 8 Recessive Bit. Error Delimiter phân phối một số khoảng trống trong đó những Node khác trên Bus có thể gửi Error Flag khi chúng phát hiện Error Flag trước 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 những 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ó những tính năng tăng để 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 những nút trên bus.
Việc lựa 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 (những đ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 những 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 những bus.
Kích thước phân đoạn có thể thiết lập từ 1 tới 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)
những 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 những bộ điều khiển CAN, những phân đoạn nhịn nhườ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 phối 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. 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. trường hợp này, bit sẽ được lấy mẫu ba lượng tử liên tục, 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 tức là:
n = SYNCHSEG + TSEG1 + TSEG2
BRP là trị giá 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à những 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 tới 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 khởi đầ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 trước 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 những 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 như cạnh từ recessive tới 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 phát động lại. nếu như 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 như một cạnh từ recessive tới 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 những 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, tức là chúng mang điện áp ngược (để giảm nhiễu). những mức điện áp, cũng như những đặ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
những 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ả:
recessive state
dominant state
unit
Signal | |||||||
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ừ những nút thông qua những điện trở kết thúc. những đ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 những điện trở kết cuối trung tâm (tức 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 những vấn đề phản chiếu.
ISO 11519
những 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:
recessive state
dominant state
unit
Signal | |||||||
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 để vận chuyển tới nút ở xa nhất và quay trở lại trước khi bit được lấy mẫu. Điều này tức là chiều dài bus với tốc độ bit được sử dụng tối ưu, và nên lựa chọn điểm lấy mẫu một cách thận trọng.
Dưới đây là bảng những độ 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 những 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 những phương thức này là cách những 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 những 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ẽ tác động tới lượng tải được đặt trên vi điều khiển master.
BasicCAN
BasicCAN thường được sử dụng trong những bộ điều khiển CAN độc lập rẻ hơn hoặc trong những 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. những 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 như một thông điệp được nhận trong khi cả hai bộ đệm nhận đều đầy, những thông điệp cũ nhất sẽ được giữ lại. Điều này tức là những thông điệp mới hơn có thể bị mất nếu như bộ vi điều khiển master không đọc những 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.
những 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 như 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 tức 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 lựa chọn số nhận dạng một cách thận trọng 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 tức 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 những Remote Frame, tức 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 trị giá trả về được cập nhật.
những 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 những 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 những 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 như một hộp thư tương tự đượ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 như 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 ghi được vào hộp thư truyền với số nhận dạng chuẩn xác.
nếu như 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 những hộp thư truyền. nếu như 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 tức 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ý những thông điệp từ xa. Tuy nhiên, nếu như hộp thư lâu ngày không được cập nhật thông tin gửi tới 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 chuẩn xác những loại thông điệp đặc biệt. Loại bộ điều khiển này do vậy sẽ phân phối 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 những hộp thư động. Tuy nhiên, điều đó không hoàn toàn khắc phục được vấn đề. do vậy một số bộ điều khiển là bộ điều khiển CAN hỗn hợp, tức 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 những 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ể tức 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ỉ những byte dữ liệu ghi được 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ư chuẩn 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 (những 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 khắc. | Chỉ một Node có thể truyền thông điệp tại một thời khắc. |
Không có bit để thay đổi tốc độ truyền dữ liệu. | Có thêm những 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 khái niệm 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 những 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 khởi đầu (Start Of Frame Field – SOF)
Trường khởi đầu là vị trí của bit trước tiên trong khung. Trường này chiếm 1 bit dữ liệu. Bit trước 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 sử 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 những 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 sử dụng để quyết định việc thay đổi tốc độ bit trong định dạng CAN FD. nếu như 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 sử 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 như Node đang trong trạng thái tích cực với lỗi (Active Error) và là Recessive Bit nếu như Node đang trong trạng thái lỗi thụ động (Passive Error).
- Bit DLC của CAN FD sử dụng những trị giá từ 9 tới 15 để tăng số byte trường dữ liệu lên tới 64 byte cho phép truyền được rất 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 thích 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ẽ 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 vận 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 những 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 trước 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 những 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
ngày nay CAN được ứng dụng trong rất nhều ngành 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ử phi cơ 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 tới 1 Mbit/s.
- Ứng dụng mạng trong đơn vị: những hệ thống có thể sử dụng chuẩn CAN để xây dựng mạng phụ để thực thi phát động hệ thống và hỗ trợ tháo lắp “nóng” (nóng-swapping) thiết bị trên những bo PC lớn sử dụng để định tuyến.
- Trong bệnh viện, mạng CAN có thể sử dụng để điều khiển những 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 những 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: những bo điều khiển thông tin với nhau qua bus CAN ở những tầng và bo mạch chính
Trên đây đã chia sẻ cho bạn những thông tin cơ bản về mạng CAN/CAN Bus (Controller Area Network). Hy vọng rằng, với lượng tri thức trong bài sẽ giúp ích cho những 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!
Tham khảo thêm:Gateway là gì? Tổng quan về bộ chuyển đổi giao thức Gateway