Tối Sáng
Hình 1. FlexRay là gì?

Tìm hiểu FlexRay – Giao thức truyền thông thế hệ mới cho xe hơi Để lại bình luận

Hình 1. FlexRay là gì?
Hình 1. FlexRay là gì?

Trong các hệ thống nhúng ô tô hiện đại, nhu cầu về một giao thức truyền thông nhanh, ổn định, và đáng tin cậy ngày càng trở nên cấp thiết. Giao thức FlexRay được thiết kế để đáp ứng những yêu cầu này, đặc biệt là trong các hệ thống an toàn cao như hệ thống lái điện tử (Steer-by-Wire), phanh điện tử (Brake-by-Wire), và hệ thống treo chủ động.

Xem thêm: Controller Area Network (CAN) bus – Hệ Thần Kinh Của Ô Tô Hiện Đại

Đặc điểm chính của FlexRay

Truyền dữ liệu đồng bộ và không đồng bộ:
• Đồng bộ (Synchronous): Đảm bảo độ trễ cố định, phù hợp với các hệ thống yêu cầu thời gian thực chính xác.
• Không đồng bộ (Asynchronous): Cho phép truyền dữ liệu linh hoạt theo mức độ ưu tiên.

Độ trễ và dao động tín hiệu (jitter) thấp: Giúp duy trì sự ổn định của hệ thống, đặc biệt quan trọng trong các ứng dụng an toàn.

Cơ chế ưu tiên khung dữ liệu: Khung dữ liệu trong chế độ không đồng bộ có thể được ưu tiên dựa trên mức quan trọng, tối ưu hóa băng thông mạng.

Đồng bộ xung nhịp đa master (Multi-master Clock Synchronization): Không phụ thuộc vào một master duy nhất như CAN, giúp hệ thống linh hoạt hơn khi có lỗi xảy ra.

Cơ chế phát hiện và báo lỗi mạnh mẽ: Hỗ trợ phát hiện lỗi, cô lập lỗi ngay ở lớp vật lý thông qua thiết bị Bus Guardian, giúp tăng cường độ tin cậy.

Khả năng chịu lỗi mở rộng (Scalable Fault Tolerance): Có thể hoạt động ở nhiều mức độ dự phòng khác nhau, từ mạng đơn kênh (Single Channel) đến mạng dự phòng kép (Dual Channel) để tăng độ an toàn.

Network topology

Trong hệ thống FlexRay, các thiết bị (node) có thể kết nối với nhau theo nhiều cách khác nhau để truyền dữ liệu. Các cách kết nối này gọi là “topology” (mô hình mạng).

1. Mạng Bus thụ động (Passive Bus Topology) – Dùng chung một đường truyền

Tất cả các node được kết nối vào một đường truyền chung (bus).
Một node gửi dữ liệu thì tất cả các node khác có thể nhận được.
Có thể dùng một hoặc hai kênh truyền (Channel A, Channel B) để tăng độ tin cậy.

Ưu điểm: Linh hoạt, tận dụng được ưu điểm của cả hai mô hình.
Nhược điểm: Cần thiết kế kỹ lưỡng để đảm bảo không bị xung đột dữ liệu.

Hình 2. Mạng Bus thụ động
Hình 2. Mạng Bus thụ động

2. Mạng sao chủ động (Active Star Topology)

Các thiết bị (node) không kết nối trực tiếp với nhau mà được liên kết thông qua một hoặc nhiều bộ điều khiển trung tâm (Star Coupler).
Bộ điều khiển sao nhận dữ liệu từ một node rồi chuyển tiếp đến các node khác.
Có thể có một hoặc hai kênh truyền dữ liệu (Channel A, Channel B) để tăng độ tin cậy.

Mạng sao đơn giản (Single Star Topology): Một bộ điều khiển sao kết nối tất cả các node trong hệ thống.
Mạng sao có dự phòng (Redundant Star Topology): Dùng hai bộ điều khiển sao (Star Couplers) để tăng độ tin cậy. Nếu một bộ bị lỗi, hệ thống vẫn có thể hoạt động nhờ bộ còn lại.

Hình 3. Mạng sao có dự phòng
Hình 3. Mạng sao có dự phòng

Mạng sao nối tầng (Cascaded Star Topology): Nhiều bộ điều khiển sao được kết nối với nhau, tạo thành nhiều tầng kết nối.

Hình 4. Mạng sao nối tầng
Hình 4. Mạng sao nối tầng

Ưu điểm:
• Độ tin cậy cao: Nếu một node bị hỏng, các node khác vẫn hoạt động bình thường.
• Tốc độ cao: Mỗi node có kết nối riêng với Star Coupler, không bị ảnh hưởng bởi lưu lượng từ các node khác như mạng bus.
• Dễ mở rộng: Có thể thêm các node mới bằng cách kết nối với Star Coupler.

