ngochoangimsat
Administrator
Giới thiệu về CAN-TP (ISO 15765)
Giao thức ISO 15765-2 CAN-TP là một tiêu chuẩn quốc tế được sử dụng để truyền dữ liệu có dung lượng lớn hơn 8 byte qua các khung liên tiếp của CAN. Trong các khung dữ liệu CAN thông thường, chỉ có thể truyền tối đa 8 byte dữ liệu. Giao thức truyền tải ISO hoạt động ở tầng thứ tư (tầng truyền tải) của mô hình OSI.
Giao thức ISO-TP xác định một phương thức truyền cho phép gửi tối đa 4096 byte qua mạng CAN. Để thực hiện điều này, các thông điệp được chia nhỏ thành các khung CAN riêng lẻ. Ứng dụng phổ biến nhất của ISO-TP là truyền tải thông điệp chẩn đoán trong các phương tiện có trang bị OBD-II, sử dụng KWP-2000 và UDS. Ngoài ra, ISO-TP còn được ứng dụng rộng rãi trong các hệ thống CAN đặc thù khác.
CAN-TP được triển khai trên giao thức CAN, và để nhận diện nó, có hai kiểu địa chỉ:
Địa chỉ trong giao thức CAN-TP (ISO 15765)
Mục đích chính của địa chỉ trong CAN-TP là xác định xem một thông điệp có phải là thông điệp CAN-TP hay không. Theo tiêu chuẩn ISO 15765-2, có hai kiểu địa chỉ được định nghĩa:
Trong chế độ địa chỉ cơ bản của CAN-TP, thông điệp CAN hoặc CAN-TP được nhận diện bằng mã định danh CAN (CAN Identifier). Khi một thông điệp được nhận, máy chủ sẽ phân biệt liệu đó có phải là thông điệp TP hay không. Lợi ích của phương thức địa chỉ này là toàn bộ 8 byte của gói dữ liệu có thể được sử dụng để truyền dữ liệu.
Trong địa chỉ cơ bản, mỗi thông điệp được gửi đến một nút cụ thể trong mạng thông qua một mã định danh duy nhất gọi là "Địa chỉ Nút" (Node Address). Mỗi nút trong mạng được gán một địa chỉ nút duy nhất, có thể được cấu hình bởi người dùng hoặc thông qua công cụ cấu hình.
Khi một nút muốn gửi thông điệp, nó sẽ chèn địa chỉ nút đích vào tiêu đề của thông điệp. Khi các nút khác trong mạng nhận được thông điệp, chúng sẽ so sánh địa chỉ nút đích trong tiêu đề với địa chỉ của chính mình. Nếu địa chỉ khớp, nút sẽ chấp nhận và xử lý thông điệp; nếu không, nó sẽ bỏ qua thông điệp.
Định địa chỉ mở rộng trong CAN-TP (ISO 15765)
Định địa chỉ mở rộng là một tính năng của giao thức truyền tải ISO 15765-2 (CAN-TP) cho phép thông điệp được gửi đến số lượng nút lớn hơn trong mạng CAN so với địa chỉ cơ bản. Trong phương thức này, trường định danh của tiêu đề thông điệp CAN được sử dụng để truyền địa chỉ nút đích, có thể dài đến 29 bit. Điều này cho phép không gian địa chỉ mở rộng đáng kể, với tối đa 536.870.912 địa chỉ nút có thể sử dụng, so với địa chỉ nút 8 bit của địa chỉ cơ bản.
Định địa chỉ mở rộng cũng hỗ trợ địa chỉ động, cho phép thêm hoặc xóa nút khỏi mạng mà không cần cấu hình lại địa chỉ nút. Điều này được thực hiện thông qua một cơ chế gọi là "Định địa chỉ động", trong đó mỗi nút được gán một "ID Phân xử" (Arbitration ID) duy nhất, và địa chỉ nút được truyền trong phần dữ liệu của thông điệp.
Khi một nút gửi thông điệp sử dụng địa chỉ mở rộng, nó sẽ chèn địa chỉ nút đích vào trường định danh của tiêu đề thông điệp CAN. Khi thông điệp được nhận bởi các nút khác trong mạng, chúng sẽ so sánh địa chỉ nút đích trong tiêu đề với địa chỉ của chính mình. Nếu địa chỉ khớp, nút sẽ chấp nhận và xử lý thông điệp; nếu không, nó sẽ bỏ qua thông điệp.
Phương thức định địa chỉ này sử dụng byte đầu tiên của trường dữ liệu CAN để chứa phần mở rộng của địa chỉ, do đó giảm dung lượng dữ liệu có thể truyền đi trong mỗi khung dữ liệu xuống một byte. Nhiệm vụ chính của giao thức truyền tải là truyền thông điệp có kích thước lớn hơn một đơn vị dữ liệu giao thức (PDU) đơn lẻ. Những thông điệp chứa nhiều dữ liệu hơn mức có thể truyền trong một PDU đơn lẻ sẽ được phân đoạn và chia thành nhiều PDU riêng biệt.
Quy trình này cũng có thể được thực hiện ở tầng liên kết dữ liệu. Khi đó, việc phân đoạn thông điệp sẽ phải tuân theo các PDU của giao thức liên kết dữ liệu tương ứng. Nhờ đó, để gửi dữ liệu qua mạng CAN, giao thức CAN-TP đã được thiết kế nhằm hỗ trợ việc truyền nhiều khung dữ liệu liên tục. Dưới đây là bản dịch nội dung sang Tiếng Việt:
Các Loại Khung trong CAN-TP (ISO 15765)
Để truyền tải dữ liệu qua giao thức CAN-TP, có hai loại khung chính: Khung đơn (Single Frame) và Khung đa khung (Multi-Frame). Trong đó, Khung đa khung lại bao gồm ba loại khung con, tạo thành tổng cộng bốn loại khung trong CAN-TP:
1. Khung đơn (SF – 0x0) trong CAN-TP (ISO 15765)
Trong giao thức vận chuyển ISO 15765-2 (CAN-TP), khung đơn (Single Frame - SF) là loại khung dùng để truyền dữ liệu có kích thước nhỏ có thể nằm gọn trong một khung dữ liệu CAN.
Cấu trúc khung đơn
Diễn giải:
2. Khung đầu tiên (FF – 0x1) trong CAN-TP (ISO 15765)
Trong giao thức ISO 15765-2, Khung đầu tiên (First Frame - FF) được sử dụng để bắt đầu truyền một khối dữ liệu lớn. Nó chứa thông tin quan trọng như tổng kích thước dữ liệu và số lượng khung sẽ được gửi.
Vai trò của Khung đầu tiên
Diễn giải:
3. Khung Liên Tiếp (CF) trong CAN-TP (ISO 15765)
Khung Liên Tiếp hay loại thông điệp này được sử dụng để truyền dữ liệu theo các đoạn liên tiếp. Mỗi thông điệp CF chứa một phần dữ liệu, cùng với một số thứ tự giúp xác định vị trí của đoạn dữ liệu trong khối dữ liệu lớn hơn.
Các thông điệp CF được sử dụng để truyền dữ liệu thực trong một khối dữ liệu lớn. Kích thước của mỗi thông điệp CF thường được xác định bởi bus CAN và cấu trúc mạng. Số thứ tự được đưa vào mỗi thông điệp CF giúp đảm bảo rằng các đoạn dữ liệu được nhận và lắp ráp theo đúng thứ tự.
Nhiệm vụ chính của giao thức vận chuyển (Transport Protocol - TP) hay còn gọi là CAN-TP là truyền các thông điệp không thể gửi trong một đơn vị dữ liệu giao thức (PDU) duy nhất do giới hạn độ dài. Các thông điệp chứa nhiều dữ liệu hơn mức có thể truyền trong một PDU sẽ được phân đoạn bởi giao thức vận chuyển và chia thành nhiều PDU riêng biệt. Quá trình này cũng có thể được thực hiện trên tầng liên kết dữ liệu, khi đó, việc phân đoạn thông điệp phải được thực hiện trong các PDU của giao thức liên kết dữ liệu tương ứng.
Định dạng của Khung Liên Tiếp trong CAN-TP
Trong CF, byte đầu tiên được sử dụng làm byte PCI, trong đó:
Mỗi khung CF bắt đầu từ 0, ban đầu tập dữ liệu đầu tiên trong khung đầu tiên được coi là dữ liệu thứ 0. Do đó, tập đầu tiên của CF bắt đầu từ 1. Khi số thứ tự đạt 15, nó sẽ quay về 0 bằng cách đặt lại thanh ghi bộ đệm.
Ví dụ về Khung Liên Tiếp trong CAN-TP (ISO 15765)
Phân tích:
4. Khung Điều Khiển Luồng (FC) trong CAN-TP (ISO 15765)
Khung FC là loại thông điệp thứ ba và cuối cùng trong chuỗi ba khung được sử dụng để truyền tải các khối dữ liệu lớn vượt quá kích thước tối đa có thể truyền trong một thông điệp CAN duy nhất. Loại thông điệp này được sử dụng để quản lý luồng dữ liệu giữa thiết bị phát và thiết bị nhận. Nó chứa thông tin như số lượng khung liên tiếp có thể truyền trước khi thiết bị nhận phải gửi thông điệp xác nhận.
Khung FC được gửi bởi thiết bị nhận sau khi nhận được một khung CF từ thiết bị phát. Khung FC chứa các thông tin như:
Tóm lại, cơ chế điều khiển luồng của giao thức CAN-TP được sử dụng để cấu hình thiết bị phát sao cho phù hợp với đặc tính của thiết bị nhận (thời gian, bộ đệm nhận khả dụng, trạng thái sẵn sàng nhận). Khung FC luôn được gửi bởi thiết bị nhận để thông báo về khả năng tiếp nhận dữ liệu của nó.
Định dạng của Khung Điều Khiển Luồng trong CAN-TP
Khung FC chứa 3 byte tạo thành PCI trong giao thức CAN-TP.
Ví dụ về Khung Điều Khiển Luồng trong CAN-TP (ISO 15765)
Phân tích:
Một khung ISO-TP luôn có độ dài 8 byte, các byte không cần thiết được lấp đầy bằng byte đệm 0xAA hoặc 0x55. Dưới đây là bản dịch của nội dung bạn yêu cầu:
Nguyên lý hoạt động của CAN-TP (ISO 15765)
Có hai phương thức truyền dữ liệu trong giao thức CAN-TP: truyền dữ liệu khung đơn và truyền dữ liệu đa khung. Trong đó:
Giao thức CAN-TP hoạt động bằng cách chia nhỏ dữ liệu lớn thành các gói nhỏ hơn, được gọi là Đơn vị Dữ liệu Giao thức Vận chuyển (Transport Protocol Data Units - TPDUs). Các TPDU này được truyền qua bus CAN và mỗi TPDU chứa số thứ tự và mã kiểm tra để đảm bảo tính toàn vẹn của dữ liệu. Bộ nhận sẽ lắp ráp lại các TPDU để khôi phục dữ liệu gốc.
Truyền Dữ Liệu Khung Đơn
Ví dụ về giao tiếp CAN-TP trong mô hình Client-Server
Dưới đây là cách giao thức CAN-TP hoạt động trong một tình huống truyền dữ liệu giữa Client và Server:
Xử lý lỗi trong CAN-TP (ISO 15765)
Trong giao thức CAN-TP, cả bộ phát và bộ nhận đều giám sát quá trình truyền dữ liệu bằng bộ hẹn giờ.
Cách gửi 100 byte dữ liệu bằng giao thức CAN-TP
Để gửi 100 byte dữ liệu qua giao thức CAN-TP, các bước thực hiện như sau:
Sau khi đọc tài liệu này, bạn có thể tự trả lời câu hỏi: Làm thế nào để gửi 100 byte dữ liệu bằng giao thức CAN-TP?. Cảm ơn bạn đã dành thời gian học tập từng bước về giao thức CAN-TP!
Giao thức ISO 15765-2 CAN-TP là một tiêu chuẩn quốc tế được sử dụng để truyền dữ liệu có dung lượng lớn hơn 8 byte qua các khung liên tiếp của CAN. Trong các khung dữ liệu CAN thông thường, chỉ có thể truyền tối đa 8 byte dữ liệu. Giao thức truyền tải ISO hoạt động ở tầng thứ tư (tầng truyền tải) của mô hình OSI.
Giao thức ISO-TP xác định một phương thức truyền cho phép gửi tối đa 4096 byte qua mạng CAN. Để thực hiện điều này, các thông điệp được chia nhỏ thành các khung CAN riêng lẻ. Ứng dụng phổ biến nhất của ISO-TP là truyền tải thông điệp chẩn đoán trong các phương tiện có trang bị OBD-II, sử dụng KWP-2000 và UDS. Ngoài ra, ISO-TP còn được ứng dụng rộng rãi trong các hệ thống CAN đặc thù khác.
CAN-TP được triển khai trên giao thức CAN, và để nhận diện nó, có hai kiểu địa chỉ:
Địa chỉ trong giao thức CAN-TP (ISO 15765)
Mục đích chính của địa chỉ trong CAN-TP là xác định xem một thông điệp có phải là thông điệp CAN-TP hay không. Theo tiêu chuẩn ISO 15765-2, có hai kiểu địa chỉ được định nghĩa:
- Định địa chỉ cơ bản (Basic Addressing)
- Định địa chỉ mở rộng (Extended Addressing)
Trong chế độ địa chỉ cơ bản của CAN-TP, thông điệp CAN hoặc CAN-TP được nhận diện bằng mã định danh CAN (CAN Identifier). Khi một thông điệp được nhận, máy chủ sẽ phân biệt liệu đó có phải là thông điệp TP hay không. Lợi ích của phương thức địa chỉ này là toàn bộ 8 byte của gói dữ liệu có thể được sử dụng để truyền dữ liệu.
Trong địa chỉ cơ bản, mỗi thông điệp được gửi đến một nút cụ thể trong mạng thông qua một mã định danh duy nhất gọi là "Địa chỉ Nút" (Node Address). Mỗi nút trong mạng được gán một địa chỉ nút duy nhất, có thể được cấu hình bởi người dùng hoặc thông qua công cụ cấu hình.
Khi một nút muốn gửi thông điệp, nó sẽ chèn địa chỉ nút đích vào tiêu đề của thông điệp. Khi các nút khác trong mạng nhận được thông điệp, chúng sẽ so sánh địa chỉ nút đích trong tiêu đề với địa chỉ của chính mình. Nếu địa chỉ khớp, nút sẽ chấp nhận và xử lý thông điệp; nếu không, nó sẽ bỏ qua thông điệp.
Định địa chỉ mở rộng trong CAN-TP (ISO 15765)
Định địa chỉ mở rộng là một tính năng của giao thức truyền tải ISO 15765-2 (CAN-TP) cho phép thông điệp được gửi đến số lượng nút lớn hơn trong mạng CAN so với địa chỉ cơ bản. Trong phương thức này, trường định danh của tiêu đề thông điệp CAN được sử dụng để truyền địa chỉ nút đích, có thể dài đến 29 bit. Điều này cho phép không gian địa chỉ mở rộng đáng kể, với tối đa 536.870.912 địa chỉ nút có thể sử dụng, so với địa chỉ nút 8 bit của địa chỉ cơ bản.
Định địa chỉ mở rộng cũng hỗ trợ địa chỉ động, cho phép thêm hoặc xóa nút khỏi mạng mà không cần cấu hình lại địa chỉ nút. Điều này được thực hiện thông qua một cơ chế gọi là "Định địa chỉ động", trong đó mỗi nút được gán một "ID Phân xử" (Arbitration ID) duy nhất, và địa chỉ nút được truyền trong phần dữ liệu của thông điệp.
Khi một nút gửi thông điệp sử dụng địa chỉ mở rộng, nó sẽ chèn địa chỉ nút đích vào trường định danh của tiêu đề thông điệp CAN. Khi thông điệp được nhận bởi các nút khác trong mạng, chúng sẽ so sánh địa chỉ nút đích trong tiêu đề với địa chỉ của chính mình. Nếu địa chỉ khớp, nút sẽ chấp nhận và xử lý thông điệp; nếu không, nó sẽ bỏ qua thông điệp.
Phương thức định địa chỉ này sử dụng byte đầu tiên của trường dữ liệu CAN để chứa phần mở rộng của địa chỉ, do đó giảm dung lượng dữ liệu có thể truyền đi trong mỗi khung dữ liệu xuống một byte. Nhiệm vụ chính của giao thức truyền tải là truyền thông điệp có kích thước lớn hơn một đơn vị dữ liệu giao thức (PDU) đơn lẻ. Những thông điệp chứa nhiều dữ liệu hơn mức có thể truyền trong một PDU đơn lẻ sẽ được phân đoạn và chia thành nhiều PDU riêng biệt.
Quy trình này cũng có thể được thực hiện ở tầng liên kết dữ liệu. Khi đó, việc phân đoạn thông điệp sẽ phải tuân theo các PDU của giao thức liên kết dữ liệu tương ứng. Nhờ đó, để gửi dữ liệu qua mạng CAN, giao thức CAN-TP đã được thiết kế nhằm hỗ trợ việc truyền nhiều khung dữ liệu liên tục. Dưới đây là bản dịch nội dung sang Tiếng Việt:
Các Loại Khung trong CAN-TP (ISO 15765)
Để truyền tải dữ liệu qua giao thức CAN-TP, có hai loại khung chính: Khung đơn (Single Frame) và Khung đa khung (Multi-Frame). Trong đó, Khung đa khung lại bao gồm ba loại khung con, tạo thành tổng cộng bốn loại khung trong CAN-TP:
- Khung đơn (Single Frame – 0x0)
- Khung đa khung (Multi-Frame)
- Khung đầu tiên (First Frame – 0x1)
- Khung liên tiếp (Consecutive Frame – 0x2)
- Khung điều khiển luồng (Flow Control Frame – 0x3)
1. Khung đơn (SF – 0x0) trong CAN-TP (ISO 15765)
Trong giao thức vận chuyển ISO 15765-2 (CAN-TP), khung đơn (Single Frame - SF) là loại khung dùng để truyền dữ liệu có kích thước nhỏ có thể nằm gọn trong một khung dữ liệu CAN.
Cấu trúc khung đơn
- Khung đơn bao gồm một phần tiêu đề (header) và một trường dữ liệu.
- Tiêu đề chứa thông tin về thông điệp, trong khi trường dữ liệu chứa dữ liệu thực tế cần truyền.
- Khung đơn được sử dụng khi lượng dữ liệu cần truyền là 7 byte hoặc ít hơn.
- Đây là cách truyền dữ liệu đơn giản và hiệu quả nhất vì chỉ cần một gói tin duy nhất mà không cần thêm các cơ chế đóng gói hay kiểm soát luồng.
- Nếu dữ liệu có kích thước ≤ 7 byte, CAN-TP sẽ sử dụng khung đơn.
- Byte đầu tiên của trường dữ liệu chứa thông tin điều khiển, chia thành:
- 4 bit cao (MSB): Xác định loại khung (0x0 - Single Frame).
- 4 bit thấp (LSB): Xác định độ dài dữ liệu (DLC - Data Length Code).
Byte 1 | Byte 2 | Byte 3 | Byte 4 | Byte 5 | Byte 6 | Byte 7 | Byte 8 |
05 | 01 | 02 | 03 | 04 | 05 | AA | AA |
- Tiêu đề PCI (0x05 - 1 byte):
- 4 bit cao (MSB) = 0, chỉ ra đây là khung đơn.
- 4 bit thấp (LSB) = 5, chỉ ra số lượng byte dữ liệu là 5 byte.
- Dữ liệu gốc (01 – 05): 5 byte dữ liệu thực được gửi từ ECU phát.
- Byte rỗng (AA, AA): Các byte này được điền vào để đảm bảo không có dữ liệu rác hoặc lỗi phát sinh trong quá trình truyền.
- Nếu dữ liệu cần truyền dài hơn 7 byte, thì phải sử dụng khung đa khung.
- Các byte rỗng như 0xAA hoặc 0x55 thường được điền vào để đảm bảo tính toàn vẹn của dữ liệu.
2. Khung đầu tiên (FF – 0x1) trong CAN-TP (ISO 15765)
Trong giao thức ISO 15765-2, Khung đầu tiên (First Frame - FF) được sử dụng để bắt đầu truyền một khối dữ liệu lớn. Nó chứa thông tin quan trọng như tổng kích thước dữ liệu và số lượng khung sẽ được gửi.
Vai trò của Khung đầu tiên
- Khi dữ liệu cần gửi lớn hơn 7 byte, nó được chia thành nhiều khung.
- Khung đầu tiên là khung mở đầu của chuỗi khung, báo hiệu rằng một thông điệp nhiều khung đang được truyền.
- Trường dữ liệu của khung đầu tiên chứa tổng kích thước dữ liệu, giúp ECU nhận biết cần nhận bao nhiêu khung tiếp theo.
- Byte đầu tiên (PCI) chứa thông tin điều khiển:
- 4 bit cao (MSB): Xác định loại khung (0x1 - First Frame).
- 4 bit thấp + byte thứ 2: Xác định tổng độ dài dữ liệu (DLC) có thể lên đến 4096 byte.
- Dữ liệu đầu tiên có thể truyền tối đa 6 byte trong khung đầu tiên.
- Các byte dữ liệu còn lại sẽ được gửi thông qua khung liên tiếp (Consecutive Frame - CF).
Byte 1 | Byte 2 | Byte 3 | Byte 4 | Byte 5 | Byte 6 | Byte 7 | Byte 8 |
10 | 64 | 01 | 02 | 03 | 04 | 05 | 06 |
- Tiêu đề PCI (0x1064 - 2 byte):
- 4 bit cao (MSB) = 1, chỉ ra đây là khung đầu tiên.
- 4 bit thấp + byte tiếp theo (0x0 + 0x64 = 0x64 = 100 byte) chỉ ra tổng số dữ liệu là 100 byte.
- Dữ liệu đầu tiên (01 – 06): 6 byte đầu tiên của thông điệp.
3. Khung Liên Tiếp (CF) trong CAN-TP (ISO 15765)
Khung Liên Tiếp hay loại thông điệp này được sử dụng để truyền dữ liệu theo các đoạn liên tiếp. Mỗi thông điệp CF chứa một phần dữ liệu, cùng với một số thứ tự giúp xác định vị trí của đoạn dữ liệu trong khối dữ liệu lớn hơn.
Các thông điệp CF được sử dụng để truyền dữ liệu thực trong một khối dữ liệu lớn. Kích thước của mỗi thông điệp CF thường được xác định bởi bus CAN và cấu trúc mạng. Số thứ tự được đưa vào mỗi thông điệp CF giúp đảm bảo rằng các đoạn dữ liệu được nhận và lắp ráp theo đúng thứ tự.
Nhiệm vụ chính của giao thức vận chuyển (Transport Protocol - TP) hay còn gọi là CAN-TP là truyền các thông điệp không thể gửi trong một đơn vị dữ liệu giao thức (PDU) duy nhất do giới hạn độ dài. Các thông điệp chứa nhiều dữ liệu hơn mức có thể truyền trong một PDU sẽ được phân đoạn bởi giao thức vận chuyển và chia thành nhiều PDU riêng biệt. Quá trình này cũng có thể được thực hiện trên tầng liên kết dữ liệu, khi đó, việc phân đoạn thông điệp phải được thực hiện trong các PDU của giao thức liên kết dữ liệu tương ứng.
Định dạng của Khung Liên Tiếp trong CAN-TP
Trong CF, byte đầu tiên được sử dụng làm byte PCI, trong đó:
- 4 bit cao (MSB) xác định loại khung,
- 4 bit thấp (LSB) xác định số thứ tự khung.
Mỗi khung CF bắt đầu từ 0, ban đầu tập dữ liệu đầu tiên trong khung đầu tiên được coi là dữ liệu thứ 0. Do đó, tập đầu tiên của CF bắt đầu từ 1. Khi số thứ tự đạt 15, nó sẽ quay về 0 bằng cách đặt lại thanh ghi bộ đệm.
Ví dụ về Khung Liên Tiếp trong CAN-TP (ISO 15765)
Byte 1 | Byte 2 | Byte 3 | Byte 4 | Byte 5 | Byte 6 | Byte 7 | Byte 8 |
20 | 01 | 02 | 03 | 04 | 05 | 06 | 07 |
- PCI Header (0x20): Đây là 1 byte PCI trong CF.
- 4 bit cao (MSB) = 2: Xác định loại khung là Khung Liên Tiếp (CF).
- 4 bit thấp (LSB) = 0: Số thứ tự của khung đầu tiên là 0.
- Payload: 7 byte tiếp theo (01 – 07) là dữ liệu gốc cần gửi đến ECU hoặc node nhận.
4. Khung Điều Khiển Luồng (FC) trong CAN-TP (ISO 15765)
Khung FC là loại thông điệp thứ ba và cuối cùng trong chuỗi ba khung được sử dụng để truyền tải các khối dữ liệu lớn vượt quá kích thước tối đa có thể truyền trong một thông điệp CAN duy nhất. Loại thông điệp này được sử dụng để quản lý luồng dữ liệu giữa thiết bị phát và thiết bị nhận. Nó chứa thông tin như số lượng khung liên tiếp có thể truyền trước khi thiết bị nhận phải gửi thông điệp xác nhận.
Khung FC được gửi bởi thiết bị nhận sau khi nhận được một khung CF từ thiết bị phát. Khung FC chứa các thông tin như:
- Số thứ tự của khung CF cuối cùng đã nhận,
- Trạng thái của cơ chế điều khiển luồng,
- Số lượng khung liên tiếp mà thiết bị phát có thể gửi trước khi thiết bị nhận phải gửi phản hồi.
Tóm lại, cơ chế điều khiển luồng của giao thức CAN-TP được sử dụng để cấu hình thiết bị phát sao cho phù hợp với đặc tính của thiết bị nhận (thời gian, bộ đệm nhận khả dụng, trạng thái sẵn sàng nhận). Khung FC luôn được gửi bởi thiết bị nhận để thông báo về khả năng tiếp nhận dữ liệu của nó.
Định dạng của Khung Điều Khiển Luồng trong CAN-TP
Khung FC chứa 3 byte tạo thành PCI trong giao thức CAN-TP.
- Byte đầu tiên(PCI Header):
- 4 bit cao (MSB) = 3 → Xác định loại khung là Flow Control (FC).
- 4 bit thấp (LSB) → Trạng thái điều khiển luồng (Flow Status - FS).
- FS = 0: Clear to Send (CTS) – Cho phép gửi tiếp.
- FS = 1: Wait (WT) – Tạm dừng, yêu cầu đợi.
- FS = 2: Overflow (OVFLW) – Tràn bộ nhớ, hủy bỏ truyền tải.
- Byte thứ hai (BS - Block Size):
- Xác định số lượng khung CF có thể gửi trước khi cần phản hồi tiếp theo.
- Byte thứ ba (STmin - Separation Time):
- Thời gian tối thiểu giữa hai khung CF (tính bằng mili giây).
Ví dụ về Khung Điều Khiển Luồng trong CAN-TP (ISO 15765)
Byte 1 | Byte 2 | Byte 3 | Byte 4 | Byte 5 | Byte 6 | Byte 7 | Byte 8 |
30 | 0A | 14 | AA | AA | AA | AA | AA |
- PCI Header (0x30 - 1 byte):
- 4 bit cao (MSB) = 3 → Xác định loại khung là Flow Control (FC).
- 4 bit thấp (LSB) = 0 → FS = 0 (Clear to Send - Cho phép gửi tiếp).
- Block Size (0x0A - 1 byte):
- Xác định rằng 10 khung CF có thể gửi trước khi cần phản hồi tiếp theo.
- Separation Time (0x14 - 1 byte):
- Xác định thời gian trễ giữa các CF là 20ms.
- Các byte còn lại (AA, AA, AA...) là byte đệm (padding bytes).
Một khung ISO-TP luôn có độ dài 8 byte, các byte không cần thiết được lấp đầy bằng byte đệm 0xAA hoặc 0x55. Dưới đây là bản dịch của nội dung bạn yêu cầu:
Nguyên lý hoạt động của CAN-TP (ISO 15765)
Có hai phương thức truyền dữ liệu trong giao thức CAN-TP: truyền dữ liệu khung đơn và truyền dữ liệu đa khung. Trong đó:
- Truyền dữ liệu khung đơn (Single-Frame Transmission - Unacknowledged Unsegmented Data Transfer) được sử dụng khi thông điệp có kích thước nhỏ hơn hoặc bằng 8 byte.
- Truyền dữ liệu đa khung (Multi-Frame Transmission - Unacknowledged Segmented Data Transfer) được sử dụng khi thông điệp có kích thước lớn hơn 8 byte.
Giao thức CAN-TP hoạt động bằng cách chia nhỏ dữ liệu lớn thành các gói nhỏ hơn, được gọi là Đơn vị Dữ liệu Giao thức Vận chuyển (Transport Protocol Data Units - TPDUs). Các TPDU này được truyền qua bus CAN và mỗi TPDU chứa số thứ tự và mã kiểm tra để đảm bảo tính toàn vẹn của dữ liệu. Bộ nhận sẽ lắp ráp lại các TPDU để khôi phục dữ liệu gốc.
Truyền Dữ Liệu Khung Đơn
- Nếu dữ liệu cần truyền có kích thước ≤ 7 byte, có thể sử dụng Khung Đơn (Single Frame - SF) để truyền toàn bộ dữ liệu trong một lần gửi.
- Nếu dữ liệu cần truyền lớn hơn 7 byte, nó sẽ được chia thành nhiều khung và truyền theo trình tự sử dụng Khung Đầu (First Frame - FF), Khung Liên Tiếp (Consecutive Frame - CF) và Khung Điều Khiển Luồng (Flow Control - FC).
Ví dụ về giao tiếp CAN-TP trong mô hình Client-Server
Dưới đây là cách giao thức CAN-TP hoạt động trong một tình huống truyền dữ liệu giữa Client và Server:
- Client gửi một thông điệp dữ liệu lớn đến Server, vượt quá kích thước tối đa của một khung CAN đơn.
- Phần mềm Client chia thông điệp lớn thành các TPDU nhỏ hơn, mỗi TPDU có số thứ tự và mã kiểm tra riêng.
- Client gửi các TPDU đến Server thông qua Khung Đầu (FF).
- Phần mềm Server nhận các TPDU và kiểm tra số thứ tự cùng mã kiểm tra, đảm bảo rằng tất cả các gói đã được nhận đầy đủ và dữ liệu không bị lỗi.
- Sau khi nhận và xác minh tất cả các TPDU, Server lắp ráp lại thành thông điệp dữ liệu gốc.
- Server gửi lại một Khung Điều Khiển Luồng (FC) cho Client, cho biết cách thức, thời gian và lượng dữ liệu mà Client có thể tiếp tục gửi.
- Client nhận thông điệp xác nhận (FC) và tiếp tục truyền dữ liệu bằng Khung Liên Tiếp (CF) cho đến khi hoàn tất hoặc theo chỉ dẫn từ Server.
Xử lý lỗi trong CAN-TP (ISO 15765)
Trong giao thức CAN-TP, cả bộ phát và bộ nhận đều giám sát quá trình truyền dữ liệu bằng bộ hẹn giờ.
- Bộ nhận theo dõi thời gian mà bộ phát gửi các Khung Liên Tiếp (CF). Nếu mất quá nhiều thời gian, quá trình truyền tải sẽ bị hủy và tất cả dữ liệu đã nhận trước đó sẽ bị loại bỏ.
- Bộ phát theo dõi thời gian mà bộ nhận phản hồi bằng Khung Điều Khiển Luồng (FC). Nếu xảy ra quá thời gian chờ, quá trình truyền tải cũng bị hủy và dữ liệu đã gửi trước đó sẽ bị loại bỏ.
- Thời gian chờ tối đa cho một khung là 1 giây.
- Số thứ tự không đúng trong các Khung Liên Tiếp (CF).
- Độ dài thông điệp không hợp lệ.
- Trạng thái điều khiển luồng (Flow Status) không hợp lệ trong Khung FC.
- Loại PDU không hợp lệ.
Cách gửi 100 byte dữ liệu bằng giao thức CAN-TP
Để gửi 100 byte dữ liệu qua giao thức CAN-TP, các bước thực hiện như sau:
- Chia dữ liệu thành các gói nhỏ:
- Dữ liệu 100 byte không thể truyền trong một khung CAN (chỉ tối đa 8 byte).
- Cần sử dụng Khung Đầu (FF) + Khung Liên Tiếp (CF) + Khung Điều Khiển Luồng (FC) để truyền toàn bộ dữ liệu.
- Gửi Khung Đầu (FF):
- Xác định tổng kích thước dữ liệu (100 byte).
- Gửi 6 byte đầu tiên của dữ liệu trong FF.
- Nhận phản hồi từ bộ nhận (FC):
- Bộ nhận phản hồi bằng Khung FC, cho biết số lượng Khung CF có thể gửi liên tục trước khi cần phản hồi tiếp theo.
- Gửi các Khung Liên Tiếp (CF):
- Gửi các byte dữ liệu còn lại trong các Khung CF, theo đúng thứ tự và thời gian giữa các khung theo hướng dẫn của FC.
- Hoàn tất quá trình truyền dữ liệu:
- Khi toàn bộ 100 byte đã được gửi và xác nhận, quá trình truyền kết thúc thành công.
Sau khi đọc tài liệu này, bạn có thể tự trả lời câu hỏi: Làm thế nào để gửi 100 byte dữ liệu bằng giao thức CAN-TP?. Cảm ơn bạn đã dành thời gian học tập từng bước về giao thức CAN-TP!
Sửa lần cuối: