Các trạng thái lỗi trong nút CAN

Một phần của tài liệu Nghiên cứu và chế tạo mô hình mô phỏng hệ thống CAN trên ô tô đồ án tốt nghiệp ngành công nghệ kỹ thuật ô tô (Trang 71)

Để hệ thống CAN phân biệt lỗi nhất thời hay lỗi thƣờng trực thì mỗi bộ điều khiển CAN phải có hai bộ đếm lỗi:

- Bộ đếm lỗi nhận ( Receive Error Counter _ REC) - Bộ đếm lỗi truyền (Transmit Error Counter_TEC)

Các bộ đếm lỗi đƣợc gia số theo các lỗi đƣợc phát hiện và giảm xuống tƣơng ứng với sự truyền dữ liệu thành công hay một sự tiếp nhận. Tùy vào các giá trị bộ đếm thì trạng thái lỗi sẽ thay đổi.

Lỗi chủ động: Hệ thống điều khiển đếm số lỗi nhận và số lỗi truyền đều t hơn 127 lỗi. Nếu tin nhắn sai đƣợc nhận thì cờ lỗi chủ động đƣợc gửi đến đƣờng truyền Bus và ngăn các bộ điều khiển khác nhận dữ liệu.

Lỗi bị động: Hệ thống điều khiển đếm số lỗi nhận và truyền nhiều đều hơn 127 lỗi. Nếu tin nhắn lỗi bị phát hiện ở chế độ lỗi bị động thì cờ lỗi bị động đƣợc gửi đi để thông báo bộ điều khiển khác. Bởi quy tắc dữ liệu mạng không thể triệt tiêu nên bộ điều khiển có thể xác định lỗi trong dữ liệu hoặc xác định lỗi của hệ thống trong chính nó. Nếu hệ thống không phát hiện sai sót thì số lƣợng đếm sẽ giảm đi. Nếu tổng giá trị REC và TEC thấp hơn 128 thì chế độ lỗi chủ động đƣợc khôi phục.

Bus Off: Nếu lỗi tiếp tục tăng lên trong chế độ lỗi bị động và TEC vƣợt quá 255 thì bộ điều khiển sẽ không truyền dữ liệu và mất kết nối mạng bằng cách đƣa nó vào trạng thái điện trở cao. Tuy nhiên quá trình nhận dữ liệu vẫn diễn ra. Nếu 11 tín hiệu “1” đƣợc phát

59 hiên 128 lần (1 ACK, 7 EOF, 3 Interframes-liên khung) trong khi ở chế độ Bus Off thì quá trình thiết lập đƣợc diễn ra và khôi phục lại chế độ lỗi chủ động.Tuy nhiên, Bus Off xảy ra tiếp tục sau khi khôi phục lại, kết nối mạng bị mất lần thứ 10. Thiết lập khác diễn ra sau khi đánh lửa tắt và bật, truyền th ng đƣợc kích hoạt. Kết nối mạng sẽ bị mất nếu vấn đề tái phát.Tuy nhiên các nhà sản xuất đƣa ra một khuyến cáo rằng không nên bắt đầu sự tái thiết lập về phần cứng vì nó sẽ không còn tuân theo quy luật thời gian chờ của hệ thống CAN Bus.

Hình 5.4: Sơ đồ trạng thái lỗi 5.1.5. Hoãn truyền dữ liệu (Suspend Passive Transmission)

60 Hệ thống CAN tránh việc nghẽn trên đƣờng truyền Bus do một nút bị nhiễu gửi tin nhắn có mức độ ƣu tiên cao thì sự truyền dữ liệu sẽ bị hoãn và nút đó chuyển sang trạng thái lỗi bị động. Sau đó nút sẽ phải chờ 3+8 bit lặn trƣớc khi bắt đầu truyền lại tin nhắn (trạng thái chờ thêm).

5.1.6. Sự nhân đ i tin nhắn

Giao thức CAN đảm bảo không có tin nhắn bị sai lệch hoặc bị mất trong quá trình truyền và nhận dữ liệu. Nhƣng hệ thống CAN Bus vẫn có thể xảy ra hiện tƣởng tin nhắn đƣợc gửi thêm một lần nữa bởi một lỗi bit gần cuối của vùng kết thúc khung (EOF). Vì vậy nhà chế tạo khuyên chúng ta kh ng nên dùng trong m i trƣờng nhiễu nhiều. Nếu CAN Bus dùng trong m i trƣờng bị nhiễu nhiều thì nó phải tuân thủ một số quy tắc: - Không dùng các tin nhắn đảo chiều.

