• 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ứ 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

[CANFD][Controller Area Network][Bài 3] CANFD - Sự khác nhau giữa CAN FD và CAN 2.0 - phần 3

Tham khảo: CAN with Flexible Data-Rate Specification Version 1.0 (released April 17th, 2012) by BOSCH

Nội dung phần này chỉ nói về điểm khác biệt của CAN FD so với CAN Specification 2.0 (CAN 2.0). Bạn đọc hãy tham khảo về CAN2.0 trước khi đọc bài này.

1. Luật chèn Bit (Stuffing)

Khác với CAN 2.0, luật chèn bit áp dụng cho các vùng từ SOF đến CRC Sequence. Định dạng khung truyền CAN FD có sự thay đổi về luật chèn bit cho vùng CRC Sequence. Các bit được chèn thêm ở vùng này chỉ nằm ở các vị trí cố định.

Một bit cố định được chèn ở trước bit đầu tiên của CRC Sequence cho dù các bit cuối cùng của vùng trước đó chưa đáp ứng đúng theo điều kiện của luật chèn bit, nghĩa là chưa xuất hiện 5 bit cùng mức logic liên tiếp nhau. Sau đó, mỗi bit chèn sẽ được thêm sau mỗi nhóm 4 bit của chuỗi CRC Sequence. Giá trị của bit chèn là đảo của giá trị bit đứng ngay trước nó.

Bộ nhận sẽ bỏ qua các bit chèn khi nhận CRC. Bộ nhận sẽ phát hiện ra lỗi chèn bit (Stuff Error) nếu phát hiện ra bit được chèn có giá trị giống giá trị bit ngay trước nó. Số bit chèn cố định trong CRC định dạng CAN FD bằng với số tối đa của các bit chèn khi áp dụng luật chèn bit của định dạng CAN (5 bit cùng mức thì chèn 1 bit đảo).

Hình 1. So sánh số bit chèn trên CRC15 giữa CAN FD và một trường hợp chèn tối đa theo luật chèn bit CAN 2.0

2. Các loại lỗi

Các loại lỗi được phát hiện trong CAN FD tương tự như CAN 2.0 nhưng lỗi định dạng (Form Error) bổ sung thêm lỗi khi phát hiện lỗi ở bit chèn cố định của vùng CRC Sequence.

3. Quy định về thời gian bit

Do các khung truyền định dạng CAN FD có thể hỗ trợ 2 tốc độ bit khác nhau, 1 cho pha phân xử (Arbitration phase) và 1 cho pha dữ liệu (Data phase), nên trong phần cứng CAN controller sẽ có 2 bộ thanh ghi cấu hình về thời gian bit cho 2 tốc độ này.

Tương tự CAN 2.0, thời gian của một bit vẫn luôn gồm 4 đoạn là Sync_seg, Prop_seg, Phase_seg1 và Phase_seg2. Điểm lấy mẫu (sample point) vẫn ở cuối Phase_seg1. Nhưng vì CAN FD hỗ trợ 2 tốc độ bit nên định nghĩa thêm thuật ngữ để phân biệt 2 tốc độ bit này.

Thời gian bit danh định (Nominal Bit Time) là khái niệm dành cho pha phân xử. Đối với pha dữ liệu thì thời gian lý tưởng của 1 bit gọi là thời gian bit dữ liệu (Data Bit Time).

TIME QUANTUM(N) = m(N) * MINIMUM TIME QUANTUM

TIME QUANTUM(D) = m(D) * MINIMUM TIME QUANTUM
  • MINIMUM TIME QUANTUM (TQ tối thiểu): là giá trị thời gian tối thiểu được chia từ xung clock cấp cho CAN controller
  • m: là giá trị của bộ đếm số TQ tối thiểu
  • TQ: Thời gian dùng để tính độ dài 1 bit

Như vậy, độ dài đơn vị thời gian TQ của pha phân xử TQ(N) và pha dữ liệu TQ(D) có thể khác hoặc bằng nhau.

