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