Nhược điểm:
• Chi phí cao hơn: Cần có bộ điều khiển sao để quản lý dữ liệu.
• Phức tạp hơn: Phải thiết kế sao cho tín hiệu truyền đi hiệu quả mà không gây nhiễu.

3. Mạng lai giữa mạng bus thụ động và mạng sao chủ động

a. Mô hình lai giữa mạng sao và bus là gì?

Thay vì chỉ sử dụng mạng bus hoặc mạng sao, hệ thống FlexRay có thể kết hợp cả hai mô hình để tối ưu hóa hiệu suất.
Một số node kết nối với Star Coupler (mạng sao), số khác kết nối với bus chung (mạng bus).
Điều này giúp tận dụng ưu điểm của cả hai loại kết nối.

b. Các loại mô hình lai trong FlexRay

Loại 1: Kết hợp bus và sao trong cùng một kênh
• Một số node (A, B, C, D) kết nối theo mạng sao với bộ điều khiển trung tâm (Star Coupler).
• Các node khác (E, F, G) kết nối theo mạng bus.
• Bus này cũng được kết nối với bộ điều khiển sao, giúp cả hai nhóm có thể liên lạc với nhau.

Hình 5. Kết hợp bus và sao trong cùng một kênh
Hình 5. Kết hợp bus và sao trong cùng một kênh

Loại 2: Kênh A dùng mạng bus, kênh B dùng mạng sao
• Kênh A kết nối tất cả các node bằng mạng bus.
• Kênh B sử dụng Star Coupler để quản lý dữ liệu.
• Điều này giúp tăng độ tin cậy vì nếu một kênh gặp lỗi, hệ thống vẫn có thể hoạt động qua kênh còn lại.

Hình 6. Kênh A dùng mạng bus, kênh B dùng mạng sao
Hình 6. Kênh A dùng mạng bus, kênh B dùng mạng sao

Protocol Operation Control (POC)

Protocol Operation Control (POC) là cơ chế điều khiển hoạt động của giao thức FlexRay. Nó giúp quản lý và điều phối các thành phần quan trọng của giao thức sao cho chúng hoạt động đồng bộ và hiệu quả.

1. Những thành phần cốt lõi của giao thức FlexRay

Giao thức FlexRay có bốn cơ chế quan trọng mà POC phải điều khiển:
• Mã hóa & Giải mã dữ liệu (Coding and Decoding) – Xử lý cách dữ liệu được mã hóa trước khi truyền và giải mã khi nhận.
• Kiểm soát truy cập kênh (Media Access Control – MAC) – Quy định cách các node truyền dữ liệu mà không bị xung đột.
• Xử lý khung dữ liệu và ký hiệu (Frame and Symbol Processing) – Kiểm tra và xử lý dữ liệu nhận được.
• Đồng bộ xung nhịp (Clock Synchronization) – Đảm bảo tất cả các node có cùng một “đồng hồ thời gian” để truyền dữ liệu chính xác.

Ngoài ra, giao diện điều khiển với máy chủ (Controller Host Interface – CHI) giúp thiết bị điều khiển (host) giao tiếp với các cơ chế trên một cách có tổ chức.

2. POC hoạt động như thế nào?

• POC giữ cho mọi thứ hoạt động đồng bộ.
• POC phản ứng với lệnh từ bộ điều khiển (host) và tình trạng thực tế của hệ thống để điều chỉnh cách thức hoạt động của FlexRay.
• Khi hệ thống cần thay đổi chế độ hoạt động (ví dụ: khởi động, đánh thức từ chế độ ngủ, tái kết nối), POC sẽ đồng bộ tất cả các cơ chế để quá trình này diễn ra mượt mà.

Communication controller (CC)

Hình 7. Các trạng thái nguồn của bộ điều khiển giao tiếp (Communication Controller - CC)
Hình 7. Các trạng thái nguồn của bộ điều khiển giao tiếp (Communication Controller – CC)

Communication Controller (CC) là bộ điều khiển giao tiếp trong FlexRay, chịu trách nhiệm xử lý dữ liệu truyền và nhận.

Bộ điều khiển giao tiếp (CC) cần có nguồn điện ổn định trước khi hệ thống POC (Protocol Operation Control) có thể hoạt động. Nếu mất điện hoặc nguồn không ổn định, POC sẽ ngừng hoạt động.

1. CC có mấy trạng thái nguồn?

Bộ điều khiển giao tiếp (CC) có 3 trạng thái nguồn chính:
• Power Off (Tắt nguồn) – Không có điện, CC không hoạt động.
• Reset (Khởi động lại) – CC có điện nhưng chưa hoạt động đầy đủ.
• POC Operational (Đang hoạt động) – CC hoạt động bình thường và điều khiển FlexRay.