Tương tự, tốc độ bit danh định (Norminal Bit Rate) dùng để nói về tốc độ bit của pha phân xử ở CAN FD còn đối với pha dữ liệu, tốc độ này được gọi là tốc độ bit dữ liệu (Data Bit Rate).

Đối với tốc độ bit danh định, độ dài các đoạn thời gian của một bit được quy định như sau:

  • Sync_seg:     1 TQ(N)
  • Prop_seg:     1 đến 32 TQ(N)
  • Phase_seg1: 1 đến 32 TQ(N)
  • Phase_seg2:  max(Phase_seg1, Thời gian lan truyền thông tin IPT)
Đối với tốc độ bit dữ liệu, độ dài các đoạn thời gian của 1 bit giống quy định của chuẩn CAN 2.0 như sau:
  • Sync_seg:     1 TQ(D)
  • Prop_seg:     1 đến 8 TQ(D)
  • Phase_seg1: 1 đến 8 TQ(D)
  • Phase_seg2:  max(Phase_seg1, Thời gian lan truyền thông tin IPT)


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

[CANFD][Controller Area Network][Bài 2] CANFD - Sự khác nhau giữa CAN FD và CAN 2.0 - phần 2

Tham khảo: CAN with Flexible Data-Rate Specification Version 1.0 (released April 17th, 2012) by BOSCH

Nội dung phần này chỉ nói về điểm khác biệt của CAN FD so với CAN Specification 2.0 (CAN 2.0). Bạn đọc hãy tham khảo về CAN2.0 trước khi đọc bài này.

1. Tính nhất quán của dữ liệu
Cấu trúc phân lớp của CAN FD theo mô hình tham khảo OSI.
Hình 1. Cấu trúc phân lớp của CAN FD trong mô hình tham khảo OSI

Tính nhất quán của dữ liệu được thể hiện qua việc dữ liệu được đảm bảo đồng nhất khi truyền qua các lớp này. Đồng nhất (consistency) được hiểu là dữ liệu được phát đi là dữ liệu đúng, đủ và kịp thời như mong muốn.

Như đã trình bày ở các bài cấu trúc phân lớp của CAN, CAN controller là thành phần sẽ thực hiện các xử lý ở lớp LLC (Logical Link Control) và lớp MAC (Medium Access Control).

Trong một Node, các thông điệp để truyền được chuẩn bị trước bởi host, host ở đây là đơn vị điều khiển chính của Node, có thể là CPU, FPGA,... Các thông điệp này được chuyển đến lớp phụ LLC (Logical Link Control) thông qua giao tiếp giữa host và thành phần CAN controller để đến lớp phụ MAC (Medium Access Control). Lớp MAC chịu trách nhiệm tạo ra khung thông điệp theo đúng chuẩn. Nếu host và CAN controller là 2 chip độc lập thì giao tiếp giữa chúng có thể là SPI, UART, parallel port,… Nếu CAN controller được tích hợp trong một MCU thì giao tiếp giữa chúng là giao tiếp nội thông qua bus hệ thống như APB, AHB, AXI, …

Các thông điệp có thể được lưu trữ trong một bộ nhớ được chia sẻ (shared memory), ví dụ như RAM. Việc truy xuất dữ liệu từ RAM có thể làm sai dữ liệu nên cần có cơ chế để đảm bảo tính đúng đắn của dữ liệu cần truyền lấy từ RAM. Tính đồng nhất của các thông điệp được truyền lấy từ một bộ nhớ được chia sẻ phải được đảm bảo bởi ít nhất bằng một trong 2 cách sau:
  • Lớp MAC sẽ lưu trữ toàn bộ thông điệp được truyền đi trong một bộ đệm tạm trước khi bắt đầu truyền. Nghĩa là, dữ liệu đúng đã được chứa đầy đủ tại lớp MAC sẵn sàng cho việc truyền.
  • Lớp LLC sẽ kiểm tra các lỗi dữ liệu trong khi thông điệp được gửi đến lớp MAC. Nếu lỗi xuất hiện, thông điệp sẽ không được truyền. Nếu một lỗi được phát hiện khi việc truyền đã bắt đầu thì Node phải được chuyển sang chế độ giám sát bus (Bus Monitoring Mode) và các Node nhận sẽ không thể thấy được một thông điệp hợp lệ để nhận.

