Chcę zrobić sniffer magistrali CAN dla prędkości 250 kbit / s za pomocą mojego komputera. Po kilku badaniach odkryłem, że MCP2551 jest rodzajem regulatora poziomu napięcia dla warstwy fizycznej CAN. Mając to na uwadze, zastanawiam się, czy ta konfiguracja mogłaby działać. Chcę tylko nagrywać wymieniane wiadomości do celów automatycznego testowania, a nie być częścią komunikacji:
PC <-> USB-UART (być może CP2102, ponieważ mam już jeden) <-> MCP2551 <-> CAN bus
Jeśli nie, to jakie sygnały muszą wejść do MCP2551, aby zostać częścią autobusu?
Zrobiłem USB / CAN użyciu FT2232H w trybie MPSSE zapomnieć (UART), MCP2515 i MCP2551. MCP2515 to kluczowy element, którego tutaj brakuje. Studiuj dobrze, co robi. Jest to rzeczywisty kontroler CAN, który zajmuje się tworzeniem ramek, potwierdzeniami ACK, generowaniem i weryfikacją sum kontrolnych, filtrowaniem wiadomości i innymi mniej oczywistymi czynnościami, które węzeł CAN musi wykonywać zgodnie ze standardem. Jeśli potrzebujesz sniffera, MCP2515 ma tryb tylko nasłuchiwania, który gwarantuje brak transmisji w magistrali. MCP2551 to po prostu głupi adapter warstwy fizycznej, podobny do MAX232 dla RS-232 lub ADM485 dla RS-485.
Teraz ta architektura jest daleka od ideału, ponieważ technologia FTDI MPSSE zasadniczo nie obsługuje przerwań (uważam, że wykorzystuje tylko masowe transfery USB za sceną), więc muszę często sondować kontroler w poszukiwaniu nowych wiadomości. To powoduje duże obciążenie kontrolera hosta USB, ale nadal nie gwarantuje, że żadne wiadomości nie zostaną utracone (MCP2515 może przechowywać do 2 odebranych wiadomości wewnętrznie, jeśli włączysz „tryb przepełnienia”, tylko jeden, jeśli nie zrobisz tego). O wiele lepszym rozwiązaniem byłby właściwy mikrokontroler z wbudowanymi urządzeniami peryferyjnymi CAN i USB, takimi jak STM32F105 (103 nie może jednocześnie korzystać z USB i CAN). Zobacz ten projekt, aby uzyskać działającą implementację dokładnie tego pomysłu. LPC18xx, jak sugeruje stevenh, też będzie działać, ale LPC17xx są prawdopodobnie tańsze i łatwiejsze do znalezienia.
źródło
Ponieważ chcesz nasłuchiwać na istniejącej magistrali CAN, tak jak rozumiem pytanie, naprawdę nie możesz w ogóle używać UART. Siganlling CAN i UART są zupełnie inne.
Teoretycznie możesz spojrzeć na linię odbierania CAN wychodzącą z MCP2551 i dekodować ruch CAN. To nie będzie łatwe, ale jest teoretycznie możliwe. Bez specjalistycznego sprzętu CAN będziesz musiał próbować kilka razy szybciej niż szybkość transmisji CAN i dekodować ten strumień bitów w oprogramowaniu później. Prawdopodobnie będziesz musiał nagrywać z prędkością około 1 Mbit / s, aby zdekodować 250 kbit / s CAN.
Korzystanie z mikrokontrolera będzie znacznie łatwiejsze. PIC 18F2580 i inne podobne procesory mają wbudowane urządzenie peryferyjne CAN. Sprzęt wykonuje dekodowanie na poziomie bitowym i odbiera całe ramki CAN. Procesor może następnie wysyłać odebrane ramki CAN przez swój UART na komputer.
źródło