2. Khi nào CC bật nguồn (Power On)?

Khi điện áp vượt quá ngưỡng PowerOnPowerThreshold, CC sẽ chuyển từ Power Off → Power On. Ban đầu, CC sẽ ở trạng thái Reset, chờ nguồn điện ổn định.

3. Khi nào CC chuyển từ Reset sang Hoạt động (POC Operational)?

CC chỉ hoạt động khi cả hai điều kiện sau được thỏa mãn:
• Điện áp đạt ít nhất POCOperationalPowerThreshold và duy trì trong thời gian POCOperationalTimeThreshold.
• Tín hiệu reset phần cứng không được kích hoạt.

4. Khi nào CC bị Reset lại?

CC sẽ chuyển từ POC Operational về Reset nếu:
• Điện áp xuống dưới ResetPowerThreshold nhưng vẫn cao hơn PowerOffPowerThreshold trong một khoảng thời gian dài ResetTimeThreshold.
• Tín hiệu reset phần cứng được kích hoạt.

5. Khi nào CC tắt hoàn toàn (Power Off)?

Khi điện áp giảm xuống dưới PowerOffPowerThreshold, CC sẽ tắt hoàn toàn.

Mối quan hệ giữa Protocol operation control với Controller host interface

Hình 8. Mối quan hệ giữa Protocol operation control với Controller host interface
Hình 8. Mối quan hệ giữa Protocol operation control với Controller host interface

POC là bộ điều khiển trung tâm, quản lý các cơ chế cốt lõi của hệ thống. Nó bắt đầu chạy khi hệ thống bật nguồn và dừng khi hệ thống tắt.
POC không nhận lệnh trực tiếp từ Host, mà phải thông qua CHI (một giao diện trung gian). CHI sẽ chuyển lệnh từ Host đến POC và gửi lại thông tin trạng thái từ POC về Host.
POC thay đổi trạng thái khi:
Hoàn thành một nhiệm vụ (ví dụ: khởi động xong thì chuyển sang trạng thái hoạt động).
Nhận lệnh từ Host (thông qua CHI).
Phát hiện lỗi (nếu lỗi nghiêm trọng, POC sẽ dừng ngay lập tức).
Các lệnh từ Host có cách xử lý khác nhau:
• Một số lệnh thực thi ngay.
• Một số lệnh chỉ thực thi khi kết thúc một chu kỳ truyền thông.
• Một số lệnh chỉ hợp lệ khi POC đang ở trạng thái nhất định.

Mã hóa và Giải mã trong FlexRay

Hình 9. Mối quan hệ giữa coding/decoding
Hình 9. Mối quan hệ giữa coding/decoding

1. Nguyên tắc cơ bản

Một nút có thể sử dụng hai kênh truyền dữ liệu độc lập: kênh A và kênh B.
Mã hóa tín hiệu sử dụng phương pháp NRZ (Non-Return-to-Zero), tức là tín hiệu luôn ở mức HIGH hoặc LOW trong toàn bộ thời gian của một bit.
Quá trình mã hóa và giải mã gồm ba phần chính:
• CODEC: Xử lý mã hóa và giải mã dữ liệu.
• BITSTRB: Đồng bộ hóa bit.
• WUPDEC: Giải mã tín hiệu đánh thức (Wakeup Pattern).

2. Mã hóa (Encoding) – Gửi dữ liệu

Hình 10. Frame encoding
Hình 10. Frame encoding

Khi một thiết bị muốn gửi dữ liệu, nó không thể gửi trực tiếp số 0 và 1 mà phải chuyển đổi thành tín hiệu điện.

Quá trình này gồm các bước sau:
• Bắt đầu truyền (TSS – Transmission Start Sequence) → Giữ mức tín hiệu LOW một lúc để thông báo bắt đầu.
• Bắt đầu khung (FSS – Frame Start Sequence) → Giữ mức HIGH để đồng bộ.
• Bắt đầu byte (BSS – Byte Start Sequence) → Đánh dấu byte mới bằng tín hiệu HIGH → LOW.
• Truyền dữ liệu → Gửi từng byte một, mỗi byte có BSS phía trước..
• Thêm CRC → Thêm mã kiểm tra lỗi.
• Kết thúc khung (FES – Frame End Sequence) → Giữ mức LOW → HIGH để báo kết thúc.
• Chuỗi kết thúc động (DTS – Dynamic Trailing Sequence) → (Chỉ trong chế độ động) Giúp căn chỉnh thời gian truyền.

3. Giải mã (Decoding) – Đọc dữ liệu