Lỗi dữ liệu được nhắc đến ở bên trên có thể là lỗi parity khi kiểm tra dữ liệu đọc ra từ RAM, lỗi không cung cấp dữ liệu kịp thời cho CAN controller xử lý, hoặc một phần dữ liệu đã được cập nhật mới trong khi đang truyền, …

Có thể thấy, CAN FD làm rõ hơn vấn đề thực thi ở phần cứng CAN controller với những quy định cụ thể về kiểm soát tính đồng nhất khi truyền dữ liệu.

2. Các trạng thái hoạt động

Một Node CAN FD có bốn trạng thái hoạt động là Integrating (trạng thái chờ tích hợp), Idle (Rảnh), Receiver (Nhận) và Transmitter (Truyền). Việc quy định về bốn trạng thái hoạt động không xung đột với chuẩn CAN 2.0 mà chỉ làm rõ hơn hoạt động cơ bản của một Node.

Integrating là trạng thái chờ tích hợp. Việc gọi là chờ tích hợp vì đây là trạng thái mà một Node chờ để phát hiện chuỗi có 11 bit recessive liên tiếp sau khi Node này được khởi động hoặc Node này đang trong quá trình khôi phục hoạt động từ bus-off sang Idle.

Sau khi một Node mới được khởi động, hoặc khởi động lại (reset) hoặc được cấu hình bởi host để khơi động lạ thì nó không tham gia ngay vào các hoạt động trên mạng mà cần thời gian để đồng bộ với các hoạt động trên mạng, Node phải chờ sai khi phát hiện được một chuỗi 11 bit recessive liên tiếp thì mới bắt đầu tham gia vào hoạt động của mạng. Quy định 11 bit recessive liên tiếp đảm bảo lúc này bus CAN đã IDLE. Xem lại cấu trúc các khung của CAN, phần khung có kết thúc dài nhất là khung báo lỗi hoặc báo quá tải với 8 bit recessive. Trường hợp xấu nhất là ngay sau đó là khoảng liên khung với độ dài phần Intermission là 3 bit recessive. Như vậy, việc chờ 11 bit recessive sẽ đảm bảo bus đang IDLE. Chú ý, phần Suspend Transmission của khoảng liên khung chỉ dành cho bộ truyền đang trong trạng thái lỗi bị động nên một Node mới khởi động.
Hình 2. Giải thích trường hợp Node phải chờ 11 bit recessive trước khi tham gia hoạt động của bus

Một Node đang hoạt động trên bus khi rơi vào trạng thái bus-off thì phải giám sát bus cho đến khi phát hiện được 128 chuỗi 11 bit recessive thì mới được tham gia trở lại vào hoạt động của bus.

Idle là trạng thái rảnh. Node trong trạng thái này sẵn sàng truyền hoặc nhận SOF. Node sẽ chuyển từ trạng thái này sang trạng thái là bộ truyền (Transmitter) hoặc nhận (Receiver).

Receiver là trạng thái Node phát hiện hoạt động trên bus CAN ví dụ như SOF nhưng nó không đang truyền bất cứ thông điệp nào.

Transmitter là trạng thái mà Node khởi tạo truyền thông điệp trên bus. Node sẽ giữ trạng thái này cho đến khi nó thua phân xử hoặc đến khi bus Idle.
Hình 3. Các trạng thái hoạt động cơ bản của một Node CAN FD


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

Thứ Ba, 27 tháng 6, 2017

[CANFD][Controller Area Network][Bài 1] CANFD - Sự khác nhau giữa CAN FD và CAN 2.0 - phần 1

Tham khảo: CAN with Flexible Data-Rate Specification Version 1.0 (released April 17th, 2012) by BOSCH

Nội dung phần này chỉ nói về điểm khác biệt của CAN FD so với CAN Specification 2.0 (CAN 2.0). Bạn đọc hãy tham khảo về CAN2.0 trước khi đọc bài này.

1. CAN FD là gì?

