Thứ Sáu, 30 tháng 6, 2017

[CAN2.0][Controller Area Network][Bài 12] Lọc thông điệp trong giao thức CAN

1. Lọc thông điệp

Việc lọc thông điệp thực hiện trên các thông điệp được nhận bởi Node. Một Node lọc thông điệp để biết nó có phải là thông điệp của nó hay không.

Việc lọc thông điệp thực hiện trên toàn bộ vùng ID (Identifier) của thồn điệp. Việc lọc thông điệp là sự so sánh giữa ID thông điệp với một hoặc nhiều giá trị ID được cấu hình bên trong một Node.

Mỗi bit được so sánh có thể được che bởi các thanh ghi mặt nạ (mask register) để thiết lập bit này là don't care, tức là không quan tâm đến giá trị bit này là bao nhiêu khi so sánh. Các bit của thanh ghi mặt nạ phải lập trình được. Độ dài của thanh ghi mặt nạ có thể bằng độ dài của toàn bộ vùng ID hoặc chỉ bằng một phần vùng này.

Sau đây là một ví dụ về việc lọc thông điệp được thực hiện trong chip CAN controller mcp2515 của Microchip. Từng bit ID của thông điệp nhận được (Message Assembly Buffer Identifier) sẽ được so sánh với Thanh ghi lưu giá trị ID được chấp nhận (Acceptance Filter register) bằng cổng XOR. Nếu giá trị giống nhau, ngõ ra cồng XOR là 0; nếu khác nhau thì ngõ ra cổng XOR là 1. Giá trị này được lấy bù để OR với giá trị bù của của các bit thanh ghi mặt nạ (Acceptance Mask register). Nếu tất cả các ngõ ra cổng OR là 1 thì tín hiệu báo thông điệp hợp lệ với Node (RxRqst) sẽ tích cực. Nếu 1 hoặc nhiều ngõ ra cổng OR bằng 0, nghĩa là có 1 hoặc nhiều bit ID không phù hợp với cấu hình của Node thì RxRqst sẽ không tích cự và Node không nhận thông điệp này.
Hình 1. Cấu tạo thành phần lọc thông điệp của chip CAN controller mcp2515 của Microchip
Đối với mạch nguyên lý trên, nếu bit thanh ghi mặt nạ bằng 0 thì giá trị so sánh tại vị trí đó, ngõ ra cổng XOR, sẽ là don’t care và giá trị bit ID tại vị trí này luôn phù hợp cho dù là 0 hay 1.
Hình 2. Bảng giá trị minh họa mối liên hệ giữa bit mặt nạ (Mask), bit cấu hình lọc IC (Filter) và giá trị bit ID của thông điệp

Việc sử dụng thanh ghi mặt nạ cho phép một Node có thể được cấu hình 1 khoảng giá trị ID thay vì từng giá trị đơn lẻ. Theo mạch nguyên lý đã trình bày trên đây, với 29 bit ID, giả sử các giá trị cấu hình là:
  • Thanh ghi lưu các bit Filter: h0000_005A
  • Thanh ghi lưu các bit Mask: hFFFF_FFF0
thì khoảng giá trị ID mà Node sẽ nhận là từ h0000_0050 đến h0000_005F.

2. Minh họa việc truyền nhận thông điệp trên bus CAN 

Giả sử ta có bốn Node CAN như sau: 
  • Node 1: muốn truyền dữ liệu với IDENTIFIER 01101000110 (838). 
  • Node 2: muốn truyền một dữ liệu khác với IDENTIFIER 01101001000 (840) và cho phép chỉ nhận dữ liệu với IDENTIFIER 01101000110 (838). 
  • Node 3: không truyền dữ liệu nào và có khoảng ID cho phép là 0110100xxxx (‘x’ hiểu là don't care, tức tầm giá trị của khoảng cho phép là [832; 847]). 
  • Node 4: muốn truyền dữ liệu có IDENTIFIER 01110010010 (914) và cho phép nhận ID là 0111001xxx1 (tức tầm của khoảng ID cho phép là các số lẻ trong đoạn [913; 927]) 
Giả sử, Node 1, Node 2, Node 4 cùng truyền dữ liệu của mình trong cùng một thời gian. Như vậy, cả 3 Node sẽ chuyển từ trạng thái Idle thành bộ truyền và sự xung đột sẽ xuất hiện nên trên bus sẽ xảy ra sự phân xử.
Hình 3. Sự phân xử khi truyền thông điệp trên bus CAN

Sự phân xử thực hiện như sau, ở ba bit đầu tiên, cả 3 Node đều truyền cùng mức và giá trị bus ở vị trí tương ứng cũng vậy. Đến bit thứ 4, Node 1 và Node 2 truyền dominant nên giá trị bus theo ‘AND-wire’ là dominant. Cùng lúc này, node 4 truyền recessive nhưng khi giám sát bus lại thấy là dominant, nó hiểu là có nút khác cũng đang truyền dữ liệu. Node 4 sẽ ngưng truyền và trở thành bộ nhận. Ta nói rằng nút 4 thua trong sự phân xử. Tương tự như vậy, đến bit thứ 8, Node 2 cũng thua trong sự phân xử và trở thành bộ nhận. 

Kết quả của cuối cùng của trình phân xử trên là chỉ có Node 1 truyền dữ liệu với IDENTIFIER 838 của nó trên bus và nó là bộ truyền cho đến khi bus Idle. Các Node còn lại đều trở thành bộ nhận dữ liệu từ Node 1. Trong 3 Node nhận là Node 2, Node 3, Node 4 thì Node 4 sẽ không nhận dữ liệu này vì 838 không thuộc khoảng ID [913; 927] mà nó được cấu hình. Node 2 và Node 3 sẽ cho phép dữ liệu qua lớp phụ LLC để lên lớp cao hơn.
Hình 3. Hoạt động truyền nhận của các Node trong bus 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