Khi hệ thống nhận dữ liệu, nó sẽ gửi một số tín hiệu để xử lý:

a. Tín hiệu “Idle End”
• Khi hệ thống phát hiện bit 0 xuất hiện sau một chuỗi bit 1, nó gửi tín hiệu Idle End.
• Điều này báo rằng giai đoạn nhàn rỗi đã kết thúc, chuẩn bị cho dữ liệu mới.

b. Tín hiệu “CE Start”
• Nếu hệ thống xác nhận đây thực sự là một Frame hợp lệ, nó gửi tín hiệu CE Start đến MAC và FSP.
• Đây là dấu hiệu để bắt đầu giải mã dữ liệu.

c. Tín hiệu “Potential Frame Start”
• Khi hệ thống nghi ngờ rằng một Frame mới sắp bắt đầu, nó gửi tín hiệu này đến CSS process.
• Giống như bạn thấy màn hình điện thoại sáng lên trước khi nhận tin nhắn.

d. Tín hiệu “Header Received”
• Sau khi nhận được phần đầu của Frame (header), hệ thống gửi tín hiệu này.
• Header chứa thông tin như ID người gửi, loại dữ liệu, v.v.
• Nó giúp hệ thống biết phải xử lý Frame như thế nào.

e. Tín hiệu “Frame Decoded”
• Sau khi giải mã toàn bộ Frame, hệ thống gửi tín hiệu này đến FSP process.
• Đây là dấu hiệu cho thấy Frame đã được xử lý thành công.

f. Tín hiệu “CHIRP”
• Một số hệ thống sử dụng tín hiệu CHIRP để báo hiệu rằng có dữ liệu mới trên đường truyền.
• Tương tự như chuông báo tin nhắn mới trên điện thoại!

Xem thêm: System Management Bus (SMBus) trong hệ thống nhúng

Frame format

Hình 11. Frame format của FlexRay
Hình 11. Frame format của FlexRay

1. FlexRay Header Segment

a. Reserved bit (1 bit) – Bit Dự trữ

Đây là bit được giữ lại cho mục đích sử dụng trong tương lai.
Khi gửi dữ liệu: bit này luôn được đặt là 0.
Khi nhận dữ liệu: bỏ qua, không cần xử lý.

b. Payload Preamble Indicator (1 bit) – Chỉ báo Tiền tố Dữ liệu

Xác định xem payload có chứa thông tin đặc biệt không.

  • Nếu khung thuộc static segment: bit này báo hiệu có chứa vector quản lý mạng.
  • Nếu khung thuộc dynamic segment: bit này báo hiệu có chứa Message ID.

0: Không có thông tin đặc biệt trong payload.
1: Có thông tin đặc biệt trong payload.

c. Null Frame Indicator (1 bit)

Báo hiệu khung có dữ liệu hợp lệ hay không.
0: Payload rỗng (tất cả bytes trong payload = 0).
1: Payload chứa dữ liệu hợp lệ.

d. Sync Frame Indicator (1 bit)

Báo hiệu đây có phải là khung đồng bộ hóa hệ thống không.
0: Không dùng cho đồng bộ hóa.
1: Các node nhận sẽ sử dụng khung này để đồng bộ hóa.

e. Startup Frame Indicator (1 bit)

Báo hiệu đây có phải là khung khởi động không.
0: Không phải khung khởi động.
1: Là khung khởi động (chỉ có coldstart nodes mới gửi loại khung này).
Nếu bit này = 1, thì Sync Frame Indicator cũng phải = 1.

f. Frame ID (11 bits)

Xác định vị trí (slot) mà khung sẽ được truyền.
Giá trị hợp lệ: 1 – 2047 (ID 0 là không hợp lệ).
Các bit được truyền theo thứ tự từ MSB → LSB.

g. Payload Length (7 bits)

Xác định độ dài của phần tải (payload).
Công thức: Payload length = Số byte Payload / 2.
Giá trị hợp lệ: 0 → cPayloadLengthMax.
Trong static segment, độ dài payload cố định.
Trong dynamic segment, độ dài payload có thể thay đổi theo từng chu kỳ.

h. Header CRC (11 bits)

Giá trị CRC để kiểm tra lỗi trong header. Được tính toán dựa trên các bit sau:
• Sync Frame Indicator (1 bit).
• Startup Frame Indicator (1 bit).
• Frame ID (11 bits).
• Payload Length (7 bits).
Được tính toán ngoại tuyến (không tính toán trong runtime).

i. Cycle Count (6 bits)

Bộ đếm chu kỳ, xác định chu kỳ hiện tại của node truyền.
Giá trị hợp lệ: 0 – 63.
Truyền từ MSB → LSB.

2. Payload Segment

a. Độ dài của Payload Segment