CAN FD như tên gọi là giao thức CAN với tốc độ dữ liệu linh động. Đây có thể xem là một giao thức mở rộng của giao thức CAN.

Việc ngày càng nhiều ứng dụng sử dụng các giao thức truyền thông nối tiếp dẫn đến nhu cầu bằng thông sử dụng trong giao thức CAN ngày càng tăng. Giao thức CAN truyền thống (CAN Specification 2.0) khó đáp ứng được trong một số ứng dụng nhất định. Để tăng khả năng sử dụng của giao thức CAN, CAN FD ra đời cho phép tốc độ truyền dữ cao hơn 1Mbit/s và số byte dữ liệu nhiều hơn 8 byte trong một khung truyền dữ liệu.

CAN FD sử dụng chung lớp vật lý với giao thức CAN quy định trong CAN Specification 2.0 (CAN 2.0).

Định dạng khung truyền của CAN FD khác với CAN 2.0. Nó có thêm 2 bit điều khiển mới. Một bit cho phép định dạng khung truyền với mã độ dài dữ liệu (DLC) mới và một bit cho phép tùy chọn chuyển sang tốc độ bit nhanh hơn sau khi sự phân xử đã được thực hiện xong.

Các đa thức CRC mới cùng được giới thiệu để đảm bảo cho các khung CAN FD dài hơn với khoảng cách Hamming giống như giao thức CAN đã chứng minh.

Định dạng khung CAN FD được định nghĩa để có thể cùng hoạt động với định dạng CAN 2.0 trong cùng một mạng. Giao thức CAN 2.0 vẫn hợp lệ và không có bất cứ điều chỉnh nào như một giao thức độc lập. Việc hai giao thức CAN 2.0 và CAN FD có thể cùng tồn tại trong một mạng được đảm bảo bởi yêu cầu là một thành phần CAN FD được xây dựng buộc phải tương thích với cả CAN FD và CAN 2.0.

Bên cạnh đó, để tương thích với CAN FD thì một thành phần CAN FD được xây dựng phải tương thích với mô tả của chuẩn CAN FD và với ISO 11898-1.

Chú ý: CAN FD có thể giao tiếp với CAN 2.0 miễn là không sử dụng định dạng khung của CAN FD. Nghĩa là, sử dụng định dạng khung của CAN 2.0.

2. Định dạng khung truyền

Chuẩn CAN FD quy định 4 định dạng khung truyền là:

  • (1) Định dạng CAN cơ bản (CAN Base Format): 11 bit ID + tốc độ bit hằng
  • (2) Định dạng CAN mở rộng (CAN Extended Format): 29 bit ID + tốc độ bit hằng
  • (3) Định dạng CAN FD cơ bản (CAN FD Base Format): 11 bit ID + tốc độ bit kép
  • (4) Định dạng CAN FD mở rộng (CAN FD Extended Format): 29 bit ID + tốc độ bit kép
Từ đây về sau, khi nói đến định dạng CAN thì đó là CAN 2.0. 

Tốc độ bit hằng tốc độ bit không thay đổi trong suốt quá trình truyền thông điệp. Tốc độ bit kép là trong một khung truyền Node CAN có thể truyền 2 tốc độ bit khác nhau.

Định dạng (1) và (2) như định dạng chuẩn (Standard Format) và định dạng mở rộng (Extended Format) của CAN 2.0.

3. Loại khung truyền

CAN FD có 4 loại khung truyền như CAN 2.0 là khung dữ liệu, khung yêu cầu, khung báo lỗi và khung báo quá tải. CAN FD khác CAN 2.0 ở các điểm sau:

Ngoài 2 định dạng "CAN cơ bản" và "CAN mở rộng" như CAN 2.0, khung dữ liệu có thêm 2 dạng:

  • Khung dữ liệu dạng CAN FD cơ bản
  • Khung dữ liệu dạng CAN FD mở rộng
Khung yêu cầu chỉ có hai định dạng như CAN 2.0 chứ không có định dạng CAN FD cơ bản hay CAN FD mở rộng.

