Thứ Bảy, 17 tháng 6, 2017

[CAN2.0][Controller Area Network][Bài 6] Khung báo tải (Overload frame) và Khoảng liên khung (Interframe Spacing)

1. Khung báo quá tải (Overload frame)

1.1 Vai trò và cấu trúc

Khung báo quá tải được các Node trong mạng CAN sử dụng để tạo thêm độ trễ giữa các khung dữ liệu và khung điều khiển. Một Node có thể phát nhiều khung báo quá tải liên tiếp nhau để tạo ra độ trễ bus phù hợp.
Hình 1. Khung báo quá tải (Overload frame)
Khung báo quá tải có cấu tạo gồm hai vùng là:
  • Vùng chồng lấn các cờ báo quá tải (superposition of Overload flags) là vùng các Node trên bus cùng phát cờ báo quá tải (Overload flag). Vùng này tương tự như ở khung báo lỗi chủ động với độ dài không cố định.
  • Cờ báo quá tải gồm 6 bit dominant
  • Vùng phân cách khung báo quá tải (Overload delimiter) gồm 8 bit recessive

Khi gặp điều kiện quá tải thì một Node phát khung báo quá tải ở các vị trí sau:
  • Ngay sau EOF của một khung dữ liệu hoặc khung yêu cầu. Nếu trên bus đang truyền khung dữ liệu hoặc khung yêu cầu, một Node phải nhận và chờ đến hết vùng EOF mới được phép phát khung báo quá tải.
  • Ngay sau vùng phân cách (DELIMITER) của một khung báo lỗi hoặc một khung báo quá tải khác.

Có thể thấy khung báo quả tải và khung báo lỗi chủ động có định dạng giống nhau nhưng hai loại khung này sẽ không bị các Node hiểu nhầm vì vị trí phát chúng là khác nhau.
  • Vị trí phát khung báo lỗi là bất cứ khi nào phát hiện lỗi bus khi đang truyền khung dữ liệu và khung yêu cầu. Vì vậy, khi một Node đang giám sát bus, nó phát hiện định dạng như đã mô tả ở trên trong khi khung dữ liệu hay khung yêu cầu chưa truyền xong (chưa hết EOF) thì đó là khung lỗi chủ động
  • Vị trí phát khung báo quá tải là sau EOF và sau vùng phần cách của một khung báo lỗi hoặc báo quá tải. Vì vậy, các Node phát hiện định dạng như đã mô tả ở trên ở các vị trị này thì đó là khung báo quá tải.
Trong điều kiện hoạt động không xuất hiện sự quá tải tại các Node bus, sau các vùng trên phải là khoảng liên khung (Interframe spacing, được trình bày ở cuối bài này). Vì vậy, việc phát khung báo quá tải ở vị trí này sẽ không giống định dạng của khoảng liên khung và tất cả các Node khác trong mạng dễ dàng nhận biết đây là khung báo quá tải và cũng bắt đầu truyền cờ báo quá tải của chúng chồng lấn với cờ báo quá tải hiện tại đang phát.

1.2 Điều kiện báo quá tải

Một Node có thể phát khung này khi gặp một trong các điều kiện sau:
  • Điều kiện 1: Do điều kiện hoạt động nội bộ (cục bộ) của bộ nhận, một bộ nhận có thể không xử lý kịp các thông điệp được gửi đến có thể phát khung báo quá tải để tạm dừng truyền tiếp các khung dữ liệu và khung yêu cầu.
  • Điều kiện 2: Phát hiện bit dominant (bit 0) tại vị trí bit thứ nhất và bit thứ hai của vùng INTERMISSION trong khoảng liên khung. Vùng INTERMISSION được quy định gồm 3 bit recessive nhưng Node lại phát hiện bit dominant xuất hiện ở vị trí bit thứ nhất hoặc thứ 2 của vùng này thì nó phải phát khung báo quá tải để ngăn chặn sự truyền.
  • Điều kiện 3: Nếu một Node phát hiện một bit dominant ở vị trí bi thứ 8 (bit cuối cùng) của ở vùng DELIMITER của khung báo lỗi hay khung báo quá tải, nó sẽ truyền ngay một khung báo quá tải. Chú ý, trong trường hợp này các Node sẽ xem khung phát trên bus là khung báo quá tải chứ không phải là khung báo lỗi chủ động cho dù định dạng hai loại giống nhau. Vì vậy, các Node sẽ không coi đây là điều kiện lỗi và không tăng giá trị bộ đếm lỗi, đây là bộ đếm được thiết kế chạy tự động trong các phần cứng chip CAN controller để giám sát trạng thái lỗi của Node.
Việc phát khung báo quá tải trên bus xảy ra như thế nào?
  • Phần lớn việc khởi tạo phát khung báo quá tải là từ hoạt động nội tại của một Node (điều kiện 1).
  • Một Node bắt đầu phát cờ báo quá tải (phát bit dominant) phá vỡ cấu trúc cố định thông thường của vùng INTERMISSION.
  • Các Node khác trong mạng phát hiện thấy có bit dominant ở bit thứ 1 và thứ 2 ở vị trí đáng lẽ là các bit recessive của vùng INTERMISSION (điều kiện 2). Lúc này, tất cả các Node còn lại sẽ bắt đầu phát cờ báo quá tải chồng lấp lên nhau.
  • Tất cả các Node, sau khi phát đủ 6 bit dominant của cờ báo quá tải sẽ chờ cho đến khi phát hiện 1 bit recessive đầu tiên, sau đó phát tiếp 7 bit recessive nữa để hoàn thành vùng phân cách của khung báo quá tải.
  • Nếu một Node trong mạng vẫn cần làm trễ đường truyền thì nó có thể bắt đầu phát cờ báo quá tải ở bit thứ 8 của vùng phân cách khung quá tải hoặc sau bit thứ 8 này.
  • Các Node khác phát hiện thấy bit thứ 8 của vùng phân cách khung báo quá tải là dominant (điều kiện 3) thì bắt đầu phát cờ báo quá tải cúa nó ở bit tiếp theo.