Chứa từ 0 đến 254 byte (0 – 127 từ 2 byte).
Do chiều dài payload được tính theo số từ 2 byte, nên tổng số byte trong payload luôn là số chẵn.
Byte trong payload được đánh số từ Data 0, Data 1, Data 2, … bắt đầu ngay sau header.

b. CRC (Kiểm tra lỗi)

FlexRay sử dụng CRC để phát hiện lỗi trong quá trình truyền tải:
• Với payload ≤ 248 byte: CRC có Hamming distance = 6, tức là có thể phát hiện tối đa 5 lỗi bit liên tiếp.
• Với payload > 248 byte: CRC có Hamming distance = 4, tức là có thể phát hiện tối đa 3 lỗi bit liên tiếp.

c. Payload trong Static Segment & Dynamic Segment

Static Segment – Có thể chứa Network Management Vector (NMVector):
• NMVector là 0 – 12 byte đầu tiên trong payload.
• Được sử dụng để quản lý mạng (chỉ có trong static segment).
• Tất cả các node trong cùng một cluster phải có cùng kích thước NMVector.

Hình 12. Payload Segment NMVector
Hình 12. Payload Segment NMVector

Dynamic Segment – Có thể chứa Message ID (16 bit):
• 2 byte đầu tiên của payload có thể là Message ID.
• Message ID giúp nhận diện nội dung dữ liệu để các node có thể lọc dữ liệu phù hợp.
• Không ảnh hưởng đến quá trình kiểm tra frame.

Hình 13. Payload Segment trong Dynamic
Hình 13. Payload Segment trong Dynamic

Xem thêm: Giao thức SDIO (Secure Digital Input Output) Là Gì?

d. Cách dữ liệu được truyền đi trong Payload Segment

Mỗi byte được truyền với bit cao nhất (MSB) trước.
Trong NMVector: Byte có trọng số thấp nhất được truyền trước.
Trong Message ID: Bit MSB của Message ID được đặt vào MSB của byte đầu tiên.

3. FlexRay Trailer Segment

a. Trailer Segment là gì?

Trailer Segment là phần cuối cùng của một khung (frame) FlexRay.
Nó chỉ chứa 1 trường duy nhất: Frame CRC (mã kiểm tra lỗi).
Frame CRC có độ dài 24 bit (3 byte).

b. Frame CRC dùng để làm gì?

Frame CRC là một mã kiểm tra lỗi giúp phát hiện dữ liệu bị sai trong quá trình truyền.
Nó được tính toán dựa trên cả Header Segment và Payload Segment của frame.
Nếu Frame CRC không khớp với giá trị tính toán tại bên nhận, frame đó sẽ bị coi là lỗi.

c. Cách tính Frame CRC

Sử dụng đa thức CRC sau:

Hình 14. Đa thức CRC
Hình 14. Đa thức CRC

Sử dụng giá trị khởi tạo (Initialization Vector) khác nhau cho từng kênh:
• Channel A: 0xFEDCBA
• Channel B: 0xABCDEF

Dữ liệu đầu vào để tính CRC:
• Bắt đầu từ bit dự trữ (reserved bit) trong Header Segment.
• Kết thúc tại bit ít quan trọng nhất (LSB) của byte cuối cùng trong Payload Segment.
• Truyền theo thứ tự mạng (Network Order): Bit quan trọng nhất (MSB) được truyền trước.

d. Cách Frame CRC được truyền đi

Frame CRC có 24 bit, được truyền từ bit quan trọng nhất (MSB) đến bit ít quan trọng nhất (LSB).

Media Access Control

Một trong những đặc điểm nổi bật của FlexRay là chu kỳ truyền thông (Communication Cycle), giúp điều phối và kiểm soát việc truyền tải dữ liệu giữa các nút mạng.

a. Hai phương thức truy cập trong FlexRay

Static TDMA (Time Division Multiple Access):
• Mỗi nút được gán một khe thời gian cố định để truyền dữ liệu.
• Không có tranh chấp vì các khe đã được phân bổ trước.
• Đảm bảo thời gian trễ thấp và độ tin cậy cao.
Dynamic Mini-Slotting:
• Các nút có thể tranh chấp quyền truyền dựa trên mức độ ưu tiên.
• Phù hợp với dữ liệu có tính linh hoạt như sự kiện đột xuất.
• Được quản lý bởi một cơ chế đặt trước (minislots) để tránh xung đột dữ liệu.

Xem thêm: Tổng quan về Inter-Integrated Circuit (I2C)

