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
GIỚI THIỆU
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.
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ẽ Ứng dụng 1 Bộ ủiều khiển Ứng dụng 2 Bộ ủiều khiển Ứng dụng 3 Bộ ủiều khiển Ứng dụng 4 Bộ ủiều khiển CAN nhằ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.
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
Hỡ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.
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
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í
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
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í
Bộ cảm biến Bộ phát
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 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 Việc mô phỏng chức năng của mô hình được thực hiện và đạ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 được thiết kế và kiểm tra tương đương được thực hiện Mô phỏ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.
GIAO TIẾP NỐI TIẾP SỬ DỤNG GIAO THỨC MẠNG ĐIỀU KHIỂN
Giới thiệu về giao thức giao tiếp
Nhu cầu trao đổi thông tin ngày càng tăng đã thúc đẩy sự ra đời của nhiều loại giao thức truyền thông khác nhau Các giao thức này được thiết kế để phù hợp với từng ứng dụng cụ thể Đối với các ứng dụng công nghiệp, người ta thường sử dụng các giao thức "đầu cuối cấp cao" (higher end) để đáp ứng yêu cầu về hiệu suất và độ tin cậy cao trong môi trường công nghiệp.
“ủầ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
Với chi phí hợp lý và khả năng đáp ứng các ứng dụng tiên tiến trên nền tảng bán dẫn hiện đại, mạng và hệ thống truyền thông đã thúc đẩy nhu cầu về các phương tiện truyền tải dữ liệu tối ưu trong lĩnh vực fieldbus Ngành công nghiệp này đòi hỏi các hệ thống điều khiển linh hoạt có mức độ chuẩn hóa cao, cho phép xây dựng các giải pháp phần cứng và phần mềm có thể dễ dàng điều chỉnh theo nhu cầu khác nhau Trong hai thập kỷ qua, số lượng giao thức fieldbus đã tăng đáng kể, với các chuẩn Profibus, Interbus-S, P-Net, LON và FIP là những ví dụ tiêu biểu.
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
Hỡ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.
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
Hì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]
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
Hì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
Chuẩn CAN sử dụng các thông điệp cố định gồm những đị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ỉ đích ghi rõ trong thông điệp, thay vào đó thông điệp mang nội dung địa chỉ, tức là nội dung chỉ định địa chỉ một cách không tường minh Giao thức CAN định nghĩa 4 loại khung khác nhau: khung dữ liệu (data frame), để truyền dữ liệu; khung từ xa (remote frame), để yêu cầu dữ liệu; khung lỗi, để mang tín hiệu phát hiện lỗi; khung quá tải (overload frame), để tăng thời gian trễ giữa các khung.
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 khiể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 2 11 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 2 29 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 đánh dấu bắt đầu frame dữ liệu Để truyền bit Start, Bus CAN phải ở trạng thái rảnh Tất cả bộ nhận trên bus sử dụng bit này để đồng bộ clock của chúng 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
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
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
Kết nối CAN bus theo kiểu dây AND, tức là bit logic 1 chỉ xuất hiện trên bus khi tất cả các nút trên mạng truyền bit logic 1 trong thời gian bit Bit logic 0 luôn ghi đè lên bit logic 1 nên khi một nút truyền bit logic 0 trong thời gian bit, toàn bộ bus sẽ ở trạng thái bất chấp các nút truyền bit logic 1 Thuật ngữ "trạng thái bus recessive" và "trạng thái bus dominant" đóng vai trò quan trọng trong việc 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
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 trong mạng trong 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ự đồng bộ lại Dù là 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 Đ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
THIẾT KẾ BỘ ĐIỀU KHIỂN CAN
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
- 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.
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
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 rst_i I can_bsp, can_registers, logic 1 Tín hiệu reset can_btl clk_i I can_bsp, can_registers, can_btl
Tín hiệu clock rd_i I can_registers logic 1 Tớn hiệu ủọc (read) wr_i I can_registers logic 1 Tín hiệu ghi (write) ale_i I can_registers logic 1 Tớn hiệu cho phộp chốt ủịa chỉ (address latch enable) cs_can_i I can_registers logic 1 Tín hiệu lựa chọn module CAN (chip select
CAN) rx_i I can_btl Tín hiệu nhận (receive) tx_o O can_btl Tín hiệu truyền (transmit) irq_on O can_registers Logic 0 Tín hiệu ngắt (interrupt) clkout_o O can_registers Tín hiệu clock ra port_0_io IO can_registers Tín hiệu port truy xuất vào/ra dùng cho ủường ủịa chỉ và ủường dữ liệu
Thiết kế lớp vật lý - Module Bit Timing Logic can_btl
Module cú chức năng là ủồng bộ và ủịnh thời bit cho CAN theo chuẩn CAN
Logic rx baud_r_presc [5:0] sync_jump_width [1:0] clk rst 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
Bảng 3-2: Bảng mô tả tín hiệu vào/ra của module Bit Timing Logic
Tên Tín Hiệu IO Từ/Đến
Clk I can_top logic 1 is the clock input signal Rst I can_top logic 1 is the reset signal Rx I can_top is the receive signal (receiver) Baud_r_preasc[5:0] I can_registers is the baud rate (bits/s) Sync_jump_width[1:0] I can_registers is the synchronization jump width Timing_segment1[3:0] I can_registers is the phase segment 1 Timing_segment2[2:0] I can_registers logic 1 is the phase segment 2 Triple_sampling I can_registers logic 1 is the triple sampling Rx_idle I can_bsp logic 1 is the signal indicating CAN is not in data receive state Last_bit_of_inter I can_bsp logic 1 is the last bit of inter-frame Transmitting I can_bsp logic 1 indicates that the CAN node is transmitting frames, including data frames, remote frames, error frames, and overload frames Go_rx_inter I can_bsp logic 1 indicates the entry into the inter-frame transmit state Sample_point O can_bsp logic 1 is the sampling point Sampled_bit O can_bsp logic 1 is the sampled bit Sampled_bit_q O can_bsp logic 1 is the pre-sampled bit Tx_point O can_bsp logic 1 is the transmit point Hard_sync O can_bsp logic 1 is the hard synchronization.
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 propseg_phase1 Trạng thỏi ủoạn truyền và ủoạn ủệm pha 1 phase2 Trạng thỏi ủoạn ủệm pha 2 sync Trạng thỏi ủoạn ủồng bộ
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
Tên Tín Hiệu Mức logic tích cực Mô Tả Chức Năng rst Logic 1 Tín hiệu reset hard_sync Logic 1 Tớn hiệu ủồng bộ cứng quant_cnt[4:0] Bộ ủếm số ủơn vị thời gian trong 1 ủoạn time_segment1[3:0] Đoạn truyền + ủoạn pha 1 delay[3:0] Độ lỗi pha là cực tiểu giữa ủộ lớn lỗi pha và ủộ rộng bước nhảy ủồng bộ lại (SJW) resync Logic 1 Cho biết cú sự ủồng bộ lại time_segment2[2:0] Đoạn pha 2 sync_jump_width[1:0] Độ rộng bước nhảy ủồng bộ lại (SJW)
Khi xe buýt rảnh, nếu phát hiện bit SOF thì quá trình đồng bộ cứng đã xảy ra, tức là tín hiệu hard_sync đã tích cực Bộ định thời đi vào trạng thái hoàn đồng bộ sync Sau một đơn vị thời gian thì bộ định thời vào trạng thái progseg_phase1.
Trong trạng thỏi này, bộ ủếm ủơn vị thời gian quant_cnt bắt ủầu với giỏ trị 0 tăng 1 sau một ủơn vị thời gian cho ủến khi bộ ủếm ủơn vị thời gian bằng time_segment1+delay (delay khỏc 0 khi cú quỏ trỡnh ủồng bộ lại trong ủoạn pha truyền và ủoạn pha 1) thỡ bộ ủịnh thời chuyển sang trạng thỏi phase2
Trong trạng thỏi phase2, nếu khụng cú quỏ trỡnh ủồng bộ lại xuất hiện thỡ sau khi bộ ủếm ủơn vị quant_cnt bằng time_segment2 thỡ bộ ủịnh thời trở về trạng thỏi sync Nếu cú quỏ trỡnh ủồng bộ lại xảy ra (resync & (time_segment2 – quant_cnt) <
(sync_jump_width + 1)) thỡ bộ ủịnh thời ủi vào trạng thỏi progseg_phase1 mà khụng vào trạng thái sync
Hỡnh 3-6: Bảng mụ tả quỏ trỡnh ủồng bộ cứng và thời ủiểm lấy mẫu
Như trong dạng sóng, với cấu hình như sau:
- Độ rộng bước nhảy ủồng bộ = 2 - Đoạn pha 1 = 4
Quỏ trỡnh truyền nhận dữ liệu bắt ủầu bằng sự tớch cực của tớn hiệu hard_sync Thời ủiểm lấy mẫu ở thời ủiểm cuối ủoạn pha 1 khi quant_cnt = 4 = time_segment1 ở thời ủiểm lấy mẫu, bit mẫu sampled_bit ủược lấy mẫu theo theo tớn hiệu nhận rx.
Thiết kế lớp dữ liệu - Module Bit Stream Processor can_bsp
3.4.1 Chức năng Đõy là module chớnh của khối CAN Module này nhận cấu hỡnh ủiều khiển từ module can_registers và thụng tin ủịnh thời từ module can_btl Từ ủú, module thực hiện quỏ trình truyền nhận; kiểm tra, phát hiện lỗi (gồm việc kiểm tra ID, kiểm tra CRC, kiểm tra bit stuff, kiểm tra ACK) , và xử lý lỗi; lưu trữ dữ liệu
(can_bsp) Bit Stream Processor
Last_bit_of_inter Set_reset_mode transmitting Go_rx_inter Listen_only_mode
Acceptance_filter_mode Extended_mode Self_test_mode Release_buffer
Self_rx_request Single_shot_transmission Read_arbitration_lost_capture_reg
Read_error_code_capture_reg
We_rx_err_cnt We_tx_err_cnt Error_capture_mode [7:0]
Node_bus_off Error_status [8:0] rx_err_cnt
[8:0] tx_err_cnt Transmit_status
Need_to_tx overrun Receive_status Tx_successful
Info_empty Set_bus_error_irq Set_arbitration_lost_irq
Node_error_passive Node_error_active [4:0] Arbitration_lost_capture
[6:0] rx_message_counter Acceptance_code_0 [7:0]
Hỡnh 3-7: Hỡnh biểu diễn sơ ủồ khối module Bit Stream Processor can_bsp
Bảng 3-5: Bảng mô tả tín hiệu vào/ra của module
Tên Tín Hiệu IO Từ/Đến
Mô Tả Chức Năng clk I can_top logic 1 Tín hiệu clock vào rst I can_top logic 1 Tín hiệu clock ra sample_point I can_btl logic 1 Thời ủiểm lấy mẫu sampled_bit I can_btl Bit lấy mẫu sampled_bit_q I can_btl tx_point I can_btl logic 1 Thời ủiểm truyền hard_sync I can_btl logic 1 Đồng bộ cứng addr I can_top logic 1 Địa chỉ truy cập thanh ghi nhận data_in I can_top Dữ liệu ghi vào bộ ủệm data_out I can_top Dữ liệu ủọc ra từ bộ ủệm fifo_selected I can_top logic 1 Cho biết truy xuất FIFO reset_mode I can_registers logic 1 Cho phép cấu hình thanh ghi listen_only_mode I can_registers logic 1 Cho biết chế ủộ
Listen Only acceptance_filter_mode I can_registers logic 1 Cho biết chế ủộ
Acceptance Filter self_test_mode I can_registers logic 1 Cho biết Self
Test release_buffer I can_registers logic 1 Xúa bộ ủệm nhận tx_request I can_registers logic 1 Yêu cầu truyền abort_tx I can_registers logic 1 Yêu cầu hủy truyền self_rx_request I can_registers logic 1 Yêu cầu chỉ nhận mà không truyền error_warning_limit [7:0] I can_registers Giá trị cảnh báo cho bộ ủếm lỗi truyền hay bộ ủếm lỗi nhận we_rx_err_cnt I can_registers logic 1 Cho phép ghi bộ ủệm lỗi nhận we_tx_err_cnt I can_registers logic 1 Cho phép ghi bộ ủệm lỗi truyền rx_idle O can_btl logic 1 Cho biết nút
CAN ở trạng thái rảnh transmitting O can_btl logic 1 Cho biết CAN ở trạng thái truyền gồm truyền frame dữ liệu, frame từ xa, frame lỗi hay frame quá tải go_rx_inter O can_btl logic 1 Cho biết vào trạng thái truyền frame khoảng cách last_bit_of_inter O can_btl logic 1 Cho biết bit cuối của frame khoảng cách set_reset_mode O can_registers logic 1 node_bus_off O can_registers logic 1 Cho biết CAN ở trạng thái Bus Off error_status O can_registers logic 1 Cho biết CAN ở trạng thái lỗi khi bộ ủếm lỗi truyền hay bộ ủếm lỗi nhận
> hoặc giá trị thanh ghi CANEWLR rx_err_cnt [7:0] O can_registers Bộ ủếm lỗi nhận tx_err_cnt [7:0] O can_registers Bộ ủếm lỗi truyền transmit_status O can_registers logic 1 Cho biết CAN ủang ở trạng thỏi truyền receive_status O can_registers logic 1 Cho biết CAN ủang ở trạng thỏi nhận tx_successful O can_registers logic 1 Cho biết quá trình kết thúc thành công need_to_tx O can_registers logic 1 overrun O can_registers logic 1 Cho biết bộ ủệm nhận tràn info_empty O can_registers logic 1 Cho biết bộ ủệm nhận rỗng set_bus_error_irq O can_registers logic 1 Ngắt do lỗi bus set_arbitration_lost_irq O can_registers logic 1 Ngắt do mất quyền tranh chấp bus arbitration_lost_capture [4:0] O can_registers logic 1 Số lần mất quyền tranh chấp bus node_error_passive O can_registers logic 1 Cho biết CAN ở trạng thái error passive node_error_active O can_registers logic 1 Cho biết CAN ở trạng thái error active rx_message_counter [6:0] O can_registers Bộ ủếm thụng ủiệp nhận acceptance_code_0 [7:0] I can_registers Bộ lọc chấp nhận 0 acceptance_code_1 [7:0] I can_registers Bộ lọc chấp nhận 1 acceptance_code_2 [7:0] I can_registers Bộ lọc chấp nhận 2 acceptance_code_3 [7:0] I can_registers Bộ lọc chấp nhận 3 acceptance_mask_0 [7:0] I can_registers Mặt nạ chấp nhận 0 acceptance_mask_1 [7:0] I can_registers Mặt nạ chấp nhận 1 acceptance_mask_2 [7:0] I can_registers Mặt nạ chấp nhận 2 acceptance_mask_3 [7:0] I can_registers Mặt nạ chấp nhận 3 tx_data_0 [7:0] I can_registers Thanh ghi truyền 0 (Trường nhận dạng ID[10:3]) tx_data_1 [7:0] I can_registers Thanh ghi truyền 1 (Trường nhận dạng ID[2:0], bit RTR, trường chiều dài frame) tx_data_2 [7:0] I can_registers Thanh ghi truyền 2 (Trường dữ liệu byte 1) tx_data_3 [7:0] I can_registers Thanh ghi truyền 3 (Trường dữ liệu byte 2) tx_data_4 [7:0] I can_registers Thanh ghi truyền 4 (Trường dữ liệu byte 3) tx_data_5 [7:0] I can_registers Thanh ghi truyền 5 (Trường dữ liệu byte 4) tx_data_6 [7:0] I can_registers Thanh ghi truyền 6 (Trường dữ liệu byte 5) tx_data_7 [7:0] I can_registers Thanh ghi truyền 7 (Trường dữ liệu byte 6) tx_data_8 [7:0] I can_registers Thanh ghi truyền 8 (Trường dữ liệu byte 7) tx_data_9 [7:0] I can_registers Thanh ghi truyền 9 (Trường dữ liệu byte 8) tx_data_10 [7:0] I can_registers Thanh ghi truyền 10 tx_data_11 [7:0] I can_registers Thanh ghi truyền 11 tx_data_12 [7:0] I can_registers Thanh ghi truyền 12 tx O can_top Tín hiệu truyền
(ủầu phỏt) tx_oen O can_top logic 1 Tín hiệu cho biết quá trình truyền ủang tớch cực
Hình 3-8: Hình biểu diễn máy trạng thái chính của module can_bsp
Bảng 3-6: Bảng mô tả máy trạng thái chính của module can_bsp
Máy Trạng Thái Mô Tả Chức Năng idle Trạng thái rỗi tx_state Trạng thái truyền frame dữ liệu hoặc frame từ xa rx_state Trạng thái nhận frame dữ liệu hoặc frame từ xa err_state Trạng thái truyền frame lỗi ovf_state Trạng thái truyền quá tải inter_state Trạng thái truyền frame khoảng cách
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
Tên Tín Hiệu Mức logic tích cực Mô Tả Chức Năng rst logic 1 Tín hiệu reset need_to_tx logic 1 Tích cực khi có yêu cầu truyền cho ủến khi frame truyền thành công arbitration_lost logic 1 Cho biết mất quyền tranh giành bus error_frame logic 1 Cho biết frame lỗi error_frame_ended logic 1 Cho biết kết thúc frame lỗi go_rx_id1 logic 1 Cho biết phỏt hiện ủược bit SOF (Start of frame) go_rx_idle logic 1 Cho biết quỏ trỡnh nhận ủó xong overload_frame logic 1 Cho biết frame quá tải overload_frame_ended logic 1 Cho biết kết thúc frame quá tải go_rx_inter logic 1 Cho biết frame khoảng cách go_rx_idle logic 1 Cho biết quá trình truyền hoặc nhận ủó xong
Sau khi reset, nỳt CAN ở trạng thỏi idle (ủõy là trạng thỏi rảnh, khụng truyền hoặc nhận dữ liệu)
Nếu có yêu cầu truyền tín hiệu need_to_tx tích cực CAN chuyển sang trạng thái truyền tx_state, nú bắt ủầu truyền dữ liệu và kiểm tra sự phõn xử
Nếu nỳt CAN ủang truyền mất quyền phõn xử nghĩa là tớn hiệu arbitration_lost tớch cực thỡ nỳt CAN trở lại trạng thỏi idle và ủợi ủến khi bus rảnh thỡ tiếp tục tranh giành bus
Nếu nỳt CAN ủang ở trạng thỏi truyền mà phỏt hiện ra lỗi thỡ nú truyền cờ lỗi active hay passive (phụ thuộc nỳt ủang ở trạng thỏi lỗi nào)
Nếu nút ở trạng thái tx_state và truyền một frame thành công thì vào trạng thái inter_state ủể truyền frame khoảng cỏch Sau khi truyền xong frame khoảng cỏch thỡ nỳt CAN trở lại trạng thái idle
Khi CAN ở trạng thái không hoạt động (idle), nếu không có dữ liệu truyền đi thì khi phát hiện bit SOF, CAN sẽ chuyển sang trạng thái nhận (rx_state) Ngược lại, nếu CAN đang nhận dữ liệu ở trạng thái rx_state, khi phát hiện quá tải thì CAN sẽ chuyển sang trạng thái tràn (ovf_state) Trong trạng thái tràn, khi hoàn tất truyền frame quá tải, CAN sẽ trở về trạng thái không hoạt động.
Khi ủang ở trạng thỏi rx_state, nếu phỏt hiện cú lỗi thỡ nỳt CAN chuyển sang trạng thỏi err_state và truyền frame lỗi active hay passive
Nếu quỏ trỡnh nhận thành cụng thỡ nỳt CAN chuyển sang trạng thỏi inter_state ủể truyền frame khoảng cỏch và sau ủú thỡ trở về trạng thỏi idle
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
Tên Tín Hiệu Mức logic tích cực Mô Tả Chức Năng rst logic 1 Tín hiệu reset need_to_tx logic 1 Tích cực khi có yêu cầu truyền cho ủến khi frame truyền thành công arbitration_lost logic 1 Cho biết mất quyền tranh giành bus error_frame logic 1 Cho biết frame lỗi error_frame_ended logic 1 Cho biết kết thúc frame lỗi go_rx_id1 logic 1 Cho biết phỏt hiện ủược bit SOF (Start of frame) go_rx_idle logic 1 Cho biết quỏ trỡnh nhận ủó xong overload_frame logic 1 Cho biết frame quá tải overload_frame_ended logic 1 Cho biết kết thúc frame quá tải go_rx_inter Logic 1 Cho biết frame khoảng cách go_rx_idle Logic 1 Cho biết quá trình truyền hoặc nhận ủó xong
Hình 3-9: Hình biểu diễn các trạng thái con của rx_state
Bảng 3-9: Bảng mô tả các trạng thái con của rx_state
Máy Trạng Thái Mô Tả Chức Năng rx_id Trạng thái nhận trường ID rx_rtr Trạng thái nhận trường RTR rx_ide Trạng thái nhận IDE rx_dlc Trạng thái nhận trường chiều dài dữ liệu rx_data Trạng thái nhận dữ liệu rx_crc Trạng thái nhận trường CRC rx_crc_lim Trạng thái nhận bit kết thúc CRC rx_ack Trạng thái nhận bit ACK rx_ack_lim Trạng thái nhận bit kết thúc ACK rx_eof Trạng thái nhận trường kết thúc frame
Bảng 3-10: Bảng mô tả các tín hiệu chuyển trạng thái của rx_state
Tên Tín Hiệu Mức logic tích cực Mô Tả Chức Năng go_rx_id logic 1 Cho biết bắt ủầu nhận trường ID go_rx_ide logic 1 Cho biết bắt ủầu nhận trường IDE go_rx_dlc logic 1 Cho biết bắt ủầu nhận trường chiều dài dữ liệu go_rx_data logic 1 Cho biết bắt ủầu nhận trường dữ liệu go_rx_crc logic 1 Cho biết bắt ủầu nhận trường CRC go_rx_crc_lim logic 1 Cho biết bắt ủầu nhận bit kết thúc CRC go_rx_ack logic 1 Cho biết bắt ủầu nhận bit
ACK go_rx_ack_lim logic 1 Cho biết bắt ủầu nhận bit kết thúc ACK go_eof logic 1 Cho biết bắt ủầu nhận trường kết thúc dữ liệu
Nỳt CAN ủang ở trạng thỏi idle, khi nỳt khụng phải ở trạng thỏi truyền và phỏt hiện ủược 1 SOF thì truyền sang trạng thái nhận rx_state Trong trạng thái rx_state gồm có các trạng thỏi con Đầu tiờn nỳt CAN ủi vào trạng thỏi rx_id ủể nhận ID và sau ủú kiểm tra thụng ủiệp này cú dành cho mỡnh khụng Sau khi nhận xong ID thỡ nú chuyển vào trạng thỏi rx_rtr ủể nhận bit RTR, kế tiếp CAN chuyển vào trạng thỏi rx_ide ủể nhận bit IDE, và sau ủú thỡ CAN chuyển sang trạng thỏi rx_dlc ủể nhận trường chiều dài dữ liệu Sau ủú, thỡ CAN chuyển sang trạng thỏi rx_data ủể nhận dữ liệu (nếu cú dữ liệu), kế tiếp thỡ CAN chuyển sang trạng thỏi rx_crc ủể nhận trường CRC (trước ủú CAN cũng thực hiện tớnh CRC trờn thụng ủiệp nhận ủể so sỏnh CRC tớnh toỏn và CRC nhận ủược) Và kế tiếp thỡ nỳt CAN chuyển sang trạng thỏi rx_crc_lim ủể nhận bit kết thỳc của trường CRC Sau ủú, nú chuyển vào trạng thỏi rx_ack, nếu frame nhận thành cụng thỡ trong trạng thỏi này nú gửi ra bit 0 ủến nỳt truyền, sau ủú CAN chuyển vào trạng thỏi rx_ack_lim ủể nhận bit kết thỳc ACK và kế tiếp nú chuyển sang trạng thỏi rx_eof ủể nhận cỏc bit kết thỳc của trường EOF, trong trạng thái này nếu CAN phát hiện có bit SOF thì nó chuyển sang trạng thái quá tải ovf_state Trong quá trình nhận, nếu phát hiện có lỗi thì CAN lập tức chuyển sang trường err_state Nếu nú nhận thành cụng thong ủiệp thỡ CAN chuyển sang trạng thái inter_state
Hình 3-10: Hình biểu diễn trạng thái xử lý lỗi của nút CAN
Bảng 3-11: Bảng mô tả trạng thái xử lý lỗi
Module Cấu Hình Thanh Ghi
Module có chức năng là sự cầu nối giữa CPU và CAN Module này nhận qua dữ liệu port_0_io từ CPU gửi xuống hay gửi dữ liệu ra port_0_io cho CPU theo các tín hiệu ủịa chỉ port_0_io hay ủưa ngắt qua irq_on ( interrupt) tới CPU
Self_test_mode Clear_data_overrun Listen_only_mode Acceptance_filter_mode transmitting
Set_reset_mode Node_bus_off
Error_status Rx_err_cnt Tx_err_cnt Transmit_status
Set_bus_error_irq Set_arbitration_lost_irq
Read_arbitration_lost_capture_reg
Triple_sampling Self_rx_request Single_shot_transmission
We_rx_err_cnt We_tx_err_cnt Extended_mode Arbitration_lost_capture [7:0]
Node_error_passive Node_error_active
[7:0] error_capture_code [5:0] baud_r_presc [1:0] sync_jump_width
Hỡnh 3-17: Hỡnh biểu diễn sơ ủồ khối module Can Register
Bảng 3-16: Bảng mô tả tín hiệu vào/ra module Can Register
Tên Tín Hiệu IO Từ/Đến
Tín hiệu clock (clk) xác định nhịp độ hoạt động của mô-đun Tín hiệu reset (rst) đưa mô-đun về trạng thái ban đầu Tín hiệu cho phép hoạt động (cs) cho phép mô-đun bắt đầu hoạt động Tín hiệu cho phép ghi (we) cho phép ghi dữ liệu vào mô-đun.
(write_enable) addr [7:0] I can_top Địa chỉ truy cập các thanh ghi CAN data_in [7:0] I can_top Dữ liệu ghi vào các thanh ghi data_out [7:0] O can_top Dữ liệu ủọc ra từ các thanh ghi irq O can_top logic 1 Tín hiệu ngắt sample_point I can_btl Thời ủiểm lấy mẫu transmitting I can_bsp logic 1 Tín hiệu cho biết
CAN ở trạng thái truyền set_reset_mode I can_bsp logic 1 node_bus_off I can_bsp logic 1 Tín hiệu cho biết
CAN ở trạng thái bus_off error_status I can_bsp logic 1 Tín hiệu cho biết
CAN ở trạng thái lỗi rx_err_cnt [7:0] I can_bsp Bộ ủếm lỗi của bộ nhận tx_err_cnt [7:0] I can_bsp Bộ ủếm lỗi của bộ truyền transmit_status I can_bsp logic 1 Cho biết CAN ở trạng thái truyền receive_status I can_bsp logic 1 Cho biết CAN ở trạng thái nhận tx_successful I can_bsp logic 1 Cho biết quá trình truyền thành công need_to_tx I can_bsp logic 1 overrun I can_bsp logic 1 Tín hiệu cho biết bộ nhận quá tải info_empty I can_bsp logic 1 Tín hiệu cho biết fifo ủang rỗng set_bus_error_irq I can_bsp logic 1 Ngắt do lỗi bus set_arbitration_lost_irq I can_bsp logic 1 Ngắt do mất quyền tranh chấp bus arbitration_lost_capture [4:0] I can_bsp Số lần mất quyền tranh chấp bus node_error_passive I can_bsp logic 1 Tín hiệu cho biết
CAN ở trạng thái error passive node_error_active I can_bsp logic 1 Tín hiệu cho biết
CAN ở trạng thái error active rx_message_counter [6:0] I can_bsp Bộ ủếm thong ủiệp nhận reset_mode O can_bsp logic 1 Tín hiệu reset mềm
CAN listen_only_mode O can_bsp logic 1 Cho biết chế ủộ
Listen Only acceptance_filter_mode O can_bsp logic 1 Cho biết chế ủộ
Acceptance Filter self_test_mode O can_bsp logic 1 Cho biết chế ủộ Self
Test release_buffer O can_bsp logic 1 Tín hiệu giải phóng bộ ủệm/reset bộ ủệm abort_tx O can_bsp logic 1 Yêu cầu hủy truyền tx_request O can_bsp logic 1 Tín hiệu cho biết
CAN phát yêu cầu truyền baud_r_presc [5:0] O can_btl Bit BRP của thanh ghi ủịnh thời 0 sync_jump_width [1:0] O can_btl Bit SJW của thanh ghi ủịnh thời 0 time_segment1 [3:0] O can_btl Bit TS1 của thanh ghi ủịnh thời 1 time_segment2 [2:0] O can_btl Bit TS2 của thanh ghi ủịnh thời 1 triple_sampling O can_btl logic 1 Bit TS của thanh ghi ủịnh thời 1 error_warning_limit [7:0] O can_bsp Thanh ghi giới hạn cảnh báo lỗi CANEWL we_rx_err_cnt O can_bsp logic 1 Tín hiệu cho phép ghi của thanh ghi bộ ủếm lỗi nhận we_tx_err_cnt O can_bsp logic 1 Tín hiệu cho phép ghi của thanh ghi bộ ủếm lỗi truyền extended_mode O can_bsp Tín hiệu cho biết
CAN ở chế ủộ mở rộng clkout O can_top Clock ra acceptance_code_0 [7:0] O can_bsp Thanh Ghi chấp nhận thụng ủiệp 0 (Sử dụng trong chế ủộ cơ bản; chế ủộ chuẩn, mở rộng với chế ủộ 1 bộ lọc và 2 bộ lọc) acceptance_code_1 [7:0] O can_bsp Thanh Ghi chấp nhận thụng ủiệp 1 (Sử dụng trong chế ủộ chuẩn, mở rộng với chế ủộ 1 bộ lọc và 2 bộ lọc) acceptance_code_2 [7:0] O can_bsp Thanh Ghi chấp nhận thụng ủiệp 1 (Sử dụng trong chế ủộ chuẩn, mở rộng với chế ủộ 1 bộ lọc và 2 bộ lọc) acceptance_code_3 [7:0] O can_bsp Thanh Ghi chấp nhận thụng ủiệp 1 (Sử dụng trong chế ủộ chuẩn, mở rộng với chế ủộ 1 bộ lọc và 2 bộ lọc) acceptance_mask_0 [7:0] O can_bsp Thanh Ghi mặt nạ 0 acceptance_mask_1 [7:0] O can_bsp Thanh Ghi mặt nạ 1 acceptance_mask_2 [7:0] O can_bsp Thanh Ghi mặt nạ 2 acceptance_mask_3 [7:0] O can_bsp Thanh Ghi mặt nạ 3 tx_data_0 [7:0] O can_bsp Thanh ghi truyền 0 tx_data_1 [7:0] O can_bsp Thanh ghi truyền 1 tx_data_2 [7:0] O can_bsp Thanh ghi truyền 2 tx_data_3 [7:0] O can_bsp Thanh ghi truyền 3 tx_data_4 [7:0] O can_bsp Thanh ghi truyền 4 tx_data_5 [7:0] O can_bsp Thanh ghi truyền 5 tx_data_6 [7:0] O can_bsp Thanh ghi truyền 6 tx_data_7 [7:0] O can_bsp Thanh ghi truyền 7 tx_data_8 [7:0] O can_bsp Thanh ghi truyền 8 tx_data_9 [7:0] O can_bsp Thanh ghi truyền 9 tx_data_10 [7:0] O can_bsp Thanh ghi truyền 10 tx_data_11 [7:0] O can_bsp Thanh ghi truyền 11 tx_data_12 [7:0] O can_bsp Thanh ghi truyền 12
• Các Thanh Ghi trong Chế Độ Cơ Bản (Basic Mode)
Tên Thanh Ghi Tên Viết
Tắt Địa Chỉ Đọc/Ghi
Thanh Ghi Chế Độ CANMR H’00 Đ/G 8
Thanh Ghi Bộ Lọc Chấp Nhận 0
Thanh Ghi Mặt Nạ Chấp Nhận 0
Thanh Ghi Truyền Dữ Liệu 0
Thanh Ghi Truyền Dữ Liệu 1
Thanh Ghi Truyền Dữ Liệu 2
Thanh Ghi Truyền Dữ Liệu 3
Thanh Ghi Truyền Dữ Liệu 4
Dữ Liệu 5 Thanh Ghi Truyền Dữ Liệu 6
Thanh Ghi Truyền Dữ Liệu 7
Thanh Ghi Truyền Dữ Liệu 8
Thanh Ghi Truyền Dữ Liệu 9
Thanh Ghi Nhận Dữ Liệu 0
Thanh Ghi Nhận Dữ Liệu 1
Thanh Ghi Nhận Dữ Liệu 2
Thanh Ghi Nhận Dữ Liệu 3
Thanh Ghi Nhận Dữ Liệu 4
Thanh Ghi Nhận Dữ Liệu 5
Thanh Ghi Nhận Dữ Liệu 6
Thanh Ghi Nhận Dữ Liệu 7
Thanh Ghi Nhận Dữ Liệu 8
Thanh Ghi Nhận Dữ Liệu 9
Thanh Ghi Bộ Chia Clock
• Các Thanh Ghi trong Chế Độ Mở Rộng (Extended Mode)
Tên Thanh Ghi Tên Viết
Tắt Địa Chỉ Đọc/Ghi
Thanh Ghi Chế Độ CANMR H’00 Đ/G 8
Thanh Ghi Cho Phép Ngắt (no reset)
Thanh Ghi Arbitration Lost Capture
Thanh Ghi Error Capture Code
Thanh Ghi Error Warning Limit
Thanh Ghi Bộ Đếm Lỗi Nhận
Thanh Ghi Bộ Đếm Lỗi Truyền
Thanh Ghi Bộ Lọc Chấp Nhận 0
Thanh Ghi Bộ Lọc Chấp Nhận 1
Thanh Ghi Bộ Lọc Chấp Nhận 2
Thanh Ghi Bộ Lọc Chấp Nhận 3
Thanh Ghi Mặt Nạ Chấp Nhận 0
Thanh Ghi Mặt Nạ Chấp Nhận 1
Thanh Ghi Mặt Nạ Chấp Nhận 2
Thanh Ghi Mặt Nạ Chấp Nhận 3
Thanh Ghi tx data 0 CANTDR0 H’10 G 8
Thanh Ghi tx data 1 CANTDR1 H’11 G 8
Thanh Ghi tx data 2 CANTDR2 H’12 G 8
Thanh Ghi tx data 3 CANTDR3 H’13 G 8
Thanh Ghi tx data 4 CANTDR4 H’14 G 8
Thanh Ghi tx data 5 CANTDR5 H’15 G 8
Thanh Ghi tx data 6 CANTDR6 H’16 G 8
Thanh Ghi tx data 7 CANTDR7 H’17 G 8
Thanh Ghi tx data 8 CANTDR8 H’18 G 8
Thanh Ghi tx data 9 CANTDR9 H’19 G 8 Thanh Ghi tx data 10 CANTDR1
Thanh Ghi tx data 11 CANTDR1
Thanh Ghi tx data 12 CANTDR1
Thanh Ghi Bộ Chia Clock
Thanh Ghi Chế Độ CANMR
Trong chế ủộ cơ bản:
- - - OIE EIE TIE RIE RM
7-5 - 0 Đ Những bit luụn ủọc ra 0 4 OIE 0 Đ/G (Overrun Interrupt Enable)
0: Không cho phép xảy ra ngắt nếu cờ tràn tích cực 1: Cho phép xảy ra ngắt nếu cờ tràn tích cực
0: Không cho phép xảy ra ngắt nếu cờ lỗi tích cực 1: Cho phép xảy ra ngắt nếu cờ lỗi tích cực
0: Không cho phép xảy ra ngắt nếu cờ truyền tích cực
1: Cho phép xảy ra ngắt nếu cờ truyền tích cực 1 RIE 0 Đ/G (Receive Interrupt Enable)
0: Không cho phép xảy ra ngắt nếu cờ nhận tích cực 1: Cho phép xảy ra ngắt nếu cờ nhận tích cực
0 RM 1 Đ/G Cho biết việc cấu hình các ghi thanh Reset Mode
0: Không cho phép cấu hình các thanh ghi (ngoại trừ các thanh ghi truyền)
1: Cho phép cấu hình các thanh ghi
• Trong chế ủộ mở rộng
7-4 - 0 Đ Những bit luụn ủọc ra 0 3 AFM 0 Đ/G (Acceptance Filter Mode)
0: Khụng cho phộp vào chế ủộ Acceptance Filter 1: Cho phộp vào chế ủộ Acceptance Filter
0: Khụng cho phộp vào chế ủộ Self Test 1: Cho phộp vào chế ủộ Self Test
0: Khụng cho phộp vào chế ủộ Listen Only 1: Cho phộp vào chế ủộ Listen Only
0 RM 1 Đ/G Cho biết việc cấu hình các ghi thanh Reset Mode
0: Không cho phép cấu hình các thanh ghi (ngoại trừ các thanh ghi truyền)
1: Cho phép cấu hình các thanh ghi
Thanh ghi CANCR là thanh ghi chỉ ghi Thanh ghi luụn ủược ủọc ra là H’FF Thanh ghi cú thể truy cập trong chế ủộ cơ bản và mở rộng
7-5 - - - Đây là bit cấm ghi 4 TRR 0 G Yêu cầu truyền nhận(Transmit Receive Request)
0: Không phát yêu cầu truyền hoặc nhận 1: Phỏt yờu cầu tryền hoặc nhận Khi bit này ủược cài ủặt 1 và bit TR ủược cài ủặt 0 thỡ CAN chỉ phỏt yêu cầu nhận mà không phát yêu cầu truyền
3 - - G Chỉ ghi 0 vào bit này Cấm ghi 1 vào bit này
2 RB 0 G Lệnh xóa/giải phóng bộ nhớ (Release Buffer)
0: Không phát lệnh xóa bộ nhớ 1: Phát lệnh xóa bộ nhớ
1 AT 0 G Lệnh hủy truyền (Abort Transmit)
0: Không phát lệnh hủy truyền 1: Phát lệnh hủy truyền
0 RT 0 G Lệnh yêu cầu truyền (Request Transmit)
0: Không phát lệnh yêu cầu truyền 1: Phát lệnh yêu cầu truyền
Thanh Ghi Trạng Thái CANSR
Thanh ghi CANSR là thanh ghi chỉ ủọc Thanh ghi cú thể truy cập trong chế ủộ cơ bản và chế ủộ mở rộng
NBF ES TS RS TC TBS OS RBS
0: Cho biết không ở trạng thái bus off 1: Cho biết ở trạng thái bus off
0: Cho biết không ở trạng thái lỗi 1: Cho biết ở trạng thái lỗi
0: Cho biết không ở trạng thái truyền 1: Cho biết ở trạng thái truyền
0: Cho biết không ở trạng thái nhận 1: Cho biết ở trạng thái nhận
0: Cho biết ủang trong quỏ trỡnh truyền 1: Cho biết quá trình truyền kết thúc 2 TBS 1 Đ Transmit Buffer Status
0: Cho biết CAN không muốn truyền
1: Cho biết CAN muốn truyền dữ liệu nhưng chưa dành ủược bus
0: Cho biết không ở trạng thái quá tải 1: Cho biết ở trạng thái quá tải
0: Cho biết bộ ủệm nhận khụng cú dữ liệu 1: Cho biết bộ ủệm nhận cú dữ liệu
Thanh Ghi Cho Phép Ngắt CANIER
Thanh ghi CANIER chỉ ủược truy cập trong chế ủộ mở rộng
BEIE ALIE EPIE - DOIE EWIE TIE RIE
7 BEIE 0 Đ (Bus Error Interrupt Enable)
0: Không cho phép ngắt xảy ra nếu cở lỗi bus tích cực
1: Cho phép ngắt xảy ra nếu cở lỗi bus tích cực 6 ALIE 0 Đ (Arbitration Lost Interrupt Enable)
0: Không cho phép ngắt xảy ra nếu cở mất quyền phân xử tích cực
1: Cho phép ngắt xảy ra nếu cờ mất quyền phân xử tích cực
5 EPIE 0 Đ Error Passive Interrupt Enable
0: Không cho phép ngắt xảy ra nếu cờ lỗi passive tích cực
1: Cho phép ngắt xảy ra nếu cờ lỗi passive tích cực
4 - 0 Đ Bit này luụn ủọc ra 0
3 DOIE 0 Đ Data Overrun Interrupt Enable
0: Không cho phép ngắt xảy ra nếu cờ tràn dữ liệu tích cực
1: Cho phép ngắt xảy ra nếu cờ tràn dữ liệu tích cực 2 EWIE 0 Đ Error Warning Interrupt Enable
0: Không cho phép ngắt xảy ra nếu cờ cảnh báo lỗi tích cực
1: Cho phép ngắt xảy ra nếu cờ cảnh báo lỗi tích cực 1 TIE 0 Đ Transmit Interrupt Enable
0: Khụng cho phộp ngắt xảy ra nếu bắt ủầu truyền 1: Cho phộp ngắt xảy ra nếu bắt ủầu truyền
0: Khụng cho phộp ngắt xảy ra nếu bắt ủầu nhận 1: Cho phộp ngắt xảy ra nếu bắt ủầu nhận
Thanh Ghi Định Thời 0 CANTR0
Thanh ghi CANTR0 ủược truy cập trong chế ủộ cơ bản và mở rộng Thanh ghi này chỉ ủược ghi khi bit CANMR.RM=1
7-6 SJW 2’HX Đ Độ rộng bước nhảy ủồng bộ lại = SJW+1(Re- synchronous Jump Width) ủị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
5-0 BRP 6’HX Đ Giỏ trị cài ủặt cho tốc ủộ baud (Baud Rate
Thanh Ghi Định Thời 1 CANTR1
Thanh ghi CANTR0 ủược truy cập trong chế ủộ cơ bản và mở rộng Thanh ghi này chỉ ủược ghi khi bit CANMR.RM=1
GTKĐ Đ/G Mô tả 7 TSP X Đ/G (Triple Sampling)
6-4 TSM2 3’HX Đ/G (Time_Segment2) Đoạn truyền + Đoạn pha 2 (TSM2+1) 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
Đoạn pha một (TSM1+1) là một đoạn bộ đệm được kéo dài ra nếu sự chuyển trạng thái từ logic 1 sang logic 0 xảy ra trong quá trình truyền Đoạn pha q đượ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.
TSEG1 > TSEG2 >= SJW và TSEG1 + TSEG2 + 3 = 8 - 25 time quanta
SJW = 1 ủến min (4, PHASE_SEG1) TSEG1 = 4 - 16 time quanta
Thanh ghi CANALCR Arbitration Lost Capture
Thanh ghi CANALCR chỉ truy cập trong chế ủộ mở rộng
Thanh ghi CANECC Error Capture Code
Thanh ghi CANECC chỉ truy cập trong chế ủộ mở rộng
Thanh Ghi CANEWLR error warning limit
Thanh ghi CANEWLR chỉ ủược truy cập trong chế ủộ mở rộng Thanh ghi này chỉ ủược ghi khi bit CANMR.RM=1
Thanh ghi Bộ Đếm Lỗi Nhận CANREC
Thanh ghi CANREC chỉ truy cập trong chế ủộ mở rộng Thanh ghi này chỉ ủược ghi khi bit CANMR.RM=1
Thanh ghi Bộ Đếm Lỗi Truyền CANTEC
Thanh ghi CANTEC chỉ truy cập trong chế ủộ mở rộng Thanh ghi này chỉ ủược ghi khi bit CANMR.RM=1
Thanh Ghi Bộ Lọc Chấp Nhận 0 CANACR0 acceptance_code_0
Thanh ghi CANACR0 cú thể truy cập trong chế ủộ mở rộng và chế ủộ cơ bản nhưng với ủịa chỉ khỏc nhau Thanh ghi này chỉ ủược ghi khi bit CANMR.RM=1
Thanh ghi này cài ủặt giỏ trị chấp nhận của nỳt CAN Nếu phần nhận dạng của thụng ủiệp nhận trựng với giỏ trị chấp nhận này thỡ thụng ủiệp ủú ủược chấp nhận và ủược lưu vào bộ ủệm nhận Ngược lại, thỡ nỳt CAN hiểu rằng thụng ủiệp này thụng ủiệp này khụng phải dành cho nú và thụng ủiệp này sẽ khụng ủược chấp nhận
Thanh Ghi Mặt Nạ Chấp Nhận 0 CANAMR0 acceptance_mask_0
Thanh ghi CANACR0 cú thể truy cập trong chế ủộ mở rộng và chế ủộ cơ bản nhưng với ủịa chỉ khỏc nhau Thanh ghi này chỉ ủược ghi khi bit CANMR.RM=1
Hoạt ủộng module CAN
Hỡnh 3-21: Hỡnh biểu diễn tiến trỡnh cài ủặt cỏc thanh ghi ủịnh thời
CANTR0.SJW = 2’h2: Cài ủặt bộ rộng bước nhảy ủồng bộ bằng 2 Cú nghĩa là ủiểm lấy mẫu cú thể ủược dịch chuyển 2 ủơn vị thời gian (xung clock) ủể bự lại lỗi pha của cạnh
CANTR0.BRP = 6’h01: Cài ủặt tốc ủộ baud = (1*BRP)*2 = 4 ủơn vị xung clock
CANTR1.TSEG1 = 4’h4: Cài ủặt ủoạn pha 1 bằng 5 (4+1) ủơn vị thời gian (1 ủơn vị thời gian = 4 ủơn vị xung clock)
CANTR1.TSEG2 = 3’h3: Cài ủặt ủoạn pha 2 bằng 4 (3+1) ủơn vị thời gian
Hình 3-22: Thời gian bit lý thuyết
Hỡnh 3-23: Hỡnh biểu diễn quỏ trỡnh ủồng bộ ủỳng thời gian
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ộ
Đoạn pha 1 xảy ra quá trình chuyển trạng thái từ logic 1 sang logic 0 với thời lượng kéo dài hơn 2 đơn vị thời gian so với đoạn đồng bộ không có cạnh xảy ra Sai số pha giữa cạnh đầu tiên xảy ra bên ngoài đoạn đồng bộ và đoạn đồng bộ là tối thiểu, với độ lớn sai số pha = 2 và độ rộng bước nhảy đồng bộ lại = 3 (SJW) là 2 đơn vị thời gian Do đó, khoảng cách giữa 2 lần lấy mẫu là 12 đơn vị thời gian (tăng thêm 2 đơn vị thời gian so với quá trình đồng bộ duy trì thời gian).
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ộ
Sự chuyền trạng thỏi từ logic 1 ủến logic 0 xảy ra trong ủoạn pha 2 Do ủú, ủoạn pha 2 ủược thu ngắn lại = 3 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 Như vậy, khoảng cỏch 2 lần lấy mẫu là 8 ủơn vị thời gian (giảm ủi 2 ủơn vị thời gian so với quỏ trỡnh ủồng bộ ủỳng thời gian)
3.6.2 Hoạt ủộng phõn xử bus
Cài ủặt thanh ghi CANTR0, CANTR1
Cài ủặt thanh ghi CANCDR Cài ủặt ủộ rộng bước nhảy ủồng bộ, tốc ủộ baud, ủoạn pha 1, ủoạn pha 2
Cài ủặt chế ủộ hoạt ủộng,
Cài ủặt thanh ghi CANMR Tắt bit cho phép cấu hình các thanh ghi
Cài ủặt thanh ghi truyền CANTDR0 – CANTDR9 Cài ủặt trường nhận dạng, loại frame, trường chiều dài dữ liệu, trường dữ liệu
Cài ủặt thanh ghi CANIR Cho phép ngắt xảy ra
Cài ủặt thanh ghi CANCR Phát yêu cầu truyền
Giám sát bus xem có hoạt ủộng nào trờn bus?
Tranh chấp bus bằng gửi trường nhận dạng ID
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
Khảo sát một ví dụ về mất quyền truy cập bus:
• Bước 1: Cài ủặt chế ủộ ủồng bộ và ủịnh thời bit
Xin xem phần hoạt ủộng ủộng bộ và ủịnh thời bit
• Bước 2: Cài ủặt cỏc thanh ghi:
CANCDR.EXT_MD = 1’b0 : Cài ủặt CAN hoạt ủộng ở chế ủộ cơ bản
CANCDR.CLK_OFF = 1’b0: Cấp clock cho module CAN
CANMR.RM = 1’b0 : Tắt chế ủộ cấu hỡnh thanh ghi
• Bước 4: Cài ủặt thanh ghi truyền CANTDR0 – CANTDR9
Cài ủặt trường nhận dạng, loại frame (frame dữ liệu hoặc frame từ xa), trường chiều dài dữ liệu, trường dữ liệu
CANTDR0 = 8’hEA ID[10:3] = 8’hEA CANTDR1 = 8’h28 ID[2:0] = 3’h1, RTR = 0 frame dữ liệu, trường chiều dài dữ liệu là 8 bytes
Trong khi ủú CAN nhận một frame với ID[10:3] = 8’hE8 và ID[2:0] 3’h1
Hình 3-27: Hình biểu diễn về việc mất quyền phân xử
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
Sau khi mất quyền tranh chấp bus, CAN sẽ ủợi ủến khi khụng cũn hoạt ủộng nào trờn bus rồi sẽ tiếp tục tranh chấp bus bằng cỏch gửi trường nhận dạng ID cho ủến khi thắng trong việc tranh chấp bus, CAN sẽ truyền dữ liệu ra mạng CAN
Khảo sát một ví dụ về thắng trong việc tranh chấp bus
• Bước 1: Cài ủặt chế ủộ ủồng bộ và ủịnh thời bit
Xin xem phần hoạt ủộng ủộng bộ và ủịnh thời bit
• Bước 2: Cài ủặt cỏc thanh ghi:
CANCDR.EXT_MD = 1’b0 : Cài ủặt CAN hoạt ủộng ở chế ủộ cơ bản
CANCDR.CLK_OFF = 1’b0 cấp clock cho module CAN
CANMR.RM = 1’b0 : Tắt chế ủộ cấu hỡnh thanh ghi
• Bước 4: Cài ủặt thanh ghi truyền CANTDR0 – CANTDR9
Cài ủặt trường nhận dạng, loại frame (frame dữ liệu hoặc frame từ xa), trường chiều dài dữ liệu, trường dữ liệu
CANTDR0 = 8’hEA ID[10:3] = 8’hEA CANTDR1 = 8’h28 ID[2:0] = 3’h1, RTR = 0 frame dữ liệu, trường chiều dài dữ liệu là 8 bytes
Trong khi ủú CAN nhận một frame với ID[10:3] = 8’hEE và ID[2:0] 3’h1
Hình 3-29: Hình biểu diễn về việc thắng quyền phân xử bus
Hình 3-30: Hình biểu diễn vế việc thắng quyền phân xử bus
Sau khi thắng quyền tranh chấp bus, CAN sẽ gửi hết các trường còn lại của frame
3.6.3 Hoạt ủộng truyền dữ liệu
Cài ủặt thanh ghi CANTR0, CANTR1
Cài ủặt thanh ghi CANCDR Cài ủặt ủộ rộng bước nhảy ủồng bộ, tốc ủộ baud, ủoạn pha 1, ủoạn pha 2
Cài ủặt chế ủộ hoạt ủộng,
Cài ủặt thanh ghi CANMR Tắt bit cho phép cấu hình các thanh ghi
Cài ủặt thanh ghi truyền CANTDR0 – CANTDR9 Cài ủặt trường nhận dạng, loại frame, trường chiều dài dữ liệu, trường dữ liệu
Cài ủặt thanh ghi CANIR Cho phép ngắt xảy ra
Cài ủặt thanh ghi CANCR Phát yêu cầu truyền
Giám sát bus xem có hoạt ủộng nào trờn bus?
Tranh chấp bus bằng gửi trường nhận dạng ID
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
Sau ủõy ta sẽ tham khảo một vớ dụ về quỏ trỡnh truyền dữ liệu:
• Bước 1: Cài ủặt chế ủộ ủồng bộ và ủịnh thời bit
Xin xem phần hoạt ủộng ủộng bộ và ủịnh thời bit
• Bước 2: Cài ủặt cỏc thanh ghi:
CANCDR.EXT_MD = 1’b0 : Cài ủặt CAN hoạt ủộng ở chế ủộ cơ bản
CANCDR.CLK_OFF = 1’b0: Cấp clock cho module CAN
CANMR.RM = 1’b0 : Tắt chế ủộ cấu hỡnh thanh ghi
• Bước 4: Cài ủặt thanh ghi truyền CANTDR0 – CANTDR9
Cài ủặt trường nhận dạng, loại frame (frame dữ liệu hoặc frame từ xa), trường chiều dài dữ liệu, trường dữ liệu
CANTDR0 = 8’hEA ID[10:3] = 8’hEA CANTDR1 = 8’h28 ID[2:0] = 3’h1, RTR = 0 frame dữ liệu, trường chiều dài dữ liệu là 8 bytes
CANTDR2 = 8’h56 dữ liệu byte 1 CANTDR3 = 8’h78 dữ liệu byte 2 CANTDR4 = 8’h9A dữ liệu byte 3 CANTDR5 = 8’hBC dữ liệu byte 4 CANTDR6 = 8’hDE dữ liệu byte 5 CANTDR7 = 8’hF0 dữ liệu byte 6 CANTDR8 = 8’h0F dữ liệu byte 7 CANTDR9 = 8’hED dữ liệu byte 8
• Bước 4: Cài ủặt thanh ghi truyền CANTDR0 – CANTDR9
• Bước 5: Phát yêu cầu truyền
Hình 3-32: Hình biểu diễn của quá trình truyền frame dữ liệu
3.6.4 Hoạt ủộng nhận dữ liệu
Cài ủặt thanh ghi CANTR0, CANTR1
Cài ủặt thanh ghi CANCDR Cài ủặt ủộ rộng bước nhảy ủồng bộ, tốc ủộ baud, ủoạn pha 1, ủoạn pha 2
Cài ủặt chế ủộ hoạt ủộng,
Cài ủặt thanh ghi CANACR0, CANAMR0 Cài ủặt bộ lọc chấp nhận, mặt nạ chấp nhận
Cài ủặt thanh ghi CANMR Tắt bit cho phép cấu hình các thanh ghi
Không chấp nhận thụng ủiệp N
Lưu dữ liệu vào bộ ủệm nhận
Hình 3-33: Hình biểu diễn tiến trình của quá trình nhận dữ liệu
Sau ủõy ta sẽ tham khảo một vớ dụ về quỏ trỡnh nhận dữ liệu:
• Bước 1: Cài ủặt chế ủộ ủồng bộ và ủịnh thời bit
Xin xem phần hoạt ủộng ủộng bộ và ủịnh thời bit
• Bước 2: Cài ủặt cỏc thanh ghi:
CANCDR.EXT_MD = 1’b0 : Cài ủặt CAN hoạt ủộng ở chế ủộ cơ bản
CANCDR.CLK_OFF = 1’b0: Cấp clock cho module CAN
• Bước 3: Cài ủặt bộ lọc chấp nhận và mặt nạ chấp nhận
CANACR0 = 8’hE8 : Cài ủặt bộ lọc chấ p nhận bằng 8’HE8 Nếu khi ID[10:3] của thụng ủiệp nhận trựng với 8’HE8 thỡ thụng ủiệp ủú ủược chấp nhận
CANAMR0 = 8’h0F : Cài ủặt mặt nạ chấp nhận thụng ủiệp bằng 8’H0F
Với giá trị này thì bit tương ứng bộ lọc chấp nhận CANACR0[3:0] bị che
Nếu thanh ghi này bằng 8’HFF thỡ bất cứ thụng ủiệp nhận nào cũng ủược chấp nhận
CANMR.RM = 1’b0 : Tắt chế ủộ cấu hỡnh thanh ghi
Hỡnh 3-34: Hỡnh biểu diễn quỏ trỡnh nhận trong chế ủộ cơ bản
Sau cỏc bước cấu hỡnh thanh ghi như trờn, quỏ trỡnh nhận bắt ủầu bằng sự tớch cực của tớn hiệu ủồng bộ cứng hard_sync Frame nhận gồm trường ID’h741, trường RTR=0 (cú nghĩa ủõy là frame dữ liệu), trường chiều dài dữ liệu = 0, trường CRC’h2372 Frame nhận ủược kiểm tra trường ID, kế tiếp frame nhận ủược kiểm tra trường CRC và sau ủú ủược kiểm tra trường ACK và kiểm tra bit stuff cuối cựng dữ liệu ủược lưu trữ trong bộ ủệm nhận là 2 bytes gồm 11 bit ID’h741, 1 bit RTR=0, 4 bit chiều dài dữ liệu=4’h0
3.6.5 Hoạt ủộng xử lý lỗi
• Bước 1: Cài ủặt chế ủộ ủồng bộ và ủịnh thời bit Xin xem phần hoạt ủộng ủộng bộ và ủịnh thời bit
• Bước 2: Cài ủặt cỏc thanh ghi:
CANCDR.EXT_MD = 1’b0 : Cài ủặt CAN hoạt ủộng ở chế ủộ cơ bản
CANCDR.CLK_OFF = 1’b0: Cấp clock cho module CAN
CANMR.RM = 1’b0 : Tắt chế ủộ cấu hỡnh thanh ghi
• Bước 4: Cài ủặt thanh ghi truyền CANTDR0 – CANTDR9 Cài ủặt trường nhận dạng, loại frame (frame dữ liệu hoặc frame từ xa), trường chiều dài dữ liệu, trường dữ liệu
CANTDR0 = 8’hE8 ID[10:3] = 8’hE8 CANTDR1 = 8’hB7 ID[2:0] = 3’h5, RTR = 1 frame từ xa, trường chiều dài dữ liệu là 7 bytes
CANTDR4 = 8’h00 CANTDR5 = 8’h00 CANTDR6 = 8’h00 CANTDR7 = 8’h00 CANTDR8 = 8’h00
• Bước 5: Phát yêu cầu truyền
Giao thức CAN hiện thực 5 cơ chế dũ lỗi : lỗi mức thụng ủiệp CRC, lỗi mức thụng ủiệp ủịnh dạng, lỗi mức thụng ủiệp ACK, lỗi mức bit quan sỏt, và lỗi mức bit stuff
3.6.5.1.1 Dũ lỗi mức thụng ủiệp CRC
Hỡnh 3-35: Hỡnh biểu diễn lỗi mức thụng ủiệp CRC
CAN nhận hết frame và kiểm tra CRC ủể xỏc ủịnh tớnh chớnh xỏc của thụng ủiệp CAN tớnh toỏn CRC calculated_crc của thụng ủiệp nhận và nhận chuỗi CRC của frame crc_in
Nút nhận thực hiện một tổng kiểm tra cho dữ liệu nhận và so sánh với chuỗi CRC nhận
Khi nhận thấy sự không trùng khớp giữa chuỗi CRC được tính toán calculated_crc và CRC nhận được crc_in, cờ lỗi CRC crc_err sẽ được kích hoạt Lúc này, nút nhận sẽ loại bỏ thông tin này và truyền đi một khung lỗi để yêu cầu gửi lại.
3.6.5.1.2 Dũ lỗi mức thụng ủiệp ủịnh dạng
Hỡnh 3-36: Hỡnh biểu diễn lỗi mức thụng ủiệp ủịnh dạng
CAN ủó truyền xong frame từ xa và ủợi bit kết thỳc ACK = 1 trong khe bit kết thỳc ACK nhưng CAN lại lấy mẫu ủược bit kết thỳc ACK = 0 trong khe bit kết thỳc ACK Kết quả là cờ lỗi mức ủịnh dạng bit form_err tớch cực
3.6.5.1.3 Dũ lỗi mức thụng ủiệp ACK
Hỡnh 3-37: Hỡnh biểu diễn lỗi mức thụng ủiệp ACK
CAN ủó truyền xong frame từ xa và mong ủợi bit ACK = 0 trong khe bit ACK nhưng CAN lại nhận ủược bit ACK = 1 trong khe bit ACK Như vậy khụng cú nỳt nào nhận ủược chớnh xỏc frame từ xa mà CAN ủó truyền Kết quả là cờ lỗi ACK ack_err tớch cực
3.6.5.1.4 Dò lỗi mức bit quan sát
Hình 3-38: Hình biểu diễn lỗi mức bit quan sát
Khi phát hiện lỗi bit ở vị trí bit ACK cuối cùng, CAN vẫn truyền bit CAN (bit lặn logic 1) nhưng khi lấy mẫu, CAN xác định mức bit quan sát khác với mức bit truyền Do lỗi bit này quan trọng (bit_err), nên bit ACK sẽ được bỏ qua.
3.6.5.1.5 Dò lỗi mức bit bit stuff
Hình 3-39: Hình biểu diễn lỗi mức bit stuff
Theo quy tắc nhồi bit, CAN nhận biết được 5 bit mức logic 1 liền nhau (biến bit_stuff_cnt = 5) giữa phần bắt đầu khung và phần kết thúc CRC Tuy nhiên, ở lần lấy mẫu tiếp theo, CAN lại nhận được thêm 1 bit logic 1 Do đó, quy tắc nhồi bit bị vi phạm và cờ lỗi stuff_err được bật lên.
3.6.5.2 Hoạt ủộng xử lý lỗi và chặn lỗi
Hình 3-40: Hình biểu diễn qui tắc chặn lỗi 1
Khi nỳt nhận dũ ủược một lỗi, bộ ủếm lỗi nhận rx_err_cnt tăng 1
Hình 3-41: Hình biểu diễn qui tắc chặn lỗi 2
Một nỳt nhận dũ ủược bit ưu thế logic 0 ủầu tiờn sau khi truyền một cờ lỗi sẽ tăng bộ ủếm lỗi nhận rx_err_cnt lên 8
Hình 3-42: Hình biểu diễn qui tắc chặn lỗi 3 Khi một lỗi xuất hiện nỳt phỏt ủi frame lỗi active Frame lỗi active gồm một cờ lỗi gồm 6 bit lỗi active logic 0, bộ ủếm lỗi truyền tx_err_cnt tăng lờn 8
Hình 3-43: Hình biểu diễn ngoại lệ 1 của qui tắc chặn lỗi 3
Kết quả của quá trình tổng hợp (synthesis)
Quỏ trỡnh tổng hợp netlist ủược thực hiện bởi cụng cụ Design Compiler của Synopsys với thư viện RC04LP(65nm) của Renesas
Việc kiểm tra Formal ủược thực hiện bởi cụng cụ Formality của Synopsys nhằm ủảm bảo netlist ủược sinh ra tương ủương với RTL code ban ủầu Kết quả là Formality ủó thành công (SUCCEEDED)
3.7.2 Số cổng của netlist (area)
Sau khi tổng hợp, tổng số cell là 76889 ủơn vị diện tớch của Synopsys trong ủú một cổng AND tốn 4 ủơn vị diện tớch của Synopsys Do ủú, số cổng = 76889/4 222
3.7.3 Công suất của netlist (power)
Tổng cụng suất ủộng = 866 àW, cụng suất rũ rỉ = 10 àW
3.7.4 Kết quả timing của netlist
Module CAN ủược tổng hợp (synthesize) với tần số 0MHz và khụng cú lỗi nào về timing (no timing violation)
Luận Văn Tốt Nghiệp Trang HV: Phan Phúc Cường
So sánh với thiết kế khác
Bảng 3-17 Bảng so sỏnh CAN ủược thiết kế với Renesas CAN và chuẩn
Tính năng Mục lớn Mục trung bình
Frame dữ liệu Frame từ xa
Frame khoảng cách Áp dụng phương pháp bit stuff cho 5 bit liên tiếp cùng mức logic Mã hóa chuỗi bit
Lỗi bit Lỗi bit stuff Lỗi CRC
Lỗi ủịnh dạng Phát hiện lỗi
Cờ lỗi active Báo hiệu lỗi
Cờ lỗi passive Nút ở trạng thái lỗi active Xử lý lỗi
Nút ở trạng thái lỗi passive Nút ở trạng thái lỗi bus stop Đoạn ủồng bộ Đoạn truyền Đoạn pha 1 Thời gian bit Đoạn pha 2 Đồng bộ cứng Định thời bit Đồng bộ Đồng bộ lại
Kích thước cổng (gate size)
Tốc ủộ bit 1Mbits/s 1Mbits/s 1Mbits/s
Chế ủộ Listen Only Chế ủộ Self Test Chế ủộ Self Reception Request Chế ủộ Sleep Số bộ ủệm truyền
: Có hỗ trợ : Không hỗ trợ
CÀI ĐẶT THIẾT KẾ LÊN FPGA và KIỂM TRA KẾT QUẢ CỦA THIẾT KẾ103
Cài ủặt thiết kế lờn FPGA board
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) Để việc mô phỏng thiết kế CAN của chúng ta thêm thực tế, ta sẽ kết nối CAN vào một hệ thống hoàn chỉnh và dựng hệ thống ủú ủể cung cấp ủầu vào và lấy ngừ ra ủể xỏc nhận kết quả
SOPC là tính năng của Altera cho phép xây dựng hệ thống nhanh chóng Hệ thống tổng hợp ủng hộ SOPC bằng cách:- Tự động tạo ngắt và gán chân.- Tạo mã phần mềm cấu hình cho các thiết bị tích hợp sẵn.- Tạo mã phần mềm trình điều khiển cho các thiết bị ngoại vi.
Hình 4-1 Các thành phần bên trong SOPC
Hình 4-2 Hệ thống kiểm tra thiết kế CAN
4.1.2 Kiểm tra tớnh năng ủọc ghi cỏc thanh ghi
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
Xuất dữ liệu ra bộ nhớ
Hình 4-4: Hình biễu diễn xuất ra dữ liệu ra bộ nhớ
4.1.3 Kiểm tra tính năng truyền và nhận
Hình 4-5: Hình biểu diễn dạng sóng của quá trình truyền và nhận Xuất dữ liệu ra bộ nhớ
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
4.1.4 Kiểm tra tính năng phân xử bus
Sự phõn xử bus: CAN0 và CAN1 truyền ủồng thời nhưng CAN1 giành ủược bus do CAN1-ID[10:3]=8’h88 và CAN0-ID[10:3]=8’hFF
Hình 4-7: Hình biểu diễn tính năng phân xử bus Xuất dữ liệu ra bộ nhớ
Hình 4-8: Hình biểu diễn tính năng phân xử bus
4.1.5 Kiểm tra tính năng xử lý lỗi
Xử lý lỗi: CAN0 truyền – CAN1 nhận CAN1 phỏt hiện một lỗi ủịnh dạng trong khe bit kết thỳc ACK (mong ủợi bit 0 nhưng nhận bit 1)
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