Hình 2. 45 Định thời bit
Giao thức CAN định nghĩa đơn vị thời gian nhỏ nhất là ‘Lượng tử thời gian ‘(TQ). Mỗi phân đoạn thời gian gồm một số các lượng tử thời gian. Độ dài của nó được sinh ra bởi sự phân chia tần số dao động của các nút CAN.
Hình 2. 46 Ví dụ tính thời gian để truyền đi 1 bit
Hình 2. 47 Số lượng tử tq trong thời gian truyền một bit
Thời gian để truyền đi một bit Ví dụ:
Tốc độ truyền dữ liệu: f = 500 kBit / s = 2µs
57 Thời gian truyền một bit được chia thành từng lượng tử thời gian
Chiều dài của một tq: = BRP / Số cho phép: 8 25
BRP – tốc độ truyền dữ liệu CAN.
– tần số dao động cấp cho CAN từ vi điều khiển.
– số lượng TQ cho phép trên thời gian truyền 1 bit trong khoảng từ đến
Mỗi nút phải tạo ra một thời gian danh nghĩa để có thể căn cứ vào đó mà nhận hoặc truyền dữ liệu xuống bus một cách đồng bộ với các nút khác.
Thực tế là nếu thời gian truyền 1 bit mỗi nút không được đồng bộ với nhau thì giá trị đọc được từ bus tại thời điểm lấy mẫu có thể không phải là giá trị đúng.
Độ trễ này có thể làm ảnh hưởng trong nút nhận khung, khi vốn dĩ đã phải mất thời gian để tính toán CRC và ACK Slot để xác nhận tin nhấn.
Hình 2. 48 Các pha trong trong một bit
Về cơ bản, chu kỳ của CAN bit có thể được chia nhỏ thành 4 phân đoạn thời gian.
2.3.5.1. Vùng đồng bộ hóa | Sync_Seg
Vùng đồng bộ là vùng có độ dài bằng một lượng tử thời gian. Dùng để đồng bộ các nút khác nhau trên bus.
Mọi sự chuyển trạng thái (từ lặn sang trội hoặc ngược lại) phải được thực hiện trong vùng này để cho phép đồng bộ lại xung nhịp của các nút khác nhau trong quá trình nhận khung.
58 Vùng đồng bộ hóa có chiều dài cố định bằng 1 lượng tử thời gian:
Hình 2. 49 Vùng đồng bộ hóa
2.3.5.2. Vùng bù thời gian trễ | Prop_Seg
Vùng bù thời gian trễ có thể được lập trình dài từ 1, 2,..8 lượng tử thời gian. Nó được dùng để bù cho sự trễ tín hiệu trên mạng.
Hình 2. 50 Minh họa cách tính thời gian bù cho sự trễ vật lý
2.3.5.3 Vùng phân đoạn 1 | Phase_Seg1 và Vùng phân đoạn 2 | Phase_Seg2
Đoạn pha buffer 1 có thể lập trình dài 1, 2,..8 lượng tử thời gian. Nó dùng để bù cho các lỗi thu nhỏ dần các giới hạn của phân đoạn và nó có thể được kéo dài trong suốt quá trình tái đồng bộ.
Đoạn pha buffer 2 là giá trị cực đại của vùng phân đoạn 1, nó bằng khoảng thời gian xử lý thông tin. Nó cũng được dùng để bù cho các lỗi thu nhỏ giới hạn của phân đoạn và nó có thể được rút ngắn trong quá trình tái đồng bộ.
Hình 2. 51 Mảng thời gian
59 TSEG1 Phase_Seg1
TSEG2: Thời gian của vùng hai
TSEG2 Phase_Seg2
Một điểm lấy mẫu nằm xung quanh giữa Phase_Seg1 với Phase_Seg2. Điểm này chính là nơi giá trị của bit được lấy. Việc lập trình các điểm mẫu cho phép tối ưu hóa thời gian truyền bit. Bù trừ thời gian trễ luôn nằm trong phạm vi tối ưu nhất.
Hình 2. 52 Minh họa điểm lấy mẫu
Chiều dài cho phép:
2.3.6. Phư ng pháp đồng bộ
Một mạng CAN bao gồm nhiều nút, mỗi nút chạy với một sự giao động riêng của nó. Điều này có thể tạo nên sự lệch pha trong các nút khác nhau. Mỗi bộ điều khiển CAN đưa ra một cơ chế tái đồng bộ (sự đồng bộ mềm) để bù cho sự trễ pha trong quá trình nhận một khung dữ liệu.
Về mặt cơ chế đồng bộ, giao thức CAN sẽ có 02 cơ chế khác nhau, đó là đồng bộ cứng và tái đồng bộ.
-Đồng bộ cứng
+ Chỉ xảy ra khi có sự chuyển cạnh của bit đầu tiên từ lặn thành trội trong lúc bus đang ở trạng thái rảnh Trường hợp bắt đầu khung SOF.
+ Cơ chế này sẽ làm cho bộ định thời khởi động lại, tạo nên một sự chuyển cạnh trong SYNC_SEG. Tại thời điểm này, mọi nút nhận sẽ đồng bộ với nút phát.
Đồng bộ cứng chỉ xảy ra một lần duy nhất trong suốt quá trình truyền tải 01 tin nhắn.
60 -Tái động bộ
+ Cơ chế này được thực hiện để bảo toàn sự đồng bộ đã được thực hiện bởi đồng bộ cứng, nếu không có quá trình này thì nút nhận không thể có được sự đồng bộ vì sự lệch pha của các bộ giao động tại mỗi nút.
Tái đồng bộ không xảy ra trong vùng mà đồng bộ cứng đang diễn ra.
+ Sự tính toán và đánh giá mức độ đồng bộ lại cũng được đưa ra từ biến e, do đó cũng phụ thuộc vào giá trị SJW.
SJW thực chất là quá trình điều chỉnh một xung bit lệch đi một khoảng 1~ 4 TQ (giá trị này sẽ được khởi tạo trong thanh ghi và sẽ không đổi trong suốt quá trình hoạt động) để thực hiện việc đồng bộ.
Trong quá trình truyền dữ liệu, ngay khi có một sự thay đổi trạng thái nằm ngoài vùng SYNC_SEG thì PHASE_ERROR sẽ được đặt ngay lập tức, kèm với đó là một biến e sẽ được sinh ra để đánh giá lỗi. Sự tính toán e được thực hiện như sau:
-e = 0: Không có lỗi.
-e > 0: Sự thay đổi bit xảy ra trước thời điểm lấy mẫu. -e < 0: Sự thay đổi bit xảy ra sau thời điểm lấy mẫu.
Cơ chế này phục vụ cho việc đồng bộ lại những thời gian truyền 1 bit khác nhau của mỗi nút trên bus.
Biến e sẽ được sử dụng để tính toán PHASE_SEG1 phải dài hơn hay PHASE_SEG2 phải ngắn đi để vào lần chuyển trạng thái tiếp theo sẽ rơi trúng vào SYNC_SEG.
Mối liên hệ giữa e, SJW và tái đồng bộ như sau: -Nếu e = 0 thì tái đồng bộ giống như đồng bộ cứng. -Nếu e < 0:
+ |e| < SJW thì PHASE_SEG2 sẽ ngắn lại 1 đoạn e. + |e| > SJW thì PHASE_SEG2 sẽ ngắn lại 1 đoạn SJW. -Nếu e > 0:
+ e < SJW thì PHASE_SEG1 sẽ kéo dài thêm 1 đoạn e. + e > SJW thì PHASE_SEG1 sẽ kéo dài them 1 đoạn SJW. Ví dụ về tái đồng bộ ở hai trường hợp:
-Trong trường hợp bộ truyền chậm hơn, có nghĩa là cạnh đó bị phát hiện nằm trong đoạn Prop_Seg, bộ nhận sẽ kéo dài Phase_Seg1 với một giá trị lớn nhất của Độ Rộng Bước Nhảy Tái Đồng Bộ (RJW) đã được lập trình, thông thường RJW = 1…4
61 tq.
Hình 2. 53 Sự tái đồng bộ tr ng trường hợp bộ truyền chậm hơn
-Trong trường hợp bộ truyền nhanh hơn, có nghĩa là cạnh giới hạn được phát hiện trước đoạn Phase_Seg2, bộ nhận sẽ rút ngắn Phase_Seg2 với một giá trị lớn nhất của Độ Rộng Bước Nhảy Tái Đồng Bộ (RJW) đã được lập trình, thông thường RJW = 1…4 tq.
Hình 2. 54 Sự tái đồng bộ tr ng trường hợp bộ truyền chậm hơn
Chỉ có một sự tái đồng bộ được phép thực hiện trong thời gian truyền 1 bit.
2.3.7. Phần cứng
2.3.7.1. Bộ điều khiển CAN
62 -Một bộ điều khiển giao thức quản lý:
+ Gói dữ liệu.
+ Mã hóa khung dữ liệu. + Giải mã bit.
+ Phát hiện lỗi. + Đồng bộ dữ liệu. + Báo nhận.
-Bộ lọc chấp nhận phần cứng có chức năng lọc thông tin từ bộ điều khiển. -Bộ đệm để thông báo nhận, số bộ đệm này phụ thuộc vào ứng dụng.
-Bộ đệm thông báo truyền thông tin, số bộ đệm này cũng phụ thuộc vào ứng dụng. -Giao diện CP .
2.3.7.2. Hệ thống xử lý
Mặc dù không có một quy định nghiêm ngặt cho việc thực hiện đối với những hệ thống CAN. Tuy nhiên vẫn có hai kiểu CAN chiếm ưu thế.
2.3.7.2.1. Bộ điều khiển CAN c bản
Trong một module CAN có hệ thống xử lí cơ bản, giao thức CAN chỉ thực hiện những chức năng cơ bản trong việc tạo ra các dãy bit được thực hiện bằng phần cứng. Để quản lí những tin nhắn được gửi/ nhận phải có bộ đệm trung gian mà các module khác có thể truy cập. Khi bộ đệm đầy bit, module phải đọc tin nhắn trước khi tin nhắn mới được nhận. Việc lọc tin nhắn cũng chiếm bộ nhớ của module này. Một phần bộ nhớ được sử dụng cho việc quản lí mạng CAN. Module loại này thường không có đủ khả năng xử lí, loại này chủ yếu phù hợp với tỉ lệ bit thấp hoặc truyền tin nhắn ít hơn nhưng ở tỉ số bit cao hơn. Ưu điểm của những module này so với module CAN đầy đủ, thì nó có bề mặt chip nhỏ hơn và chi phí sản xuất thấp.
63
Hình 2. 55 Bộ điều khiển CAN cơ bản
2.3.7.2.2. Bộ điều khiển CAN Đầy Đủ
Là các giao thức ưu tiên trong trường hợp trạm phải quản lí một số tin nhắn có tỉ số bit cao và những module cục bộ không có dung lượng tự do cho các nhiệm vụ truyền thông. Chúng chứa một vài đối tượng truyền thông, một trong số đó chứa định danh và dữ liệu cụ thể của tin nhắn. Suốt quá trình khởi tạo của module CAN bằng máy tính cục bộ, nó quyết định những tin nhắn nào mà bộ điều khiển nên gửi và những tin nhắn nào cần được xử lí thêm. Các tin nhắn chỉ được đồng ý (lọc tin nhắn) khi vùng định danh phù hợp với đối tượng giao tiếp.
Bộ điều khiển CAN với hệ thống xử lí CAN đầy đủ làm giảm sức ép lên các máy tính cục bộ bằng cách thực hiện tất cả các giao tiếp bao gồm việc lọc tin nhắn trong bộ điều khiển.
Bộ điều khiển CAN có thể được kết hợp với vi điều khiển trong EC như một module độc lập bằng bus địa chỉ/dữ liệu. Một vi đều khiển mạnh có bộ điều khiển CAN được tích hợp trên chip. Kiểu ghép đôi bus này cho nhiều hiệu quả hơn vàđược sử dụng phổ biến.
64
Hình 2. 56 Bộ điều khiển CAN Đ y Đủ
2.3.8. Phát hiện lỗi và báo lỗi
Các kiểu lỗi: Có 5 kiểu lỗi cơ bản, đó là
2.3.8.1. Lỗi bit
Một lỗi về bit phải được phát hiện trong thời gian truyền 1 bit đó, khi mà giá trị của bit được giám sát khác với giá trị bit đã gửi, tức là một bộ truyền gửi đi một bit trội lên nhưng lại phát hiện một bit lặn , hay nó gửi đi một bit lặn nhưng lại phát hiện ra một bit trội trên dây bus.
65
Hình 2. 57 Các dạng lỗi
2.3.8.2. Lỗi chèn/ nhồi bit
Hai trường bit còn lại của khung dữ liệu và khung yêu cầu dữ liệu (là gờ phân cách CRC, rãnh ACK và EOF) là các dạng cố định và không được chèn bit ở đây. Khung lỗi và khung quá tải cũng là các dạng cố định và không được mã hóa bằng việc nhồi bit. Một lỗi nhồi bit phải được phát hiện tại thời gian truyền 1 bit của bit thứ 6 trong 6 bit đồng cấp liên tiếp trong vùng nhồi bit của khung và nó sẽ tạo ra một khung lỗi ở lần truyền bit kế tiếp. Sáu bit này có thể được mã hóa theo phương pháp nhồi (hay chèn) bit.
2.3.8.3. Lỗi CRC
Chuỗi CRC chứa kết quả tính toán chuỗi bit CRC của bộ truyền (kiểm tra tổng). Các bộ tiếp nhận cũng tính toán chuỗi CRC giống như cách bộ truyền đã làm. Theo đó một lỗi CRC phải được phát hiện nếu kết quả tính toán không giống với kết quả nhận được trong dãy CRC, hay nói cách khác là kết quả tính toán trong bộ truyền và bộ tiếp nhận không giống nhau. Trong trường hợp này, bộ truyền sẽ loại bỏ/ thải hồi thông báo đó và truyền một khung lỗi ở bit kế tiếp gờ phân cách CRC. Sự kiểm tra tổng CRC sẽ chỉ được dùng để phát hiện lỗi, nó không được dùng để khắc phục lỗi.
2.3.8.4. Lỗi khung
Lỗi này phải được phát hiện khi một dạng cố định của trường bit chứa một hoặc nhiều bit không hợp lệ. Tức là bộ truyền phát hiện ra một bit trội trong phần có định dạng cố định trong gờ phân cách CRC, rãnh ACK và EOF. CHÚ Ý: Trong bộ tiếp nhận,
66 một bit trội xuất hiện trong bit cuối cùng của phần kết thúc khung EOF thì không bị xem là lỗi.
2.3.8.5. Lỗi xác nhận
Với việc kiểm tra lỗi ACK thì bộ truyền sẽ kiểm tra vùng rãnh xác nhận (ACK SLOT). Nếu khung không bị lỗi thì nó là bit trội. Các lỗi được phát hiện sẽ được thông báo bằng cách truyền đi một cờ báo lỗi ở ngay tại lần truyền bit kế tiếp.
Ngoài các lỗi cơ bản kể trên, phải kể đến các lỗi cục bộ xảy ra trong phần kết thúc của khung (EOF). Cụ thể như sau:
Nếu một trong các bít trong phần kết thúc của khung (EOF) từ bit 1 đến bit 6 bị phát hiện là các bit trội thì nút đó sẽ gửi đi một cờ lỗi để toàn cục hóa lỗi đó.
2.3.9. C sở lý thuyết của việc phát hiện lỗi
Để phát hiện lỗi trong các khung dữ liệu của một thông điệp thì giao thức CAN kết hợp các cách tiếp cận sau:
-Kiểm tra vòng lặp thừa: Nó đánh giá thông tin trong khung và chèn một dòng bit kiểm tra sự dư thừa vào lúc kết thúc của quá trình truyền, và được kiểm tra lại ở cuối quá trình nhận.
-Kiểm tra khung: Kiểm tra định dạng của khung và các trường bit riêng của nó để phát hiện các lỗi về định dạng có thể xảy ra.
-Kiểm tra sự xác nhận: Nó xác minh rằng một thông báo ACK theo sau một quá trình truyền thành công.
67
Hình 2. 58 Lớp giao thức trong CAN
Hình 2. 59 Chức năng lớp giao thức trong CAN
ISO 11898 nói chung định nghĩa 02 lớp Lớp vật lý và Lớp dữ liệu – liên kết trong mô hình 07 tầng OSI, trong đó:
68 -Lớp vật lý định nghĩa cách biểu diễn cũng như cách thu nhận bit 0 và 1, cách định thời và cách đồng bộ hóa. Là cấp thấp nhất trong bộ giao vận. Bao gồm các thành phần vật lý như: đường dây, và điện áp dùng để gửi thông tin.
-Lớp dữ liệu – liên kết: được chia làm 02 lớp con nhỏ hơn là Điều khiển liên kết logic và Điều khiển truy cập trung gian (MAC) nhằm định nghĩa khung truyền và những nguyên tắc về quyền ưu tiên.
Ngoài ra, ISO 11898 còn định nghĩa một số cơ chế khác có liên quan như kiểm tra lỗi, xử lí lỗi. Cơ chế kiểm tra và xử lý lỗi được chia thành 05 loại là: lỗi bit, lỗi nhồi bit, lỗi CRC, lỗi định dạng khung và lỗi ACK.
2.3.11. Bộ lọc và tiêu chuẩn so sánh cho việc chấp nhận khung dữ liệu đến
Bộ lọc và tiêu chuẩn so sánh được sử dụng để xác định bit nào trong mã ID của khung nhận được so sánh với bộ lọc.
Hình 2. 60 Ví dụ minh họa cho bộ lọc tiêu chuẩn so sánh chấp nhận tin nhắn
-Nếu tiêu chuẩn so sánh được thiết lập là 0, thì sẽ tự động chấp nhận các khung có ID tương ứng, không quan tâm đến giá trị bit của bộ lọc.
-Nếu tiêu chuẩn so sánh được thiết lập là 1, bit ID tương ứng sẽ so sánh giá trị với bit của bộ lọc.
Ví dụ 1: Chúng ta mong muốn chỉ nhận duy nhấn khung có chứa ID là 00001567 (giá trị hexa) thì ta:
-Thiết lập bit của bộ lọc là 00001567.
-Thiết lập bit tiêu chuẩn so sánh là 1FFFFFF.
-Khi có một khung đến thì ID của nó sẽ so sánh với bit của bộ lọc mà ta đã thiết lập nó sẽ so sánh tất cả các bit, khung không đúng với ID mong muốn sẽ bị loại.
69 Ví dụ 2: Khi chúng ta muốn nhận tất cả các khung.
-Thiết lập bit của bộ lọc là 0.
-Thiết lập bit tiêu chuẩn so sánh là 0.
Ví dụ 3: Muốn nhận khung có ID 00001560 đến 00001567.