b. Cấu trúc của Chu Kỳ Truyền Thông
Hình 15. Cấu trúc chu kỳ truyền thông FlexRay
Hình 15. Cấu trúc chu kỳ truyền thông FlexRay
  • Static Segment (Phân đoạn tĩnh)
    • Sử dụng TDMA.
    • Gồm nhiều static slots, mỗi slot được gán cố định cho một nút.
  • Dynamic Segment (Phân đoạn động)
    • Sử dụng Mini-Slotting.
    • Gồm nhiều minislots, các nút có thể tranh chấp quyền gửi dữ liệu.
  • Symbol Window (Cửa sổ ký hiệu)
    • Gửi các tín hiệu điều khiển hoặc đồng bộ hóa hệ thống.
  • Network Idle Time (Thời gian chờ mạng)
    • Khoảng thời gian nghỉ giúp hệ thống đồng bộ hóa lại.
c. Hoạt động của Communication Cycle
  • Chu kỳ truyền thông được thực hiện định kỳ ngoại trừ trong giai đoạn khởi động.
  • Mỗi khung dữ liệu (frame) có một mã định danh (Frame Identifier) xác định:
    • Khung sẽ được gửi trong phân đoạn nào (Static/Dynamic).
    • Khung sẽ được gửi tại slot nào.
  • Mỗi Communication Cycle luôn có Static Segment, trong khi Dynamic Segment và Symbol Window có thể được cấu hình hoặc bỏ qua.

Xem thêm: Tổng quan về CAN Flexible Data-rate (CAN FD)

Frame and Symbol Processing (FSP)

Trong FlexRay, Frame and Symbol Processing (FSP) đóng vai trò như một tầng xử lý trung gian giữa việc giải mã khung/biểu tượng. và giao diện với bộ điều khiển chủ (Controller Host Interface – CHI). Nhiệm vụ chính của FSP là:
Kiểm tra thời gian: Đảm bảo các khung và biểu tượng được gửi/nhận đúng theo lịch trình TDMA (Time Division Multiple Access).
Kiểm tra cú pháp: Xác minh cấu trúc của các khung nhận được có hợp lệ hay không.
Kiểm tra ngữ nghĩa: Đảm bảo nội dung của khung dữ liệu có ý nghĩa và phù hợp với bối cảnh giao tiếp.

1. Cách FSP hoạt động

Mỗi nút trong mạng FlexRay cần hai quá trình FSP riêng biệt – một cho kênh A và một cho kênh B – để hỗ trợ truyền thông qua hai kênh độc lập. Quá trình này hoạt động trong ba chế độ chính:

  • STANDBY: Quá trình bị tạm dừng, không có hoạt động nào diễn ra.
  • STARTUP: Quá trình chạy nhưng không cập nhật dữ liệu vào CHI, thường dùng trong giai đoạn khởi động hệ thống.
  • GO: Chế độ hoạt động đầy đủ, dữ liệu được xử lý và cập nhật vào CHI.

Quá trình FSP phản ứng với các sự kiện quan trọng, bao gồm:

  • Sự kiện liên quan đến nhận dữ liệu: Ví dụ, bắt đầu một phần tử giao tiếp (CE start), khung được giải mã (frame decoded), hoặc lỗi giải mã (decoding error).
  • Sự kiện liên quan đến thời gian: Như bắt đầu phân đoạn tĩnh (static segment start), ranh giới slot (slot boundary), hay thời gian nghỉ mạng (NIT).

2. Trạng thái slot – “Bảng báo cáo” của FSP

Một trong những điểm thú vị của FSP là cách nó ghi lại trạng thái của mỗi slot giao tiếp qua cấu trúc T_SlotStatus. Cấu trúc này giống như một bảng báo cáo chi tiết, bao gồm:

  • Định danh kênh (Channel).
  • Giá trị bộ đếm slot và chu kỳ (SlotCount, CycleCount).
  • Các cờ (flag) báo hiệu: khung hợp lệ (ValidFrame), lỗi cú pháp (SyntaxError), lỗi nội dung (ContentError), vi phạm ranh giới (BViolation), xung đột truyền (TxConflict), v.v.
  • Phân đoạn mà slot thuộc về (Segment: STATIC, DYNAMIC, SW, NIT).

3. Quy trình FSP qua các trạng thái

Hình 16. Quy trình FSP qua các trạng thái
Hình 16. Quy trình FSP qua các trạng thái

FSP được mô tả như một cỗ máy trạng thái (state machine) với năm trạng thái chính:

  • FSP:standby: Chờ lệnh từ quá trình điều khiển giao thức.
  • FSP:wait for CE start: Chờ bắt đầu một phần tử giao tiếp hoặc truyền dữ liệu.
  • FSP:decoding in progress: Đang giải mã khung hoặc biểu tượng.
  • FSP:wait for CHIRP: Chờ điểm nhận diện kênh rảnh (Channel Idle Recognition Point).
  • FSP:wait for transmission end: Chờ kết thúc truyền dữ liệu.