Hình 2. Ví dụ về sự truyền khung báo quá tải (Overload Frame)

2. Khoảng liên khung (Interframe Space)

2.1 Vai trò và cấu trúc

Khoảng liên khung dùng để phân tách giữa các khung dữ liệu và khung yêu cầu với khung vừa phát trước đó. Khung trước đó có thể là khung dữ liệu, khung yêu cầu, khung báo lỗi hoặc khung báo quá tải.

Khoảng liên khung không bao giờ đặt ngay trước các khung báo lỗi và khung báo quá tải vì:
  • Khung báo lỗi phát ngay khi phát hiện lỗi trên bus lúc đang truyền khung dữ liệu và khung mở rộng nên trước nó không thể là một khoảng liên khung.
  • Khung báo quá tải thì phát chiếm chỗ vị trí của khoảng liên khung, tức là phát ngay sau EOF hoặc sau vùng phân cách của một khung báo lỗi hoặc khung báo quá tải trước đó nên trước nó cũng không thể là khoảng liên khung
  • Mặt khác, sau một khoảng liên khung là trạng thái bus IDLE (bus rảnh) và đây không phải là vị trí phát khung báo lỗi hay khung báo quá tải
Nhiều khung báo quá tải liên tiếp nhau thì sẽ truyền liên tục như đã trình bày ở trên chứ không bị phân tách bởi khoảng liên khung.

Có hai cấu trúc khoảng liên khung như sau:
  • Đối với Node không trong trạng thái lỗi bị động (passive error) hoặc Node là bộ nhận và vừa mới nhận xong một thông điệp trước đó thì khoảng liên khung gồm vùng INTERMISSION và BUS IDLE
Hình 2. Định dạng khoảng liên khung (Interframe Space) cho Node không trong trạng thái lỗi bị động hoặc là bộ nhận vừa nhận xong thông điệp

  • Đối với Node trong trạng thái lỗi bị động và vừa mới truyền xong một thông điệp ngay trước đó thì khoảng liên khung gồm vùng INTERMISSION, vùng SUSPEND TRANSMISSION và vùng BUS IDLE
Hình 3. Định dạng khoảng liên khung cho Node đang trong trạng thái lỗi bị động và vừa mới truyền xong khung thông điệp trước đó

2.2 Cấu tạo các vùng

Vùng INTERMISSION là vùng ngưng truyền chứa 3 bit recessive liên tiếp. Trong vùng này, không Node nào được phép bắt đầu truyền khung dữ liệu hoặc khung điều khiển. Chỉ một hoạt động được phép thực hiện là báo hiệu quá tải bằng cách truyền khung quá tải.

Chú ý, như đã trình bày ở trên, việc xuất hiện bit dominant ở vị trí bit thứ 1 hoặc thứ 2 của vùng INTERMISSION sẽ được xem như sự xuất hiện của khung báo quá tải.

Đối với bit thứ 3 của vùng INTERMISSION, nếu một bit dominant xuất hiện thì đó xem như là SOF của khung dữ liệu hoặc khung yêu cầu. Như vậy, một Node có thể bắt đầu truyền thông điệp mới ngay từ bit thứ 3 của vùng INTERMISSION mà không cần chờ đến khi vùng này kết thúc. Lúc này, nếu có các Node khác trong mạng cũng có thông điệp cần truyền thì  sau khi phát hiện bit dominant ở vị trí bit thứ 3 của INTERMISSION, các Node này cũng sẽ bắt đầu phát thông điệp của nó bắt đầu từ bit đầu tiên của vùng IDENTIFIER. Tiếp theo, sự phân xử bus sẽ quyết định Node nào thắng và được truyền tiếp.

Vùng bus rảnh (BUS IDLE) là vùng có độ dài không xác định. Lúc này, bus được xem là tự do, bất kỳ Node nào có thông điệp cần truyền đều có thể phát bắt đầu với SOF.

Vùng cấm truyền (SUSPEND TRANSMISSION) là vùng gồm 8 bit recessive được thêm vào dành cho Node ở trạng thái bị động và vừa truyền xong mộ thông điệp. Sau thông điệp vừa truyền, Node này phải truyền 3 bit recessive của vùng INTERMISSION, tiếp theo phải truyền 8 bit recessive trước khi bắt đầu được phép truyền một thông điệp khác hoặc ghi nhận trạng thái bus rảng (BUS IDLE). Như vậy, nếu giám sát thấy sự xuất hiện của một bit dominant ở bit thứ 3 của INTERMISSION hoặc trong vùng SUSPEND TRANSMISSION thì đó là một SOF nhưng Node này không được phép phát thông điệp của nó như cách đã nói phía trên mà Node này sẽ trở thành bộ nhận thông điệp đang phát bởi các Node khác trên bus.

Có thể thấy một Node đang ở trong trạng thái lỗi bị động, sau khi truyền xong một thông điệp sẽ phải chịu một khoảng cấm truyền và trở nên kém ưu tiên hơn các Node khác trong mạng CAN.

Lịch sử cập nhật:
1) 2019.10.18 - Chỉnh sửa link hình minh họa

0 bình luận:

Đăng nhận xét