• Integrated Circuit Design - Chia sẻ kiến thức về vi mạch

    Vi mạch và Ứng dụng

  • Integrated Circuit Design - Chia sẻ kiến thức về vi mạch

    Vi mạch và Ứng dụng

  • Integrated Circuit Design - Chia sẻ kiến thức về vi mạch

    Vi mạch và Ứng dụng

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

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

[CAN2.0][Controller Area Network][Bài 5] Khung báo lỗi (Error frame)

Khung báo lỗi (Error frame) được truyền trên bus bởi các Node phát hiện thấy có điều kiện lỗi (các điều kiện lỗi sẽ được trình bày trong bài khác). Khung báo lỗi gồm hai vùng khác nhau. Vùng đầu tiên (superposition of Error Flags) là sự chồng chập của các cờ lỗi (Error Flag) được phát từ các Node khác nhau trên bus. Tiếp theo đó là vùng phân cách khung báo lỗi (Error delimiter).
Hình 1. Khung báo lỗi

1. Cờ lỗi (Error Flag)

Cờ lỗi có 2 dạng là cờ lỗi chủ động (Active Error Flag) và cờ lỗi bị động (Passive Error Flag)
  • Cờ lỗi chủ động có 6 bit dominant liên tiếp
  • Cờ lỗi bị động có 6 bit recessive liên tiếp
Một Node đang trong trạng thái chủ động với lỗi (error active station) sẽ truyền cờ lỗi chủ động khi phát hiện một điều kiện lỗi. Dạng cờ lỗi chủ động sẽ vi phạm luật chèn bit (bit stuffing) được quy định bởi chuẩn này. Luật chèn bit quy định cứ sau 5 bit liên tiếp có mức logic giống nhau thì bộ truyền phải tự động chèn thêm một bit khác mức logic của 5 bit trước đó. Luật này áp dụng từ vùng SOF đến hết vùng CRC của khung dữ liệu và khung yêu cầu. Đồng thời, dạng cờ lỗi chủ động cũng không giống bất kỳ định dạng nào của vùng ACK hay EOF.

Tất cả các Node phát hiện thấy một điều kiện lỗi đều phải truyền cờ báo lỗi. Vì có thể có nhiều Node cùng phát hiện lỗi và truyền cờ lỗi nên các cờ lỗi được phát ra bus sẽ đè hay chồng lên nhau tạo thành vùng chồng chập các cờ lỗi. Với cờ lỗi chủ động, vùng chồng chập này sẽ tạo ra một chuỗi bi dominant (bit 0) có số bit tối thiểu là 6 và tối đa là 12 bit.

Một Node ở trong trạng thái lỗi bị động (passive error station) sẽ cố gắng báo hiệu bằng một cờ lỗi bị động khi nó phát hiện điều kiện lỗi. Cờ lỗi bị động có thể bị ghi đè bởi cờ lỗi chủ động được phát từ các Node ở trạng thái chủ động với lỗi. Vì vậy, Node truyền cờ lỗi bị động sẽ chờ cho đến khi phát hiện được 6 bit liên tiếp cùng cực tính từ lúc bắt đầu phát cờ lỗi bị động của nó. Việc truyền cờ lỗi bị động được xem là hoàn thành khi 6 bit bằng nhau liên tiếp đã được phát hiện.

2. Vùng phân cách khung báo lỗi (Error Delimiter)

Vùng này gồm 8 bit recessive liên tiếp.
Sau khi truyền xong cờ lỗi, các Node bắt đầu phát các bit recessive và phải giám sát cho đến khi bắt đầu nhận được một bit recessive thì bit này được tính là bit đầu tiên của vùng phân cách khung báo lỗi. Lúc này, các Node tiếp tục phát thêm 7 bit recessive nữa để hoàn thành vùng này.

3. Giải thích về sự truyền khung báo lỗi

Khung báo lỗi được phát theo dạng nào là tùy vào trạng thái lỗi hiện tại của Node. Trạng thái lỗi của Node sẽ được trình bày trong 1 bài khác.

Khung báo lỗi được phát khi nào?
  • Bất cứ khi nào một Node phát hiện điều kiện lỗi bus khi khung dữ liệu hoặc khung yêu cầu đang được phát thì nó sẽ phát ngay khung báo lỗi của nó. Khung báo lỗi được phát có thể ngắt sự truyền ngay lập tức hoặc có thể không gây ngắt sự truyền.
  • Chú ý, trường hợp phát hiện lỗi CRC thì việc truyền cờ báo lỗi phải sau vùng phân cách ACK (ACK DELIMITER) trừ khi đã có một cờ lỗi khác đã phát trước đó.
Khi nào khung báo lỗi gây ngắt sự truyền hiện tại trên bus và khi nào không?
  • Khi khung báo lỗi được phát ra là loại khung báo lỗi chủ động vì cờ lỗi chủ động có 6 bit dominant liên tiếp sẽ phá vỡ các quy định về việc truyền dữ liệu như luật chèn bit hoặc phá vỡ định dạng chung của các vùng cấu tạo nên khung dữ liệu hoặc khung yêu cầu. Vì vậy, việc truyền một cờ lỗi chủ động từ bất kỳ Node nào cũng sẽ được tất cả các Node trong mạng phát hiện được
  • Khi khung báo lỗi được phát ra là loại khung báo lỗi bị động và được phát ra bởi chính bộ truyền thông điệp trên bus. Một bộ truyền đang ở trạng thái lỗi bị động phát hiện lỗi bus thì nó sẽ ngừng truyền và việc phát 6 bit recessive liên tiếp sẽ vi phạm luật chèn bit và báo hiệu cho các Node khác.
  • Một hoặc nhiều bộ nhận trong trạng thái lỗi bị động khi phát hiện lỗi sẽ cố gắng phát khung báo lỗi bị động lên bus. Nếu đó là lỗi cục bộ của riêng của các Node này và không có Node nào truyền khung báo lỗi chủ động thì sự truyền vẫn tiếp tục bởi vì khung báo lỗi bị động toàn bit recessive nên không ảnh hưởng đến dữ liệu đang truyền trên bus. Lúc này, các Node phát khung báo lỗi bị động sẽ ngừng nhận dữ liệu và gí giát bus để chờ nhận được 6 bit liên tiếp bằng nhau như quy định trước khi phát tiếp các bit phân cách khung báo lỗi.
Tại sao độ dài vùng chồng chập cờ lỗi chủ động là từ 6 đến 12 bit?
  • Giả sử tại thời điểm phát hiện lỗi bus, đây là một lỗi toàn cục, tất cả các Node trên bus đều đồng thời nhận ra và phát khung báo lỗi thì các cờ lỗi chủ động chồng chập lên nhau và có độ dài ngắn nhất là 6 bit.
  • Nếu một lỗi xuất hiện nhưng chỉ có một hoặc một vài Node nhận ra thì chỉ các các Node này phát khung báo lỗi. Các Node còn lại chưa giám sát bus thấy có 6 bit dominant liên tiếp của cờ lỗi chủ động trên bus thì ngay lập tức phát hiện đây là một lỗi và bắt đầu phát khung báo lỗi của nó. Lúc này sự chồng chập các cờ lỗi chủ động sẽ là 6 bit dominant của các Node phát trước đó cộng với 6 bit dominant của các Node phát sau này là 12 bit
Việc khung báo lỗi bị động bị ghi đè bởi khung báo lỗi chủ động?
  • Đối với các trạng phát khung báo lỗi chủ động, trường hợp này sẽ không nhận ra có khung báo lỗi bị động và xử lý bình thường.
  • Đối với Node phát khung báo lỗi bị động, như đã trình bày, khi phát cờ lỗi bị động, trong trường hợp này bị ghi đè, nó giám sát thấy 6 bit dominant. Đây chính là là 6 bit cùng cực (cùng mức logic) thì coi như nó đã phát xong cờ báo lỗi. Lúc này nó bắt đầu gửi các bit recessive của vùng phân tách khung báo lỗi và chờ đến khi phát hiện bit recessive đầu tiên thì tiếp tục truyền 7 bit recesssive và kết thúc việc truyền khung báo lỗi cùng với các Node truyền khung báo lỗi chủ động.

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

Thứ Năm, 15 tháng 6, 2017

[CAN2.0][Controller Area Network][Bài 4] Cấu trúc khung dữ liệu và khung yêu cầu

1. Các loại khung truyền của giao thức CAN

Giao thức CAN sử dụng 4 loại khung (frame) khác nhau để truyền tải dữ liệu và điều khiển. Bốn loại khung này gồm:
  • Khung dữ liệu (Data frame) là khung mang dữ liệu từ một bộ truyền đến các bộ nhận. Khung này có vùng để mang các byte dữ liệu.
  • Khung yêu cầu hay khung điều khiển (Remote frame) là khung được truyền từ một Node để yêu cầu Node khác truyền khung dữ liệu có ID (IDENTIFIER) trùng với khung yêu cầu.
  • Khung báo lỗi (Error frame) là khung được truyền bởi bất kỳ Node nào khi Node đó phát hiện lỗi bus.
  • Khung báo quá tải (Overload frame) được sử dụng để tạo thêm độ trễ giữa giữa các khung dữ liệu hoặc khung yêu cầu. Mỗi Node trong bus CAN có thể truyền bất kỳ khi nào nếu phát hiện bus rảnh, nêu một Node nhận quá nhiều dữ liệu, nó có thể dùng khung này để ngăn sự truyền tiếp theo.
Chỉ có khung dữ liệu và khung yêu cầu là có ID, cơ chế phân xử sẽ áp dụng cho hai loại khung này khi chúng được truyền trên bus.
Khung dữ liệu và khung yêu cầu 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
Chuẩn CAN Specification 2.0-Part A (gọi tắt 2.0A) chỉ quy định sử dụng loại khung chuẩn. Chuẩn CAN Specification 2.0-Part B (gọi tắt 2.0B) sử dụng cả loại khung chuẩn và khung mở rộng. Như vậy, khi sử dụng CAN controller, bạn nên quan tâm đến việc nó tương thích chuẩn nào.

Ngoài ra, chuẩn CAN còn một loại định dạng thứ 5 là khoảng liên khung (Interframe Spacing). Nó có vai trò tạo khoảng ngăn cách giữa các khung truyền trên bus CAN.

2. Khung dữ liệu (Data frame) 

Một khung dữ liệu bao gồm bảy vùng bit khác nhau theo thứ tự là:
  • Vùng bắt đầu khung (Start of frame – SOF)
  • Vùng phân xử (Arbitration field)
  • Vùng điều khiển (Control field)
  • Vùng dã liệu (Data field)
  • Vùng kiểm tra (CRC field)
  • Vùng báo nhận (ACK field)
  • Vùng kết thúc khung (End of frame – EOF)
Mỗi vùng có chức năng nhiệm vụ khác nhau, số lượng bit khác nhau và có quy định cụ thể về mức logic và ý nghĩa các bit. Trong hình minh họa có chú thích rõ số lượng bit từng vùng.
Hình 1. Định dạng khung dữ liệu chuẩn (Standard Data frame)
Hình 2. Định dạng khung dữ liệu mở rộng (Extended Data Frame)

2.1 Vùng bắt đầu khung SOF (Start of frame)

SOF đánh dấu sự bắt đầu của một khung dữ liệu hoặc khung yêu cầu. Nó chỉ bao gồm một bit dominant (logic 0).

Một Node chỉ được cho phép truyền khi bus rảnh, vấn đề khi nào bus rảnh sẽ được trình bày sau. Khi bus rảnh thì trạng thái trên bus đang là recessive (logic 1). Lúc này, nếu có một Node bắt đầu truyền thì nó sẽ truyền SOF trước. Ngay khi xuất hiện cạnh xuống (chuyển từ recessive thành dominant) của SOF thì tất cả các Node trên bus được đồng bộ theo cạnh này. Nghĩa là, các Node bắt đầu tính toán tính toán thời gian để lấy mẫu các bit trên bus CAN.

Để dễ hình dung, bạn có thể liên tưởng đến hoạt động của UART, UART cũng bắt đầu truyền một khung của nó bằng 1 bit START có mức logic 0. Bên nhận phát hiện cạnh xuống của bit START sẽ bắt đầu tính toán để lấy mẫu các giá trị bit của khung truyền.

Việc đồng bộ theo cạnh gọi là đồng bộ cứng (Hard Synchronization).

2.2 Vùng phân xử (Arbitration field)

Định dạng vùng phân xử là khác nhau đối với dạng khung chuẩn và dạng khung mở rộng.
  • Định dạng chuẩn: vùng phân xử có độ dài 12 bit, bao gồm 11 bit IDENTIFIER và 1 bit RTR. Vùng này có quy định khác nhau đối với chuẩn 2.0A và 2.0B.
  • Định dạng mở rộng: vùng phân xử có độ dài 32 bit, bao gồm có 29 bit ID, 1 bit SRR, 1 bit IDE và 1 bit RTR
IDENTIFIER (ID)
  • Đối với 2.0A, chỉ có định dạng chuẩn, 11 bit ID được đánh thứ tự từ ID-10 đến ID-0, ID-0 là bit LSB. 7 bit MSB, từ ID-10 đến ID-4 không được cùng là recessive (logic 1).
  • Đối với 2.0B:
    • Định dạng chuẩn: 11 bit ID được đánh số thứ tự từ ID-28 đến ID-18. Việc quy định thứ tự này là vì bản 2.0B có thêm khung mở rộng được thêm vào 18 bit ID từ ID-17 đến ID-0. 7 bit MSB, từ ID-28 đến ID-22 không được cùng là recessive (logic 1).
    • Định dạng mở rộng: chia 29 bit ID làm 2 vùng
      • Base ID (ID cơ sở): 11 bit từ ID-28 đến ID-18, tương ứng với vị trí của 11 bit ID ở khung chuẩn)
      • Extended ID (ID mở rộng): 18 bit từ ID-17 đến ID-0
Bit RTR (Remote Transmission Request)
  • Đây là bit dùng để phân biệt khung dữ liệu và khung yêu cầu
  • Bit này luôn bằng 0 (bit dominant) đối với khung dữ liệu
  • Bit này luôn bằng 1 (bit recessive) đối với khung yêu cầu
  • Vị trí bit này luôn ngay sau ID. Chú ý, bit RTR là nằm sau bit ID-18 với khung chuẩn và sau ID-0 với khung mở rộng
Bit SRR (Substitute Remote Request)
  • Bit này chỉ có ở khung mở rộng
  • Đây là bit recessive (bit 1)
  • So sánh với khung chuẩn, vị trí của bit này trùng với vị trí của bit RTR nên có tên gọi là bit thay thế (Subsitute) cho bit RTR ở khung chuẩn
  • Giải sử có hai Node cùng truyền, một Node truyền khung dữ liệu chuẩn, một Node truyền khung dữ liệu mở rộng có ID giống nhau thì Node truyền khung chuẩn sẽ thắng phân xử vì đến vị trí sau Base ID, khung chuẩn là bit RTR = 0, còn khung mở rộng là bit SRR = 1. Như vậy, khung chuẩn chiếm ưu thế hơn so với khung mở rộng khi có Base ID như nhau.