Mỗi trạng thái có các chuyển đổi rõ ràng, ví dụ: từ “decoding in progress” sang “wait for CHIRP” khi khung được giải mã thành công, hoặc quay lại “wait for CE start” nếu có lỗi.

4. Kiểm tra khung trong các giai đoạn khác nhau

FSP không xử lý tất cả các khung giống nhau – nó áp dụng các quy tắc khác nhau tùy thuộc vào giai đoạn hoạt động:

  • Non-TDMA (khởi động): Khung phải là khung khởi động hợp lệ (valid startup frame) với frame ID hợp lệ, sync và startup indicator bật, và độ dài payload khớp với cấu hình toàn cục.
  • TDMA – Static Segment: Khung phải nằm trong một slot tĩnh, có frame ID và cycle count khớp với giá trị hiện tại.
  • TDMA – Dynamic Segment: Khung phải có sync và startup indicator tắt, frame ID hợp lệ, và null frame indicator bật nếu là khung rỗng.

Những kiểm tra này đảm bảo rằng dữ liệu không chỉ đúng về mặt kỹ thuật mà còn đúng về mặt thời gian – một yêu cầu quan trọng trong các ứng dụng an toàn như phanh ABS hay hệ thống lái.

Clock Synchronization

1. Tại sao đồng bộ hóa thời gian lại quan trọng?

Trong một hệ thống truyền thông phân tán như FlexRay, mỗi nút có bộ dao động (oscillator) riêng để đếm thời gian. Tuy nhiên, do ảnh hưởng của nhiệt độ, điện áp hay sai lệch sản xuất, các “đồng hồ” này sẽ dần lệch nhau nếu không được đồng bộ hóa. Hãy tưởng tượng một dàn nhạc mà mỗi nhạc công chơi theo nhịp riêng – kết quả sẽ là một mớ hỗn loạn! FlexRay giải quyết vấn đề này bằng cơ chế đồng bộ hóa thời gian phân tán, đảm bảo mọi nút có cùng quan điểm về thời gian toàn cục (global time), với sai lệch tối đa được gọi là precision.

2. Cấu trúc thời gian trong FlexRay

Hình 17. Cấu trúc thời gian trong FlexRay
Hình 17. Cấu trúc thời gian trong FlexRay

Thời gian trong FlexRay được chia thành ba cấp độ:

  • Microtick: Đơn vị nhỏ nhất, dựa trên tần số dao động của bộ điều khiển. Mỗi nút có microtick khác nhau tùy vào cấu hình phần cứng.
  • Macrotick: Được đồng bộ trên toàn cụm (cluster), gồm một số nguyên microtick. Đây là đơn vị thời gian chung giữa các nút.
  • Cycle: Một chu kỳ giao tiếp gồm nhiều macrotick, với số lượng cố định và giống nhau trên tất cả các nút.

Thời gian cục bộ (local time) của mỗi nút được biểu diễn qua các biến: vCycleCounter (số chu kỳ), vMacrotick (số macrotick hiện tại), và vMicrotick (số microtick hiện tại). FlexRay không có thời gian toàn cục tuyệt đối, mà mỗi nút tự điều chỉnh để khớp với quan điểm chung dựa trên các khung đồng bộ (sync frame) nhận được từ nút khác.

Xem thêm: Fritzing Cơ Bản: Hướng dẫn chi tiết vẽ mạch trực quan

3. Quá trình đồng bộ hóa thời gian

Hình 18. Mối quan hệ thời gian giữa clock synchronization, media access schedule, and thực thi các chức năng của clock synchronization
Hình 18. Mối quan hệ thời gian giữa clock synchronization, media access schedule, and thực thi các chức năng của clock synchronization

Đồng bộ hóa trong FlexRay dựa trên hai quá trình chính:

  • Macrotick Generation (MTG): Điều khiển bộ đếm chu kỳ và macrotick, áp dụng các giá trị hiệu chỉnh tốc độ (rate) và lệch pha (offset).
  • Clock Synchronization Process (CSP): Khởi tạo chu kỳ, đo lường sai lệch, và tính toán các giá trị hiệu chỉnh.

Để giữ thời gian đồng bộ, FlexRay xử lý hai loại sai lệch:

  • Offset (lệch pha): Sự khác biệt về thời điểm bắt đầu chu kỳ giữa các nút. Hiệu chỉnh offset được thực hiện trong thời gian nghỉ mạng (NIT) của chu kỳ lẻ.
  • Rate (tần số): Sự khác biệt về tốc độ đếm thời gian. Hiệu chỉnh rate được áp dụng trên toàn chu kỳ và tính toán mỗi hai chu kỳ (double cycle).