- Không truyền dữ liệu mang tính chất tƣơng đối.

- Sử dụng giao thức chống nhiễu tốt hoặc dánh dấu số thứ tự cho dữ liệu.

Nếu bộ truyền nhận mức Bus trội trong bit cuối của vùng kết thúc khung (EOF) thì nó sẽ truyền lại tin nhắn đó. Mức trội có thể xuất hiện bởi vì:

1. Một cờ lỗi của các bộ nhận thông báo một lỗi cục bộ tại bit cuối của vùng kết thúc. 2. Sự nhiễu loạn của bit cuối trong vùng kết thúc.

Trong trƣờng hợp thứ nhất, các bộ tiếp nhận khác không bị tác động bởi lỗi cục bộ, khi nó chấp nhận thông báo lần đầu. Trong trƣờng hợp thứ hai, tất cả các bộ nhận đã nhận tin nhắn và sau khi truyền lại chúng lại có một th ng báo tƣơng tự cho lần thứ hai.

5.1.7. Phân tích đánh giá việc phát hiện lỗi (Error–Detection Analysis)

Xác xuất lỗi không bị phát hiện trong các khung CAN Bus tiêu chuẩn

(5-1) Thông kê trung bình khoảng 1000 năm sẽ có một lỗi không bị phát hiện. Xác xuất không phát hiện tin nhắn lỗi là chủ đề của nhiều đề tài nghiên cứu và đƣợc báo cáo trong các Hội thảo Quốc Tế về hệ thống CAN. Xác xuất vẫn chƣa ra đƣợc một con số cụ thể bởi vì nó phụ thuộc vào nhiều thông số chẳng hạn nhƣ tỉ lệ trung bình các tin nhắn lỗi, tỉ lệ này khoảng từ 3÷10 đối với các loại cáp tiêu chuẩn.Nhìn chung, xác xuất không phát hiện lỗi đối với các khung mở rộng thì cao hơn so với các khung tiêu chuẩn.

5.2. PHÁT HIỆN LỖI VÀ BÁO LỖI 5.2.1. Các kiểu lỗi cơ bản 5.2.1. Các kiểu lỗi cơ bản

Lỗi bit (Bit Error): Một bộ điều khiển gửi một bit trên đƣờng truyền Bus có nghĩa là nó có nhiệm vụ phải xác minh sự đồng nhất giữa dữ liệu nó gửi và dữ liệu truyền đến Bus. Nếu bộ truyền gửi một bit trội lên đƣờng truyền Bus nhƣng phát hiện một bit lặn

61 hay nó gửi một bit lặn lên đƣờng truyền Bus nhƣng phát hiện một bit trội, nghĩa là một lỗi bit đã bị phát hiện. Tuy nhiên lỗi bit phải đƣợc phát hiện trong bit time đó.

Hình 5.1: Lỗi bit

Một lỗi bit sẽ kh ng đƣợc công nhận trong vùng phân xử (Arbitration Field) hoặc vùng xác nhận (ACK Field). Bởi vì hai vùng đó là những vùng có thể ghi đề lên bit trội để thực hiện chức năng phân xử và chức năng xác nhận.

Lỗi chèn bit (Bit-Stuffing Error): Phƣơng pháp chén bit sẽ gây ra lỗi dữ liệu tại một số vùng của khung dữ liệu nhƣ: Vùng xác nhận (ACK), vùng kết thúc khung (EOF). Phƣơng pháp chén bit đối với khung remote cũng gần giống nhƣ khung dữ liệu tuy nhiên nó sẽ kh ng đƣợc chèn bit tại khoảng phân cách của vùng CRC. Ngoài ra khung lỗi (Error Frame), khung quá tải (Overload Frame) là dạng khung cố định và kh ng đƣợc mã hòa bằng phƣơng pháp chèn bit.

Hình 5.2: Lỗi chèn bit

Một lỗi chèn bit phải đƣợc phát hiện tại bit time của bit thứ sáu trong sáu bit cùng mức logic liên tiếp trong vùng bit chèn của khung và hệ thống CAN sẽ truyền một khung lỗi ở bit time kế tiếp.

Lỗi CRC: Chuỗi CRC là kết quả tính toán chuỗi bit kiểm tra của bộ truyền. Các bộ tiếp nhận cũng phải tính toán chuỗi CRC giống nhƣ bộ truyền. Một lỗi CRC đƣợc phát hiện nếu kết quả tính toàn không giống nhƣ kết quả nhận đƣợc trong dãy CRC, hay nói cách khác là kết quả tính toán trong bộ truyền và bộ nhận không giống nhau.

