CAN sử dụng phương thức định địa chỉ theo đối tượng. Các đối tượng được hiểu ở đây chính là đại diện cho các thông báo mang dữ liệu quan tâm như giá trị đo, giá trị điều khiển, thông tin trạng thái. Mỗi đối tượng thông báo có một tên riêng biệt, hay nói cách khác là là một ID được sử dụng để truy cập trên Bus. Mỗi bức điện sẽ có một ô chứa căn cước của đối tượng với chiều dài 11 bit (dạng khung chuẩn theo (CAN2.0A) hoặc 29 bit (khung mở rộng CAN2.0B). CAN định nghĩa 4 kiểu bức điện sau:
2.3.4.1. Khung tiêu chuẩn
45 Khung dữ liệu: mang dữ liệu từ một trạm truyền tới các trạm nhận. Khung dữ liệu là dạng khung thường gặp nhất vì tất cả các tin nhắn đều được truyền đi dưới dạng khung này.
Khung yêu cầu dữ liệu: được gửi từ một trạm yêu cầu truyền khung dữ liệu với cùng mã ID.
Khung lỗi: được gửi từ bất kỳ trạm nào phát hiện lỗi bus.
Khung quá tải: được sử dụng nhằm tạo một khoảng cách thời gian bổ sung giữa hai khung dữ liệu hoặc yêu cầu dữ liệu trong trường hợp một trạm bị quá tải.
Các khung dữ liệu và yêu cầu dữ liệu có thể sử dụng ở cả dạng khung chuẩn và dạng khung mở rộng. Giữa hai khung dữ liệu hoặc yêu cầu dữ liệu cần một khoảng cách ít nhất là 3 bít lặn để phân biệt được gọi khoảng nghỉ của khung. Trong trường hợp quá tải khoảng cách này sẽ lớn hơn bình thường.
2.3.4.1.1. Khung dữ liệu/Yêu cầu dữ liệu
Mỗi khung dữ liệu có thể mang từ 0 đến 8 byte dữ liệu sử dụng. Khung yêu cầu dữ liệu cũng có cấu trúc tương tự như khung dữ liệu, nhưng không mang dữ liệu và khác với khung dữ liệu ở bit cuối của ô phân xử - RTR.
Hình 2. 27 Minh họa bit bắt đ u khung dữ liệu
Khởi đầu khung là một bit trội và đánh dấu khởi đầu của một khung dữ liệu hoặc khung yêu cầu dữ liệu. Tất cả các trạm sẽ phải đồng bộ hóa dựa vào bit khởi đầu này.
Bắt đầu khung có độ dài 1 bit Luôn nằm ở đầu khung.
Khi một nút CAN muốn gửi một tin nhắn nào đó thì nút đó sẽ đặt SOF trạng thái trội 0 để thông báo cho các nút khác.
SOF còn có nhiệm vụ bắt đầu quá trình đồng bộ giữa các nút (tính từ thời điểm xuất hiện cạnh xuống chuyển từ trạng thái lặn sang trội) đồng thời báo hiệu quá trình phân xử sắp diễn ra.
46 Quá trình đồng bộ theo cạnh mới vừa đề cập chính là tái đồng bộ cứng.
Hình 2. 28 Minh họa vùng phân xử
Vùng phân xử được sử dụng là mức ưu tiên của bức điện ID CAN càng nhỏ thì có mức ưu tiên càng cao.
Quyết định quyền truy nhập bus khi có nhiều tin nhắn được gửi đi đồng thời. Trường phân xử có chiều dài 12 bit đối với dạng khung chuẩn và 32 bit đối với dạng khung mở rộng trong đó ID dài 11 bit hoặc 29 bit. Bit cuối cùng của ô phân xử được gọi là bit RTR, dùng để phân biệt giữa khung dữ liệu (là bit trội) và khung yêu cầu dữ liệu (là bit lặn).
Bất cứ một trạm nào trong mạng cũng có thể bắt đầu gửi tin nhắn, mỗi khi đường truyền rỗi. Mỗi bức điện đều bắt đầu bằng một bít khởi điểm và mã ID, vì thế nếu hai hoặc nhiều trạm cùng đồng thời bắt đầu gửi tin nhắn, việc xung đột trên đường truyền sẽ được phân xử dựa theo từng bit của ID. Mỗi bộ thu phát đều phải so sánh mức tín hiệu của mỗi bit gửi đi với mức tín hiệu quan sát được trên bus. Nếu hai mức tín hiệu có trạng thái logic giống nhau thì trạm có quyền phát bit tiếp theo, trường hợp ngược lại sẽ phải dừng ngay lập tức.
Trong trường hợp thực hiện bit giá trị 0 ứng với mức trội và bit giá trị 1 ứng với mức lặn, bit 0 sẽ lấn át. Vì vậy, một thông báo có mã ID nhỏ nhất sẽ được tiếp tục phát hay nói cách khác, thông báo nào có mã ID càng bé thì mức ưu tiên càng cao. Trong trường hợp xảy ra va chạm giữa một tin nhắn mang dữ liệu và một thông báo yêu cầu gửi dữ liệu với cùng mã ID, tin nhắn mang dữ liệu sẽ được ưu tiên. Phương thức phân xử này không những đảm bảo thông tin không bị mất mát, mà còn nâng cao hiệu quả sử dụng đường truyền.
Lưu ý rằng CAN hoàn toàn không định nghĩa về việc phân chia ID cho từng hệ thống cụ thể, mà chỉ đơn giản đề cập đến việc sử dụng CAN ID cho vấn đề phân xử mà thôi.
47
Hình 2. 29 M ID được ưu tiên truyền trên đường bus
Hình 2. 30 Minh họa ùng điều khiển dữ liệu
Vùng điều khiển có tổng chiều dài 6 bit, IDE bit trội nếu là khung tiêu chuẩn (bit 0), khung mở rộng bit lặn (bit 1) khi khung tiêu chuẩn và khung mở rộng cùng truyền một lúc thì khung tiêu chuẩn sẽ được ưu tiên (bit 0), r0 bit không sử dụng để sự dụng cho mục đích tương lai, 4 bít cuối mã hóa chiều dài dữ liệu. Có nhiệm vụ qui định số byte của trường dữ liệu.
DLC chỉ được mang giá trị (tính theo decimal) từ 0 đến 8, tương ứng với 8 byte dữ liệu. Hoàn toàn có thể có trường hợp khung không chứa bất kì dữ liệu nào (DLC = 0).
Sự mã hóa số byte dữ liệu bởi mã độ dài dữ liệu DLC Viết tắt : d = ‘dominant’ (trội)
48
Hình 2. 31 Mã hóa chiều dài dữ liệu
Hình 2. 32 Vùng chứa dữ liệu
Vùng dữ liệu có chiều dài từ 0 đến 8 byte, vùng dữ liệu chính là vùng chứa dữ liệu mà khung cần truyền, trong đó mỗi byte được truyền đi theo thứ tự từ bit có giá trị cao nhất (MSB) đến bít có giá trị thấp nhất (LSB). Độ dài của vùng dữ liệu phải tương ứng với giá trị của DLC. Nếu có sự khác biệt thì lỗi CAN sẽ được phát và dữ liệu truyền/nhận sẽ bị sai lệch.
Hình 2. 33 Vùng tính toán lỗi
CRC là vùng kiểm tra vòng lặp thừa, gồm 16 bit và được chia làm 02 phần: -Chuỗi CRC
49 + Được đánh dấu từ CRC-14 đến CRC-0.
+ Giá trị của CRC sẽ ứng với một phép tính, thực chất là một phép chia đa thức (chia bit nhị phân).
-Gờ ngăn cách CRC + Có độ dài 1 bit.
+ Vị trí của bit ngăn cách CRC luôn nằm ngay sau CRC-0.
+ Giá trị của bit ngăn cách CRC luôn là bit lặn nhằm làm nhiệm vụ phân cách vùng CRC với vùng liền kề nó.
Một chuỗi CRC cho phép hệ thống kiểm tra sự nguyên vẹn của dữ liệu truyền. Tất cả các nút nhận dữ liệu đều phải thực hiện bước này.
Vùng dữ liệu được đưa vào để tính toán CRC là: (không bao gồm các bit được nhồi). -Bit khởi đầu khung.
-Trường phân xử.
-Vùng điều khiển dữ liệu chỉ đối với khung yêu cầu dữ liệu. -Vùng dữ liệu chỉ đối với khung dữ liệu.
Trên thực tế, độ dài cực đại của khung không được vượt quá 215 bit cho một chuỗi CRC 15 bit.
Quá trình tính toán CRC thực chất là một phép chia nhị phân sử dụng modulo -2 (là một dạng phép toán tìm phần dư của phép chia 2 số, còn gọi là modulus).
Lưu ý rằng mã CRC chỉ phù hợp nhất đối với các chuỗi bit được kiểm tra có độ dài dưới 127 bit.
Đối với khung CAN, tổng bit cần tính CRC tối đa là 83 bit (tiêu chuẩn) và 103 bit (mở rộng).
Hình 2. 34 Vùng xác nhận
Vùng xác nhận có độ dài 02 bit và được chia làm 02 phần: -Rảnh ACK
50 + Có độ dài 1 bit.
+ Nút truyền khung CAN ban đầu sẽ đặt bit này ở giá trị lặn (ACK = 1).
+ Khi một hoặc nhiều nút nhận khung hoàn tất đầy đủ các dữ liệu trong trường dữ liệu mà không trả về lỗi nào đồng thời tính toán CRC chính xác, thì các nút đó sẽ phản hồi lại đến nút nhận thông qua ACK Slot bit.
+ Thông tin phản hồi được thể hiện qua việc các nút nhận khung sẽ kéo giá trị + ACK Slot thành bit trội (ACK = 0).
-Gờ ngăn cách ACK + Có độ dài 1 bit.
+ Có nhiệm vụ phân cách giữa phần ACK với phần khác liền kề sau nó.
Lưu ý, bit ACK Slot luôn được đặt giữa 02 bit lặn là gờ ngăn cách CRC và gờ ngăn cách ACK.
Hình 2. 35 Vùng kết thúc một khung dữ liệu
Vùng kết thúc khung là vùng thông báo kết thúc một khung dữ liệu hay một khung yêu cầu dữ liệu. EOF có độ dài 07 bit, giá trị của 07 bit này luôn là lặn.
Hình 2. 36 Khoảng nghỉ của bus
Ở khoảng giữa hai khung bất kỳ cũng phải giữ ít nhất 3 bit ở trạng thái lặn gọi là khoảng nghỉ của bus. Nếu sau đó không có nút nào muốn truyền dữ liệu thì bus tiếp tục giữ ở trạng thái lặn , tức trạng thái bus không tải.
51
Hình 2. 37 Cấu trúc khung lỗi ở CAN
Một khung lỗi được gửi từ bất kỳ trạm nào phát hiện lỗi trên bus. Khung lỗi bao gồm cờ lỗi và phân cách lỗi. CAN phân biệt hai loại lỗi là lỗi chủ động và lỗi bị động. Tương ứng với chúng là hai dạng cờ lỗi:
Dạng cờ lỗi chủ động bao gồm 6 bit trội liền nhau.
Hình 2. 38 Cấu trúc khung lỗi chủ động
Dạng cờ lỗi bị động bao gồm 6 bit lặn liền nhau, trừ trường hợp nó bị ghi đè lên bởi các bit trội từ trạm khác. Một trạm lỗi chủ động khi phát hiện lỗi sẽ báo hiệu bằng cách gửi một cờ lỗi chủ động. Cờ lỗi chủ động vi phạm luật nhồi bit hoặc phá bỏ dạng cố định của trường ACK hay bit kết thúc khung. Chính vì vậy, tất cả các trạm khác cũng phát hiện ra lỗi và bắt đầu gửi cờ lỗi. Cuối cùng, dãy bit trội quan sát được trên bus thực tế là kết quả của sự xếp chồng nhiều cờ lỗi khác nhau phát riêng từ các trạm. Tổng chiều dài của dãy này dao động trong khoảng từ 6 đến 12 bit. Phân cách lỗi được đánh dấu bằng 8 bit lặn liên tục. Sau khi gửi xong một cờ lỗi, mỗi trạm phải gửi tiếp một số bit lặn và
52 đồng thời quan sát bus. Cho đến khi phát hiện ra một bit lặn (tức là khi các trạm khác đã gửi xong cờ lỗi chủ động), chúng sẽ phát tiếp bảy bit lặn.
Hình 2. 39 Cấu trúc khung lỗi bị động
2.3.4.1.3. Khung quá tải
Hình 2. 40 Cấu trúc khung quá tải
Một khung quá tải có cấu trúc tương tự như ở khung lỗi bao gồm cờ quá tải và phân cách quá tải.
Cờ quá tải gồm sáu bit trội tương tự như cờ lỗi chủ động. Cờ quá tải xóa bỏ dạng cố định ở khoảng trống giữa hai khung. Chính vì vậy, tất cả các trạm khác cũng phát hiện tình trạng quá tải và bắt đầu gửi cờ quá tải. Cũng giống như khung lỗi, phân cách quá tải được đánh dấu bằng tám bít lặn liên tục.
Có 3 kiểu tình trạng quá tải, cả 3 đều dẫn đến sự truyền của cờ báo quá tải.
-Tình trạng bên trong của bộ thu nhận, nó đòi hỏi phải trì hoãn khung dữ liệu hay khung yêu cầu dữ liệu kế tiếp.
-Phát hiện một bit trội tại bit thứ nhất hoặc bit thứ hai của khoảng nghỉ.
-Nếu nút CAN lấy một bit trội ở bit thứ 8 (bit cuối cùng) của gờ phân cách lỗi hay gờ phân cách quá tải, nó sẽ bắt đầu truyền một khung quá tải chứ không truyền một
53 khung lỗi, vì thế bộ đếm lỗi sẽ không bị gia tăng.
Nhiều nhất là hai khung quá tải có thể được tạo ra để trì hoãn các khung dữ liệu và khung yêu cầu dữ liệu kế tiếp tức là một nút chỉ có thể truyền tối đa 2 khung quá tải liên tiếp như hình dưới đây:
Hình 2. 41 Hai khung quá tải trong một khung
2.3.4.1.4. Khoảng tạm ngừng
Là vùng chứa 6 bit lặn . Trong suốt khoảng nghỉ chỉ có một hoạt động duy nhất xảy ra, đó là sự báo hiệu một điều kiện quá tải và không một vị trí nào được phép chủ động truyền một khung dữ lệu hay một khung yêu cầu truyền từ xa.
CHÚ Ý: Nếu một nút CAN đang phải chờ để truyền dữ liệu và nó lấy một bit trội ở bit thứ 3 của vùng tạm ngưng, nó sẽ hiểu rằng đây là bit bắt đầu của khung (SOF) và, với bit tiếp theo, bắt đầu truyền thông báo của nó với bit đầu tiên trong bộ định danh mà không có bit đầu tiên của phần SOF và cũng không trở thành bộ phận tiếp nhận.
2.3.4.1.5. Khoảng nghỉ của các khung
Các khung dữ liệu và các khung yêu cầu dữ liệu được tách biệt khỏi các khung trước nó cho dù nó là bất kỳ loại khung nào (khung dữ liệu, khung yêu cầu dữ liệu, khung lỗi, hay khung quá tải). Khoảng nghỉ chứa các bit gồm khoảng tạm ngừng và bus không tải, và trong các vị trí lỗi bị động (lúc này đóng vai trò như bộ truyền thông báo trước đó) thì tạm ngưng sự truyền dữ liệu. Tại các vị trí không phải là lỗi bị động hoặc đóng vai trò như bộ thu nhận của tin nhắn trước đó.
54
Hình 2. 42 Cấu trúc khoảng nghỉ giữa các khung không phải là lỗi bị động
Còn đối với các vị trí lỗi bị động lúc này đóng vai trò như bộ truyền của thông báo trước đó, có cấu trúc khoảng nghỉ giữa các khung.
Hình 2. 43 Cấu trúc khung nghỉ của lỗi bị động
2.3.4.1.6. Bus không tải
Vùng bus không tải có thể có độ dài tùy ý. Bus được nhận biết là đang trống hay rảnh và bất kỳ một vị trí nào muốn truyền một dữ liệu nào đó đều có thể truy cập vào bus. Một thông báo sẽ ở trạng thái treo trong khi một thông báo khác đang được truyền, thông báo đó sẽ được bắt đầu truyền với bit đầu tiên của nó ngay sau khoảng tạm ngưng. Và sự phát hiện một bit trội trên bus được hiểu đó là phần đầu của một khung (SOF).
2.3.4.1.7. Khoảng truyền đang treo
Sau khi một vị trí lỗi bị động đã truyền một thông báo, nó gửi đi 8 bits lặn theo sau khoảng tạm ngưng trước khi truyền tải một thông báo cao hơn hoặc nhận ra bus ở trạng thái không tải. Trong lúc đó có một vị trí khác cũng bắt đầu truyền và vị trí truyền thông báo trước nó sẽ trở thành bộ tiếp nhận.
55
2.3.4.2. Khung mở rộng
Hình 2. 44 Khung mở rộng
Để cho phép các khung dữ liệu tiêu chuẩn và mở rộng có thể chia sẻ trong cùng một mạng một hệ thống, thì cần phải chia thông báo mở rộng 29 bit thành hai phần: Phần quan trọng nhất với 11 bit và phần ít quan trọng nhất với 18 bit. Điều này bảo đảm các bit ở trường phân xử mở rộng IDE vẫn giữ nguyên trong cả khung tiêu chuẩn và khung mở rộng, tại cùng một vị trí bit.
Trong khung dữ liệu mở rộng, các bit khởi đầu của khung (SOF) được theo sau bởi một trường phân xử với 32 bit, 11 bit đầu tiên là các bit quan trọng nhất trong 29 bit ID. Kế tiếp các bit này là bit yêu cầu từ xa thay thế (SRR) được truyền như là một bit lặn . Kế tiếp là các bit ID mở rộng, đây cũng là các bit lặn và nó báo khung này là khung mở rộng. Nếu sau khi truyền 11bit ID mà tình trạng xung đột vẫn không được giải quyết, và một trong các nút trong quá trình phân xử đang gửi một khung dữ liệu tiêu chuẩn với 11 bit ID, thì khung dữ liệu tiêu chuẩn này sẽ chiếm được quyền ưu tiên ( Win ) trong sự phân xử.
Trong khung dữ liệu, các bit SRR và IDE được theo sau bởi 18 bit còn lại của bit ID, và các bit yêu cầu truyền từ xa (một khung dữ liệu với các bit RTR trội ). Vùng tiếp theo là trường điều khiển, chứa 6 bit, 2 bit đầu tiên được giữ lại và ở trạng thái trội . Bốn bit còn lại là mã độ dài của dữ liệu DDL chỉ rõ số byte dữ liệu có trong trường dữ liệu, cũng giống như trong khung dữ liệu tiêu chuẩn.