Khung báo quá tải ngoài chức năng tạo thêm trễ giữa các khugn dữ liệu và khung yêu cầu thì còn thêm chức năng "đồng bộ sự phát hiện trạng thái bus rảng - IDLE".

4. Cấu tạo khung dữ liệu

Cấu tạo của loại khung này tạo nên sự khác biệt giữa CAN FD và CAN 2.0. Khác biệt ở đây được hiểu là sự mở rộng của CAN FD so với CAN 2.0 chứ không phải đối lập.

4.1 Khung dữ liệu

a) Vùng phân xử:

Vị trí bit RTR (Remote Transmission Request) dùng để xác định khung dữ liệu (dominant) hoặc khung yêu cầu (recessive) chỉ dành cho định dạng CAN cơ bản, nó tương ứng với định dạng khung chuẩn - Standard Format của CAN 2.0.

Với CAN FD cơ bản, bit RTR chuyển thành bit r1 và luôn là bit dominant. Điều này tương ứng với việc định dạng CAN FD chỉ dành cho khung dữ liệu, không dành cho khung yêu cầu.
b) Vùng điều khiển:

Vùng điều khiển của định dạng CAN FD có cấu tạo rất khác so với CAN 2.0

CAN FD có thêm 3 bit mới là:
  • EDL (Extended Data Length) là bit recessive. Đây là bit cho phép độ dài dữ liệu mở rộng. Bit này dùng để phân bit dữ định dạng khung CAN 2.0 và CAN FD.
  • BRS (Baud Rate Switch) là bit dùng để quyết định việc thay đổi tốc độ bit trong định dạng CAN FD. Nếu bit này là recessive thì sau "pha phân xử" (Arbitration Phase), tốc độ bit hiện tại sẽ được chuyển thành một tốc độ bit khác đã được cấu hình trước, tốc độ bit mới được dùng cho pha dữ liệu (Data Phase). Chú ý, ở CAN FD, có thêm 2 khái niệm mới là pha phân xử và pha dữ liệu. Hai khái niệm này khác với hai khái niệm "vùng phần xử" (Arbitration Field) và vùng dữ liệu (Data Field).
  • ESI (Error State Indicator) là cờ chỉ trạng thái lỗi được truyền là dominant nếu Node đang trong trạng thái tích cực với lỗi (Active Error) và truyền là recessive nếu Node đang trong trạng thái lỗi bị động (Passive Error)
Hình 1. So sánh giữa vùng phân xử và vùng điều khiển trong khung dữ liệu của CAN 2.0 định dạng cơ bản và CAN FD định dạng cơ bản
Hình 2. So sánh giữa vùng phân xử và vùng điều khiển trong khung dữ liệu của CAN 2.0 định dạng mở rộng và CAN FD định dạng mở rộng

Với bit SRR, CAN FD cho phép Node là bộ nhận cho phép bit SRR là dominant. Điều này không được nhắc đến trong CAN 2.0.
Bốn bit độ dài dữ liệu DLC trong CAN FD được mở rộng thêm. Trong khi CAN 2.0 chỉ sử dụng các giá trị từ 0 đến 8 tương ứng từ 0 đến 8 byte dữ liệu, DLC lớn hơn 8 cũng được xem như là 8 byte, thì CAN FD sử dụng các giá trị từ 9 đến 15 để tăng số byte vùng dữ liệu lên đến 64 byte cho phép truyền được nhiều dữ liệu hơn trong 1 lần phát.
Hình 2. Bảng mã DLC của CAN 2.0 và CAN FD
c) Vùng dữ liệu
Định dạng CAN FD cho phép tối đa có thể lên đến 64 byte.

d) Vùng CRC:

Vì độ dài vùng dữ liệu tăng lên nên tương ứng vùng CRC cũng được điều chỉnh lại cho phù hợp

Vùng CRC không có độ dài cố định như CAN 2.0 mà thay đổi tùy theo độ dài vùng dữ liệu. Cụ thể:
  • Khung theo định dạng CAN sẽ dùng CRC_15 có đa thức sinh như chuẩn CAN 2.0 => độ dài CRC SEQUENCE là 15 bit
  • Khung theo định dạng CAN FD có độ dài từ 16 byte trở xuống sử dụng CRC_17 => độ dài CRC SEQUENCE là 17 bit
  • Khung theo định dạng CSN FD có độ dài trên 16 byte sẽ sử dụng CRC_21 => độ dài CRC SEQUENCE là 21 bit
