GIỚI THIỆU
Lịch sử của CAN
Giao thức CAN (Controller Area Network) là một giao thức giao tiếp nối tiếp được phát triển vào năm 1986 bởi Robert Bosch GmbH, nhằm đáp ứng nhu cầu kết nối các hệ thống điều khiển phân bố trên xe hơi Sự gia tăng số lượng hệ thống này cùng với chi phí dây điện ngày càng cao đã dẫn đến sự ra đời của CAN Mặc dù ban đầu chỉ được sử dụng trong ngành công nghiệp ô tô, giao thức này đã nhanh chóng được áp dụng rộng rãi trong nhiều lĩnh vực khác, đặc biệt là trong các hệ thống điều khiển công nghiệp yêu cầu tốc độ giao tiếp cao Nhờ sự công nhận từ nhiều ngành công nghiệp, giao thức này đã trở nên phổ biến và được gọi tắt là CAN.
Cái nhìn tổng quát về CAN
Hệ thống CAN gửi thông tin giữa các thiết bị qua mạng lưới bus nối tiếp, cho phép kết nối trực tiếp giữa các nút mà không cần bộ điều khiển trung tâm Sơ đồ khối của mạng CAN được trình bày trong hình 1.1.
Hình 1-1 Giao tiếp dùng CAN
CAN là một giao thức giao tiếp multi-master, cho phép các nút trong hệ thống hoạt động ngang hàng và gửi thông điệp cho nhau Nếu một bộ xử lý gặp sự cố, các bộ xử lý khác vẫn tiếp tục hoạt động bình thường Khi một nút muốn truyền thông điệp trên mạng, nó sẽ chờ cho đến khi bus rảnh Mỗi thông điệp đều có phần nhận dạng, và tất cả các nút đều nhận được thông điệp Nút sẽ chọn thông điệp phù hợp và bỏ qua các thông điệp khác.
Giao thức CAN được thiết kế cho các thông điệp có kích thước tối đa 8 byte Giao thức này không ngắt quãng dữ liệu truyền tải, nhưng ưu tiên cho các thông điệp để ngăn chặn xung đột và đảm bảo rằng các thông điệp khẩn cấp được truyền tải trước Ngoài ra, giao thức CAN còn bao gồm các cơ chế phát hiện và hạn chế lỗi mạnh mẽ.
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 đảm bảo sự truyền nhận dữ liệu với độ tin cậy cao, cho phép loại bỏ các nút bị lỗi mà không làm ảnh hưởng đến phần còn lại của mạng lưới Khác với các mạng truyền thống như USB hay Ethernet, CAN không gửi những khối dữ liệu lớn từ nút A sang nút B mà thay vào đó, nhiều thông điệp ngắn được truyền một cách rộng rãi trong toàn bộ mạng, giúp duy trì tính nhất quán về dữ liệu ở mỗi nút trong hệ thống.
Giao tiếp trong hệ thống CAN bus bắt đầu khi ứng dụng cung cấp dữ liệu cần truyền Bộ điều khiển đóng vai trò trung gian giữa ứng dụng và CAN bus, chuyển đổi dữ liệu từ ứng dụng thành các khung thông điệp để truyền trên bus Bộ thu phát sẽ nhận dữ liệu nhập từ bộ điều khiển và chuyển đổi nó thành tín hiệu vi sai, những tín hiệu này sau đó được truyền vật lý trên CAN bus.
CAN bus bao gồm hai đường tín hiệu chính là CAN-High và CAN-Low, được phân cực để giảm thiểu nhiễu Hệ thống CAN sử dụng 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 cấu trúc này, nút có 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 mọi thông điệp được truyền trên bus Dựa vào cơ chế lọc, bộ điều khiển quyết định xem thông tin nhận được có phù 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 đặt ra là thiết kế và phát triển một con chip điều khiển CAN, cho phép giao tiếp với ứng dụng thông qua một bộ cảm biến.
Cảm biến và bộ phận phát (actuator) là hai thành phần chính trong hệ thống điều khiển Cảm biến cung cấp tín hiệu tương tự để truyền trên mạng, sau đó tín hiệu này được gửi từ bộ cảm biến đến bộ chuyển đổi ADC để chuyển đổi thành tín hiệu số Tín hiệu số này được gửi tới bộ vi xử lý để xử lý dữ liệu và quyết định việc truyền thông qua mạng CAN Đồng thời, bộ vi xử lý cũng xử lý các thông tin 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ạ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 nhanh chóng do sự xuất hiện ngày càng nhiều ứng dụng và thiết bị trên thị trường có khả năng giao tiếp với nó Các yêu cầu ngày càng cao từ các ứng dụng liên quan đến tích hợp, khả năng sử dụng lại mã nguồn và sản phẩm cuối cùng đã dẫn đến 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 hóa 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 hóa 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 và chức năng của mô hình đã được mô phỏng thành công 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 kỹ lưỡng bằng cách gây ra lỗi và kiểm tra lại cơ chế xử lý lỗi.
Mô hình tổng hợp của bộ điều khiển giao thức CAN được phát triển và kiểm tra tương ứng Việc mô phỏng được thực hiện trên FPGA nhằm đánh giá 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 giao tiếp ngày càng gia tăng đã thúc đẩy 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 này được thiết kế khác nhau tùy thuộc vào ứng dụng cụ thể mà chúng phục vụ Đặc biệt, các giao thức dành cho ứng dụng công nghiệp thường được gọi là giao thức "đầu cuối cấp cao".
Giao thức "ủầu cuối cấp thấp" (fieldbus) tập trung vào việc xử lý thông tin từ hệ thống cảm biến và bộ phát, trong khi giao thức "ủầu cuối cấp cao" (factory bus) nhắm đến việc quản lý thông tin toàn bộ trong nhà máy.
Sự phát triển của công nghệ bán dẫn và mạng truyền thông đã tạo ra nhu cầu về các phương tiện tiên tiến cho hệ thống thông tin chuẩn hóa trong ứng dụng fieldbus Ngành công nghiệp này yêu cầu các hệ thống điều khiển linh hoạt với mức độ chuẩn hóa cao, dẫn đến việc phát triển các giải pháp có thể được triển khai dưới dạng phần cứng và phần mềm dễ dàng đáp ứng nhu cầu Trong hai thập kỷ qua, số lượng giao thức fieldbus đã gia tăng đáng kể, với các tiêu chuẩn như Profibus, Interbus-S, P-Net, LON và FIP được chấp nhận rộng rãi.
Ngành công nghiệp xe hơi đang phát triển các hệ thống điện tử để đáp ứng nhu cầu ngày càng cao về tiện lợi, an toàn và tiết kiệm nhiên liệu Điều này dẫn đến sự phức tạp trong hệ thống điều khiển và nhu cầu trao đổi dữ liệu ngày càng tăng, yêu cầu nhiều dây dẫn và kết nối Do đó, cần thay thế phương pháp truyền dữ liệu hiện tại bằng kiến trúc mạng, trong đó tất cả các nút giao tiếp qua một bus chung Sử dụng công nghệ CAN, các bộ điều khiển, cảm biến và thiết bị giao tiếp với nhau theo thời gian thực với tốc độ lên đến 1 Mbits/s qua hai dây bus dữ liệu nối tiếp.
Giao thức CAN được hình thành dựa trên kiến trúc Hệ thống Cấp độ Ảo (VLSA) với khái niệm "biến chia sẻ" Trong mô hình này, các tác vụ riêng lẻ trên hệ thống điều khiển truyền tin đảm nhận vai trò như 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
Tất cả các nút kết nối trên bus CAN tương tác với quá trình xử lý thực thông qua cảm biến và bộ phát Để truyền thông tin, các nút sử dụng phương pháp phân xử dựa trên ưu tiên Mỗi nút trong mạng nhận mọi thông điệp truyền trên bus và 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 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, được định nghĩa bởi các tiêu chuẩn ISO 11898 và ISO 11519, là một chuẩn quốc tế quan trọng Sự khác biệt giữa hai tiêu chuẩn này nằm ở lớp vật lý, với ISO 11898 hỗ trợ các ứng dụng tốc độ cao lên đến 1 Mbit/s, trong khi ISO 11519 chỉ xử lý các ứng dụng với tốc độ tối đa 125 kbit/s Giao thức CAN bao gồm lớp dữ liệu, bao gồm Logic Link Control (LLC) và Media Access Control (MAC), cùng với lớp vật lý Mô hình lớp ISO/OSI cho giao thức CAN được trình bày trong hình 2.
Hình 2-2 Mô hình lớp ISO/OSI giao thức CAN
Lớp dữ liệu CAN là thành phần quan trọng trong hệ thống thông tin, chịu trách nhiệm xây dựng frame dữ liệu để lưu trữ và điều khiển thông tin Nó cung cấp nhiều dịch vụ thiết yếu như 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à tự động truyền lại 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, định nghĩa cách thức các tín hiệu được truyền và liên quan đến các vấn đề mô hình, đồng bộ thời gian và 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 truyền thông được thiết kế cho các ứng dụng ngắn hạn, cho phép truyền tải từ 0 đến 8 byte dữ liệu trong mỗi lần truyền Giao thức này sử dụng CSMA/CD+AMP (Carrier Sense Multiple Access/ Collision Detection with Arbitration on Message Priority), giúp xác định ưu tiên cho từng thông điệp trong trường hợp nhiều thông điệp cùng truy cập vào bus Khi một thông điệp đang được truyền, nó sẽ không bị ngắt Trong trạng thái bus rảnh, bất kỳ thiết bị nào cũng có thể truy cập bus CAN, và khi có nhiều thiết bị truy cập, ưu tiên được xác định bằng phương thức “Sự phân xử không phá hủy”, nghĩa là thông điệp có ưu tiên cao hơn sẽ tiếp tục truyền mà không cần bắt đầu lại từ đầu.
Sự phân xử bus trong hệ thống CAN diễn ra trong quá trình truyền thông, với mỗi thông điệp có mã nhận dạng 11 bit Mã nhận dạng này đóng vai trò quan trọng trong việc phân xử, nằm ngay sau bit Start, không chỉ xác định loại thông điệp mà còn xác định độ ưu tiên của nó Trong quá trình phân xử, các nút truyền theo dõi trạng thái bus và so sánh bit nhận với bit truyền để đảm bảo tính chính xác.
Khi một bit ưu thế (bit 0) được truyền, bit khụng ưu thế (bit recessive) sẽ làm cho nút mất quyền phân xử Khi nút không còn quyền phân xử, nó ngừng truyền và chỉ nhận thông điệp đang truyền trên mạng Ở giai đoạn cuối của quá trình truyền, tất cả các nút còn lại (ngoại trừ một nút) sẽ mất quyền phân xử, và nút có thông điệp ưu tiên cao nhất sẽ được truyền trên mạng mà không bị cản trở.
Khi bus rảnh, bộ điều khiển CAN tự động cố gắng truyền thông điệp của nút Một sự phân xử được thực hiện và thông điệp có ưu tiên cao nhất sẽ được truyền trên mạng trong các chu kỳ tiếp theo 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 không có hai thông điệp cùng mã nhận dạng khi truy cập bus.
Hình 2-3 Phân xử bus CAN
Phương thức "sự phân xử không quá hủy" được minh họa trong Hình 2-3, trong đó hai nút A và B có yêu cầu truyền dữ liệu Giá trị bit trên bus CAN được lấy mẫu từ bus, tương ứng với đầu ra của cổng AND, với các bit truyền từ nút A và B làm đầu vào.
Trong ví dụ trên, cả hai nút A và B bắt đầu truyền dữ liệu ngay khi bus rảnh Hai nút này truyền cùng một giá trị bit cho đến khi đến bit thứ tư của trường mã nhận dạng Tại bit thứ tư, nút A truyền bit không ưu thế là logic 1, trong khi nút B truyền bit ưu thế là logic 0 Kết quả là nút A mất quyền phân xử, ngừng việc truyền và chuyển sang chế độ nhận.
Giao thức CAN sử dụng các khung dữ liệu có định dạng khác nhau với chiều dài tối đa là 94 bit, nhưng không có địa chỉ tường minh Thay vào đó, nội dung trong khung dữ liệu mang thông tin mà không xác định địa chỉ cụ thể CAN định nghĩa bốn loại khung: 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 để phát hiện lỗi, và khung quá tải (overload frame) nhằm 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 trong mạng CAN, được sử dụng để truyền dữ liệu Nó có định dạng cố định với chiều dài thay đổi nhưng có giới hạn Frame dữ liệu bao gồm 8 trường: bit Start, trường phân xử, trường điều khiển, trường dữ liệu, trường CRC, trường ACK, trường kết thúc frame và trường khoảng cách giữa các frame.
Giao thức CAN định nghĩa hai loại frame: frame định dạng cơ bản (base format frame) với 11 bit mã nhận dạng và frame định dạng mở rộng (extended format frame) với 29 bit mã nhận dạng CAN 2.0A quy định frame cơ bản, trong khi CAN 2.0B quy định frame mở rộng, thường được sử dụng trong các hệ thống phức tạp với mật độ lưu thông cao Định dạng mở rộng cho phép số lượng thông điệp trên mạng lớn hơn số lượng mã nhận dạng có thể của CAN, đảm bảo mỗi thông điệp có mã nhận dạng duy nhất, trong khi định dạng cơ bản 11 bit cung cấp khả năng truyền tải thông tin hiệu quả.
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 là bit 0, có vai trò đánh dấu bắt đầu của frame dữ liệu Trước khi truyền bit Start, bus CAN cần ở trạng thái rảnh Tất cả các bộ nhận trên bus sử dụng bit này để đồng bộ hóa clock của chúng với clock của bộ truyền.
Trường phân xử trong giao thức CAN bao gồm 12 bit, trong đó có 11 bit mã nhận dạng và 1 bit yêu cầu truyền từ xa (RTR) Trường này phục vụ hai mục đích chính: đầu tiên là xác định địa chỉ logic của thông điệp, và thứ hai là xác định quyền truy cập vào bus CAN.
Các bit mã nhận dạng được truyền theo thứ tự từ ID10 đến ID0 để đảm bảo 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 kỳ thông điệp nào trên mạng.
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 các nút trong mạng và truyền các xung điện Nó chuyển dữ liệu từ bộ truyền của lớp Data Link thành tín hiệu điện và ngược lại, chuyển tín hiệu điện về định dạng dữ liệu để truyền cho lớp Data Link Có nhiều loại lớp vật lý khác nhau, nhưng loại thông dụng nhất được định nghĩa bởi tiêu chuẩn CAN, phần ISO 11989-2.
“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 sử dụng hai dây nối gọi là CAN_H và CAN_L, hoạt động theo chế độ vi sai với điện áp ngược chiều nhau, giúp cung cấp tính năng chống nhiễu hiệu quả Cuối bus được kết nối với điện trở 120Ω ở cả hai đầu, nhằm loại bỏ tín hiệu phản hồi 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 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 một bit logic 0 trong khoảng thời gian bit, thì toàn bộ bus sẽ nằm trong trạng thái bất chấ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 trên CAN bus 2 dây tốc độ cao được mô tả như sau: trạng thái bus recessive (logic 1) xảy ra khi điện áp trên CAN_L và CAN_H bằng nhau (CAN_L = CAN_H = 2.5 V), trong khi 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 được xem 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ức logic của một bit được duy trì trong suốt thời gian của bit đó Khi một frame chứa chuỗi các bit “1” hoặc “0”, tín hiệu sẽ không thay đổi qua nhiều khoảng thời gian bit tương ứng Tuy nhiên, nhược điểm của NRZ là khó xác định điểm bắt đầu và kết thúc của bit khi có hai hoặc nhiều bit 1 hoặc 0 liên tiếp Để nhận biết được chuỗi bit, bên nhận cần có nguồn xung đồng hồ giống với bên truyền Để đảm bảo sự đồng bộ giữa các nguồn xung đồng hồ trong mạng, CAN áp 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ự ủồ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 là khoảng thời gian cần thiết để truyền một bit dữ liệu qua mạng, được tính bằng nghịch đảo của tốc độ bit lý thuyết Hệ thống CAN sử dụng thời gian bit để đảm bảo các nút lấy mẫu bus tại thời điểm phù hợp, xác định trạng thái logic 1 hay logic 0 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 một hoặc 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à khoảng thời gian mà sự chuyển tiếp tín hiệu được thực hiện Thời gian này luôn được xác định trong một đơn vị thời gian cụ thể.
Đoạn truyền (Prop_Seg) là khoảng thời gian cần thiết để bit di chuyển trên các đường dây, và kích thước của đoạn này nên bằng ít nhất 2 lần khoảng thời gian tối đa để bit đến đích Thời gian này được lập trình trong khoảng từ 1 đến 8 đơn vị thời gian.
Đoạn pha 1 (Ph_Seg1) là một phần của bộ điều khiển được kéo dài ra khi có sự chuyển trạng thái từ logic 1 sang logic 0 xảy ra trong đoạn truyền Thời gian kéo dài của đoạn pha 1 được thiết lập sao cho khoảng cách từ cạnh đến điểm lấy mẫu tương tự như trong đoạn điều khiển không có cạnh xảy ra Thời gian này được lập trình từ 1-8 đơn vị thời gian.
Đoạn pha 2 (Ph_Seg2) sẽ được thu ngắn lại nếu có sự chuyển trạng thái từ logic 1 sang logic 0 xảy ra Việc thu ngắn này đảm bảo khoảng cách từ cạnh đến điểm lấy mẫu tương tự như khoảng cách từ đoạn bộ đến điểm lấy mẫu khi không có cạnh xảy ra Đoạn này được lập trình dựa trên tối ưu hóa của đoạn pha 1 và thời gian xử lý thông tin.
Thời gian xử lý thông tin là khoảng thời gian từ khi lấy mẫu cho đến khi lấy mẫu của bit tiếp theo, và thời gian này không vượt quá 2 lần đơn vị thời gian.
Điểm lấy mẫu luôn nằm ở cuối đoạn pha 1, và là thời điểm mà mức logic bus được đọc, từ đó xác định 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 diễn ra một lần duy nhất trong quá trình truyền dữ liệu, khi trạng thái chuyển từ logic 1 sang logic 0 tại điểm bắt đầu của 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 hoàn tất quá trình đồng bộ cứng.
Đồng bộ hóa được thực hiện sau khi có sự chuyển trạng thái từ logic 1 sang logic 0 bên ngoài của đoạn đồng bộ trong phần còn lại của khung thông nghiệp.
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 thiết lập các yêu cầu cần thiết cho việc phát triển tính năng tương ứng Quá trình này bao gồm việc xây dựng sơ đồ khối, bảng mô tả input/output, sơ đồ mô hình trạng thái và dạng sóng cho các khối liên quan.
- 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
The clock signal (rd_i) indicates a logic 1 for read operations, while the write signal (wr_i) also shows a logic 1 for write operations The address latch enable signal (ale_i) is set to logic 1 to allow address latching, and the chip select signal (cs_can_i) indicates a logic 1 for selecting the CAN module.
The CAN (Controller Area Network) interface includes several key signals for communication: the receive signal (rx_i) and transmit signal (tx_o) are essential for data exchange, while the interrupt signal (irq_on) indicates a request for processing The clock output (clkout_o) is crucial for timing synchronization, and the port (port_0_io) facilitates input/output operations for address and data pathways.
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
The article discusses key parameters in digital communication, including bit timing, logic configurations, and various settings such as baud rate prescaler, synchronization jump width, and clock reset signals It highlights the importance of defining sample points, transmit points, and hard synchronization in the transmission process Additionally, it covers the concepts of sampled bits, triple sampling, and timing segments, emphasizing their roles in ensuring accurate data transmission and reception The article also mentions the significance of managing idle states and the last bit of transmission in the context of receiving operations.
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
The clk signal serves as the input clock for the I can_top logic, while the rst signal functions as the reset input The rx signal indicates the reception of data, and the baud_r_preasc parameter defines the baud rate in bits per second The sync_jump_width specifies the synchronization jump width, and timing_segment1 and timing_segment2 represent the first and second timing segments, respectively Triple sampling is enabled for improved data accuracy The rx_idle signal indicates that the CAN is not in data reception mode, while last_bit_of_inter marks the last bit gap between frames The transmitting signal confirms that the CAN is actively sending data frames, remote frames, error frames, and overload frames The go_rx_inter signal indicates the transition to frame transmission, and the sample_point denotes the sampling time The sampled_bit represents the bit that has been sampled, and sampled_bit_q refers to the previously sampled bit The tx_point indicates the transmission time, while hard_sync signifies 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 bao gồm các thành phần như tín hiệu reset, tín hiệu đồng bộ cứng, bộ đếm số đơn vị thời gian, và các đoạn truyền Tín hiệu reset (rst) được sử dụng để khởi động lại hệ thống Tín hiệu đồng bộ cứng (hard_sync) đảm bảo sự đồng bộ chính xác giữa các thiết bị Bộ đếm số đơn vị thời gian (quant_cnt[4:0]) xác định thời gian trong một đoạn, trong khi đoạn truyền và đoạn pha 1 (time_segment1[3:0]) cùng với độ lỗi pha (delay[3:0]) giúp tối thiểu hóa lỗi pha giữa độ lớn lỗi pha và độ rộng bước nhảy đồng bộ lại (SJW) Tín hiệu resync (Logic 1) cho biết sự cần thiết phải đồng bộ lại, cùng với đoạn pha 2 (time_segment2[2:0]) và độ rộng bước nhảy đồng bộ lại (sync_jump_width[1:0]) để đảm bảo hiệu suất hoạt động ổn định.
Khi bus ở trạng thái rảnh, nếu phát hiện bit SOF, quá trình đồng bộ cứng sẽ được kích hoạt, dẫn đến tín hiệu hard_sync tích cực Bộ định thời sẽ chuyển vào trạng thái đồng bộ sync, và sau một khoảng thời gian, bộ định thời sẽ chuyển sang 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 và tăng 1 sau mỗi đơn vị thời gian cho đến khi bộ đếm đạt giá trị time_segment1 + delay (Delay khác 0 khi có quá trình đồng bộ lại trong giai đoạn truyền và giai đoạn 1), sau đó bộ định thời sẽ 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, khi bộ đếm quant_cnt đạt giá trị time_segment2, hệ thống sẽ trở về trạng thái đồng bộ (sync) Nếu có quá trình đồng bộ lại xảy ra, điều kiện resync sẽ được kiểm tra với công thức (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
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 diễn ra ở cuối pha 1 khi quant_cnt = 4, tương ứng với time_segment1 Tại thời điểm này, bit mẫu sampled_bit được lấy mẫu 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
Extended_mode Self_test_mode Release_buffer Tx_request Abort_tx 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
Info_empty Set_bus_error_irq Set_arbitration_lost_irq
Node_error_passive Node_error_active [4:0] Arbitration_lost_capture
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
The clk signal serves as the input clock for the I can_top logic, while the rst signal is the output clock The sample_point indicates the timing for sampling, and the sampled_bit represents the sampled data The sampled_bit_q is linked to the tx_point, which denotes the transmission timing The hard_sync signal ensures hardware synchronization, and the addr signal specifies the register access address The data_in signal is used for writing data into the buffer, while data_out represents the data read from the buffer The fifo_selected signal indicates FIFO access, and the reset_mode allows for register configuration, while the listen_only_mode signals the operational mode.
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
The release_buffer function allows for the management of register logic, specifically enabling transmission requests and aborting transmission when necessary It includes a self_rx_request to facilitate receiving without transmitting, and features error warning limits for both transmission and reception error buffers The we_rx_err_cnt and we_tx_err_cnt registers permit writing to the respective error buffers, while the rx_idle status indicates the node's readiness.
The CAN protocol operates in a transmission state characterized by the transmission of data frames, remote frames, error frames, and overload frames The transition to a frame transmission state is indicated by the last bit of the inter-frame space Additionally, the system can enter a Bus Off state, which signifies a critical error, while the error status reflects the operational state of the error management system, whether it is in transmission or reception mode.
The CAN registers provide essential information for monitoring and controlling communication within a CAN network Key registers include `rx_err_cnt` and `tx_err_cnt`, which track receive and transmit error counts, respectively The `transmit_status` and `receive_status` registers indicate the transmission and reception states, while `tx_successful` confirms successful transmission Additional flags such as `need_to_tx`, `overrun`, and `info_empty` provide insights into buffer status and potential errors Interrupts for bus errors and arbitration loss are managed via `set_bus_error_irq` and `set_arbitration_lost_irq` The `arbitration_lost_capture` register counts arbitration losses, while `node_error_passive` and `node_error_active` indicate the error state of the CAN node Acceptance filters and masks are defined through registers `acceptance_code` and `acceptance_mask`, allowing for selective message filtering The `tx_data` registers hold the transmitted data bytes, ensuring comprehensive data management in the CAN system.
(ủầ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
The idle state of the machine indicates when it is not actively processing tasks The tx_state refers to the status of transmitting data frames or remote frames, while the rx_state denotes the status of receiving data frames or remote frames The err_state signifies an error in frame transmission, and the ovf_state indicates an overload in transmission Lastly, the inter_state represents the status of transmitting distance frames.
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 hiệu logic trong hệ thống truyền dữ liệu bao gồm nhiều chức năng quan trọng Tín hiệu reset (rst) được kích hoạt để khởi động lại hệ thống Tín hiệu need_to_tx cho biết trạng thái sẵn sàng truyền dữ liệu khi có yêu cầu Khi quyền tranh giành bus bị mất, tín hiệu arbitration_lost sẽ thông báo tình trạng này Tín hiệu error_frame chỉ ra rằng có lỗi trong khung dữ liệu, trong khi error_frame_ended cho biết khung lỗi đã kết thúc Tín hiệu go_rx_id1 xác nhận việc phát hiện bit SOF (Start of frame), và go_rx_idle cho biết quá trình nhận dữ liệu đã hoàn tất Tín hiệu overload_frame cảnh báo rằng khung dữ liệu đang quá tải, và overload_frame_ended thông báo kết thúc tình trạng quá tải Cuối cùng, go_rx_inter cho biết khoảng cách của khung, trong khi go_rx_idle lại xác nhận rằng quá trình truyền hoặc nhận dữ liệu đã hoàn tất.
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)
When there is a request to transmit a signal (need_to_tx), the CAN system switches to the transmission state (tx_state), initiating the data transmission process and monitoring the distribution.
Nếu nỳt CAN mất quyền phân xử, tín hiệu arbitration_lost sẽ được kích hoạt, dẫn đến việc nỳt CAN trở lại trạng thái idle Khi bus trở nên rảnh rỗi, nỳt CAN sẽ tiếp tục tranh giành quyền truy cập vào 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)
Khi nút ở trạng thái tx_state và truyền thành công một frame, nó sẽ chuyển sang trạng thái inter_state để thực hiện việc truyền frame khoảng cách Sau khi hoàn tất việc truyền frame này, nút CAN sẽ trở lại trạng thái idle.
Khi CAN ở trạng thái idle và không phải ủang truyền, nếu phát hiện được bit SOF, nút CAN sẽ chuyển sang trạng thái rx_state Tại trạng thái rx_state, nếu có sự quá tải, nút CAN sẽ chuyển sang trạng thái ovf_state Sau khi truyền xong frame quá tải, nút sẽ trở về trạng thái idle.
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 hiệu reset cho biết trạng thái khởi động lại của hệ thống Tín hiệu need_to_tx tích cực khi có yêu cầu truyền dữ liệu cho đến khi frame được truyền thành công Tín hiệu arbitration_lost thông báo về việc mất quyền tranh giành bus Tín hiệu error_frame chỉ ra rằng có một frame lỗi xảy ra, trong khi error_frame_ended cho biết frame lỗi đã kết thúc Tín hiệu go_rx_id1 xác nhận việc phát hiện bit SOF (Start of frame), và go_rx_idle cho biết quá trình nhận đã hoàn tất Tín hiệu overload_frame thông báo về việc frame quá tải, còn overload_frame_ended cho biết kết thúc frame quá tải Cuối cùng, go_rx_inter chỉ ra khoảng cách của frame, trong khi go_rx_idle lại xác nhận 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 bao gồm các trường quan trọng như rx_id, rx_rtr, rx_ide, rx_dlc, rx_data, rx_crc, rx_crc_lim, rx_ack, rx_ack_lim, và rx_eof Mỗi trường này đóng vai trò trong việc nhận và xử lý dữ liệu, bao gồm trạng thái nhận trường ID, RTR, chiều dài dữ liệu, dữ liệu, CRC, và các bit kết thúc như CRC, ACK, và 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 bao gồm go_rx_id, go_rx_ide, go_rx_dlc, go_rx_data, go_rx_crc, go_rx_crc_lim và go_rx_ack Mỗi tín hiệu này có chức năng riêng, như go_rx_id cho biết bắt đầu nhận trường ID, go_rx_ide cho biết bắt đầu nhận trường IDE, go_rx_dlc cho biết bắt đầu nhận trường chiều dài dữ liệu, go_rx_data cho biết bắt đầu nhận trường dữ liệu, go_rx_crc cho biết bắt đầu nhận trường CRC, go_rx_crc_lim cho biết bắt đầu nhận bit kết thúc CRC, và go_rx_ack cho biết bắt đầu nhận bit xác nhận.
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
Khi SOF được nhận, CAN chuyển sang trạng thái rx_state, trong đó bao gồm nhiều trạng thái con Đầu tiên, nó vào trạng thái rx_id để nhận ID và kiểm tra xem thông điệp có dành cho mình hay không Sau khi nhận ID, CAN chuyển sang trạng thái rx_rtr để nhận bit RTR, tiếp theo là trạng thái rx_ide để nhận bit IDE, và sau đó là trạng thái rx_dlc để nhận trường chiều dài dữ liệu Nếu có dữ liệu, CAN sẽ chuyển sang trạng thái rx_data để nhận dữ liệu, tiếp theo là trạng thái rx_crc để nhận trường CRC, trong đó CAN cũng tính toán CRC để so sánh Sau khi nhận xong, CAN chuyển sang trạng thái rx_crc_lim để nhận bit kết thúc của trường CRC, rồi vào trạng thái rx_ack để gửi bit 0 nếu frame nhận thành công Tiếp theo, nó chuyển sang trạng thái rx_ack_lim để nhận bit kết thúc ACK và sau đó vào trạng thái rx_eof để nhận các bit kết thúc của trường EOF Nếu trong trạng thái này phát hiện bit SOF, CAN sẽ chuyển sang trạng thái quá tải ovf_state Nếu trong quá trình nhận có lỗi, CAN lập tức chuyển sang trạng thái err_state Nếu nhận thông điệp thành công, 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 này đóng vai trò là cầu nối giữa CPU và CAN, nhận dữ liệu từ port_0_io do CPU gửi và truyền dữ liệu ra port_0_io cho CPU thông qua các tín hiệu địa chỉ port_0_io hoặc ngắt irq_on (interrupt).
Self_test_mode Clear_data_overrun
Listen_only_mode Acceptance_filter_mode transmitting
Rx_err_cnt Tx_err_cnt
Read_arbitration_lost_capture_reg
Self_rx_request Single_shot_transmission
We_rx_err_cnt We_tx_err_cnt Extended_mode
[7:0] error_capture_code [5:0] baud_r_presc [1:0] sync_jump_width [3:0] time_segment1 [2:0] time_segment2
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
Mô tả chức năng của clk I can_top là tín hiệu clock, trong khi rst I can_top là tín hiệu reset với logic 1 Tín hiệu cs I can_top cũng có logic 1, cho phép module hoạt động Cuối cùng, tín hiệu we I can_top với logic 1 cho phép ghi dữ liệu.
The CAN register access is managed through the address I can_top [7:0], while data is written into the registers via data_in [7:0] and read from them using data_out [7:0] The irq signal, represented as logic 1, indicates an interrupt Additionally, the sample_point is defined by I can_btl, which specifies the sampling time, and the transmitting state is indicated by I can_bsp, also represented as logic 1.
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
The CAN system provides essential error status indicators, including the receive error count (rx_err_cnt) and transmit error count (tx_err_cnt), both represented as 8-bit values The transmit status and receive status signals indicate whether the CAN is in transmission or reception mode, respectively, with a logic value of 1 signifying active states Successful transmission is confirmed by the tx_successful signal, while the need_to_tx signal indicates when transmission is required The overrun signal alerts when the receiver is overloaded, and the info_empty signal indicates an empty FIFO buffer Additionally, the set_bus_error_irq and set_arbitration_lost_irq signals trigger interrupts for bus errors and arbitration losses, respectively The arbitration_lost_capture captures the number of arbitration losses, and the node_error_passive signal indicates the node's passive error state.
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
The release_buffer signal indicates the release of the buffer, while the abort_tx signal requests the cancellation of transmission Additionally, the tx_request signal provides information regarding the transmission request.
The CAN interface allows the configuration of various parameters through specific registers The baud rate prescaler (baud_r_presc) is set using the bits in the timing register, while the synchronization jump width (sync_jump_width) and time segments (time_segment1 and time_segment2) are also defined in this register Additionally, triple sampling can be enabled, which is indicated by a specific bit in the timing register The error warning limit is controlled by the error_warning_limit register, which monitors error thresholds The receive error count (we_rx_err_cnt) and transmit error count (we_tx_err_cnt) registers provide signals for error logging, while the extended mode signal indicates the operational status of the CAN interface.
Trong chế độ CAN mở rộng, các thanh ghi như acceptance_code_0 đến acceptance_code_3 [7:0] được sử dụng để chấp nhận thông điệp với các bộ lọc khác nhau, bao gồm chế độ cơ bản và chế độ chuẩn Các thanh ghi mặt nạ acceptance_mask_0 đến acceptance_mask_3 [7:0] cho phép điều chỉnh các tiêu chí chấp nhận thông điệp Bên cạnh đó, các thanh ghi tx_data_0 đến tx_data_12 [7:0] được sử dụng để truyền dữ liệu, cung cấp khả năng truyền tải thông tin linh hoạt trong hệ thống CAN.
• 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
• 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 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 Chế Độ CANMR
Trong chế ủộ cơ bản:
- - - OIE EIE TIE RIE RM
7-5 - 0 Đ Những bit luụn ủọc ra 0
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
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
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à một thanh ghi chỉ ghi, với giá trị luôn được đọc ra là H’FF Thanh ghi này có khả năng truy cập trong cả chế độ cơ bản và chế độ 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
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
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
Độ rộng bước nhảy ủồng bộ SJW 2’HX Đ Đ được xác định bằng công thức SJW+1 (Re-synchronous Jump Width), mô tả khoảng cách mà điểm lấy mẫu có thể dịch chuyển để giảm thiểu 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
TSM2 3’HX Đ/G (Time_Segment2) là đoạn truyền kết hợp với đoạn pha 2 (TSM2+1), trong đó bộ ủệm sẽ được thu ngắn lại khi có 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 1 (TSM1+1) trong 3-0 TSM1 4’HX Đ/G (Time_Segment1) là một khoảng thời gian được kéo dài nếu có sự chuyển trạng thái từ logic 1 sang logic 0 trong quá trình truyền Đoạn pha này được điều chỉnh để đảm bảo khoảng cách từ cạnh đến điểm lấy mẫu tương tự như trong đoạn truyền không có cạnh xảy ra, và thời gian của đoạn này có thể 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)
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 thiết lập 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 trùng khớp với giá trị chấp nhận, thông điệp sẽ được chấp nhận và lưu vào bộ nhớ nhận Ngược lại, nút CAN sẽ hiểu rằng thông điệp này không dành cho nó và sẽ không được chấp nhận.
Thanh Ghi Mặt Nạ Chấp Nhận 0 CANAMR0 acceptance_mask_0
Hoạt ủộng module CAN
3.6.1 Hoạt ủộng ủồng bộ và ủịnh thời bit
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) để giảm thiểu 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ộ
Sự chuyển trạng thái từ logic 1 sang logic 0 diễn ra trong pha 1, do đó, pha 1 được kéo dài thêm 2 đơn vị thời gian để khoảng cách từ cạnh đến điểm lấy mẫu giống như trong quá trình đồng bộ không có cạnh xảy ra Độ lỗi pha, tức khoảng cách giữa một cạnh xảy ra bên ngoài quá trình đồng bộ và quá trình đồng bộ, tối thiểu là 2 đơn vị thời gian, trong khi độ rộng bước nhảy đồng bộ lại (SJW) là 2 đơn vị thời gian Do đó, khoảng cách 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ộ trước đó.
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 sang logic 0 diễn ra trong pha 2, dẫn đến việc pha 2 được rút ngắn còn 3 đơn vị thời gian Điều này giúp khoảng cách từ cạnh đến điểm lấy mẫu giống như từ pha đồ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 giữa 2 lần lấy mẫu là 8 đơn vị thời gian, giảm 2 đơn vị thời gian so với quá trình đồng bộ trước đó.
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ẽ không còn hoạt động trên bus Tuy nhiên, CAN 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 Khi thành công, 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
The CANTDR registers contain the following byte data: CANTDR2 holds 8'h56 as byte 1, CANTDR3 contains 8'h78 as byte 2, CANTDR4 is assigned 8'h9A for byte 3, CANTDR5 has 8'hBC representing byte 4, CANTDR6 is set to 8'hDE for byte 5, CANTDR7 includes 8'hF0 as byte 6, CANTDR8 is designated 8'h0F for byte 7, and CANTDR9 stores 8'hED as 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, 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 sẽ đượ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 khi cấu hình thanh ghi, quá trình nhận bắt đầu với tín hiệu đồng bộ cứng hard_sync Frame nhận bao gồm trường ID'h741, RTR=0 (điều này có nghĩa là frame dữ liệu), chiều dài dữ liệu = 0 và CRC'h2372 Đầu tiên, frame nhận được kiểm tra trường ID, sau đó là trường CRC, tiếp theo là trường ACK và cuối cùng là kiểm tra bit stuff Dữ liệu được lưu trữ trong bộ nhớ nhận gồm 2 bytes với 11 bit ID'h741, 1 bit RTR=0 và 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
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
• Bước 5: Phát yêu cầu truyền
Giao thức CAN triển khai năm cơ chế phát hiện lỗi, bao gồm lỗi mức kiểm tra chu kỳ CRC, lỗi định dạng, lỗi xác nhận 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 toàn bộ frame và kiểm tra CRC để xác định tính chính xác của thông điệp Nút nhận tính toán CRC (calculated_crc) của thông điệp nhận và so sánh với chuỗi CRC nhận (crc_in) Nếu phát hiện sự không trùng khớp giữa calculated_crc và crc_in, cờ lỗi CRC (crc_err) sẽ được kích hoạt Kết quả là nút nhận sẽ loại bỏ thông điệp này và gửi lại một frame lỗi để yêu cầu truyền 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
Trong giao thức CAN, việc truyền dữ liệu từ xa có thể dẫn đến tình huống mà bit kết thúc ACK được nhận là 1, nhưng lại bị lấy mẫu là 0 trong khe bit kết thúc ACK Hệ quả của điều này là cờ lỗi định dạng bit form_err sẽ được kích hoạt.
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
Khi CAN truyền một frame từ xa nhưng nhận được bit ACK = 1 trong khe bit ACK, điều này cho thấy không có nút nào xác nhận chính xác frame đó Kết quả là cờ lỗi ACK ack_err được kích hoạt.
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
Nút CAN không ưu tiên logic 1 trong khe bit kết thúc ACK, nhưng khi theo dõi mức bit được truyền, CAN phát hiện sự khác biệt giữa mức bit quan sát và mức bit truyền do quá trình lấy mẫu Khi có lỗi bit quan sát, hệ thống sẽ phát tín hiệu bit_err để thông báo.
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
Trong giao thức CAN, nếu 5 bit logic 1 liên tiếp được nhận giữa phần đầu frame và phần kết thúc CRC (tín hiệu bit_stuff_cnt = 5), thì ở lần lấy mẫu tiếp theo, CAN sẽ nhận thêm 1 bit logic 1 Điều này vi phạm quy tắc bit stuffing, dẫn đến việc cờ lỗi stuff_err được kích hoạt.
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
Khi một lỗi xảy ra, khung lỗi active sẽ được phát Khung lỗi active bao gồm một cờ lỗi với 6 bit có trạng thái logic 0, và bộ đếm lỗi truyền tx_err_cnt sẽ 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
Nếu một nút truyền ở trạng thái Error Passive mà không nhận được lỗi ACK và không có bit ưu thế logic 0 trong khi gửi cờ lỗi Passive, thì bộ xử lý lỗi truyền sẽ không thay đổi trạng thái.
Hỡnh 3-44: Hỡnh biểu diễn chuyển ủổi trạng thỏi từ error active sang error passive
Khi bộ ủếm lỗi truyền > 127 thỡ nỳt CAN chuyển trạng thỏi từ error active sang error passive
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
The Formality tool from Synopsys conducts a verification process to ensure that the generated netlist accurately corresponds to the original RTL code As a result, the Formality verification is successful (SUCCEEDED).
3.7.2 Số cổng của netlist (area)
Sau khi tổng hợp, tổng số cell của Synopsys là 76,889, trong đó một cổng AND tiêu tốn 4 đơn vị diện tích Do đó, số cổng có thể được tính bằng cách chia tổng số cell cho diện tích của một cổng AND, tức là 76,889/4, kết quả là 19,222 cổng.
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
Lỗi bit Lỗi bit stuff Lỗi CRC
Cờ lỗi passive Nút ở trạng thái lỗi active
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
Tốc ủộ bit 1Mbits/s 1Mbits/s 1Mbits/s