Trong một mạng CAN, nhiều thông ñiệp ngắn ñược truyền ñi rộng rãi trong toàn bộ mạng lưới, cho phép tính nhất quán về mặt dữ liệu ở mỗi nút của hệ thống.. Chức năng của bộ ñiều khiển CAN
Trang 1Đại Học Quốc Gia Tp Hồ Chí Minh
TRƯỜNG ĐẠI HỌC BÁCH KHOA
Trang 2TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH
Trang 3Nội dung luận văn bao gồm việc nghiên cứu các kiến thức về chuẩn CAN
(Controller Area Network) ñồng thời tạo ñặc tả ñể hiện thực CAN Sau ñó luận văn hiện thực mã RTL cho các ñặc tả CAN bằng ngôn ngữ Verilog
Luận văn “Thiết kế bộ ñiều khiển CAN cài ñặt trên FPGA” bao gồm 6 chương với các nội dung chính như sau:
Chương 1: Giới thiệu về lịch sử của CAN, cái nhìn tổng quát về CAN và vấn ñề
nhắm ñến của luận văn
Chương 2: Trình bày chi tiết về giao thức giao tiếp, giao tiếp CAN, và lớp vật lý
CAN
Chương 3: Trình bày chi tiết về ñặc tả của thiết kế bộ ñiều khiển CAN
Chương 4: Cài ñặt thiết kế lên FPGA và kiểm tra kết quả của thiết kế
Chương 5: Kết luận và Hướng phát triển của ñề tài
Chương 6: Phụ Lục
Trang 4Các Chữ Viết Tắt
A
C
CPU Central Processing Unit
CRC Cyclic Redundancy Check
F
Trang 5Mục lục
Chương 1 GIỚI THIỆU 8
1.1 Lịch sử của CAN 8
1.2 Cái nhìn tổng quát về CAN 8
1.3 Vấn ñề ñược nhắm tới 9
1.4 Hiện thực bộ ñiều khiển giao thức CAN trên FPGA 10
1.5 Tiến hành 11
Chương 2 GIAO TIẾP NỐI TIẾP SỬ DỤNG GIAO THỨC MẠNG ĐIỀU KHIỂN 12
2.1 Giới thiệu về giao thức giao tiếp 12
2.2 Giao thức CAN 13
2.2.1 Lớp dữ liệu CAN 14
2.3 Lớp vật lý CAN 28
2.3.1 Biểu diễn bit 28
2.3.2 Mã hóa bit 29
2.3.3 Đồng bộ và ñịnh thời bit 29
2.3.4 Tốc ñộ bit và ñộ dài bus 31
Chương 3 THIẾT KẾ BỘ ĐIỀU KHIỂN CAN 32
3.1 Qui trình thiết kế 33
3.2 Module Can Top can_top 34
3.2.1 Chức năng 34
3.2.2 Sơ ñồ khối 34
3.3 Thiết kế lớp vật lý - Module Bit Timing Logic can_btl 36
3.3.1 Chức năng 36
3.3.2 Sơ ñồ khối 36
3.3.3 Máy trạng thái 38
3.3.4 Mô tả hoạt ñộng 39
3.4 Thiết kế lớp dữ liệu - Module Bit Stream Processor can_bsp 40
3.4.1 Chức năng 40
3.4.2 Sơ ñồ khối 40
3.4.3 Máy trạng thái 46
3.4.4 Mô tả hoạt ñộng 52
3.4.5 Khối con can_acf (CAN Acceptance Filter Mode) 52
3.4.6 Khối con can_crc 54
3.4.7 Khối con can_fifo 56
3.5 Module Cấu Hình Thanh Ghi 57
3.5.1 Chức năng 57
3.6 Hoạt ñộng module CAN 76
3.6.1 Hoạt ñộng ñồng bộ và ñịnh thời bit 76
3.6.2 Hoạt ñộng phân xử bus 78
3.6.3 Hoạt ñộng truyền dữ liệu 83
3.6.4 Hoạt ñộng nhận dữ liệu 85
3.6.5 Hoạt ñộng xử lý lỗi 88
3.7 Kết quả của quá trình tổng hợp (synthesis) 94
3.7.1 Kiểm tra Formal 94
3.7.2 Số cổng của netlist (area) 96
3.7.3 Công suất của netlist (power) 97
3.7.4 Kết quả timing của netlist 98
3.8 So sánh với thiết kế khác 101
Chương 4 CÀI ĐẶT THIẾT KẾ LÊN FPGA và KIỂM TRA KẾT QUẢ CỦA THIẾT KẾ103 4.1 Cài ñặt thiết kế lên FPGA board 103
4.1.1 Sơ lược về phần mềm thiết kế hệ thống trên thiết bị lập trình ñược (System On a Programmable Chip – SOPC) 103
4.1.2 Kiểm tra tính năng ñọc ghi các thanh ghi 104
4.1.3 Kiểm tra tính năng truyền và nhận 105
4.1.4 Kiểm tra tính năng phân xử bus 105
Trang 64.1.5 Kiểm tra tính năng xử lý lỗi 106
Chương 5 KẾT LUẬN và HƯỚNG PHÁT TRIỂN CỦA ĐỀ TÀI 107
5.1 Kết luận 107
5.2 Hướng phát triển của ñề tài 107
Tài liệu tham khảo 108 Chương 6 Phụ Lục 109
6.1 Chức năng của bộ xử lí Altera NIOS trong hệ thống của chúng ta 109
6.2 Thiết kế hệ thống ñể kiểm tra Top Module CAN 109
6.3 Thiết kế bộ tạo dao ñộng tương thích với Altera DE2 board 113
6.4 Kết nối 2 Top Module CAN ñể thực hiện giao tiếp 115
6.5 Tổng hợp hệ thống bằng Quartus II 115
6.5.1 Tạo ràng buộc về Timing cho quá trình tổng hợp 115
6.5.2 Tạo kết nối ra các thiết bị ngoại vi của FPGA 116
6.5.3 Tạo kết nối cho Signal Tap ñể quan sát kết quả mô phỏng bằng waveform 117
6.5.4 Tổng hợp hệ thống bằng Design Compiler 118
6.5.5 Kiểm tra kết quả tổng hợp 119
6.5.6 Cài ñặt hệ thống lên FPGA DE2 Altera 120
6.6 Kiểm tra kết quả của thiết kế 120
6.6.1 Giới thiệu sơ lược về Các tính năng hổ trợ cho việc kiểm tra thiết kế 120
Trang 7Mục lục hình vẽ
Hình 1-1 Giao tiếp dùng CAN 8
Hình 1-2 Giải pháp cho Bộ ñiều khiển CAN 10
Hình 2-1 Sơ ñồ ñơn giản của mạng truyền tin 13
Hình 2-2 Mô hình lớp ISO/OSI giao thức CAN 14
Hình 2-3 Phân xử bus CAN 16
Hình 2-1 Frame dữ liệu CAN 17
Hình 2-2 Frame từ xa CAN 19
Hình 2-3 Frame Active Error 20
Hình 2-4 Frame Passive Error 20
Hình 2-5 Frame quá tải 21
Hình 2-6 Bit Stuffing 22
Hình 2-7 Trạng thái lỗi trong CAN 25
Hình 2-8 Sơ ñồ ñi dây trong CAN 28
Hình 2-9 Trạng thái logic 0 và logic 1 trong CAN 29
Hình 2-10 Định thời bit trong CAN 30
Hình 3-1 Hình sơ ñồ khối bộ ñiều khiển CAN 32
Hình 3-2 Hình biểu diễn qui trình thiết kế 33
Hình 3-3: Hình biểu diễn sơ ñồ khối của module can_top 34
Hình 3-4: Bảng sơ ñồ chân module can_btl 36
Hình 3-5: Hình biểu diễn máy trạng thái của module can_btl 38
Hình 3-6: Bảng mô tả quá trình ñồng bộ cứng và thời ñiểm lấy mẫu 39
Hình 3-7: Hình biểu diễn sơ ñồ khối module Bit Stream Processor can_bsp 41
Hình 3-8: Hình biểu diễn máy trạng thái chính của module can_bsp 46
Hình 3-9: Hình biểu diễn các trạng thái con của rx_state 49
Hình 3-10: Hình biểu diễn trạng thái xử lý lỗi của nút CAN 51
Hình 3-11: Hình biểu diễn quá trình nhận dữ liệu 52
Hình 3-12: Hình biểu diễn sơ ñồ khối module Can Acf 53
Hình 3-13: Hình biểu diễn quá trình lọc thông ñiệp 54
Hình 3-14: Hình biểu diễn sơ ñồ khối module Can CRC 55
Hình 3-15: Hình biểu diễn sơ ñồ khối module Can Fifo 56
Hình 3-16: Hình biểu diễn ghi dữ liệu vào module can fifo 57
Hình 3-17: Hình biểu diễn sơ ñồ khối module Can Register 58
Hình 3-18: Giao thức ghi dữ liệu vào thanh ghi 75
Hình 3-19: Giao thức ñọc dữ liệu vào thanh ghi 76
Hình 3-20: Biễu diễn ngắt do CAN bắt ñầu nhận dữ liệu 76
Hình 3-21: Hình biểu diễn tiến trình cài ñặt các thanh ghi ñịnh thời 77
Hình 3-22: Thời gian bit lý thuyết 77
Hình 3-23: Hình biểu diễn quá trình ñồng bộ ñúng thời gian 77
Hình 3-24: Hình biểu diễn quá trình ñồng bộ lại trễ so với ñoạn ñồng bộ 78
Hình 3-25: Hình biểu diễn quá trình ñồng bộ lại sớm so với ñoạn ñồng bộ 78
Hình 3-26: Hình biểu diễn tiến trình cài ñặt và hoạt ñộng trong việc phân xử bus 79
Hình 3-27: Hình biểu diễn về việc mất quyền phân xử 80
Hình 3-28: Hình biểu diễn dạng sóng của việc mất quyền phân xử bus 80
Hình 3-29: Hình biểu diễn về việc thắng quyền phân xử bus 82
Hình 3-30: Hình biểu diễn vế việc thắng quyền phân xử bus 82
Hình 3-31: Hình biểu diễn của tiến trình cài ñặt và hoạt ñộng của quá trình truyền 83
Hình 3-32: Hình biểu diễn của quá trình truyền frame dữ liệu 85
Hình 3-33: Hình biểu diễn tiến trình của quá trình nhận dữ liệu 86
Hình 3-34: Hình biểu diễn quá trình nhận trong chế ñộ cơ bản 87
Hình 3-35: Hình biểu diễn lỗi mức thông ñiệp CRC 89
Hình 3-36: Hình biểu diễn lỗi mức thông ñiệp ñịnh dạng 89
Hình 3-37: Hình biểu diễn lỗi mức thông ñiệp ACK 90
Hình 3-38: Hình biểu diễn lỗi mức bit quan sát 90
Hình 3-39: Hình biểu diễn lỗi mức bit stuff 91
Hình 3-40: Hình biểu diễn qui tắc chặn lỗi 1 92
Trang 8Hình 3-41: Hình biểu diễn qui tắc chặn lỗi 2 92
Hình 3-42: Hình biểu diễn qui tắc chặn lỗi 3 92
Hình 3-43: Hình biểu diễn ngoại lệ 1 của qui tắc chặn lỗi 3 93
Hình 3-44: Hình biểu diễn chuyển ñổi trạng thái từ error active sang error passive 93
Hình 3-45: Hình biểu diễn chuyển ñổi trạng thái từ Error Passive sang Bus Off 94
Hình 4-1 Các thành phần bên trong SOPC 103
Hình 4-2 Hệ thống kiểm tra thiết kế CAN 104
Hình 4-3: Hình biễu diễn dạng sóng của kiểm tra ñọc ghi các thanh ghi 104
Hình 4-4: Hình biễu diễn xuất ra dữ liệu ra bộ nhớ 105
Hình 4-6: Hình biểu diễn việc xuất dữ liệu ra bộ nhớ của quá trình truyền và nhận 105
Hình 4-7: Hình biểu diễn tính năng phân xử bus 106
Hình 4-8: Hình biểu diễn tính năng phân xử bus 106
Hình 4-9: Hình biểu diễn dạng sóng của phát hiện lỗi ñịnh dạng 106
Hình 6-1 Chi tiết quá trình tạo mạch dao ñộng cho hệ thống 114
Hình 6-2 Module kết nối 2 thiết kế CAN ñể thực hiện việc kiểm tra 115
Hình 6-3 Tạo ràng buột Timing cho việc tổng hợp hệ thống trước khi ñổ hệ thống vào FPGA 116
Hình 6-4 Tạo kết nối giữa hệ thống và các thành phần của FPGA 117
Hình 6-5 Tạo kết nối cho Signal Tap 118
Hình 6-6 Cấu hình EDA Tool cho quá trình tổng hợp 119
Hình 6-7 Kiểm tra kết quả tổng hợp - Ràng buột Timing 119
Hình 6-8 Cài ñặt hệ thống lên FPGA với công cụ Programmer 120
Hình 6-9 Kết nối SignalTap vào FPGA ñể hiển thị kết quả thiết kế CAN 121
Hình 6-10 Sơ ñồ khối bên trong SignalTap 121
Hình 6-11 Hiển thị dạng sóng bằng Altera Signal Tap 122
Hình 6-12 Sơ lược cấu hình của Altera Debug Client 124
Trang 9Mục lục bảng
Bảng 3-1: Bảng mô tả các tín hiệu vào/ra của module can_top 34
Bảng 3-2: Bảng mô tả tín hiệu vào/ra của module Bit Timing Logic 37
Bảng 3-3: Bảng mô tả máy trạng thái của module can_btl 38
Bảng 3-4: Bảng mô tả các tín hiệu chuyển trạng thái của module can_btl 38
Bảng 3-5: Bảng mô tả tín hiệu vào/ra của module 42
Bảng 3-6: Bảng mô tả máy trạng thái chính của module can_bsp 47
Bảng 3-7: Bảng mô tả các tín hiệu chuyển trạng thái của máy trạng thái chính của module can_bsp 47
Bảng 3-8: Bảng mô tả các tín hiệu chuyển trạng thái của máy trạng thái chính của module can_bsp 48
Bảng 3-9: Bảng mô tả các trạng thái con của rx_state 49
Bảng 3-10: Bảng mô tả các tín hiệu chuyển trạng thái của rx_state 49
Bảng 3-11: Bảng mô tả trạng thái xử lý lỗi 51
Bảng 3-12: Bảng mô tả các tín hiệu chuyển trạng thái xử lý lỗi 51
Bảng 3-13: Bảng mô tả tín hiệu vào/ra module Can Acf 53
Bảng 3-14: Bảng mô tả tín hiệu vào/ra module Can CRC 55
Bảng 3-15: Bảng mô tả tín hiệu vào/ra module Can Fifo 56
Bảng 3-16: Bảng mô tả tín hiệu vào/ra module Can Register 59
Bảng 3-17 Bảng so sánh CAN ñược thiết kế với Renesas CAN và chuẩn 101
Trang 10Chương 1 GIỚI THIỆU
1.1 L ị ch s ử c ủ a CAN
CAN (Controller Area Network) là một giao thức giao tiếp nối tiếp dùng bus chia sẻ bắt
ñầu phát triển vào năm 1986 bởi Robert Bosch GmbH Sự gia tăng số lượng của các hệ
thống ñiều khiển phân bố trên xe hơi và sự gia tăng chi phí ñi dây ñiện trên thân xe ñã dẫn ñến sự ra ñời của giao thức CAN nối tiếp dùng cho ô tô Mặc dù ban ñầu nó chỉ ñược
sử dụng trong công nghiệp ô tô, nhưng nó ñã nhanh chóng ñược ứng dụng trong các hệ thống nhúng ví dụ như hệ thống ñiều khiển trong công nghiệp nơi mà giao tiếp tốc ñộ cao
ñược yêu cầu Với sự công nhận của ngày càng nhiều ngành công nghiệp, giao thức ñã ñược ñổi tên ngắn gọn là CAN
1.2 Cái nhìn t ổ ng quát v ề CAN
Một hệ thống CAN gởi ñi các thông ñiệp qua một mạng lưới bus nối tiếp Mỗi nút ñược kết nối với nhau thông qua mạng lưới Không cần thiết phải có một bộ ñiều khiển trung tâm Sơ ñồ khối của một mạng CAN ñiển hình ñược trình bày trong 1.1
Hình 1-1 Giao tiếp dùng CAN
CAN là một giao thức giao tiếp multi-master nên mỗi nút trong hệ thống ngang hàng với nhau Mỗi bộ xử lí có thể gởi thông ñiệp tới các bộ xử lí còn lại Nếu một bộ xử lí nào ñó gặp thất bại, các bộ xử lí khác trong hệ thống vẫn tiếp tục hoạt ñộng bình thường Khi một nút nào ñó muốn truyền thông ñiệp trên mạng thì phải ñợi cho ñến khi bus rãnh Mỗi thông ñiệp có một phần nhận dạng và mọi nút ñều nhận ñược thông ñiệp Nút sẽ chọn ra thông ñiệp thích hợp và bỏ qua các thông ñiệp còn lại
Giao thức CAN ñược thiết kế dùng cho những thông ñiệp ngắn dài không quá 8 byte Giao thức không ngắt quãng dữ liệu ñang truyền nhưng nó gán ñộ ưu tiên cho các thông
ñiệp ñể ngăn chặn sự xung ñột và ñể ñảm bảo rằng những thông ñiệp khẩn cấp ñược
truyền ñi trước Giao thức CAN còn bao gồm các cơ chế dò lỗi và hạn chế lỗi mạnh mẽ
Trang 11nhằm ñảm bảo cho sự truyền nhận với ñộ tin cậy cao Tính mạnh mẽ còn thể hiện ở chỗ mỗi nút bị lỗi sẽ ñược loại bỏ khỏi mạng lưới mà không ảnh hưởng tới phần còn lại của mạng lưới Không giống như một mạng lưới truyền thống như USB hay Ethernet, CAN không gởi những block lớn dữ liệu từ nút A sang nút B dưới dự giám sát của một bộ ñiều khiển bus Trong một mạng CAN, nhiều thông ñiệp ngắn ñược truyền ñi rộng rãi trong toàn bộ mạng lưới, cho phép tính nhất quán về mặt dữ liệu ở mỗi nút của hệ thống
Giao tiếp qua lại trong một CAN bus bắt ñầu khi ứng dụng cung cấp cho bộ ñiều khiển
dữ liệu cần truyền Bộ ñiều khiển cung cấp giao tiếp giữa ứng dụng và CAN bus Chức năng của bộ ñiều khiển CAN là biến ñổi dữ liệu ñược ứng dung cung cấp thành thông
ñiệp dạng frame ñể truyền ñi trên bus Một bộ thu phát nhận dòng dữ liệu nhập nối tiếp từ
bộ ñiều khiển và biến ñổi thành một tín hiệu vi sai Những tín hiệu vi sai ñược truyền vật
lý trên CAN bus
CAN bus bao gồm ñường tín hiệu CAN CAN-High và CAN-Low Hai ñường tín hiệu này ñược phân cực ñể loại nhiễu CAN sử dụng một kĩ thuật phân xử bit trong ñó thứ tự
ưu tiên truy cập bus ñược xác ñịnh bởi một phần nhận dạng 11 bit Nhờ vào kiến trúc này
mà một nút với phần nhận dạng thấp hơn sẽ có thứ tự ưu tiên cao hơn
Mỗi bộ ñiều khiển trong mạng sẽ nhận bất kì thông ñiệp nào ñược truyền trên bus Dựa vào cơ chế lọc, bộ ñiều khiển quyết ñịnh liệu thông tin nhận ñược có thích hợp với ứng dụng mà nó giao tiếp hay không và sau ñó tiến hành xử lí thông tin
1.3 V ấ n ñề ñượ c nh ắ m t ớ i
Vấn ñề cuối cùng ñược nhắm tới là thiết kế và phát triển một con chip hiện thực bộ
ñiều khiển CAN Con chip này sẽ giao tiếp với ứng dụng qua một bộ cảm biến
(sensor) và một bộ phát (actuator) Cảm biến cung cấp tín hiệu tương tự ñể truyền trên mạng Tín hiệu tương tự gởi từ bộ cảm biến của ứng dụng tới bộ chuyển ñổi ADC và
ñược chuyển sang tín hiệu số Tín hiệu số sau ñó gởi tới bộ vi xử lí ñể xử lí dữ liệu và
quyết ñịnh việc truyền thông ñiệp thông qua mạng CAN Nó cũng xử lí các thông
ñiệp nhận ñược từ mạng CAN Sơ ñồ khối của bộ ñiều khiển CAN ñược trình bày
trong hình vẽ 1.2
Trang 12Hình 1-2 Giải pháp cho Bộ ñiều khiển CAN
Bộ ñiều khiển giao thức CAN nhận thông ñiệp chưa ñược ñịnh dạng từ bộ vi xử lí, tạo frame theo ñặc tả của giao thức và cũng tái tạo thông ñiệp từ frame nhận ñược Các tín hiệu số truyền ñi bởi bộ ñiều khiển giao thức ñược chuyển thành tín hiệu ñiện bởi bộ thu phát ñể tương thích với ñường truyền vi sai Sự tích hợp các khối riêng rẽ này lại tạo nên bộ ñiều khiển CAN
1.4 Hi ệ n th ự c b ộ ñ i ề u khi ể n giao th ứ c CAN trên FPGA
Sự quan tâm ñến hệ thống CAN ñang gia tăng một cách nhanh chóng bởi vì sẽ có ngày càng nhiều các ứng dụng dùng CAN và thêm vào ñó nhiều thiết bị hiện có trên thị trường có khả năng giao tiếp với hệ thống CAN Những yêu cầu ngày một tăng của các ứng dụng liên quan tới mức ñộ tích hợp, khả năng sử dụng lại của code và sản phẩm cuối cùng dẫn tới nhu cầu phát triển một hệ thống hoàn chỉnh trên một con chip Mục tiêu của luận văn này là thiết kế, hiện thực và trình bày công việc của một
bộ ñiều khiển giao thức CAN
Bộ chuyển ñổi ADC
Tín hiệu tương tự từ cảm biến ñược chuyển sang tín hiệu số và gởi tới bộ vi
xử lí
Bộ vi xử lí
Cung cấp thông ñiệp sẽ truyền ñi và nhận thông ñiệp từ bộ ñiều khiển giao thức
Bộ ñiều khiển giao thức CAN
Tạo frame từ thông ñiệp theo giao thức
và tái tạo thông ñiệp từ các frame nhận
ñược
Bộ thu phát
Chuyển tín hiệu nhị phân sang tín hiệu
ñiện ñể tương thích với môi trường
truyền vật lí
phát
CAN bus
Trang 131.5 Ti ế n hành
Mục tiêu của luận văn này là hiện thực bộ ñiều khiển CAN trên Mô hình RTL (Register Transfer Level) của bộ ñiều khiển giao thức ñược phát triển dựa trên Verilog HDL và việc mô phỏng chức năng của mô hình ñược ñã ñạt ñược kết quả Việc truyền nhận các frame thông ñiệp khác nhau ñược kiểm tra với mô hình mạng CAN có 4 bộ ñiều khiển giao thức Hành vi chính xác của bộ ñiều khiển giao thức CAN ñược kiểm tra nhiều hơn bằng việc gây ra lỗi và kiểm lại cơ chế dò lỗi
Mô hình tổng hợp của bộ ñiều khiển giao thức CAN ñã ñạt ñược và kiểm tra tương
ñương ñược thực hiện Mô phỏng ñộng ñược thực hiện trên FPGA ñể kiểm tra tính
năng của bộ ñiều khiển giao thức
Trang 14Chương 2 GIAO TIẾP NỐI TIẾP SỬ DỤNG GIAO THỨC MẠNG ĐIỀU KHIỂN
2.1 Gi ớ i thi ệ u v ề giao th ứ c giao ti ế p
Nhu cầu giao tiếp tăng mạnh dẫn ñến sự phát triển ña dạng của các loại giao thức giao tiếp Các giao thức khác nhau tùy theo ứng dụng mà chúng thiết kế Cụ thể là, các giao thức nhắm vào các ứng dụng công nghiệp là giao thức “ñầu cuối cấp cao” (higher end)
“ñầu cuối cấp thấp” (lower end) Giao thức “ñầu cuối cấp cao” hay còn gọi là “factory bus” nhắm ñến hệ thống thông tin toàn bộ factory, trong ñó giao thức “ñầu cuối cấp thấp” hay còn gọi là “fieldbus” nhắm ñến hệ thống thông tin xử lý nội hay còn gọi là hệ thống thông tin bộ cảm biến/ bộ phát
Thuận lợi về chi phí và tính năng cao cấp bởi kĩ thuật bán dẫn cùng với sự phát triển của mạng và hệ thống truyền thông kết quả là xuất hiện nhu cầu về các phương tiện tiên tiến hơn cho hệ thống thông tin chuẩn hóa cao cấp trong lĩnh vực ứng dụng fieldbus Ngành công nghiệp này ñòi hỏi những hệ thống ñiều khiển linh ñộng mà có mức ñộ chuẩn hóa cấp cao Mức ñộ chuẩn hóa cấp cao này dẫn ñến các các giải pháp có thể dùng lại ñược dưới dạng các mô ñun phần cứng và phần mềm mà chúng dễ dàng thích ứng các nhu cầu
và các giải pháp ña dạng Số lượng giao thức fieldbus ñã tăng ñều ñặn trong 2 thập kỉ vừa qua, trong ñó Profibus, Interbus-S, P-Net, LON hay FIP là các chuẩn giao thức ñược chấp nhận
Ngành công nghiệp xe hơi ñã phát triển một số hệ thống ñiện tử ñáp ứng nhu cầu ngày càng cao về sự tiện lợi, tiện nghi và ñộ an toàn ñồng thời là yêu cầu về giảm sự tiêu thụ nhiên liệu và cải thiện mức ñộ ô nhiễm Kết quả là mức ñộ phức tạp của hệ thống ñiều khiển và nhu cầu về trao ñổi dữ liệu ñòi hỏi ngày càng nhiều dây dẫn và các tín hiệu kết nối Điều ñó thúc giục sự thay thế phương pháp ñi dây hiện tại bằng kiến trúc mạng ở ñó tất cả các nút trong mạng giao tiếp với nhau qua bus chung Sử dụng CAN, bộ ñiều khiển,
bộ cảm biến, và bộ phát giao tiếp với nhau theo thời gian thực, tốc ñộ lên ñến 1Mbits/s, qua 2 dây bus dữ liệu nối tiếp
Giao thức CAN ñược mô hình bởi Virtual Leveled Systems Architecture (VLSA) dựa trên khái niệm “biến chia sẻ” (Shared Variables) Trong mô hình này, các tác vụ riêng lẻ nằm trên hệ thống ñiều khiển truyền tin có nhiệm vụ như là một phần của chương trình
ñiều khiển
Trang 15Hình 2-1 Sơ ñồ ñơn giản của mạng truyền tin
Trong hình trên, tất cả các nút kết nối ñến bus CAN chung Các nút tương tác với quá trình xử lý thực qua các cảm biến và bộ phát Để truyền thông tin trên bus, các nút sử dụng phương pháp phân xử dựa trên ñộ ưu tiên ñộng Mỗi nút trong mạng sẽ nhận bất cứ thông ñiệp nào truyền trên bus, các nút lọc thông ñiệp tương ứng dựa trên giải thuật lọc Dựa trên thông ñiệp ñã nhận, các ứng dụng gửi các tín hiệu ñiều khiển ñến các thiết bị
ñiều khiển qua bộ phát
2.2 Giao th ứ c CAN
Giao thức CAN là một chuẩn quốc tế ñược ñịnh nghĩa bởi ISO 11898 và ISO 11519 Sự khác biệt giữa hai chuẩn trên là lớp vật lý, ở ñó ISO 11898 xử lý các ứng dụng tốc ñộ cao lên ñến 1Mbit/s ISO 11519 chỉ xử lý các ứng dụng lên ñến 125kbit/s Giao thức CAN chỉ gồm lớp dữ liệu (gồm Logic Link Control –LLC và Media Access Control - MAC) và lớp vật lý Mô hình lớp ISO/OSI cho giao thức CAN ñược trính bày ở hình 2
Trang 16Hình 2-2 Mô hình lớp ISO/OSI giao thức CAN
Lớp dữ liệu CAN ñiều khiển hệ thống thông ñiệp Lớp dữ liệu xây dựng frame dữ liệu ñể giữ dữ liệu và ñiều khiển thông tin Nó cũng cung cấp các dịch vụ khác như là nhận dạng frame, phân xử bus, bit stuffing, phát hiện lỗi, dấu hiệu lỗi, cách ly lỗi và truyền lại tự
ñộng các frame lỗi
Lớp vật lý CAN có chức năng truyền dữ liệu giữa các nút khác nhau trong mạng, nó ñịnh nghĩa các tín hiệu ñược truyền như thế nào và do ñó nó liên quan ñến các vấn ñề mã hóa,
ñịnh thời và ñồng bộ dòng bit ñược truyền
Lớp ứng dụng ñươc ñặc tả bởi các giao thức lớp cao hơn như là CAL/CANOpen và CAN Kingdom, DeviceNet [7]
2.2.1 L ớ p d ữ li ệ u CAN
Trang 172.2.1.1 Phân xử bus
CAN là một giao thức dùng cho các thông ñiệp ngắn Mỗi lần truyền có thể mang 0 – 8 byte dữ liệu CAN sử dụng CSMA/CD+AMP (Carrier Sense Multiple Access/ Collision Detection with Arbitration on Message Priority) Do ñó, giao thức này là ñịnh hướng thông ñiệp và mỗi thông ñiệp có ñộ ưu tiên cụ thể trong trường hợp nó cùng truy cập bus Khi một thông ñiệp ñang truyền, nó không bao giờ bị ngắt Trong suốt trạng thái bus rảnh, bất kì nút nào có thể truy cập bus CAN Trong khi có nhiều sự truy cập, ñộ ưu tiên
ñược quyết ñịnh bởi phương thức gọi là “Sự phân xử không phá hủy”, có nghĩa là thông ñiệp với ñộ ưu tiên cao hơn phải tiếp tục truyền thông ñiệp mà không bắt ñầu truyền
thông ñiệp lại từ ñầu
Sự phân xử bus ñược thực hiện trong suốt quá trình truyền trường mã nhận dạng Mỗi thông ñiệp CAN có 11 bit mã nhận dạng Trường mã nhận dạng này là bộ phận chính trong việc phân xử của CAN, nó nằm ngay sau bit Start Mã nhận dạng không chỉ xác
ñịnh loại thông ñiệp mà còn xác ñịnh ñộ ưu tiên của thông ñiệp Trong suốt quá trình
phân xử, mỗi nút truyền giám sát trạng thái bus và so sánh bit nhận với bit truyền Nếu
1 bit ưu thế logic 0 (dominant bit) ñược nhận khi 1 bit không ưu thế (recessive bit) ñược truyền thì nút này mất quyền phân xử Ngay khi nút mất quyền phân xử, nó ngừng truyền
và nhận các thông ñiệp ñang truyền trên mạng Ở giai ñoạn cuối của quá trình truyền trường phân xử, tất cả các nút còn lại (ngoại trừ 1 nút) mất quyền phân xử, và khi ñó thông ñiệp có ñộ ưu tiên cao nhất sẽ truyền trên mạng mà không có gì cản trở
Khi bus lại rảnh, bộ ñiều khiển CAN tự ñộng cố gắng truyền thông ñiệp của nó Một sự phân xử ñược thực hiện và thông ñiệp với ñộ ưu tiên cao nhất sẽ ñược truyền trên mạng trong những chu kỳ tiếp theo sau Giao thức CAN yêu cầu mỗi nút có một mã nhận dạng xác ñịnh ñể ñảm bảo hai thông ñiệp không có cùng mã nhận dạng khi truy cập bus
Trang 18Hình 2-3 Phân xử bus CAN
Hình 2-3 minh họa phương thức “sự phân xử không quá hủy” 2 nút A và B có yêu cầu truyền Giá trị bit bus CAN ñược lấy mẫu từ bus là ñầu ra của cổng AND với ñầu vào là các bit truyền của nút A và B
Trong ví dụ trên, cả hai nút bắt ñầu truyền ngay khi bus rảnh Cả hai nút A và B truyền cùng giá trị bit cho tới khi bit thứ tư của trường mã nhận dạng Ở bit thứ tư của mã nhận dạng, nút A truyền bit không ưu thế logic 1, nút B truyền bit ưu thế logic 0 Nút A mất quyền phân xử và nó ngừng việc truyền và chuyển sang chế ñộ nhận
2.2.1.2 Truyền thông ñiệp CAN
CAN sử dụng thông ñiệp cố ñịnh ngắn có ñịnh dạng khác nhau nhưng ñều có chiều dài giới hạn, tối ña là 94 bit Không có ñịa chỉ tường minh trong thông ñiệp, thay vào ñó thông ñiệp mang nội dung có ñịnh ñịa chỉ, có nghĩa là nội dung không tường minh xác
ñịnh ñịa chỉ Giao thức CAN ñặc tả 4 loại frame khác nhau: frame dữ liệu (data frame),
ñể truyền dữ liệu; frame từ xa (remote frame), ñể yêu cầu dữ liệu; frame lỗi, ñể mang dấu
hiệu phát hiện lỗi; frame quá tải (overload frame), ñể tăng thời gian trễ giữa các frame
2.2.1.3 Frame dữ liệu ( Data Frame)
Frame dữ liệu là loại thông ñiệp phổ biến nhất , CAN sử dụng nó ñể truyền dữ liệu trên khắp mạng Frame dữ liệu có ñịnh dạng cố ñịnh, chiều dài thay ñổi nhưng có giới hạn Frame dữ liệu gồm 8 trường: bit Start, trường phân xử (arbitration field), trường ñiều
Trang 19khiển (control field), trường dữ liệu (data field), trường CRC (CRC field), trường ACK, trường kết thúc frame (end of frame field) và trường khoảng cách giữa các frame (Inter frame space)
Giao thức CAN ñặc tả 2 loại frame: frame ñịnh dạng cơ bản (base format frame) và frame
ñịnh dạng mở rộng (extended format frame) Đặc tả CAN 2.0A ñịnh nghĩa frame ñịnh
dạng cơ bản có 11 bit mã nhận dạng trong khi CAN 2.0B ñịnh nghĩa frame ñịnh dạng mở rộng có 29 bit mã nhận dạng Định dạng mở rộng ñược sử dụng trong các hệ thống phức tạp với mật ñộ lưu thông cao, ở ñó số lượng thông ñiệp tạo ra bởi bộ truyền trên mạng lớn hơn số lượng mã hóa nhận dạng có thể có mà CAN gán cho các bộ truyền ñể bảo ñảm mỗi thông ñiệp có mã nhận dạng duy nhất CAN cơ bản 11 bit mã nhận dạng cung cấp
211 hay 2048 mã nhận dạng khác nhau, trong khi CAN mở rộng 29 bit mã nhận dạng cung cấp 229 hay 537 triệu mã nhận dạng Thiết kế này sử dụng CAN 2.0A
Hình 2-1 Frame dữ liệu CAN
Bit Start: bit 0 ñánh dấu bắt ñầu frame dữ liệu Bus CAN phải ở trạng thái rảnh trước khi truyền bit Start Tất cả bộ nhận trên bus sử dụng bit này ñể ñồng bộ clock của nó với clock của bộ truyền
Trường phân xử: gồm 12 bit, 11 bit mã nhận dạng và bit yêu cầu truyền từ xa (Remote Transfer Request, RTR bit) Trường này dùng cho 2 mục ñích, mục ñích thứ nhất là cho biết ñịa chỉ logic của thông ñiệp và mục ñích thứ hai là xác ñịnh nút truy cập bus CAN
Các bit mã nhận dạng ñược truyền theo trật tự từ ID10 ñến ID0 ñể thỏa mãn phương thức phân xử không phá hủy của CAN Giá trị trường này càng nhỏ, ñộ ưu tiên của thông ñiệp càng cao Một thông ñiệp với tất cả các bit mã nhận dạng bằng 0 sẽ có ñộ ưu tiên cao hơn bất cứ thông ñiệp nào trên mạng
Trang 20Bit RTR cho biết liệu frame là frame dữ liệu hay frame từ xa Với frame dữ liệu thì bit RTR phải bằng 0 Bit RTR ñược sử dụng bởi bộ nhận ñể bộ nhận yêu cầu bộ truyền từ xa gửi dữ liệu Nếu bit này bằng 1, frame không chứa trường dữ liệu thậm chí mã chiều dài
dữ liệu có giá trị bất kỳ Bộ truyền nhận ñược bit RTR sẽ khởi ñộng việc truyền frame dữ liệu Frame yêu cầu và frame trả lời là hai frame hoàn toàn khác nhau trên bus Điều ñó là
vì frame trả lời có thể bị trễ bởi vì có thông ñiệp có ñộ ưu tiên cao hơn
Trong trường hợp frame dữ liệu và frame từ xa truyền ñồng thời với ñộ mã nhận dạng như nhau, bit RTR sẽ quyết ñịnh ñộ ưu tiên Bởi vì frame dữ liệu có bit RTR logic 0 nên
nó có ñộ ưu tiên cao hơn frame từ xa với bit RTR logic 1
Trường ñiều khiển: gồm 6 bit, bit mã nhận dạng mở rộng (Identifier Extension, IE), bit
dự phòng, và 4 bit chiều dài (DLC)
Bit ñầu tiên của trường ñiều khiển là bit IE Bit này ñược truyền như bit ưu thế logic 0 trong thông ñiệp ñịnh dạng chuẩn cho biết không còn bit nhận dạng nào trong thông ñiệp Bit thứ hai là bit dự trữ, ñược truyền dưới dạng bit 0 Bốn bit cuối chứa chiều dài dữ liệu cho trường dữ liệu theo sau Bit DLC cho biết số lượng byte trong trường dữ liệu Giá trị chính xác của trường DLC từ 0 ñến 8 Bởi vì 4 bit có thể lớn hơn 8 nên nếu giá trị chiều dài dữ liệu lớn hơn 8 thì giả dụ rằng frame gồm 8 byte dữ liệu
Trường dữ liệu: giữ dữ liệu ứng dụng ñược truyền Trường này có chiều dài thay ñổi Trường này chứa từ 0 – 8 byte dữ liệu Dữ liệu ñược truyền với bit có trọng số cao truyền trước
Trường CRC: gồm 15 bit chuỗi CRC và bit kết thúc CRC logic 1 Bộ nhận sử dụng chuỗi CRC ñể kiểm tra liệu chuỗi dữ liệu có bị mất mát hay có lỗi trong lúc truyền hay không
Trường ACK(acknowledgement): gồm 2 bit, chứa bit khe ACK và bit kết thúc logic 1
Bộ truyền truyền bit ACK logic 1 Bất cứ bộ nhận nào nhận thành công sẽ trả lời 1 bit logic 0 Bộ truyền nhận ñược bit logic 0 trong khe ACK hiểu rằng có ít nhất một nút ñã nhận ñược thông ñiệp thành công
Trường kết thúc frame (EOF): trường ñánh dấu kết thúc frame, gồm 1 chuỗi 7 bit logic 1
Trường khoảng cách frame: mỗi frame dữ liệu hay frame từ xa ñược chia bởi frame trước bằng trường này Trường này gồm 1 chuỗi ít nhất 3 bit logic 1 Bus duy trì trạng thái rảnh sau chuỗi bit này, hay một frame mới bắt ñầu với bit Start logic 0 Nếu một trong hai bit
ñầu tiên của bit này là logic 0 thì một frame quá tải ñã bắt ñầu khởi ñộng
Trang 212.2.1.4 Frame từ xa (Remote Frame)
Trong mạng CAN, một nút với vai trò bộ nhận khởi ñộng việc truyền dữ liệu bằng thông
ñiệp “yêu cầu truyền dữ liệu từ xa” (Remote Transmission Request) Yêu cầu từ xa ñược
gửi thường xuyên ñể cập nhật thông tin từ các nút khác Tính chất này hữu dụng trong tình huống ở nút mạng tạm thời off-line có mong muốn kết nối lại vào mạng Nút có thông tin mà chưa ñược cập nhật Trong trường hợp ñó, nút ñó không cần ñợi cho ñến khi
bộ truyền tương ứng gửi thông ñiệp Nút ñó có thể cập nhật thông tin có sẵn bằng cách quét tất cả thông ñiệp cần thiết sau khi gửi ñi frame từ xa ñến bộ truyền tương ứng trên mạng
Bộ nhận qua mã nhận dạng của frame từ xa gửi thông ñiệp ñến nút mà nó cần dữ liệu Mỗi nút trong mạng nhận frame RTR Dựa vào mã nhận dạng, ứng dụng phát hiện rằng liệu nó có là bộ truyền tương ứng của thông ñiệp hay không Bộ truyền nhận ñược “yêu cầu truyền từ xa” sẽ khởi ñộng việc truyền frame dữ liệu Frame yêu cầu và frame trả lời
là hai frame hoàn toàn khác nhau trên bus Điều ñó có nghĩa là frame trả lời có thể bị trễ bởi vì thông ñiệp có ñộ ưu tiên cao hơn sẽ ñược truyền, thêm vào ñó là ñộ trễ của ứng dụng Một thuận lợi của ñặc tính này là thông ñiệp của bộ truyền chứa dữ liệu ứng dụng không chỉ ñược nhận bởi bộ nhận yêu cầu mà còn có thể ñược nhận bởi bộ nhận khác có quan tâm ñến thông ñiệp này Phương pháp này bảo ñảm sự thống nhất dữ liệu trong mạng
Hình 2-2 Frame từ xa CAN
Cấu trúc của frame từ xa tương tự như frame dữ liệu nhưng có một số ñiểm khác biệt Không giống như frame dữ liệu, bit RTR của frame từ xa là logic 1 Không có trường dữ liệu, giá trị chiều dài dữ liệu có thể từ 0 – 8 byte Giá trị của DLC (Data Length Code) tương ứng với frame dữ liệu Cấu trúc của thông ñiệp RTR như trong hình 2-5 Mô tả các trường trong frame từ xa tương tự như frame dữ liệu
Trang 222.2.1.5 Frame lỗi (Error Frame)
Một nút CAN phát hiện lỗi, nó tạo ra dấu hiệu xuất hiện lỗi bằng cách gửi ñi frame lỗi Frame lỗi có thể ñược gửi tại bất cứ thời ñiểm nào trong lúc truyền và luôn luôn ñược gửi trước khi frame dữ liệu hay frame từ xa truyền xong Bộ truyền luôn giám sát bus trong khi truyền Khi bộ truyền phát hiện frame lỗi, nó bỏ frame hiện tại và chuẩn bị gửi lại thông ñiệp trên bus khi bus rảnh Điều này bảo ñảm thống nhất dữ liệu trên mạng
Frame lỗi bao gồm hai trường khác nhau Trường ñầu tiên là cờ lỗi tạo bởi sự chồng các
cờ lỗi do các nút CAN Trường thứ hai là trường kết thúc lỗi
2.2.1.5.1 Cờ lỗi
Cờ lỗi gồm một chuỗi 6 bit liên tiếp có cùng mức logic Chuỗi bit này vi phạm qui ñịnh bit stuff (phương pháp bit stuff trình bày phía sau) hay phá hủy ñịnh dạng frame Kết quả
là tất cả nút khác cũng phát hiện lỗi và cũng bắt ñầu truyền cờ lỗi
Cờ lỗi gồm hai loại:
- Cờ lỗi trạng thái Active (Active Error Flag): cờ lỗi ñược truyền bởi nút ở trạng thái Error Active (Error Active Nút) Cờ lỗi trạng thái Active gồm sáu bit ưu thế logic 0 liên tục Chuỗi này vi phạm qui luật bit stuff hay phá hủy ñịnh dạng frame Tổng chiều dài cờ lỗi trạng thái Active thay ñổi từ 6 -12 bit Lý do là sự chồng chất cờ lỗi ñược truyền bởi các nút ñơn Hình 2-6 cho thấy cấu trúc của cờ lỗi trạng thái Active
Hình 2-3 Frame Active Error
- Cờ lỗi trạng thái Passive: ñược truyền bởi nút ở trạng thái Error Passive Cờ trạng thái Passive Error gồm 6 bit không ưu thế logic 1 liên tục
Hình 2-4 Frame Passive Error
Trang 232.2.1.5.2 Trường kết thúc lỗi
Trường này gồm 8 bit không ưu thế logic 1 Sau khi truyền một cờ lỗi, mỗi nút gửi bit không ưu thế logic 1 và giám sát bus cho tới khi nó phát hiện bit không ưu thế logic 1 Sau ñó, nút ñó truyền thêm 7 bit không ưu thế logic 1
2.2.1.6 Frame quá tải (Overload Frame)
Frame quá tải ñược phát ra khi CAN không thể xử lý nổi thông ñiệp nhận Cấu trúc của frame quá tải tương tự như cờ lỗi trạng thái Active Khác biệt duy nhất là frame quá tải bắt ñầu ở bit cuối cùng của trường kết thúc hay trường khoảng cách frame Để việc
truyền frame kế tiếp, một nút CAN gửi ñi một frame quá tải, tất cả các nút trên mạng phát hiện frame này và gửi ñi frame quá tải, tất cả thông ñiệp trên mạng dừng lưu thông Sau
ñó, các nút ñợi một chuỗi 8 bit logic 1 trước khi chúng truy cập bus Thời gian cần ñể
phục hồi hệ thống CAN sau một frame quá tải là thời gian truyền 31 bit Cấu trúc của một frame quá tải ñược trình bày trong hình 2-8
Hình 2-5 Frame quá tải
2.2.1.7 Trường ACK (Acknowledge Field)
Tất cả các bộ nhận kiểm tra ñộ tin cậy của thông ñiệp ñược nhận Nếu nhận thông ñiệp cho ñến hết chuỗi CRC mà không có lỗi gì, CAN sẽ gửi ñi bit ưu thế logic 0 trong khe ACK Bộ truyền nhận phản hồi bit ưu thế logic 0 trong khe ACK sẽ hiểu rằng có ít nhất một nút nhận thông ñiệp chính xác
2.2.1.8 Bit Stuffing (phương pháp chèn bit bù)
Giao thức CAN sử dụng mã hóa NRZ, vì vậy nó có thể làm clock mạng mất ñồng bộ Để
ñồng bộ clock trong ñịnh dạng NRZ, một bit có logic bù ñược chèn vào cứ mỗi sau 5 bit
liên tiếp cùng mức logic trong dòng bit ñang truyền Phương pháp này gọi là bit stuff hay chèn bit bù
Trang 24Các trường bit Start, trường phân xử, trường ñiều khiển và chuỗi CRC ñược mã hóa bằng phương pháp bit stuff Trường bit còn lại của frame dữ liệu hay frame từ xa trường kết thúc CRC, trường ACK hay trường EOF có ñịnh dạng cố ñịnh và không sử dụng bit stuff Frame lỗi và frame quá tải cũng có dạng cố ñịnh và không mã hóa với phương pháp bit stuff
Phương pháp bit stuff góp phần ñáng kể trong việc phát hiện lỗi của giao thức CAN Frame lỗi ñược truyền tạo ra dấu hiệu lỗi bằng sự xuất hiện của 6 bit liên tiếp cùng mức logic Bởi phương pháp bit stuff ñược dùng nên 6 bit liên tiếp có cùng mức logic trong dòng bit nhận ñược xem như một lỗi Bất cứ khi nào frame lỗi ñược truyền, bộ truyền hủy
bỏ việc truyền và gửi lại thông ñiệp khi bus rảnh Phương pháp bit stuff minh họa trong hình 2-9
Chuỗi bit ban ñầu 010111111011
Chuỗi bit thay ñổi bởi phương pháp bit stuff 0101111101011
bộ mạng ngay tức thời Không giống như các giao thức bus khác chỉ ñược áp dụng
nguyên tắc xác nhận thông ñiệp, trong giao thức CAN chỉ có thông ñiệp bị hư ñược gởi tín hiệu qua một frame lỗi Có một vài cơ chế trong giao thức CAN cho phép dò lỗi và ngăn không cho các nút bị lỗi làm mất khả năng hoạt ñộng của bus
Trang 25Quá trình xử lý lỗi trong CAN ñược chia làm 3 phần : dò lỗi, xử lý lỗi, chặn lỗi
• Kiểm tra ñịnh dạng : Các giá trị bit ñược ñịnh nghĩa trước ñược truyền ñi dưới dạng bit không ưu thế logic 1 trong một thông ñiệp Nếu một nút nhận dò ñược một bit ưu thế logic 0 ở những vị trí này thì lỗi ñịnh dạng sẽ ñược báo hiệu Các bit ñược kiểm tra trong trường hợp này là phần kết thúc CRC, trường ACK và các bit kết thúc frame (EOF)
• Kiểm tra ACK : Mỗi nút khi truyền thông ñiệp phải lắng nghe một ACK trong khe ACK Một lỗi ACK ñược báo hiệu nếu một nút truyền không thu ñược một bit ưu thế logic 0 trong quá trình ñợi ACK
Trang 26ñến nút truyền Điều này làm cho nút truyền hủy bỏ sự truyền thông ñiệp Khi tất cả các
nút tham gia nhận ñược frame lỗi, thông ñiệp mang lỗi sẽ bị loại bỏ như thế ñảm bảo tính nhất quán của dữ liệu trên mạng Nút truyền thông ñiệp sẽ truyền lại khi bus bắt ñầu rảnh trở lại Thông ñiệp ñược truyền lại vẫn phải tranh giành bus
2.2.1.9.3 Chặn lỗi
Nếu một thông ñiệp thất bại, một frame lỗi ñược tạo ra từ những nút nhận làm cho nút truyền gởi lại thông ñiệp cho tới khi nó ñược nhận ñúng Khả năng mạng bị sụp bởi vì sự rối loạn cục bộ của một hay một nhóm các nút là rất cao Giao thức CAN sử dụng một giải thuật ñể chặn tình huống này Giải thuật này ñược thiết kế ñể tự ñộng dò ra nút lỗi và cắt kết nối của nó với mạng bằng cách loại bỏ khả năng truyền của các nút ñạt tới một giới hạn lỗi
Để hiện thực cơ chế chặn lỗi, CAN sử dụng 2 bộ ñếm lỗi, một ñể lưu số lỗi truyền (bộ ñếm lỗi truyền, TEC) và một ñể lưu số lỗi nhận (bộ ñếm lỗi nhận, REC) Cách ñếm trong
CAN như sau : giá trị tăng trong trường hợp lần truyền hay nhận có lỗi cao hơn giá trị giảm cho lần truyền hay nhận thành công Sơ ñồ trạng thái cho việc chặn lỗi ñược trình bày trong hình vẽ 2-10
Trang 27Hình 2-7 Trạng thái lỗi trong CAN
Dựa trên các bộ ñếm này, một nút có thể ở một trong 3 trạng thái sau :
• Error Active : Đây là trạng thái hoạt ñộng bình thường của nút Trong trạng thái này, nút có thể truyền, nhận thông ñiệp Nếu có lỗi xảy ra nút sẽ truyền ñi một frame Error Active Nút ở trong trạng thái Error Active nếu giá trị của bộ ñếm lỗi truyền và nhận nhỏ hơn hoặc bằng 127
• Error Passive : Trong trạng thái này nút có thể tham gia vào giao tiếp bus bình thường Nó truyền ñi một frame Error Passive ñể báo hiệu sự hiện diện của lỗi Một nút truyền trong trạng thái Error Passive phải ñợi một khoảng thời gian bus rảnh thêm 8 bit theo sau trường khoảng cách giữa các frame (Inter Frame Space) trước khi nó tiếp tục tranh giành truy cập bus Một nút rơi vào trạng thái này khi một trong 2 giá trị bộ ñếm vượt quá 127 Nút vẫn trong trạng thái Error Active khi cả 2 bộ ñếm nhỏ hơn 128
• Bus Off : Trong trạng thái Bus Off nút sẽ bị giới hạn trong việc nhận thông ñiệp
và không còn truyền thông ñiệp Một nút rơi vào trạng thái này nếu giá trị bộ
Trang 28ñếm lỗi truyền vượt quá 255 Không thông ñiệp nào ñược truyền ñi cho tới khi
các bộ ñếm lỗi ñược reset bởi bộ vi ñiều khiển hoặc bộ xử lý
Giá trị ñếm ñược sửa ñổi theo qui tắc ñược chỉ ñịnh trong ñặc tả về CAN phiên bản 2.0 của Bosch Nhiều qui tắc có thể ñược áp dụng trong quá trình truyền thông ñiệp
1 Khi một nút nhận dò ñược một lỗi, bộ ñếm nhận sẽ tăng 1, ngoại trừ khi lỗi dò
ñược là một lỗi Bit trong quá trình truyền của một cờ lỗi Active hay cờ
o Ngoại lệ 1 : nếu một nút truyền ở trạng thái Error Passive dò ñược lỗi ACK
vì không dò ñược ACK và không dò ñược một bit ưu thế logic 0 trong khi gởi ñi cờ lỗi Passive của nó
o Ngoại lệ 2 : nếu một nút truyền dò ñược một lỗi Stuff và gởi ñi một cờ lỗi bởi vì bit Stuff logic 1 ñược truyền nhưng bit ưu thế logic 0 thu ñược trong quá trình phân xử
4 Bộ ñếm lỗi truyền tăng lên 8 nếu nút truyền dò ñược một lỗi Bit trong khi gởi
ñi cờ lỗi Active hay cờ lỗi Overload
5 Bộ ñếm lỗi nhận tăng lên 8 nếu nút nhận dò ñược một lỗi Bit trong khi gởi ñi một cờ lỗi Active hay cờ lỗi Overload
6 Một nút có thể chấp nhận tối ña 7 bit ưu thế logic 0 liên tiếp sau khi truyền một
cờ lỗi hay cờ overload Mỗi nút truyền tăng bộ ñếm lỗi truyền của nó lên 8 và mỗi nút nhận tăng bộ ñếm lỗi nhận của nó lên 8 sau khi dò ñược 14 bit ưu thế logic 0 liên tiếp (trong trường hợp một cờ lỗi Active hay cờ Overload) hoặc sau khi dò ñược bit ưu thế logic 0 thứ 8 theo sau cờ lỗi Passive và sau mỗi chuỗi 8 bit ưu thế logic 0 liên tiếp
7 Bộ ñếm lỗi truyền giảm 1 (trừ khi nó bằng 0) sau khi truyền thành công một thông ñiệp
8 Sau khi nhận thông ñiệp và truyền ACK thành công, bộ ñếm nhận giảm 1 nếu giá trị của nó nằm trong khoảng từ 1 ñến 127 Nếu bộ ñếm lỗi truyền là 0, nó sẽ
Trang 299 Một nút là Error Passive khi bộ ñếm lỗi truyền >= 128 hoặc bộ ñếm lỗi nhận
>= 128
10.Một nút là Bus Off khi bộ ñếm lỗi truyền >= 256
11.Một nút Error Passive trở lại thành Error Active khi cả hai bộ ñếm lỗi truyền
và kiểm tra tính chấp nhận trên phần nhận dạng ñể xác ñịnh xem liệu thông ñiệp có tương
ứng cho một nút nào ñó hay không Bộ lọc dựa trên thông số mã và mặt nạ của ứng dụng
chủ lọc ra các thông ñiệp nhận và lưu chỉ những thông ñiệp ñược ứng dụng chủ yêu cầu
và bỏ qua phần còn lại
2.2.1.11 Báo hiệu quá tải
Một bộ ñiều khiển CAN có 2 bộ ñệm thông ñiệp nhận ñể lưu trữ dữ liệu nhận Điều này cho phép ứng dụng chủ xử lí một thông ñiệp trong khi nó ñang nhận một thông ñiệp khác Trong trường hợp cả 2 bộ ñệm ñầy, bộ ñiều khiển sẽ không chấp nhận bất kì thông ñiệp nào cho tới khi một trong 2 bộ ñệm ñược xóa ñi bởi bộ vi ñiều khiển Để ñảm bảo trong thời gian này không thông ñiệp nào ñược truyền bị mất, việc truyền thông ñiệp tiếp theo
ñược trì hoãn bằng cách gởi ñi một frame quá tải Tất cả các nút trên mạng dò ñược frame
này, giao tiếp thông ñiệp sẽ ngừng lại Sau ñó, mọi nút lắng nghe một chuỗi các bit logic
1 trước khi chúng tranh giành truy cập bus Sự trì hoãn ñược tạo ra bởi frame quá tải thường ñủ cho ứng dụng chủ xóa ñi một bộ ñệm Tối ña 2 frame quá tải có thể ñược gởi
ñi liên tiếp ñể trì hoãn việc truyền thông ñiệp trên bus Một frame quá tải ñược bắt ñầu
chỉ tại bit cuối của trường EOF hay trong trường IFS
Trang 302.3 L ớ p v ậ t lý CAN
Lớp vật lý CAN chịu trách nhiệm kết nối vật lý giữa 2 nút trong mạng và truyền ñi các xung ñiện Lớp vật lý CAN chuyển dữ liệu ñược cung cấp bởi bộ truyền của lớp Data Link sang một tín hiệu ñiện Ở ñầu nhận, lớp vật lý chuyển tín hiệu ñiện ngược trở lại
ñịnh dạng dữ liệu và truyền cho lớp Data Link Có vài lớp vật lý khác nhau, loại thông
thường nhất ñược ñịnh nghĩa bởi tiêu chuẩn CAN, phần ISO 11989-2 Nó còn ñược gọi là
“CAN tốc ñộ cao” Một dạng biểu diễn ñơn giản của sơ ñồ nối dây CAN ñược trình bày trong hình vẽ 2-11
Hình 2-8 Sơ ñồ ñi dây trong CAN
CAN tốc ñộ cao gồm 2 dây nối là một cặp dây vi sai 2 dây này có tên gọi là CAN_H
và CAN_L Bởi vì 2 dây hoạt ñộng ở chế ñộ vi sai nên chúng mang ñiện áp ngược nhau, ñiều này cung cấp ñặc tính chống nhiễu ñiện cho CAN Phần kết thúc bus là
ñiện trở 120Ω ở 2 ñầu của bus Điện trở này loại bỏ tín hiệu phản hồi ở cuối ñường
bus và ñể ñảm bảo bus nhận ñúng mức ñiện áp DC
2.3.1 Bi ể u di ễ n bit
Có 2 dạng biểu diễn bit luận lý ñược sử dụng trong giao thức CAN Các tín hiệu trong CAN sử dụng thuật ngữ recessive và dominant ñể mô tả trạng thái của bus.Giao thức CAN ñịnh nghĩa logic “0” là trạng thái bus dominant và logic “1” là trạng thái bus
recessive Các trạng thái này tương ứng với những mức ñiện áp mà lớp vật lý sử dụng Các nút kết nối vào CAN bus theo kiểu AND nối dây (wired-AND) Một bit logic 1 xuất hiện trên CAN bus chỉ khi tất các nút trên mạng truyền ñi bit logic 1 trong khoảng thời gian bit Bởi vì bit logic 0 luôn luôn ghi ñè lên bit logic 1, ngay cả khi một nút truyền ñi
Trang 31chấp các nút truyền ñi bit logic 1 Khái niệm trạng thái bus recessive và dominant là một khái niệm quan trọng trong việc bàn luận về sự phân xử CAN bus
Hình 2-9 Trạng thái logic 0 và logic 1 trong CAN
Biểu diễn bit ñược trình bày theo hình 2-12 Đối với CAN bus 2 dây tốc ñộ cao, trạng thái bus recessive “logic 1” xuất hiện khi 2 ñường CAN_L và CAN_H có cùng ñiện thế (CAN_L = CAN_H = 2.5 V), và trạng thái bus dominant “logic 0” xuất hiện khi
có sự chênh lệch ñiện áp (CAN_L = 1.5V và CAN_H = 3.5V) Mức ñiện áp trên CAN bus là logic 1 khi bus ñang rảnh
2.3.2 Mã hóa bit
Giao thức CAN sử dụng mã hóa NRZ (không trả về 0) Trong mã hóa NRZ mức logic của một bit vẫn duy trì qua khoảng thời gian của bit ñó Nếu một frame có một chuỗi các bit “1” hay “0” tín hiệu sẽ duy trì không ñổi qua nhiều khoảng thời gian bit tương ứng
Điểm bất lợi của NRZ là khó mà biết ñược ñiểm bắt ñầu và kết thúc của bit khi mà có 2
hoặc nhiều các bit 1 hay 0 trong một hàng Cách duy nhất ñể biết ñược ñiểm bắt ñầu và kết thúc của bit là cung cấp nguồn xung ñồng hồ cho bên nhận giống với bên truyền ñể bên nhận có thể ñọc ñược chuỗi bit Để cho phép sự ñồng bộ các nguồn xung ñồng hồ giữa các nút trong mạng, CAN sử dụng phương pháp chèn bit bù
2.3.3 Đồ ng b ộ và ñị nh th ờ i bit
Để cho hiệu quả hơn giao thức CAN sử dụng sự truyền dữ liệu ñồng bộ Điều bất lợi của
hệ thống truyền ñồng bộ là sự thiếu vắng những ñiểm tham khảo thường xuyên ñể một nút có thể thực hiện việc ñồng bộ bit Trong 1 hệ thống truyền ñồng bộ chỉ một ñiểm tham khảo là sẵn có ở ñầu thông ñiệp Thật khó mà ñồng bộ 2 xung ñồng hồ trong một thời gian dài CAN sử dụng một phương pháp ñồng bộ bit phức tạp ñể vượt qua trở ngại này Trong phương pháp này sự ñồng bộ tại mỗi nút trong mạng tiếp tục ñược ñồng bộ lại Điều này ñảm bảo cho tất cả các nút trong mạng ñược ñồng bộ ở cùng tốc ñộ truyền Tốc ñộ bit là số lượng bit chuyển qua một ñiểm nào ñó trong mạng trên một giây Tốc ñộ bit lý thuyết là số lượng bit trên giây ñược truyền bởi một bộ truyền lý tưởng không có sự
Trang 32ñồng bộ lại Dù truyền hay nhận, tất cả các nút trên mạng phải có cùng tốc ñộ bit lý
thuyết
Thời gian bit lý thuyết bằng nghịch ñảo của tốc ñộ bit lý thuyết Thời gian bit lý thuyết là lượng thời gian cần ñể truyền một bit ñơn qua mạng Hệ thống CAN sử dụng thời gian bit
ñể ñảm bảo là các nút lấy mẫu bus ở thời gian thích hợp từ ñó xác ñịnh bus ñang ở trạng
thái logic 1 hay logic 0 Để làm ñược ñiều này, thời gian bit lý thuyết ñược chia thành 4
ñoạn, ñoạn ñồng bộ, ñoạn truyền, ñoạn pha 1 và ñoạn pha 2 Mỗi ñoạn bao gồm 1 hay
nhiều ñơn vị thời gian Việc phân ñoạn thời gian bit ñược trình bày trong hình vẽ 2.13
Hình 2-10 Định thời bit trong CAN
• Đoạn ñồng bộ (Sync_Seg) là phần thời gian bit nơi mà sự chuyển tiếp tín
hiệu ñược trông ñợi xảy ra Đoạn ñồng bộ luôn cố ñịnh ở một ñơn vị thời gian
• Đoạn truyền (Prop_Seg) là phần thời gian bit ñể bù cho sự trễ vật lý trên
các ñường dây Kích thước của ñoạn truyền nên bằng ít nhất là 2 lần khoảng thời gian cần thiết ñể bit ñến ñược nút xa nhất Nó ñược lập trình là 1-8 ñơn vị thời gian
• Đoạn pha 1 (Ph_Seg1) là một ñoạn bộ ñệm ñược kéo dài ra nếu một sự
chuyển trạng thái từ logic 1 sang logic 0 xảy trong ñoạn truyền Đoạn pha 1
ñược kéo dài sao cho khoảng cách từ cạnh cho ñến ñiểm lấy mẫu giống như
trong ñoạn ñồng bộ không có cạnh xảy ra Đoạn này ñược lập trình từ 1-8
ñơn vị thời gian
• Đoạn pha 2 (Ph_Seg2) cũng là một ñoạn bộ ñệm ñược thu ngắn lại nếu một
sự chuyển trạng thái từ logic 1 sang logic 0 xảy ra trong ñoạn pha 2 Đoạn pha 2 ñược thu ngắn lại sao cho khoảng cách từ cạnh cho ñến ñiểm lấy mẫu giống như từ ñoạn ñồng bộ ñến ñiểm lấy mẫu nếu không có cạnh xảy ra
Trang 33Đoạn này ñược lập trình bằng tối ña ñoạn pha 1 và thời gian xử lý thông
tin
• Thời gian xử lý thông tin là ñoạn thời gian từ ñiểm lấy mẫu cho ñến việc lấy mẫu của bit tiếp theo Thời gian này nhỏ hơn hoặc bằng 2 lần ñơn vị thời gian
• Điểm lấy mẫu luôn tại ñiểm cuối của ñoạn pha 1 và là thời ñiểm tại ñó mức
logic bus ñược ñọc và xem là giá trị của bit hiện tại
CAN sử dụng 2 loại ñồng bộ, ñồng bộ cứng và ñồng bộ lại
• Đồng bộ cứng xảy ra chỉ một lần trong quá trình truyền thông ñiệp, trên sự
chuyển trạng thái từ logic 1 sang logic 0 của sự bắt ñầu bit frame Thời gian bit ñược khởi ñầu lại tại ñiểm kết thúc của ñoạn ñồng bộ sau khi ñồng bộ cứng
• Đồng bộ lại ñược thực hiện sau ñó trong phần còn lại của frame thông ñiệp,
khi một sự chuyển trạng thái từ logic 1 sang logic 0 xảy ra bên ngoài của
ñoạn ñồng bộ
Khoảng cách giữa một cạnh xảy ra bên ngoài ñoạn ñồng bộ và ñoạn ñồng bộ gọi là lỗi pha của cạnh ñó Độ rộng bước nhảy ñồng bộ lại (SJW) ñịnh nghĩa ñiểm lấy mẫu có thể ñược dịch chuyển bao xa ñể bù lại lỗi pha của cạnh Sự thay ñổi tối ña
có thể ảnh trên các ñoạn ñệm pha là tối thiểu của ñộ lớn lỗi pha và SJW
2.3.4 T ố c ñộ bit và ñộ dài bus
CAN thuộc vào lớp giao thức ñáp ứng trong vòng 1 bit, qua ñó 1 xung di chuyển
từ một nút ở một ñầu mạng cho tới một nút ở ñầu kia mạng không tiêu tốn quá 2/3 lượng thời gian bit Ràng buộc này bao hàm rằng bus càng dài thì tốc ñộ bit tối ña cho phép càng nhỏ
Trang 34Chương 3 THIẾT KẾ BỘ ĐIỀU KHIỂN CAN
Hình 3-1 Hình sơ ñồ khối bộ ñiều khiển CAN
Trang 353.1 Qui trình thi ế t k ế
Hình 3-2 Hình biểu diễn qui trình thiết kế
Qui trình thiết kế một module gồm các bước sau
- Tạo ra ñặc tả module là giai ñoạn tạo ra từ các yêu cầu tạo ra ñặc tả tính năng tương
ứng Đặc tả module là quá trình tạo ra sơ ñồ khối, bảng mô tả input/output, sơ ñồ máy
trạng thái, và dạng sóng của các khối tương ứng
- Viết code RTL (Register Transfer Level) là giai ñoạn tạo ra code RTL từ ñặc tả Code
RTL phải tuân thủ các tiêu chuẩn verilog
- Tạo ta checklist là giai ñoạn tạo ra danh sách chứa các mục cần kiểm tra Các mục cần
kiểm tra tạo ra dựa trên ñặc tả tính năng
- Quá trình kiểm tra (Verification) là quá trình kiểm tra RTL code, ñảm bảo RTL thỏa
mọi mục trong checklist
Trang 36- Quá trình tổng hợp (Synthesis) là quá trình phát ra tổ hợp các mạch cổng logic từ RTL
code với các ràng buộc về diện tích, công suất, timing
- FPGA (Field-programmable gate array) là giai ñoạn kiểm tra RTL code chạy trên board
mạch thật
3.2 Module Can Top can_top
3.2.1 Ch ứ c n ă ng
Đây là top module của CAN Module này gồm 3 khối chính can_bsp, can_btl,
can_registers Module chứa tất cả tính năng của khối CAN
3.2.2 S ơ ñồ kh ố i
Hình 3-3: Hình biểu diễn sơ ñồ khối của module can_top
Bảng 3-1: Bảng mô tả các tín hiệu vào/ra của module can_top
Mô Tả Chức Năng
Trang 37can_btl
can_registers, can_btl
Tín hiệu clock
enable)
CAN)
ñường ñịa chỉ và ñường dữ liệu
Trang 383.3 Thi ế t k ế l ớ p v ậ t lý - Module Bit Timing Logic can_btl
3.3.1 Ch ứ c n ă ng
Module có chức năng là ñồng bộ và ñịnh thời bit cho CAN theo chuẩn CAN
3.3.2 S ơ ñồ kh ố i
(can_btl)BitTiming Logic
rx baud_r_presc [5:0]
sync_jump_width [1:0]
sample_point
tx_point hard_sync
sampled_bit
sampled_bit_q
triple_sampling timing_segment1 [3:0]
timing_segment2 [2:0]
rx_idle last_bit_of_inter transmitting go_rx_inter
Hình 3-4: Bảng sơ ñồ chân module can_btl
Trang 39Bảng 3-2: Bảng mô tả tín hiệu vào/ra của module Bit Timing Logic
Module
Mức logic tích cực
Mô Tả Chức Năng
ñồng bộ
truyền frame khoảng cách
Trang 403.3.3 Máy tr ạ ng thái
Hình 3-5: Hình biểu diễn máy trạng thái của module can_btl
Bảng 3-3: Bảng mô tả máy trạng thái của module can_btl
Máy Trạng Thái Mô Tả Chức Năng
Bảng 3-4: Bảng mô tả các tín hiệu chuyển trạng thái của module can_btl