Hình 3. Các đa thức dinh trong chuẩn CAN FD
Mỗi đa thức sinh đều cho khoảng cách mã Hamming HD = 6.

Tại thời điểm bắt đầu của một khung, tất cả các Node đều phải tính cả 3 loại CRC cùng lúc, kể cả bộ truyền dữ liệu. Một Node thắng phân xử sẽ chọn CRC phù hợp với cấu hình  bit EDL và độ dài dữ liệu DLC của khung truyền. Các bộ nhận cũng sẽ dựa trên thông tin của khung truyền để chọn và kiểm tra CRC phù hợp.

Trong định dạng CAN FD, CRC được tính cho chuỗi bit đã được áp dụng luật chèn bit. Đây là điểm khác biệt so với định dạng CAN vì CRC của định dạng này không bao gồm các bit chèn.

Đoạn mã giả minh họa việc tính CRC như sau:
CRC_RG = 0; // initialize shift register
REPEAT
CRCNXT = NXTBIT EXOR CRC_RG(nCRC-1);
CRC_RG(nCRC-1:1) = CRC_RG(nCRC-2:0); // shift left by 1 position
CRC_RG(0) = 0;
IF CRCNXT THEN
CRC_RG(nCRC-1:0) = CRC_RG(nCRC-1:0) EXOR (CRC polynomial);
ENDIF
UNTIL (CRC SEQUENCE starts or there is an ERROR condition)
CRC Delimiter chỉ là 1 bit recessive đối với định dạng CAN nhưng nó có thể là 1 hoặc 2 bit recessive trong định dạng CAN FD. Cụ thể, trong định dạng CAN FD, bộ truyền chỉ truyền 1 bit recessive nhưng phải chấp nhận có 2 bit recessive trước khi phát hiện cạnh từ recessive chuyển sang dominant của ACK SLOT. Một bộ nhận sẽ vẫn gửi ACK của nó sau bit recessive đầu tiên của CRC Delimiter.
Hình 4. vùng CRC

Chú ý: CAN FD controller, bộ điều khiển thực hiện giao thức CAN FD, chuyển từ pha dữ liệu trở lại pha phân xử khi đên điểm lấy mẫu bit đầu tiên của CRC Delimiter

e) Vùng ACK
Hình 5. Vùng ACK
Định dạng CAN FD chấp nhận vùng ACK SLOT có độ dài tói đa 2 bit để bù sự dịch pha giữa các bộ nhận trong khi định dạng CAN chỉ chấp nhận 1 bit ACK và coi bit ACK thứ 2 là một lỗi định dạng.

ACK Delimiter cũng được tăng lên 2 bit recessive trong định dạng CAN FD.

5. Pha phân xử và pha dữ liệu

Đây là hai khái niệm mới trong CAN FD. Trong đó:
  • Pha dữ liệu (Data Phase) được tính từ điểm lấy mẫu được bit BRS (Bit Rate Switch) đến điểm lấy mẫu được bit đầu tiên của CRC Delimiter. Đây là vùng sẽ được chuyển sang tốc độ bit khác nếu bit BRS là recessive
  • Pha phân xử (Arbitration Phase) là các vùng còn lại, bao gồm từ SÒ đến điểm lấy mẫu bit BRS và từ điểm lấy mẫu bit đầu tiên của CRC Delimiter đến kết thúc khung.
*Xem lại các hình mình họa phía trên để hình dung rõ hơn về các pha này

6. Cấu tạo khung yêu cầu

 Tương tự CAN 2.0

7. Cấu tạo khung báo lỗi và báo quá tải

Tương tự CAN 2.0

8. Cấu tạo khoảng liên khung

Tương tự CAN 2.0

(Các điểm khác biệt khác sẽ được trình bày tiếp trong phần 2)


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