Bit IDE (IDentifier Extension)
  • Đây chính là bit phân biệt giữa loại khung chuẩn và khung mở rộng.
    • IDE = 0 (dominant) thì là khung chuẩn
    • IDE = 1 (recessive) thì là khung mở rộng
  • Bit này thuộc:
    • Vùng phân xử nếu là khung mở rộng
    • Vùng điều khiển nếu là khung chuẩn
  • Dữ liệu trên bus CAN được truyền nối tiếp, các Node nhận từng bit,  khi một Node nhận xong Base ID thì sẽ nhận tiếp bit tiếp theo, bit này có thể là SRR (nếu là khung mở rộng) hoặc RTR (nếu là khung chuẩn) vì đến đây Node chưa xác định được loại khung. Node sẽ xác định như sau:
    • Nếu bit ngay sau Base ID là bit dominant (bit 0) thì đây chắc chắn là khung dữ liệu định dạng chuẩn
    • Nếu bit ngay sau Base ID là bit recessive (bit 1) thì đây là khung Remote định dạng chuẩn hoặc khung mở rộng (khung dữ liệu hoặc khung yêu cầu). Node sẽ nhận tiếp bit tiếp theo là bit IDE để phân biệt
      • Nếu IDE = 0 thì bit trước đó là bit RTR và đây là khung yêu cầu dạng chuẩn
      • Nếu bit IDE = 1 thì bit trước đó là bit SRR và đây là khung mở rộng nhưng chưa biết là khung dữ liệu hay khung yêu cầu. Node sẽ nhận tiếp Extended ID và đến bit RTR mới phân biệt được.
2.3 Vùng điều khiển (Control Field)
Hình 3. Định dạng vùng điều khiển

Định dạng vùng này ở khung chuẩn và mở rộng là khác nhau.

  • Khung chuẩn gồm IDE, r0 và DLC (Data Length Code).
  • Khung mở rộng gồm r1, r0 và DLC.
Bit IDE đã trình bày ở trên.

Bit r1 và r0:
  • Đây là hai bit dự trữ.
  • Tuy hai bit này phải được truyền là bit recessive (bit 1) bởi bộ truyền nhưng bộ nhận không qua tâm đến giá trị 2 bit này. Bộ nhận có thể nhận được các 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 bình thường.
Mã độ dài dữ liệu DLC (Data Length Code)
  • Có độ dài 4 bit quy định số byte của vùng dữ liệu của khung dữ liệu
  • Chỉ được mang giá trị từ 0 đến 8 tương ứng với vùng dữ liệu có từ 0 đến 8 byte dữ liệu. Như vậy, khung dữ liệu có thể không có byte dữ liệu nào khi DLC = 0.
  • Giá trị lớn hơn 8 không được phép sử dụng
Hình 4. Bảng giá trị của DLC (r = recessive = 1, d = dominant = 0)

2.4 Vùng dữ liệu (Data field)

Vùng này có độ dài từ 0 đến 8 byte tùy vào giá trị của DLC ở vùng điều khiển.
Mỗi byte có 8 bit dữ liệu với bit MSB được truyền trước.

2.5 Vùng CRC

Vùng kiểm tra hay vùng CRC gồm 16 bit và được chia làm hai phần là chuỗi CRC (CRC Sequence) và phần phân cách CRC (CRC Delimiter).
Hình 5. Vùng CRC

CRC Sequence gồm 15 bit CRC tuần tự. Mọi tính toán cho CRC sequence thực chất là phép chia đa thức (hay chia bằng các bit nhi phân) và đều dùng modulo-2. Ta thực hiện tính toán cho CRC sequence như sau:
  • Đa thức sinh (đa thức chia) là:
H(X) = X^15 + X^14 + X^10 + X^8 + X^7 + X^4 + X^3 + 1
  • Đa thức của chuỗi bit được kiểm tra CRC (đa thức bị chia) nằm từ vùng SOF đến vùng dữ liệu, đa thức chia không tính đến các bit được chèn thêm (quy luật chèn thêm bit sẽ được trình bày sau). Gọi đa thức bị chia là:
Z(X)

  • Dịch trái đa thức bị chia 15 bit, tức là thực hiện phép nhân đa thức sau: 
X^15.Z(X)

  • Lấy đa thức bị chia đã được dịch trái chia cho đa thức sinh:
X^15.Z(X)/H(X)
  • Gọi số dư của phép chia trên là R(X), R(X) chính là 15 bit tuần tự chứa trong chuỗi CRC.
  • Sau đây là đoạn mã giả minh họa cách tính toán chuỗi CRC
CRC_RG = 0; // initialize shift registerREPEAT CRCNXT = NXTBIT EXOR CRC_RG(14);

CRC_RG(14:1) = CRC_RG(13:0); // shift left by
CRC_RG(0) = 0; // 1 position

IF CRCNXT THEN
    CRC_RG(14:0) = CRC_RG(14:0) EXOR (4599hex);
ENDIF

UNTIL (CRC SEQUENCE starts or there is an ERROR condition)

Mã kiểm tra CRC phù hợp nhất cho các 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 các trường hợp sai nhóm (burst error). Ở đây, tổng bit từ vùng SOF đến vùng dữ liệu tối đa là 83 bit (khung định dạng chuẩn) và 103 bit (khung định dạng mở rộng).

Bộ 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 khác nhau tức là đã có lỗi, nếu giống nhau tức là đã nhận đúng từ vùng SOF đến vùng dữ liệu. 

CRC delimiter: theo ngay sau CRC sequence, nó là một bit recessive làm nhiệm vụ phân cách vùng CRC với vùng ACK.

2.6 Vùng ACK

Vùng báo nhận hay vùng ACK có độ dài 2 bit và bao gồm hai phần là ‘khe ACK’ (ACK slot) và phần phân cách ACK (ACK delimiter)
Hình 6. Vùng ACK
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 chính xác giá trị thông điệp (không 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 bit dominant ngay vị trí ACK slot để ghi đè lên bit recessive của bộ truyền.

ACK delimiter: có độ dài 1 bit, nó luôn là một bit recessive. Như vậy, ta thấy rằng ACK slot luôn được đặt giữa hai bit recessive là CRC delimiter và ACK delimiter.

2.7 Vùng kết thúc khung EOF (End Of Frame)

Vùng EOF là vùng thông báo kết thúc một khung dữ liệu hay khung yêu cầu. Vùng này gồm 7 bit recessive.

3. Khung yêu cầu (Remote frame) 

Một Node hoạt động như một bộ nhận đang mong muốn một dữ liệu, để nhận dữ liệu này từ một Node nguồn thì bộ nhận sẽ gửi một khung yêu cầu (còn gọi là khung điều khiển). Khung yêu cầu có tác dụng thông báo cho Node nguồn biết để Node này truyền dữ liệu. 
Một khung yêu cầu có thể là định dạng chuẩn hay định dạng mở rộng. Dù thuộc định dạng nào thì khung yêu cầu cũng gồm sáu vùng bit khác nhau là: Vùng bắt đầu khung (Start Of Frame), vùng phân xử (Arbitration Field), vùng điều khiển (Control Field), vùng kiểm tra (CRC Field), vùng ACK (ACK Field), vùng kết thúc khung (End Of Frame).
Hình 7. Khung yêu cầu dạng chuẩn
Hình 8. Khung yêu cầu dạng mở rộng
Cấu tạo và ý nghĩa các vùng trong khung điều khiển giống như ở khung dữ liệu ngoại trừ một số điểm sau đây là khác so với khung dữ liệu: 
  • Khung yêu cầu không có vùng dữ liệu (Data Field). Chính vì vậy, khung yêu cầu không phụ thuộc vào giá trị của mã chỉ độ dài dữ liệu DLC, DLC có thể nhận bất kỳ giá trị nào từ 0 đến 8. Nhưng giá trị DLC của khung yêu cầu lại chỉ ra độ dài dữ liệu trong khung dữ liệu tương ứng sẽ trả về, tức DLC của khung dữ liệu trả về giống DLC của khung yêu cầu đã gửi. Và khung dữ liệu trả về có số byte bằng với giá trị DLC này.
  • Bit RTR (thuộc vùng phân xử) của khung yêu cầu là bit recessive. Nó khác với khung dữ liệu vì ở khung dữ liệu nó là một bit dominant.

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

Thứ Ba, 13 tháng 6, 2017

[CAN2.0][Controller Area Network][Bài 3] Các khái niệm cơ bản và cấu trúc phân lớp của CAN

1. Các khái niệm cơ bản và lưu ý quan trọng

Mục này trình bày các thuật ngữ và khái niệm cơ bản trước khi đi sâu phân tích chi tiết chuẩn bus CAN.
  • Node (Station) là những thành phần độc lập có thể xử lý truyền nhận dữ liệu trên bus CAN, một Node thường có 3 thành phần cơ bản là vi điều khiển MCU, chip điều khiển CAN (CAN controller) và chip thu-phát (CAN transceiver)
  • Thông điệp (Message): Thông tin trên bus CAN được gửi dưới dạng các thông điệp có định dạng cố định. Các thông điệp có thể khác nhau nhưng độ dài (số bit trong một thông điệp) là có giới hạn. và được giới hạn về độ dài. Khi bus rảnh (IDLE) thì bất kỳ Node nào trên bus đều có thể bắt đầu truyền một thông điệp mới. Thông điệp được truyền thông qua 4 loại khung (frame) khác nhau là khung dữ liệu (Data frame), khung yêu cầu hay khung điều khiển (remote frame), khung báo lỗi (Error frame) và khung báo quá tải (Overload frame)
  • Tốc độ bit (Bit rate): Tốc độ bit của CAN có thể khác nhau trong các hệ thống khác nhau nhưng trong một hệ thống cho trước thì tốc độ bit đồng nhất và cố định. Tốc độ bit còn tùy thuộc vào chiều dài đường truyền. Tốc độ tối đa có thể lên đến 1 Mbit/s. Sau đây là bảng một số thông số tham khảo thực tế:
Tốc độ bit
(Bit Rate – kbit/s)
Chiều dài bus
(Bus Length - m)
Thời gian bit danh định
(Nominal Bit-time - µs)
1000
30
1
800
50
1.25
500
100
2
250
250
4
125
500
8
62.5
1000
20
20
2500
50
10
5000
100

  • Tính ưu tiên (Priorities): Mỗi khung dữ liệu hoặc khung yêu cầu sẽ chứa một định danh IDENTIFIER (hay số ID). ID sẽ định nghĩa một mức ưu tiên cố định cho thông điệp trong suốt quá trình truy cập bus.
  • Yêu cầu dữ liệu từ xa (Remote data request): Bằng cách gửi một khung yêu cầu (Remote Frame), một Node đang chờ dữ liệu có thể yêu cầu một Node khác gửi một khung dữ liệu (Data Frame) tương ứng với khung yêu cầu đó. Khung dữ liệu và khung yêu cầu tương ứng phải có IDENTIFIER giống nhau.
  • Đa master (Multimaster): Khi bus rảnh, mỗi Node đều có thể truyền thông điệp nhưng chỉ Node nào truyền thông điệp có mức ưu tiên cao nhất mới chiếm quyền truy cập bus, tức thông điệp của Node đó được truyền trước. Các thông điệp từ các Node khác phải tạm dừng và chờ truyền sau.
  • Giá trị bus (Bus values): Khi hoạt động, bus có thể mang một trong hai giá trị logic là ‘dominant’ (mức trội), tương ứng với mức thấp – bit 0 hay ‘recessive’ (mức lặn) tương ứng mức cao – bit 1. Trong cùng một thời điểm nếu ‘dominant’ và ‘recessive’ cùng được truyền lên bus thì giá trị bus sẽ là ‘dominant’. Đây là cơ chế hoạt động AND-wire của bus.
  • Sự phân xử (Arbitration): 
    • Bất cứ khi nào bus rảnh, mỗi Node đều có thể bắt đầu truyền thông điệp. Như vậy, nếu có hai hay nhiều Node truyền thông điệp trong cùng một thời gian thì sẽ xảy ra xung đột khi truy cập bus. Để tránh xung đột này, cơ chế phân xử từng bit của IDENTIFIER được sử dụng để đảm bảo thông tin không bị mất và thời gian truyền cũng không bị mất. Thông tin không bị mất là vì Node nào thua khi phân xử thì phải dừng lại, thông điệp của Node đó sẽ được phát lại khi bus rảnh. Thời gian không bị mất là vì sự phân xử thực hiện thời gian thực, Node nào thắng trong sự phân xử sẽ tiếp tục truyền tiếp các bit còn lại chứ không phải dừng để truyền lại từ đầu.
    • Nếu một khung dữ liệu và một khung yêu cầu có IDENTIFIER giống nhau được bắt đầu cùng một thời gian thì khung dữ liệu chiếm ưu thế hơn khung yêu cầu.
    • Mỗi bộ truyền thông điệp lên bus phải giám sát bus để so sánh mức bit mà nó truyền ra và mức bit thể hiện trên bus. Nếu giống nhau, nó tiếp tục truyền bit tiếp theo. Nếu bit truyền ra là reccessive và giá trị giám sát được trên bus là dominant thì Node thua phân xử, phải dừng truyền ngay lập tức từ bit tiếp theo. Nếu bit truyền ra là dominant nhưng giá trị giám sát được là recessive thì đó là lỗi bit.
  • Tính an toàn (Safety): Để có được sự an toàn cao cho việc truyền/nhận dữ liệu thì giao thức có quy định các biện pháp phát hiện lỗi, báo hiệu lỗi và tự kiểm tra được thực thi cho mỗi nút CAN.
    • Phát hiện lỗi (Error detection): sử dụng cơ chế giám sát (Monitoring – so sánh mức bit được truyền với mức bit trên bus), sử dụng mã kiểm tra CRC – Cyclic Redundancy Check), Chèn bit (Bit stuffing) và kiểm tra khung thông điệp.
    • Hiệu quả phát hiện lỗi: Với việc áp dụng các cơ chế phát hiện lỗi, tất cả các lỗi toonge thể (lỗi xảy ra trên toàn bus) được phát hiện, tất cả các lỗi cục bộ ở các bộ truyền được phát hiện, có khả năng phát hiện đến 5 lỗi ngẫu nhiên khác nhau trong 1 thông điệp, các lỗi nhóm với độ dài nhỏ hơn 15 trong một thông điệp, các lỗi với số lẻ lần được phát hiện.
    • Xác xuất lỗi không phát hiện được nhỏ hơn: (Tốc độ lỗi thông điệp)×4.7×10^(-11)
  • Hạn chế lỗi (Fault Confinement): Các nút CAN có thể nhận biết các nhiễu ngắn từ các sai cố định. Các nút hỏng có thể được tắt khỏi bus.
  • Sự kết nối (Connection): Trong bus CAN, số lượng Node nối đến bus là không giới hạn (theo lý thuyết). Trên thực tế, tổng số đơn vị kết nối đến bus bị giới hạn do thời gian trễ và giới hạn về tải trên đường bus.
  • Báo nhận (Acknowledgment): Tất cả các bộ nhận sẽ kiểm tra tính phù hợp của thông điệp được nhận và sẽ báo ACK nếu thông điệp được nhận đúng và phù hợp.
  • Hoạt động Sleep và Wake-up: Để giảm công suất tiêu thụ hệ thống, một linh kiện CAN (hoặc một Node) có thể được thiết lập chế độ Sleep để không có bất cứ hoạt động nội nào và ngắt bộ lái bus của nó. Chế độ Sleep có thể được thoát ra với cơ chế wake-up từ bất kỳ hoạt động nào trên bus hoặc các điều kiện nội của hệ thống. Khi wake-up, hoạt động nội của Node được khởi động lại và chờ cho nguồn xung clock ổn định. Sau đó là chờ cho đến khi nó tự đồng bộ lại với bus bằng cách kiểm tra có sự xuất hiện của 7 bit recessive liên tiếp trước khi bật lại bộ lái bus. Để wake-up các Node của hệ thống đang trong chế độ Sleep thì một thông điệp đặc biệt được sử dụng với một ID có ưu tiên thấp nhất có thể.
  • Bộ truyền hay bộ phát (transmitter): Khi một Node phát đi một thông điệp, Node đó trở thành bộ truyền của thông điệp đó. Node sẽ là bộ truyền cho đến khi nó truyền xong thông điệp này (lúc này bus về trạng thái rảnh) hoặc cho đến khi thua phân xử.
  • Bộ nhận hay bộ thu (receiver): một Node là "bộ nhận" của một thông điệp khi nó không là bộ truyền của thông điệp đó và bus không rảnh. Ví dụ, bus đang rảnh (IDLE), lúc này không có thông điệp nào đang lan truyền trên bus, tất cả các Node đều không phải là bộ truyền hoặc bộ nhận. Tại một thời điểm, có 2 Node A và B cùng truyền, lúc này cả A và B đều là bộ truyền, các Node khác trong bus đều là bộ nhận. Sau một khoảng thời gian, Node B thua phân xử và ngưng truyền, Node A thắng phân xử và tiếp tục truyền, lúc này Node B trở thành bộ nhận và Node A là bộ truyền cho đến khi nó truyền xong thông điệp.
  • Định tuyến thông tin trong CAN: Trong các hệ thống CAN, một Node không cần sử dụng bất kỳ thông tin nào về cấu hình hệ thống. Điều này làm cho các Node trong một mạng CAN có sự độc lập và linh động cao. Từ đó, CAN mang một số đặc điểm quan trọng sau đây:
    • Tính linh động (Flexibility): Các Node CAN có thể được kết nối thêm vào mạng mà không cần phải thay đổi phần mềm hay phần cứng của bất kỳ Node nào khác và lớp ứng dụng.
    • Định tuyến thông điệp: Mỗi thông điệp (khung dữ liệu hoặc khung yêu cầu) có một ID (IDENTIFIER). ID không chỉ ra đích đến của thông điệp mà chỉ ra ý nghĩa của dữ liệu mà thông điệp đó mang theo. Vì vậy, tất cả các Node trong mạng đều có thể nhận và quyết định có sử dụng nội dung thông điệp đó hay không. Việc quyết định có sử dụng thông điệp đó hay không là nhờ cơ chế LỌC THÔNG ĐIỆP (MESSAGE FILTERING) có ở mỗi Node CAN
    • Đa điểm (Multicast): Như đã nói, bất kỳ Node nào cũng có thể nhận thông điệp. Thông qua cơ chế lọc thông điệp, tại một thời điểm, nhiều Node khác nhau có thể cùng sử dụng và xử lý cùng một thông điệp.
    • Tính đồng nhất dữ liệu (Data Consistency): Một mạng CAN luôn đảm bảo một thông điệp sẽ được nhận đồng thời bởi một hoặc nhiều Node hoặc không có Node nào. Do đó, tính đồng nhất của dữ liệu được đảm bảo bởi cơ chế đa điểm và kiểm soát lỗi.
2. Cấu trúc phân lớp của giao thức CAN

Chuẩn CAN Specification 2.0 đã được chuẩn hóa trong ISO 11898, chuẩn CAN quy định chi tiết các chức năng và hoạt động của mạng CAN ở hai lớp Data Link và Physical. Đối với lớp ứng dụng (Application) không được quy định trong chuẩn nhưng hiện nay có hai giao thức phổ biến và CANopen và DeviceNet.
Các chức năng của hai lớp này đều do phần cứng (vi mạch, chip) chuyên dụng tự thực hiện theo cấu hình được nạp vào. Các chức năng lớp Data Link do chip chuyên dụng CAN controller (chip số) hoặc ngoại vịiCAN được tích hợp trong vi điều khiển MCU thực hiện. Chức năng lớp vật lý (Physical) do chip CAN transceiver (chip tương tự) thực hiện.

Hình 1. Cấu trúc phân lớp của giao thức CAN

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

Chủ Nhật, 11 tháng 6, 2017

[CAN2.0][Controller Area Network][Bài 2] Cấu trúc và các thành phần trong bus CAN

1. Cấu trúc mạng CAN

Mạng CAN gồm các thành phần cơ bản sau:
Hình 1. Cấu trúc bus và Node của mạng CAN
  • Bus CAN là bus vi sai gồm:
    • Dây cáp gồm hai dây riêng biệt được gọi là CAN_H (CAN High) và CAN_L (CAN Low). Tùy vào mỗi ứng dụng mà hai dây này có thể là dây xoắn kép hay cáp quang. Ngoài ra, dây cáp còn có vỏ bọc chống nhiễu, vỏ này được nối đến một điện áp tham khảo hoặc GND. CAN_H có điện áp cao, thường là 0V khi bus không truyền, nhận dữ liệu. CAN_L có điện áp thấp, thường là +5V khi bus không truyền, nhận dữ liệu. Như đã nói, bus CAN là bus vi sai, khi dữ liệu được truyền trên bus, điện áp trên CAN_H và CAN_L sẽ thay đổi, mức logic 0/1 sẽ được xác định căn cứ trên sự chênh lệch (sai lệch) điện áp giữa CAN_H và CAN_L.
    • Điện trở đầu cuối của đường dây là 120Ω.