62

Hình 5.3: Lỗi CRC

Trong trƣờng hợp này, bộ truyền sẽ phải truyền một khung lỗi ở bit kế tiếp của khoảng phân cách CRC, trừ trƣờng hợp một cờ lỗi của điều kiện lỗi khác đã đƣợc bắt đầu trƣớc đó. Sự kiểm tra chuỗi bit CRC chỉ đƣợc dùng để phát hiện lỗi, nó kh ng dùng để khắc phục lỗi. Khoảng Hamming của chuỗi CRC có thể phát hiện tối đa 5 lỗi bit đơn lẻ ngẫu nhiên trong dãy bit. (adsbygoogle = window.adsbygoogle || []).push({});

Lỗi Form: Lỗi Form đƣợc phát hiện khi một dạng cố định của vùng bit chứa một hoặc nhiều bit không hợp lệ. Nghĩa là bộ truyền phát hiện một bit trội trong phần định dạng cố định của khoảng phân cách CRC, khoảng ACK và vùng kết thúc.

Hình 5.4: Lỗi Form

Chú ý: Trong bộ tiếp nhận, một bit trội xuất hiện trong bit cuối cùng của vùng kết thúc thì kh ng đƣợc xem là lỗi.

Lỗi xác nhận (ACK Error): Kiểm tra lỗi ACK, thiết bị truyền sẽ gửi một bit lặn ACK và một bit trội ACK sẽ đƣợc ghi đè lên bởi thiết bị nhận đã nhận thành công tin nhắn. Lỗi xác nhận sẽ đƣợc phát hiện bởi thiết bị truyền nếu nó không nhận thấy bit trộitrong khoảng ACK. Các lỗi đƣợc phát hiện sẽ đƣợc thông báo bằng cách truyền đi một cờ lỗi ngay tại bit time kế tiếp.

Lỗi cục bộ: Lỗi cục bộ thƣờng xảy ra trong phần kết thúc khung. Nếu một trong các bit tại vùng kết thúc từ bit một đến bit sáu bị phát hiện các bit trội, nó sẽ gửi một cờ lỗi để thông báo cho các nút. Dựa vào đặc t nh kĩ thuật của CAN chỉ ra rằng: Khi lỗi cục bộ xảy ra thì một tin nhắn có tác dụng khác nhau giữa bộ truyền và bộ nhận. Cụ thể nhƣ sau:

63 Bộ truyền: Truyền tin nhắn sẽ thành công với bộ truyền nếu nó không có lỗi cho đến vùng kết thúc khung. Nếu tin nhắn bị ngắn hay gián đoạn thì hệ thống CAN sẽ tự động gửi lại tin nhắn.

Bộ nhận: Truyền tin nhắn thành công với bộ nhận nếu nó không có lỗi cho đến tận bit cuối cùng của vùng kết thúc.

Hình 5.5: Lỗi cục bộ trong vùng kết thúc khung

Bộ tiếp nhận đã nhận một giá trị trội tại bit thứ bảy trong vùng EOF, nó không quan tâm đây có phải là lỗi hay không? Bộ tiếp nhận mất đi sự đồng bộ hóa vì một bit không hợp lệ xuất hiện trong dạng bit cố định. Hệ thống CAN sẽ gửi đi một khung quá tải để tạo ra độ trễ giữa các vùng. Bộ tiếp nhận sẽ th ng báo đến bộ truyền tại một thời điểm sớm nhất trong bit time kế tiếp, bộ truyền sẽ phải đợi thêm một bit time để tin nhắn đƣợc truyền thành công.

64

5.2.2. Cơ sở lý thuyết của việc phát hiện lỗi

Hệ thống CAN phát hiện lỗi trong các khung dữ liệu của một tin nhắn thì nó phải kết hợp các cách kiểm tra sau:

- Kiểm tra vòng lặp thừa (Cylic Redundancy Check – CRC): Nó kiểm tra dữ liệu trong các vùng trƣớc từ bit bắt đầu đến bit cuối cùng của vùng dữ liệu và kết thúc quá trình kiểm tra bằng một bit lặn.

- Kiểm tra khung: Kiểm tra định dạng của khung và các vùng bit đặc biệt (vùng bit cố định) của khung để phát hiện lỗi có thể xảy ra.

- Kiểm tra ACK (vùng xác nhận): Kiểm tra độ chính xác của tin nhắn.

Trong CAN Bus, sự kiểm tra vòng lặp thừa dùng để phát hiện lỗi trong sự truyền dữ liệu đƣợc dựa trên mã vòng lặp (cyclic code). Một dãy bit đƣợc biểu diễn dƣới dạng một đa thức đặc biệt (đa thức polynomial).

Ví dụ: Một dãy bit 11001101 đƣợc biểu diễn bởi một đa thức:

(5-2)

Trong đó: tƣơng ứng với bit quan trọng nhất, còn số một tƣơng ứng với bit ít quan trọng nhất.

Phƣơng pháp CRC là phƣơng phát kiểm tra và phát hiện lỗi đƣợc sinh ra bởi một thuật toán tuần hoàn tại hai vị trí nhận và gửi, một khối ký tự kiểm tra (Block Check Character) đƣợc chèn vào tin nhắn để truyền đi.Một phần cứng (Thanh ghi dịch-Shift Register) sẽ đảm bảo việc nhân, chia đa thức liên quan.

Một mã tuần hoàn đƣợc xác định bởi một đa thức sinh G(x), bậc k và một đa thức thông báo M(x), bậc n. Ví dụ:

( ) (5-3)

Mã hóa M(x) theo G(x) với giá trị n = 7

( ) ( ) ( ) ( )(5-4)

Trong đó: Q(x) là thƣơng của phép chia xM(x) cho G(x) và R(x) là số dƣ tƣơng ứng. Ta có:

( ) (5-5)

Mã hóa đa thức M(x )=( ):

( ) ( ) ( ) ( ) (5-6)

Mã hóa đa thức để truyền bây giờ đƣợc xây dựng bởi:

( ) ( ) ( ) (5-7) (adsbygoogle = window.adsbygoogle || []).push({});

65

( ) ( ) ( ) (5-8)

Tƣơng đƣơng: 110001010010001

Dãy bit đƣợc miêu ta bởi các đa thức tƣơng đƣơng nhƣ trên tuân theo quy luật đại số. Các bộ ghi dịch của phần cứng đảm bảo việc giải mã tuần hoàn bằng các phép nhân hoặc chia đa thức.

Sự phát hiện lỗi của một tin nhắn tuần hoàn đƣợc mã hóa thì dựa vào một số yếu tố nhƣ: Sự sai lệch trong việc truyền dữ liệu, đa thức truyền P(x) sẽ có một thành phần lỗi. Chúng ta có:

( ) ( ) ( )(5-9)

Lỗi truyền xảy ra nếu Q(x) không chia hết cho F(x) và E(x) không chia hết cho P(x).Vì vây, chọn P(x) là một vấn đề mang tính quyết định để có thể giải quyết các kiểu lỗi xảy ra trong quá trình truyền tải.

Ngoài ra, mã tuần hoàn có thêm một ƣu điểm. Đó là một mã có khả năng phát hiện một lỗi kép thì nó cũng có khả năng khắc phục một lỗi đơn. Trong trƣờng hợp xuất hiện lỗi đơn, một bit đã đƣợc khắc phục thì sẽ không xuất hiện lỗi. Trong trƣờng hợp lỗi kép thì hệ thống sẽ xuất hiện lỗi nếu một bit đƣợc khắc phục.

Trong Bus CAN, đa thức sinh (Generator Polynomial) là đa thức:

X15 + X14 + X10 + X8 + X7 + X4 + X3 + 1 (5-10)

Đa thức đƣợc dùng làm đa thức bị chia và các hệ số của nó đƣợc xác định bởi các dãy bit xả nhồi của một số vùng:

- Vùng bắt đầu của khung - Vùng phân xử

- Vùng điều khiển - Vùng dữ liệu

Giá trị 0 tƣơng ứng với 15 hệ số thấp nhất. Số dƣ của phép chia đƣợc truyền trong khung ứng với chuỗi CRC. Sự thông báo lỗi để báo cho tất cả các nút trên Bus có một tình trạng lỗi đƣợc phát hiện. Một nút phát hiện một tính rạng lỗi chẳng hạn nhƣ lỗi bit, lỗi nhồi bit, lỗi CRC, lỗi xác nhận thì nó sẽ thông báo cho các nút khác bằng cách truyền đi một cờ lỗi. Nếu lỗi là lỗi chủ động thì nút sẽ truyền cờ báo lỗi chủ động hoặc nếu lỗi là lỗi bị động thì nút sẽ truyền cờ báo lỗi bị động. Một trong các lỗi kể trên xảy ra thì hệ thống điều khiển CAN sẽ truyền cờ lỗi ngay bit kế tiếp. Ngoài ra, nếu một lỗi CRC đƣợc phát hiện, cờ báo lỗi sẽ bắt đầu truyền sau khoảng phân cách ACK (ACK Delimiter), trừ trƣờng hợp một cỡ lỗi của lỗi khác đƣợc truyền trƣớc đó.

