MCP2551 có phải là công cụ chuyển đổi UART-to-CAN không?


12

Tôi muốn tạo một sniffer bus CAN với tốc độ 250 kbit / s bằng máy tính của mình. Sau một số nghiên cứu, tôi thấy rằng MCP2551 là một loại bộ điều chỉnh mức điện áp cho lớp vật lý của CAN. Hãy ghi nhớ điều đó, tôi tự hỏi liệu thiết lập này có thể hoạt động không. Tôi chỉ muốn ghi lại các tin nhắn trao đổi cho mục đích kiểm tra tự động, không phải là một phần của giao tiếp:

PC <-> USB-UART (có lẽ là CP2102, vì tôi đã có sẵn) <-> MCP2551 <-> CAN bus

Nếu không, loại tín hiệu nào phải nhập MCP2551 để khiến tôi trở thành một phần của xe buýt?

Câu trả lời:


14

Bạn có thể làm điều đó, nhưng những gì bạn sẽ nhận được trên xe buýt CAN của mình sẽ là UART sử dụng các mức điện áp CAN. Bạn phải cung cấp MCP2551 với các thông điệp giao thức CAN nếu bạn muốn liên lạc với các thiết bị CAN trên xe buýt của mình. Tương tự cho việc nghe: Các tin nhắn CAN rất khác với định dạng UART mà UART sẽ không biết phải làm gì với chúng. Bạn sẽ có ít nhất các lỗi khung hình mọi lúc và bạn sẽ không nhận được nội dung của tin nhắn.
Hình ảnh này cho thấy cấu trúc của một thông báo CAN:

nhập mô tả hình ảnh ở đây

Có vi điều khiển rất nhiều xung quanh đó có một giao diện CAN, sans máy bộ đàm. Đó là vì những điều mà MCP2551 đã được thiết kế. Trước đây, chúng tôi đã sử dụng NXP LPC2294, có 4 giao diện CAN. Mỗi người trong số họ cần MCP2551 để kết nối với xe buýt CAN. Các bộ điều khiển gần đây từ NXP bao gồm họ LPC1800 , trong đó tất cả các thành viên hỗ trợ CAN.


Tôi hoàn toàn quên mất các bit start / stop UART và có lẽ một số tình huống "start / top bit" CÓ THỂ. Có lẽ tôi sẽ cố gắng tìm giải pháp bằng cách sử dụng stack CAN trên PC bằng FTDI như một gpio cuối cùng sẽ truyền tới MCP2551
rnunes

3
@rnunes - Đây không chỉ là bit start / stop. Không có những thứ đó, truyền UART chỉ là một byte 8 bit. Một tin nhắn CAN phức tạp hơn nhiều, với việc kiểm tra địa chỉ, ưu tiên và kiểm tra lỗi. Bạn không thể so sánh hai.
stevenvh

Nhưng sử dụng FTDI tôi sẽ làm việc từng chút một (về cơ bản, đó là USB <-> GPIO thực sự nhanh), không phải từng byte như với UART. Tôi đã tìm kiếm những MCU CÓ THỂ, nhưng tôi muốn chi tiêu bất kỳ khoản tiền nào bây giờ (đó là một dự án sở thích của sinh viên) và tôi đã có FTDI. Nếu tôi kết luận với các nghiên cứu của mình rằng FTDI sẽ không thể làm điều này, tôi sẽ thử sử dụng CAN MCU.
rnunes

Ngăn xếp sẽ chịu trách nhiệm xử lý mọi thứ (ví dụ như nhồi bit) và truyền từng bit cho MCP2551. Vấn đề duy nhất mà tôi gặp phải bây giờ là độ trễ FTDI, bởi vì tôi cần nó nhanh và thường xuyên, nhưng tôi sẽ đo nó sau.
rnunes

1
@rnunes - Nhưng những gì phát ra từ CP2102 (SiLabs, không phải FTDI) là byte , không phải bit. Bạn không thể dừng nó sau một chút. Bạn sẽ cần cả CP2102 để giao diện vi điều khiển của mình với USB và vi điều khiển hỗ trợ CAN + MCP2551. Hoặc một vi điều khiển cũng có thể hoạt động như một thiết bị USB. Sau đó, bạn không cần CP2102.
stevenvh

7

Tôi đã tạo giao diện USB / CAN bằng FT2232H ở chế độ MPSSE (quên UART), MCP2515 và MCP2551. MCP2515 là phần quan trọng bạn đang thiếu ở đây. Nghiên cứu tốt những gì nó làm. Đó là bộ điều khiển CAN thực tế đóng khung, ACK, tạo và kiểm tra tổng kiểm tra, lọc thông báo và những thứ ít rõ ràng hơn mà một nút CAN bắt buộc phải làm theo tiêu chuẩn. Nếu bạn muốn một sniffer, MCP2515 có chế độ chỉ nghe đảm bảo không truyền trên xe buýt. MCP2551 chỉ đơn giản là một bộ chuyển đổi lớp vật lý câm, tương tự như MAX 232 cho RS-232 hoặc ADM485 cho RS-485.

Bây giờ kiến ​​trúc này không hoàn hảo vì công nghệ FTDI MPSSE về cơ bản không hỗ trợ ngắt (tôi tin rằng nó chỉ sử dụng chuyển số lượng lớn USB phía sau hậu trường), vì vậy tôi phải thăm dò bộ điều khiển thường xuyên cho các tin nhắn mới. Điều này đặt rất nhiều tải lên bộ điều khiển máy chủ USB nhưng vẫn không đảm bảo rằng không có tin nhắn nào bị mất (MCP2515 có thể lưu trữ tối đa 2 tin nhắn nhận được bên trong nếu bạn bật "chế độ tràn", chỉ một nếu bạn không). Một giải pháp tốt hơn nhiều sẽ là một bộ vi điều khiển thích hợp với các thiết bị ngoại vi CAN và USB tích hợp như STM32F105 (103 không thể sử dụng USB và CAN cùng một lúc). Xem dự án này để thực hiện chính xác ý tưởng này. LPC18xx theo đề xuất của stevenh cũng sẽ hoạt động, nhưng LPC17xx có lẽ rẻ hơn và dễ tìm hơn.


Trong trường hợp này, việc gộp nó không phải là vấn đề nhưng vâng, giải pháp lý tưởng sẽ là sử dụng MCU với bộ điều khiển CAN hoạt động như một bộ đệm tin nhắn CAN. Từ giờ tôi sẽ thử sử dụng thiết lập đầu tiên mà bạn đã viết. Cảm ơn
rnunes

+1 Sử dụng chip FTDI để nói chuyện trực tiếp với bộ điều khiển CAN mà không có uC là gọn gàng. Aparently FTDI ra mắt FT221X, là cầu nối USB chuyên dụng với SPI. (Cũng có một mô hình khác cho USB sang I2C.)
Nick Alexeev

2

Vì bạn muốn lắng nghe trên một xe buýt CAN hiện tại vì tôi hiểu câu hỏi, bạn thực sự không thể sử dụng UART. CAN và UART siganlling hoàn toàn khác nhau.

Về lý thuyết, bạn có thể nhìn vào dòng CAN nhận ra từ MCP2551 và giải mã lưu lượng CAN. Điều đó sẽ không dễ dàng, nhưng về mặt lý thuyết là có thể. Nếu không có phần cứng CAN chuyên dụng, bạn sẽ phải lấy mẫu nhanh hơn vài lần so với tốc độ bit CAN và giải mã luồng bit đó trong phần mềm sau này. Có lẽ bạn sẽ cần ghi lại với tốc độ khoảng 1 Mbit / s để giải mã 250 kbit / s CAN.

Sử dụng một vi điều khiển sẽ dễ dàng hơn nhiều. PIC 18F2580 và các bộ xử lý tương tự khác có tích hợp ngoại vi CAN. Phần cứng thực hiện tất cả các giải mã mức bit và nhận toàn bộ khung CAN. Sau đó, bộ xử lý có thể gửi các khung CAN nhận được thông qua UART của nó tới PC của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.