Hình 2. Dây cáp bus CAN
  • Node (Statation): là một thành phần kết nối đến bus CAN thông quan 2 dây CAN_H và CAN_L. Node này là cá bo mạch hoặc module điều khiển.
Hình 3.1. Minh họa một mạng CAN
Hình 3.2. Minh họa một mạng CAN trong xe hơi sử dụng các chip Motorola (nguồn: www.mi.fu-berlin.de)

2. Cấu trúc Node hay Station

Mỗi một nút CAN yêu cầu phải có một ‘vi điều khiển’ (microcontroller - MCU) kết nối với một ‘bộ điều khiển CAN’ (CAN – Controller). Bộ điều khiển CAN sẽ được kết nối với ‘bộ chuyển đổi CAN’, hay bộ truyền-nhận hoặc bộ thu-phát, (CAN – Transceiver) thông qua một đường ra dữ liệu nối tiếp (Tx) và một đường vào dữ liệu nối tiếp (Rx). Đường Vref là điện áp ra tham khảo cung cấp một mức điện áp danh định bằng 0.5×Vcc = 0.5×5 = 2.5V.
Hình 4. Minh họa một Node gồm bo mạch thực thị giao thức CAN, bo MCU, bo nút nhấn và bo LED
  • Microcontroller - MCU thực thi các chức năng chính, điều khiển chính của một Node. Thực hiện cấu hình hoạt động cho CAN controller, phân phối dữ liệu cần truyền đến CAN controller, lấy dữ liệu nhận từ CAN controller để sử dụng cho hoạt động của Node.
  • CAN controller thực thi các xử lý về truyền nhận dữ liệu, báo lỗi, tính toán thời gian bit, ... theo chuẩn CAN quy định; phát dữ liệu cần truyền dạng số (theo mức logic 0/1) ra chân TX; nhận dữ liện dạng số qua chân RX. CAN controller có thể là một chip (vi mạch) độc lập, ví dụ như MCP2515 của Microchip, hoặc là một ngoại vi được tích hợp bên trong vi điều khiển, ví dụ như LPC2290 của NXP Semiconductors
  • CAN transceiver hoạt động như bộ chuyển đổi từ tín hiệu số (mức logic 0/1) trên đường TX thành tín hiệu tương tự trên bus CAN và ngược lại, chuyển đổi từ tín hiệu tương tự trên bus CAN (CAN_H và CAN_L) thành tín hiệu số trên đường RX

3. Tín hiệu trên bus CAN

Như đã trình bày, CAN transceiver chuyển đổi qua lại giữa tín hiệu số (giao tiếp với CAN controller) và tương tự (giao tiếp với bus CAN). Trong giao thức CAN,
  • Mức dominant, nghĩa là "mức trội" hay "mức chiếm ưu thế", là mức logic 0
  • Mức recessive, nghĩa là "mức lặn" hay "mức ẩn", là mức 1
Điều này vì bus CAN hoạt động theo cơ chế AND-wire, khi một logic 0 và một logic cùng được truyền từ CAN controller qua CAN transceiver đến bus CAN thì trên bus CAN sẽ thể hiện mức điện áp biểu diễn cho bit 0 (bit trội).

Mức áp trên bus CAN trong tầm từ -2V trên CAN_L, đến +7V trên CAN_H nhưng được sử dụng phổ biến là 0V trên CAN_L và +5V trên CAN_H khi dùng ở tốc tộ cao 1Mbit/s. Đường CAN_H có mức áp +5V khi ở trạng thái nghỉ và sẽ sụt áp còn +3.5V khi đang hoạt động. Lúc này, mức +3.5V được quy định là mức ‘dominant’ và +2.5V được quy định là mức ‘recessive’.

Đường CAN_L có mức áp 0V khi ở trạng thái nghỉ và sẽ tăng lên +1.5V khi hoạt động. Lúc này, mức +1.5V được quy định là mức ‘dominant’ và +2.5V được quy định là mức ‘recessive’.
Hình 5. Mức điện áp trên đường CAN_H và CAN_L khi truyền dữ liệu
Trạng thái bus dựa vào sự sai lệch áp giữa CAN_H và CAN_L. Cụ thể, nếu sai lệch điện áp thấp hơn điệp áp ngưỡng tối thiểu thì đó là mức recessive (mức 1), thường dưới +0.5V. Nếu sai lệch điện áp cao hơn điện áp ngưỡng tối thiểu thì đó là mức dominant (mức 0), thường trên +0.9V. Nếu sai lệch áp rơi vào khoảng từ 0.5V đến ).9V thì không thể phân biệt được mức logic và gây sai dữ liệu.
Hình 6. Xác định mức logic thông qua sai lệch áp giữa CAN_H và CAN_L
Hình 7. Một phần cấu trúc của chip CAN transceiver gồm bộ lái bus Driver và bộ nhận từ bus Receiver
Hình 8. Minh họa một dạng sóng đo đạc thực tế trên ngõ vào Driver, ngõ ra Receiver và CAN bus
Lịch sử cập nhật:
1) 2019.10.18 - Chỉnh sửa link hình minh họa