Bedingt durch eine Diskussion zu inkompatiblen S/PDIF Geräten möchte ich eine Software schreiben, die die Plausibiliät von Daten nachweist und Fehler aufzeigt. Es geht dabei um Übertragungsfehler und falsch programmierte Protokolle. Zur Verfügung steht ein Logic Analysator, der knapp 1MB an samples aufzeichnen kann und exakt mit der rekonstruierten Bit Clock läuft. Wenn ein verdächtiger Wert (ein glitch) in den Audiodaten auftaucht, kann der Sampler gestoppt werden. Die Daten werden dann langsam in den PC gezogen. Nun geht es darum, das Protokoll zu verstehen, damit die Interpretation richtig einrasten kann und den Beginn eines Datenblocks detektiert werden kann. Leider habe ich schon ein Verständnisproblem mit der Präambel! Laut ... http://www.hardwarebook.info/S/PDIF gibt es drei Präambelworte zu jeweils 8 bit, in dem Protokoll sind aber nur 4 vorgesehen. Wie ist das aufzufassen? Sind das die 4 anderen Audiobits direkt darunter?
Du musst zwischen Datenbits einserseits und den BMC-Bits auf der Leitung andererseits unterscheiden. 4 Datenbits entsprechen 8 BMC-Bits. Die 8 Bits in der Präambel sind keine gültige BMC-Codierung; deshalb sind das nicht wirklich 4 Datenbits, sondern nur ein Muster, das genauso lang ist.
Ok, das macht Sinn, was Du sagst. Das ist aber nirgendwo erklärt. Kann
man das irgendwo nachlesen?
11101000 wäre in dekodierten Bits dann 0,1,1,0
Damit bliebe noch die Frage, wie ich sicherstelle, dass ich so eine
Kombi nicht mitten im Datenstrom erfasse und als Start interpretiere.
Muss ich dazu nach sich wiederholenden Startmustern suchen?
Dazu schreibst Du:
>Die 8 Bits in der Präambel sind keine gültige BMC-Codierung;
Wieso ist das so?
Wegen der 3 folgenden Einsen oder Nullen?
Audiohans schrieb: > Kann man das irgendwo nachlesen? Ist teuer: http://www.aes.org/publications/standards/search.cfm?docID=13 > 11101000 wäre in dekodierten Bits dann 0,1,1,0 Nein. Die Prämbel darf (und kann) man nicht so dekodieren. > Damit bliebe noch die Frage, wie ich sicherstelle, dass ich so eine > Kombi nicht mitten im Datenstrom erfasse und als Start interpretiere. Weil sie in einem fehlerlosen Datenstrom nicht vorkommen kann. >>Die 8 Bits in der Präambel sind keine gültige BMC-Codierung; > > Wegen der 3 folgenden Einsen oder Nullen? Ja.
Clemens L. schrieb: > Ist teuer: http://www.aes.org/publications/standards/search.cfm?docID=13 Wenn man da Mitglied ist, kriegt man das umsonst. Zumindest war das mal so. (?) >> 11101000 wäre in dekodierten Bits dann 0,1,1,0 > Nein. Die Prämbel darf (und kann) man nicht so dekodieren. Nun, können geht schon, wenn man das händisch macht. Wenn es ein Chip tut, wird das nicht passieren, wobei .... >>>Die 8 Bits in der Präambel sind keine gültige BMC-Codierung; >> Wegen der 3 folgenden Einsen oder Nullen? > Ja. Eine richtige Codierung der angenommenen 0,1,1,0 müsste so umgesetzt worden sein, dass 11010100 gesendet werden, weil zum Flankenwechsel des Datenbits auf ein Pegelwechsel des Ausgangs erfolgen muss, egal, ob sich das bit ändert oder nicht. Allerdings frage ich mich, was passiert, wenn in der Tat falsch gesendet wird, bzw der Takt so unsauber ist, daß eine Fehlinterpretation möglich wird. Ich habe das mal mit FPGAs gemacht und hatte anfangs Taktprobleme. Empfangen ging gut, Senden war leider manchmal Gemüse. Lag am Jitter.
Habe das jetzt mal probiert: Wenn der Takt zu gering ist, dann werden einige der 3 Einsen offenbar als 2 erkannt und er synched irgendwann nicht mehr, bzw er läuft einfach drüber hinweg. Wenn der Takt zu hoch ist, sind die Geräte offenbar toleranter. Zumindest mein Digitalpult und meine Digitalmonitore. Kurze Schwankungen werden offenbar weggerechnet. Gfs erfolgt in den Chips eine entsprechende Überabtastung mit geeigneter Interpreation. Muss jetzt meine eigene S/PDIF VHDL mal nachrüsten :-)
Die Präambel enthält nur die Kennung, um welchen Kanal bzw. ob es sich um einen Blockanfang handelt, sowie durch die Gestaltung die Möglichkeit, den Takt daraus zu gewinnen. Sie enthält keine Daten, welche dekodiert werden müssten. Daher ist die Überlegung, diese 8 Bits in 4 Datenbits umzuwandeln, überflüssig. Bei solchen Protokollen gibt es immer Regeln und eine Verletzung, die man dann erkennen kann. Die Regel ist hier: Nach jedem Bit erfolgt eine Flanke. In der Präambel wird diese Regel verletzt. Ich hatte mal einen USB-zu-SPDIF-converter von Conrad. Diesem war es so wichtig, eine LED blinken zu lassen, dass dafür auch der SPDIF Datenstrom unterbrochen wurde. @ Thomas: Hast Du den PLD (anderer Thread) eigentlich zum laufen gebracht? Gruß Jobst
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.