SPI des RC-Helikopter-Controllers abfangen

Ich habe diese Funkverbindung mit einem ferngesteuerten Helikopter. Ich habe festgestellt, dass der RX auf dem Heli eine AVR-MCU und einen CYRF6989 2,4-GHz-Chip verwendet, um mit dem Controller des Heli zu kommunizieren und ihn zu übersetzen, um die Servos und Motoren anzutreiben. Die MCU und der CYRF-Chip kommunizieren über SPI. Ich möchte das Signal abfangen und interpretieren, also habe ich einige Drähte darauf gelötet. Ich kann das Signal (entweder MOSI oder MISO) mit einem Arduino-Prototyp-Board lesen. Aber ich habe Probleme, den Datenstrom zu verstehen/zu interpretieren. Ich brauche also einen anderen Ansatz, als nur MOSI ODER MISO zu lesen.

Meine aktuelle Situation ist, dass der Arduino der Slave ist und entweder das MOSI- oder das MISO-Signal liest, aber ich kann nicht herausfinden, wie ich das gesamte „Gespräch“ lesen würde, also sowohl das MOSI- als auch das MISO-Signal. Das einzige, was mir einfällt, ist, MOSI und MISO mit einer Diode an 1 Draht anzuschließen (damit der MCU und der CYRF-Chip auf der RX-Platine keine gemischten Signale erhalten) und die über diesen einen Draht fließenden Daten mit dem Arduino zu lesen Platine (unter Verwendung der SPI-Pins des Atmega 328P). MOSI und MISO kommen also über dieselbe Leitung herein, was eigentlich kein Problem sein sollte, da MOSI und MISO niemals gleichzeitig auftreten werden. Aber das Problem bei diesem Ansatz ist, dass ich keinen Hinweis auf den Ursprung (MOSI oder MISO?) des Signals habe. Am einfachsten wäre es, SPI-Busse auf der MCU zu haben,

Grundsätzlich ist meine Frage, was ein guter Ansatz ist, um das SPI-Gespräch abzufangen, damit ich seine Bedeutung besser interpretieren kann.

Holen Sie sich eine "weiche" SPI-Implementierung für Arduino / Atmega und verwenden Sie diese für eine Richtung der Konversation und die Hardware-SPI für die andere?
Ihre Herausforderung kann tatsächlich die Bandbreite des Back-End-Datenexports sein, da Sie wahrscheinlich mehr für die Analyse speichern müssen, als das Arduino aufnehmen kann.
@ChrisStratton Ja, du hast vollkommen recht. Ich habe einen Puffer von 1024 bytesauf dem AtMega328P (Arduino Uno) verwendet, bevor ich ihn über UART auf den Computer druckte. Jetzt ist es nicht möglich, dem Byte-Puffer hinzuzufügen, wenn sich die SS geändert hat, da alle Byte-Werte reserviert sind. Gehen Sie also zu einem Puffer von, um SS unsigned shortgeändert (Wert 256) zum Puffer hinzuzufügen, aber das reduziert den Puffer Größe! Der 2560 kann wahrscheinlich mit einem größeren Puffer umgehen.
Ich versuche dasselbe zu tun und spi des RC-Senders abzufangen. Ist es Ihnen gelungen? Benötigten Sie andere zusätzliche Werkzeuge als Arduino?

Antworten (2)

Um ein SPI-Gespräch vollständig mithören zu können, müssen Sie alle vier Zeilen beobachten: Chipauswahl, Uhr, MOSI und MISO. Sie könnten dies möglicherweise mit zwei separaten SPI-Peripheriegeräten tun. Beide sind mit Chip Select und Clock verbunden, wobei einer MOSI und der andere MISO beobachtet. Der Rest ist dann Firmware, um die Ergebnisse zu interpretieren.

Ich schätze, ich nehme zwei Atmegas, synchronisiere sie mit einem Interrupt, um mit dem Lesen zu beginnen, bis beide N Bytes abgetastet haben. Dann könnte man seine gelesenen Bytes über das andere Arduino an den Computer weiterleiten, und dann würde das andere Arduino seinen Puffer danach ausgeben. Das sollte doch machbar sein! Wow, ein Multi-Core-Arduino-Hacking-Gerät: D

Die Bus Pirate- Dokumentation für seinen SPI-Sniffer schlägt vor, dass er MOSI und MISO lesen kann

Der SPI-Sniffer kann den gesamten Datenverkehr lesen oder nach dem Zustand des CS-Pins filtern. Das am MOSI-Pin gesniffte Byte wird als HEX-formatierter Wert angezeigt, das am MISO-Pin gesniffte Byte befindet sich in ().

30€ gut angelegt?

Es ist ein nettes Werkzeug, um es meiner Werkzeugkiste hinzuzufügen.