Ich möchte mit meinem Computer einen CAN-Bus-Sniffer für 250 kbit / s erstellen. Nach einigen Recherchen habe ich herausgefunden, dass MCP2551 eine Art Spannungspegelregler für die physikalische Schicht von CAN ist. Vor diesem Hintergrund frage ich mich, ob dieses Setup funktionieren könnte. Ich möchte nur die ausgetauschten Nachrichten für automatisierte Testzwecke aufzeichnen und nicht Teil der Kommunikation sein:
PC <-> USB-UART (vielleicht CP2102, weil ich bereits einen habe) <-> MCP2551 <-> CAN-Bus
Wenn nicht, welche Art von Signalen muss MCP2551 eingeben, damit ich Teil des Busses bin?
Ich habe eine USB / CAN-Schnittstelle mit FT2232H im MPSSE-Modus (UART vergessen), MCP2515 und MCP2551 erstellt. MCP2515 ist das Schlüsselstück, das Sie hier vermissen. Studieren Sie gut, was es tut. Es ist der eigentliche CAN-Controller, der Framing, ACKs, Generierung und Verifizierung von Prüfsummen, Nachrichtenfilterung und andere weniger offensichtliche Aufgaben übernimmt, die ein CAN-Knoten nach dem Standard ausführen muss. Wenn Sie einen Sniffer wünschen, verfügt der MCP2515 über einen Listen Only-Modus, der garantiert, dass keine Übertragungen auf dem Bus erfolgen. Der MCP2551 ist einfach ein dummer physikalischer Schichtadapter, ähnlich einem MAX232 für RS-232 oder ADM485 für RS-485.
Diese Architektur ist bei weitem nicht perfekt, da die FTDI-MPSSE-Technologie im Wesentlichen keine Unterstützung für Interrupts bietet (ich glaube, sie verwendet nur Massen-USB-Übertragungen im Hintergrund). Daher muss ich den Controller häufig nach neuen Nachrichten abfragen. Dies belastet den USB-Host-Controller sehr, garantiert jedoch nicht, dass keine Nachrichten verloren gehen (der MCP2515 kann bis zu 2 empfangene Nachrichten intern speichern, wenn Sie den "Überlaufmodus" aktivieren, nur eine, wenn Sie dies nicht tun). Eine weitaus bessere Lösung wäre ein geeigneter Mikrocontroller mit integriertem CAN und USB-Peripheriegeräten wie STM32F105 (103 kann nicht gleichzeitig USB und CAN verwenden). In diesem Projekt erfahren Sie, wie genau diese Idee umgesetzt wird. LPC18xx wie von stevenh vorgeschlagen wird auch funktionieren, aber LPC17xx sind wahrscheinlich billiger und leichter zu finden.
quelle
Da Sie einen vorhandenen CAN-Bus abhören möchten, wie ich die Frage verstehe, können Sie einen UART überhaupt nicht verwenden. CAN- und UART-Signalgebung sind völlig unterschiedlich.
Sie könnten theoretisch die CAN-Empfangsleitung betrachten, die vom MCP2551 ausgeht, und den CAN-Verkehr dekodieren. Das wird nicht einfach, ist aber theoretisch möglich. Ohne spezielle CAN-Hardware müssen Sie einige Male schneller als die CAN-Bitrate abtasten und diesen Bitstrom später in der Software dekodieren. Sie müssen wahrscheinlich mit ca. 1 Mbit / s aufnehmen, um 250 kbit / s CAN zu decodieren.
Die Verwendung eines Mikrocontrollers ist viel einfacher. Der PIC 18F2580 und ähnliche Prozessoren verfügen über ein eingebautes CAN-Peripheriegerät. Die Hardware dekodiert alle Bitpegel und empfängt ganze CAN-Frames. Der Prozessor kann dann empfangene CAN-Frames über seinen UART an Ihren PC senden.
quelle