Was ist das für eine serielle Kommunikation?

Ich versuche, eine serielle Kommunikation zwischen zwei Mikrocontrollern (1 Gerät und 1 Mikrocontroller auf einer Platine) zurückzuentwickeln. Eine MCU validiert die andere MCU und ich möchte die Validierung knacken und die validierte MCU nachahmen. Ich möchte herausfinden, welches Protokoll verwendet wird, um die Daten zu verstehen. Ich habe die Kommunikation mit einem Logikanalysator aufgezeichnet und hier ist ein Screenshot von PulseView:Logikanalysator-Signal

PulseView hat eine Dekodierungsfunktion, aber ich weiß nicht, wo ich anfangen soll. Die Kommunikation erfolgt nur über 1 Draht. Aber ich bin mir nicht sicher, ob das Protokoll "eindrahtig" ist. Gibt es bekannte Standardmethoden, um ein unbekanntes Kommunikationsprotokoll zu identifizieren? Oder muss ich es durch bloßes Anschauen erkennen?

Ich habe ein Skript geschrieben, um die Daten in die Zeit umzuwandeln, die zum Wechseln von einem Zustand in einen anderen (hoch-zu-niedrig oder niedrig-zu-hoch) erforderlich ist, um wiederholte Messungen und das Fehlen der validierten MCU zu vergleichen. Jedes Mal sehen die Muster etwas anders aus. Es wäre großartig gewesen zu wissen, dies in ein Byte-Array oder was auch immer dafür gedacht ist, zu dekodieren.

Die erste lange Low-Periode jedes Zyklus beträgt manchmal 90 μs, manchmal 30 μs. Jeder Zyklus hat insgesamt 14 Schalter. Lange hohe Perioden zwischen Zyklen können unterschiedlich lang sein (~270-330μs).

PS: Die kleinste Zeit, die für eine Änderung benötigt wird, beträgt 30 μs, wie in der 3. Reihe auf dem Bild zu sehen (120 μs = 4 Zustände).

Danke!

Bearbeiten: Hier sind Beispiele für Signale, die nicht der allgemeinen Regel entsprechen.unregelmäßiges Signalmuster

Edit2: Verteilung der hohen Perioden zwischen den Zyklen:hohe Periodendauerverteilung

Edit3: In der ersten Phase (vergrößert in der obersten Reihe) gibt es 4 Frames, die mit 90 μs Low beginnen, gefolgt von 23 Frames, die mit 30 μs Low beginnen, und schließlich wieder ein Frame, der mit 90 μs Low beginnt.

Edit4: Hier ist die sigrok-Sitzungsdatei .

Sieht aus wie ein synchrones 33-Kbps-Protokoll
@TonyStewartolderthandirt Gibt es eine Möglichkeit, es in Bytes, Ascii oder Hexadezimal umzuwandeln?
Nicht ohne eine Reihe von Mustern, um Synchronisierungsbyte nach Taktsynchronisierung zu finden und Software DIY zu dekodieren
Eine seltsame 6-Bit-Pulslängencodierung? Ich würde sagen, das 90us-Tief war ein "Start" -Bit, und eine "1" wäre ein längerer positiver Impuls. Aber Sie sagten, das erste Tief liegt manchmal bei 30 us - wie sieht das aus?
@W5VO Ich habe den Teil hinzugefügt, wo das Signal etwas unregelmäßig ist. Kürzere Low-Periode und längere Low-Periode innerhalb des Zyklus.
@Genom Wenn Sie sagen, dass sich die langen Hochperioden in der Länge unterscheiden, wie unterscheiden sie sich innerhalb des Bereichs von 270 bis 330 us? Sind sie entweder 270us, 300us oder 330us? Oder gibt es auch Zwischenzeiten?
@AdamHaun Ich habe ein Diagramm hinzugefügt, um die Verteilung von Hochperioden zwischen den Zyklen anzuzeigen. Ich habe 3 Replikate gemessen, die sich im Signal etwas unterscheiden. Zunächst bleiben ein paar Zyklen identisch. Die hohen Periodenlängen sind nicht unbedingt in 30μs Länge. Aber auch die Dauer ist nicht immer sehr reproduzierbar.
Der Kanal hat eine klassische ISI-Bitverschiebung, aber primitiv mit 12 Bit, die 0101 wiederholen ... dann 12 "1". vor Meldungen und Wiederholung zur Jitter-Reduzierung bei primitiver Taktsynchronisierung. Eines von Millionen alten Protokollen. Wollen Sie uns raten lassen, woher Sie dieses Signal gestohlen haben? Pager? Für Narcos?
@TonyStewartolderthandirt :) Nein nein, ich habe das zwischen meiner Nikon-Kamera und ihrem Akku aufgenommen. Die Kamera überprüft die Batterie über einen Pin. Ich versuche, die Überprüfung zu entschlüsseln, zu hacken und mit konstanter Stromversorgung nachzuahmen. Wenn es klappt, online stellen. Es ist eine Möglichkeit, gegen Nikons teures Zubehör zu protestieren und Elektronik auf einer anderen Ebene zu lernen. Ich werde einige Recherchen zu den von Ihnen angesprochenen Begriffen anstellen.
@TonyStewartolderthandirt Ich habe mich gefragt, wie man ein Signalmuster entschlüsselt? Welche Denkweisen gibt es? Ich konnte nicht in Protokolle passen, die ich selbst kenne, wie SPI, I2C usw.
Schauen Sie sich alle sich wiederholenden Muster an, wie ich es getan habe, und listen Sie dann alle 8 Bits dazwischen auf, wie ich Sie gebeten habe (und noch nicht fertig bin). Dieser Burst ist sehr primitiv mit übermäßiger Redundanz für einfache Nahfeldkommunikation, denken Sie also nicht zu viel nach. Es spart weder Bandbreite noch randomisiert es Einsen und Nullen, um Asymmetriefehler zu reduzieren, es hat kein ECC oder CRC. Es ist ein primitiver Datenkanal, noch primitiver als modernes NFC. Es sollte einfach sein, eine Synchronisierungsuhr zu erstellen und mit Regeln auf dem Logikanalysator binäre Daten aufzuzeichnen oder sogar zu vergrößern, zu lesen und 8 Bits in Excel einzugeben und in HEX oder ASCII LSB als erstes oder letztes zu konvertieren
Entweder den einfachen Job machen oder weitermachen. In jedem Fall versäumen Sie es, uns mitzuteilen, von welchem ​​​​Instrument Sie diese Daten erhalten haben, was viele Annahmen ausfüllt.
@TonyStewartolderthandirt Tut mir leid. Ich nutze amazon.de/gp/product/B01MUFRHQ2/… um die Kommunikation zwischen Original Nikon Akku EN-EL14a und Kamera D3300 mit 24MHz Abtastrate aufzuzeichnen. Um auf die Kommunikation zuzugreifen, habe ich eine 3D-gedruckte Batterieform und meine eigenen Drähte hineingesteckt. Ich verband die Drähte mit einem Brotbrett und mit der Batterie. Damit konnte ich die Kommunikation abhören. 5 Pins des Akkus umfassen +, -, Temperatursensor, LiPo-Zellbalancer und den seriellen Pin. Ich werde die fehlenden Schritte so schnell wie möglich erledigen.
Bitte teilen Sie die gespeicherte Datei von PulseView .... Sie können pastebin.com verwenden und dann den Link zu Ihrer Frage hinzufügen
@jsotola Sigrok-Sitzungsdatei hinzugefügt.
interessantes Muster .... ähnlich wie Barcodes .... ähnlich, aber nicht dasselbe wie dieses en.wikipedia.org/wiki/Code_39 .... könnten Sie das Signal bei 200 kHz abtasten und die resultierende Erfassung posten file .... ich möchte die aufgenommene Datei in eine Sequenz von breit/schmal konvertieren und sehen, ob es ein Muster gibt (24-MHz-Aufnahme hat zu viele Aufnahmepunkte)
@Genom, die 200-kHz-Erfassung ist nicht mehr erforderlich
@jsotola danke für den Versuch, ich hatte früher keine Chance. Ich habe jedoch ein Python-Skript geschrieben, um die Anzahl der Punkte zu reduzieren. Aber es funktioniert mit ASCII-konvertierten Dateien.
@Genom, ich habe von PulseView nach "ascii art" exportiert, um ein Textbild der Wellenform zu erhalten ... dann habe ich mit Notepad ++ gesucht und ersetzt, um eine Liste der Impulsbreiten zu erhalten (die sich oben in dieser Datei befindet ) .... dann habe ich excel verwendet, um die daten weiter zu verfeinern .... hier ist die resultierende textdatei pastebin.com/Q0n34heg ..... ich weiß nicht, ob es ein muster gibt, weil mehrere datenerfassungen wären erforderlich, nur um zu sehen, was sich ändert

Antworten (2)

Angesichts der Anzahl der Umschalter vermute ich, dass dies eine Art ungewöhnliche Zeilencodierung ist. Ich denke, wir müssten mehr Nahaufnahmen von jedem Frame sehen (was Sie einen "Zyklus" nennen), um eine Vermutung anstellen zu können. In der Zwischenzeit finden Sie hier einige Tipps, wie Sie die Codierung herausfinden können.

Übliche Leitungscodierungen wie NRZ und Manchester stellen Bits als Pegelübergänge dar, nicht die Pegel selbst. Bei einigen Codierungen (wie Manchester) ist die Richtung des Übergangs von Bedeutung:

  • Absteigend
  • Niedrig bis hoch

In anderen (wie NRZ) ist das Vorhandensein oder Fehlen eines Übergangs signifikant.

  • Übergang vorhanden
  • Übergang fehlt

Manchmal gibt es zwei Übergänge pro Bitzeit, manchmal nur einen. Der Leitungscode- Artikel auf Wikipedia enthält viel mehr Informationen mit Beispielen für mehrere Codierungen. Implementierungen von asynchronen Protokollen verwenden oft Bitstuffing (zB CAN und USB), aber das scheint hier nicht vorhanden zu sein. Das Füllen von Bits erfolgt normalerweise nach einem Lauf von ~ 6 Bits, aber ich sehe in Ihren Daten keine Läufe, die länger als 3-4 Bits sind.

Die Tatsache, dass Sie immer 14 Übergänge pro Frame sehen, scheint bedeutsam, aber ich bin mir nicht sicher, wie ich das interpretieren soll. Es sieht so aus, als gäbe es 15 Bitzeiten pro Frame. Wenn also eines ein Startbit ist, hätten Sie 14 Datenbitzeiten. Bei einer Kodierung im Manchester-Stil wären das 7 Bits, die ein ASCII-Zeichen enthalten könnten.

Update: Es ist ein Cam-Batterieprotokoll

Einige Realisierungen in einfacher Hardware sind möglicherweise mit einem UART kompatibel, möglicherweise mit Parität, nachdem Sie sich wiederholende Muster korrelieren und synchronisieren.

Hier ist ein Standard nicht unbedingt der von Nikon

https://www.basecamelectronics.com/files/SimpleBGC_2_6_Serial_Protocol_Specification.pdf

  • Präambel Alle 1er Leerlauf Dann 00 1010 1010 1010 Taktsynchronisation 33,0 kHz
    1111 1111 1111 ignorieren.

  • xxxx xxxx meldet dies für jede Sequenz zurück.
    Wiederholen.

Verwenden Sie 30 us Takt und zentrieren Sie das Sample synchron. Ignorieren Sie den Jitter im Histogramm, aber korrigieren Sie die x-Achse um /10. Es scheint 30 uns nicht 300 uns zu sein.

Die Spitzen von +40–60 werden durch Kanalgruppenverzögerungsverzerrung auf verschiedenen Datenmustern verursacht, die Intersymbolinterferenz (ISI) genannt werden, die vermieden werden kann, aber für diesen kurzen stetigen Pfad nicht notwendig ist. Ich könnte allein zu diesem Thema einen 3-stündigen Vortrag darüber halten, wie man Quellen von Signalfehlern identifiziert und wie sie für hohe Geschwindigkeiten korrigiert werden.

Was meinst du mit xxxx xxxx melde das für jede Sequenz zurück? Was ist eine Sequenz? Was wird zurückgemeldet? Meinst du, das Histogramm sollte (10μs/10=)1μs Schritte haben?
Sind die 1er 30us oder 300! uns
Ahh, ich habe das Histogramm erstellt, um Adams Frage zu beantworten. Daher beträgt sie etwa 300 μs. Um die Verteilung der hohen Sequenzen zwischen Frames zu zeigen.