5.3. HẠN CHẾ LỖI (FAULT CONFINEMENT) 5.3.1. Khung lỗi chủ động và khung lỗi bị động 5.3.1. Khung lỗi chủ động và khung lỗi bị động

66 Các bộ điều khiển trên đƣờng truyền Bus có một trong các trạng thái sau:

- Trạng thái lỗi chủ động: Bộ điều khiển tham gia giao tiếp trên đƣờng truyền Bus bình thƣờng. Khi hệ thống phát hiện lỗi thì nó sẽ gửi đi cờ báo lỗi chủ động.

- Trạng thái lỗi bị động: Bộ điều khiển kh ng đƣợc phép gửi một cờ báo lỗi chủ động. Nó vẫn tham gia giao tiếp trên đƣờng truyền Bus nhƣng khi hệ thống phát hiện lỗi thì nó chỉ đƣợc phép gửi cờ báo lỗi bị động. Sau khi thực hiện một lần truyền, bộ điều khiển ở trạng thái lỗi bị động sẽ phải chờ trƣớc khi bắt đầu truyền tiếp.

- Trạng thái không hoạt động (Bus off):Vì bộ điều khiển ở trạng thái ngắt nên bộ điều khiển không tham gia truyền dữ liệu trên đƣờng truyền Bus.

5.3.1.1. Khung lỗi chủ động (Active Error Frame)

Hình 5.6: Khung lỗi chủ động

Khi một nút phát hiện lỗi trên đƣờng truyền Bus thì một khung lỗi sẽ đƣợc truyền đi. Khung lỗi chƣa một cờ lỗi (Error Flag) và một khoảng phân cách lỗi (Erro Delimiter). Các bit trội của cờ lỗi sẽ ghi đề lên khung dữ liệu bị lỗi và ngăn ngừa việc nhận dữ liệu của các nút khác.Khi tín hiệu cờ báo lỗi đƣợc gửi đi, các bộ điều khiển khác nhận ra lỗi và ngừng nhận dữ liệu để gửi cờ lỗi của chính nó.Cuối cùng là 8 bit lặn của vùng phân cách lỗi cho phép khởi động lại sự giao tiếp trên đƣờng truyền Bus.

5.3.1.2. Khung lỗi bị động (Passive Error Frame)

Hệ thống CAN ngăn ngừa sự tắc ngẽn trên đƣờng truyền Bus thì các khung lỗi đƣợc gửi từ các nút bị lỗi sẽ bị hạn chế. Một nút lỗi chủ động sẽ gửi đi cờ báo lỗi trội còn một nút lỗi bị động sẽ gửi đi cờ báo lỗi lặn. Trong vùng phân cách lỗi, nút sẽ kiểm tra xem liệu nó có phải là nút đầu tiên phàn hồi lỗi hay không? Nếu nó là nút đầu tiên thì ngừng truyền dữ liệu.

Các bộ tiếp nhận lỗi bị động không làm ảnh hƣởng đến việc truyền dữ liệu, bởi vì các cờ báo lỗi lặn không ảnh hƣởng đến mức độ ƣu tiên trên đƣờng truyền Bus. Bộ truyền lỗi bị động có thể ngắt truyền tin nhắn bằng cách truyền đi một cờ lỗi bị động.

67

Hình 5.7: Khung báo lỗi bị động

Chú ý: Khi một bộ nhận đang trong trạng thái lỗi bị động thì tính bên vững, nhất quan của dữ liệu kh ng đƣợc đảm bảo.

5.3.2. Các bộ đếm lỗi

Mỗi bộ điều khiển CAN đều có hai bộ đếm để phục vụ cho việc hạn chế lỗi: Bộ đếm lỗi truyền (Transmit Error Counter_TEC) và bộ đếm lỗi nhận (Receive Error (adsbygoogle = window.adsbygoogle || []).push({});

Một phần của tài liệu Nghiên cứu và chế tạo mô hình mô phỏng hệ thống CAN trên ô tô đồ án tốt nghiệp ngành công nghệ kỹ thuật ô tô (Trang 71)