4. Khởi động đồng hồ

Một nút FlexRay có thể khởi động đồng hồ theo hai cách:

  • Cold Start: Nút tự khởi động như nút dẫn đầu (leading coldstart node) nếu không phát hiện giao tiếp trên kênh. Nó thiết lập nhịp điệu ban đầu cho cụm.
  • Integration: Nút tích hợp vào cụm đang chạy bằng cách sao chép thời gian từ một nút coldstart khác, dựa trên các khung khởi động chẵn (even) và lẻ (odd).

Quá trình tích hợp khá thú vị: nút chờ khung khởi động chẵn hợp lệ, dự đoán khung lẻ tiếp theo trong một cửa sổ thời gian, rồi khởi động MTG khi thời gian khớp. Điều này giống như một vũ điệu chính xác giữa các nút để bắt nhịp với nhau!

5. Đo lường và tính toán hiệu chỉnh

Mỗi nút đo sai lệch thời gian giữa thời điểm dự kiến (static slot action point) và thời điểm thực tế nhận được khung đồng bộ. Sai lệch này được lưu trong một mảng ba chiều (T_DevTable) theo kênh (A/B), chu kỳ (chẵn/lẻ), và ID khung.

Để tính giá trị hiệu chỉnh, FlexRay dùng thuật toán Fault-Tolerant Midpoint (FTM):

  • Sắp xếp các sai lệch đo được.
  • Loại bỏ k giá trị lớn nhất và nhỏ nhất (k phụ thuộc số lượng giá trị: 0 cho 1-2, 1 cho 3-7, 2 cho trên 7).
  • Lấy trung bình của giá trị lớn nhất và nhỏ nhất còn lại làm giá trị hiệu chỉnh.

Hiệu chỉnh offset được tính mỗi chu kỳ, còn hiệu chỉnh rate tính mỗi double cycle. Nếu giá trị vượt quá giới hạn cho phép, nút sẽ báo lỗi và điều chỉnh về giới hạn tối đa/thiểu.

Ứng dụng của FlexRay

Ô tô:

  • Hệ thống treo chủ động (Active Suspension): Giúp điều chỉnh độ cứng của giảm xóc dựa trên điều kiện đường và phong cách lái xe.
  • Hệ thống lái điện tử (Drive-by-Wire): Loại bỏ cơ cấu cơ khí truyền thống, thay thế bằng hệ thống điện tử giúp tối ưu hóa phản hồi và độ an toàn.
  • Hệ thống phanh điện tử (Brake-by-Wire): Cho phép kiểm soát lực phanh tốt hơn, cải thiện hiệu suất phanh trong các tình huống khẩn cấp.
  • ADAS (Advanced Driver Assistance Systems): FlexRay hỗ trợ truyền dữ liệu giữa các cảm biến như radar, lidar và camera để thực hiện các tính năng hỗ trợ lái như giữ làn đường và kiểm soát hành trình thích ứng.

Công nghiệp:

  • Hệ thống robot tự động hóa: Trong các dây chuyền sản xuất, FlexRay giúp đồng bộ các động cơ và cảm biến với tốc độ cao, đảm bảo hoạt động chính xác.
  • Thiết bị y tế: Một số máy móc y tế như máy chụp cộng hưởng từ (MRI) cần truyền dữ liệu tốc độ cao với độ tin cậy cao, nơi FlexRay có thể đóng vai trò quan trọng.

So sánh với CAN và LIN

Đặc điểmFlexRayCANLIN
Tốc độLên đến 10 MbpsTối đa 1 Mbps~20 kbps
Kiến trúcĐịnh thời định trước (TDMA)Ưu tiên theo IDMaster-Slave
Độ tin cậyCao, dự phòng kênhTrung bìnhThấp
Ứng dụngHệ thống thời gian thực quan trọngECU thông thườngHệ thống đơn giản, chi phí thấp

FlexRay là một giao thức truyền thông mạnh mẽ, cung cấp tốc độ cao, độ tin cậy và tính quyết định trong các hệ thống nhúng, đặc biệt là trong ngành công nghiệp ô tô. Với sự kết hợp giữa truyền dữ liệu theo thời gian thực và khả năng chịu lỗi cao, FlexRay đã trở thành lựa chọn lý tưởng cho các hệ thống điều khiển tiên tiến như xe tự hành và hệ thống hỗ trợ lái nâng cao. Dù có độ phức tạp và chi phí triển khai cao hơn so với CAN hay LIN, nhưng lợi ích về hiệu suất và an toàn mà FlexRay mang lại khiến nó trở thành một tiêu chuẩn quan trọng trong tương lai của xe thông minh.

Xem thêm: Tối ưu quản lý năng lượng hệ thống nhúng với giao thức PMBus

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *