Hallo, nachdem ich eben das Forum durchgekämmt habe und leider nichts passendes gefunden habe, nun meine Frage. Vielleicht hat ja jemand einen hilfreichen Tipp für mich... Ich habe 3 Bussysteme (CAN, I²C, SPI), über die ich simpel Daten übertrage (läuft auch alles). Die Übertragung störe ich, um zu sehen, wie das einzelne Übertragungsmedium damit zurecht kommt. Nun möchte ich gerne die jeweilige Datenrate berechnen, die jedes Bussystem erreicht. Ich habe mir überlegt, mit Timer/Counter zu arbeiten. Klar, die Rate ist dadurch eingeschränkt, wie viele Daten man überträgt (z.B. Standard CAN Frame mit 11 Bit Id. und 8 Byte Daten entspricht 110 Bit. Bei einer CAN Baudrate von 1 Mbit/s kommt man auf 110 µs pro Frame.). Hat vielleicht schonmal jemand sowas gemacht? Vielleicht für eines der Übertragungssysteme oder für ein anderes, welches als Beispiel dienen könnte? Danke! Xine.
So wie ich Dich verstehe interessiert Dich die Nutzdatenrate und nicht die tatsächliche Busclock? Die Busclock würde ja durch eine Störung auch nicht verändert. Dafür würde ich mir für jedes Protokoll einen Receive Interrupt generieren und die Zeiten zwischen den IRQ's (also zwischen dem Empfang zweier gültiger Datenpaketen) ermitteln
Ach so, ja klar, die Nutzdatenrate interessiert natürlich! Dachte daran, mit 2 Timern zu arbeiten. Einer startet, wenn 1 Byte ankommt, und stoppt, wenn das nächste Byte da ist. Der zweite tut das gleiche beim nächsten Byte. Immer abwechselnd. Weiss nur noch nicht, ob das so schlau ist...
Was versprichst Du Dir davon? Da kommen soviele Pakete, die Zeit von jedem einzelnen kannst Du eh nicht betrachten. Ich würde das Irgendwie Mitteln. Wenn Du mit einem Atmel arbeitest zum Beispiel ein Timer im Capture Mode, der dir bei jedem Event (Interrupt) incrementiert. Und einen zweiten, der jede Sekunde einen interrupt auslöst indem Du dann den ersten Timer aussliest. Das Ergebnis wären byte/s. Gruss Ralf
Nee, das geht so nicht. Man muss Packete versenden und die ganzen Packete zaehlen. Da kann man N-byte Packete machen und die Senden. Auf der Anderen Seite muss man nur zaehlen wieviele (richtigen) Packete pro Sekunde noch ankommen multipliziert mal die Datenrate. Die Stoerung muss man natuerlich auch irgendwie quantifizieren. Wenn eine Steoerung zu einem kaputten Packet fuehrt, so sich grosse Packete natuerlich benacchteiligt.
Ich gehe davon aus, dass die Schnittstelle nur (richtige) Pakete zur verfügung stellt. Nimmt man zb. die can Schnittstelle des AT90can128 wird diese wohl nur richtig empfange Pakete zur Verfügung stellen. Zumindest bei can da CRC. Wieso mulitplizierst Du noch mit der Datenrate?
Na, wenn der Frager MByte/sekunde will... Ich sehe Probleme, die Stoerungen realistisch zu quantifizieren. Wenn man nur davon ausgeht, dass eine Stoerung ein Bit kaputt macht, eine bestimmte Menge pro zeit davon auftritt, so hat man eine Mathematikuebung. Etwas Statistik. Aber wenig Realistisches.
Das mit den MegaByte pro Sekunde will mir nicht in den Kopf... Gut, er könnte ja eine bekannte Bytefolge übertragen. Zb. Gray Code dann ändert sich von Byte zu Byte immer nur ein Bit. Wenn er sich das erste Übertragene Byte merkt kann er sich ja die fehlerhaften Bytes (mehrere geänderte Bits) raussuchen. Andere Frage wie er gezielt den Bus stört!?
Der Bus wird gestört, indem gezielt Störpulse in die Leitung eingekoppelt werden.
Der Zusammenhang von Stoerpulsenergie zu fehlerhaftem Bit ist eine Sache der Kopplung. Der Zusammenhang von gestoertem Bit zu brauchbarer Uebertrangungrate ist eine Sache des Protokolles. Ein CRC hinter jedem block erlaubt die gestoerten Bloecke zu verwerfen, und nochmals zu uebertragen. Wenn ein fehlerhaftes bit nun einen Block kaputtmacht sind grosse bloecke im Nachteil. Es gibt nun Protokolle, die die Blockgroesse der Fehlerhaeufigkeit anpassen. Das ist aber alles Zeug, das kann man gertadeaus rechnen, da muss man nichts messen. Zu messen gibt es nur die Kopplung der Stoerpulsenergie auf den Leiter und ab welchem Wert ein Bit kaputtgeht. Eine allenfalls weitergehende Frage kann sein welche Sorte von Stoerungen denn auftritt. Sind das statistisch verteilte einzelnen Entladungen, von zB 1ns Laenge, sind das ganze Gruppen von Pulsen, sogenannte Bursts. Bei diesem Thema kann man sich verlieren. Ob ein Zusammenhang von Labormessungen mit der Realitaet besteht ist eine andere Frage.
Der CAN-Bus ist da sehr resistent, das stimmt. Da ist nur interessant, ab welchem Energielevel die Frames verworfen werden. Bei SPI und I²C jedoch ist das ja nicht der Fall, die sind anfälliger für Störungen, da sie nicht über einen so umfassenden Schutz vor Fehlern verfügen wie CAN. Ob diese Art von Störpulen in der Realität Verwendung findet: Ja. Jedoch nicht im alltäglichen Bereich. Im Rahmen der Arbeit ist nun meine Aufgabe, die Rate zu ermitteln. Wie viel Sinn das macht, schau ich wenns fertig ist. :) Hast aber Recht, wenn man das Thema nicht ausreichend einschränkt, kann man sich in der Tat darin verlieren.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.