Bit 0 = 0: Consumer stream
= 1: Professional stream (AES/EBU)
Bit 1 = 0: Linear PCM
= 1: Data (i.e. AC3 stream for 5.1. surround sound)
Bit 2 = 0: copy protected
= 1: not copy protected
... and so on. This link: http://www.hardwarebook.info/S/PDIF describes the spdif protocol more detailed.
I have written a small app to output the bits of the spdif data stream. It outputs one block with all 192 frames. Because the channel bits for the left and right channel is equal, I output the subframes only for the left channel. The code:
Code: Select all
#include <xs1.h>
#include <stdio.h>
#include <platform.h>
#include "spdif.h"
on tile[1] : port spdif_rx_port = XS1_PORT_1O;
on tile[1] : clock clock_block = XS1_CLKBLK_1;
// First subframe of a none-first frame of a block
#define FRAME_X 9 // 1001
#define FRAME_B 6 // 0110
// Second subframe of a frame of a block
#define FRAME_Y 5 // 1010
#define FRAME_M 10 // 0101
// First subframe of first frame of a block
#define FRAME_Z 3 // 1100
#define FRAME_W 12 // 0011
#define SIZE 192
void spdif_rx_decoder(streaming chanend spdif_rx_channel) {
uint32_t samples[SIZE];
uint16_t frame_counter = 0;
uint8_t first_found = 0;
while (frame_counter < SIZE) {
spdif_rx_channel :> samples[frame_counter];
uint8_t preamble = samples[frame_counter] & 0xF;
if (preamble == FRAME_Z) {
first_found = 1;
}
if (first_found && preamble != FRAME_Y) {
frame_counter++;
}
}
for (frame_counter = 0; frame_counter < SIZE; frame_counter++) {
for (int i = 0; i < 32; i++) {
if (i % 4 == 0) {
printf(" ");
}
if (i % 8 == 0) {
printf(" ");
}
printf("%u", (samples[frame_counter] >> i) & 1);
}
printf(" bit30: %u", (samples[frame_counter] >> 30) & 1);
printf(" pos: %u\n", frame_counter);
}
}
int main(void) {
streaming chan spdif_rx_channel;
par {
on tile[1]: spdif_rx_decoder(spdif_rx_channel);
on tile[1]: spdif_rx(spdif_rx_channel, spdif_rx_port, clock_block, 44100);
}
return 0;
}
Currently, I'm out of idea, what the problem is. Here is a capture of an AC3 stream:
Code: Select all
1100 0000 0000 1110 1100 0100 0010 0001 bit30: 0 pos: 0
1001 0000 0000 0101 1101 1100 0000 0001 bit30: 0 pos: 1
1001 0000 0000 1010 1111 1010 1110 0010 bit30: 1 pos: 2
1001 0000 0000 1010 0101 0111 1100 0001 bit30: 0 pos: 3
1001 0000 0000 0111 1110 0011 1000 0001 bit30: 0 pos: 4
1001 0000 0000 1000 1001 0111 0111 0001 bit30: 0 pos: 5
1001 0000 0000 0001 0111 1101 1101 0000 bit30: 0 pos: 6
1001 0000 0000 1110 0101 0101 0100 0000 bit30: 0 pos: 7
1001 0000 0000 0001 1110 1110 0101 0001 bit30: 0 pos: 8
1001 0000 0000 1110 1000 1011 1001 0001 bit30: 0 pos: 9
1001 0000 0000 0001 1010 1001 1001 0001 bit30: 0 pos: 10
1001 0000 0000 0111 0111 0101 1011 0001 bit30: 0 pos: 11
1001 0000 0000 0111 1000 0101 1001 0000 bit30: 0 pos: 12
1001 0000 0000 1111 1110 1111 0101 0001 bit30: 0 pos: 13
1001 0000 0000 1110 0000 0001 1010 0000 bit30: 0 pos: 14
1001 0000 0000 0100 1101 1010 0000 0000 bit30: 0 pos: 15
1001 0000 0000 1011 1011 1001 1000 0001 bit30: 0 pos: 16
1001 0000 0000 0110 0110 1001 1111 0000 bit30: 0 pos: 17
1001 0000 0000 1001 0010 1100 0000 0001 bit30: 0 pos: 18
1001 0000 0000 0011 1000 1110 1100 0000 bit30: 0 pos: 19
1001 0000 0000 0010 1000 1001 0001 0001 bit30: 0 pos: 20
1001 0000 0000 0111 0011 1011 0000 0000 bit30: 0 pos: 21
1001 0000 0000 1001 1110 1100 1101 0000 bit30: 0 pos: 22
1001 0000 0000 0000 1000 1110 0010 0001 bit30: 0 pos: 23
1001 0000 0000 0101 0101 0111 1101 0000 bit30: 0 pos: 24
1001 0000 0000 1011 0011 0110 1101 0011 bit30: 1 pos: 25
1001 0000 0000 1101 0110 1101 1001 0000 bit30: 0 pos: 26
1001 0000 0000 0001 0110 0010 0101 0000 bit30: 0 pos: 27
1001 0000 0000 0001 1110 1111 1110 0001 bit30: 0 pos: 28
1001 0000 0000 1010 0011 0000 1110 0001 bit30: 0 pos: 29
1001 0000 0000 0001 1110 0011 1100 0000 bit30: 0 pos: 30
1001 0000 0000 1110 1011 1110 0000 0001 bit30: 0 pos: 31
1001 0000 0000 0101 1011 0011 0011 0001 bit30: 0 pos: 32
1001 0000 0000 1010 1000 0000 0011 0001 bit30: 0 pos: 33
1001 0000 0000 1000 0100 1111 0010 0001 bit30: 0 pos: 34
1001 0000 0000 0010 1110 0110 1100 0000 bit30: 0 pos: 35
1001 0000 0000 0001 1110 1100 1111 0000 bit30: 0 pos: 36
1001 0000 0000 1010 1100 0001 1100 0001 bit30: 0 pos: 37
1001 0000 0000 1001 0110 0000 1101 0001 bit30: 0 pos: 38
1001 0000 0000 1110 1011 0110 1100 0000 bit30: 0 pos: 39
1001 0000 0000 0100 1111 1011 0110 0000 bit30: 0 pos: 40
1001 0000 0000 1101 1101 1110 1100 0001 bit30: 0 pos: 41
1001 0000 0000 0010 1111 1001 1010 0001 bit30: 0 pos: 42
1001 0000 0000 0100 1110 1110 0000 0001 bit30: 0 pos: 43
1001 0000 0000 0110 1110 1000 1001 0000 bit30: 0 pos: 44
1001 0000 0000 1110 0000 0000 1000 0000 bit30: 0 pos: 45
1001 0000 0000 1111 0101 1100 1110 0001 bit30: 0 pos: 46
1001 0000 0000 0010 1011 1001 0011 0000 bit30: 0 pos: 47
1001 0000 0000 0000 0110 1100 0010 0001 bit30: 0 pos: 48
1001 0000 0000 0000 1000 1001 0110 0001 bit30: 0 pos: 49
1001 0000 0000 1001 1100 0010 1011 0000 bit30: 0 pos: 50
1001 0000 0000 0000 0110 1000 0110 0001 bit30: 0 pos: 51
1001 0000 0000 0111 1100 0001 0101 0000 bit30: 0 pos: 52
1001 0000 0000 1111 0100 0000 0110 0001 bit30: 0 pos: 53
1001 0000 0000 0010 1100 0100 0100 0001 bit30: 0 pos: 54
1001 0000 0000 0101 0000 1000 0100 0000 bit30: 0 pos: 55
1001 0000 0000 0101 0110 1100 1101 0001 bit30: 0 pos: 56
1001 0000 0000 0000 1110 1100 0100 0000 bit30: 0 pos: 57
1001 0000 0000 1000 0101 1001 1011 0000 bit30: 0 pos: 58
1001 0000 0000 0101 0011 1011 1001 0001 bit30: 0 pos: 59
1001 0000 0000 1111 1011 1000 1000 0001 bit30: 0 pos: 60
1001 0000 0000 0110 0010 0101 1010 0001 bit30: 0 pos: 61
1001 0000 0000 1111 1101 0000 1111 0001 bit30: 0 pos: 62
1001 0000 0000 0011 1010 1001 0000 0000 bit30: 0 pos: 63
1001 0000 0000 1100 0101 1001 0011 0000 bit30: 0 pos: 64
1001 0000 0000 0000 0101 0000 0101 0000 bit30: 0 pos: 65
1001 0000 0000 1001 1011 0111 1011 0001 bit30: 0 pos: 66
1001 0000 0000 1101 0101 0101 0101 0001 bit30: 0 pos: 67
1001 0000 0000 1011 0100 0001 1011 0000 bit30: 0 pos: 68
1001 0000 0000 1100 0001 0000 1100 0001 bit30: 0 pos: 69
1001 0000 0000 0000 1000 1000 0010 0001 bit30: 0 pos: 70
1001 0000 0000 1101 1100 1100 0110 0001 bit30: 0 pos: 71
1001 0000 0000 0111 0110 1100 0100 0000 bit30: 0 pos: 72
1001 0000 0000 0111 0110 0100 0001 0001 bit30: 0 pos: 73
1001 0000 0000 0100 1000 1011 1010 0001 bit30: 0 pos: 74
1001 0000 0000 0000 0110 0000 0010 0001 bit30: 0 pos: 75
1001 0000 0000 1001 1100 0111 0000 0001 bit30: 0 pos: 76
1001 0000 0000 1110 0000 0110 0111 0000 bit30: 0 pos: 77
1001 0000 0000 0001 1001 0010 1011 0001 bit30: 0 pos: 78
1001 0000 0000 0000 1000 0100 0010 0001 bit30: 0 pos: 79
1001 0000 0000 1000 0101 0000 0111 0000 bit30: 0 pos: 80
1001 0000 0000 1100 1001 0100 0101 0001 bit30: 0 pos: 81
1001 0000 0000 0101 1000 1000 1000 0001 bit30: 0 pos: 82
1001 0000 0000 1100 0001 1001 1001 0001 bit30: 0 pos: 83
1001 0000 0000 0111 1111 1110 0000 0000 bit30: 0 pos: 84
1001 0000 0000 0011 1110 0011 1100 0001 bit30: 0 pos: 85
1001 0000 0000 0000 0111 1111 1111 0001 bit30: 0 pos: 86
1001 0000 0000 0000 0100 0001 1111 0000 bit30: 0 pos: 87
1001 0000 0000 0100 0010 0000 0001 0001 bit30: 0 pos: 88
1001 0000 0000 0100 1101 1100 1111 0000 bit30: 0 pos: 89
1001 0000 0000 1110 1011 0111 1111 0001 bit30: 0 pos: 90
1001 0000 0000 1000 0000 0001 0001 0001 bit30: 0 pos: 91
1001 0000 0000 1111 1101 1111 0000 0001 bit30: 0 pos: 92
1001 0000 0000 1110 0101 0001 0010 0001 bit30: 0 pos: 93
1001 0000 0000 1110 0100 1101 1100 0001 bit30: 0 pos: 94
1001 0000 0000 1101 0011 0100 1011 0001 bit30: 0 pos: 95
1001 0000 0000 0010 0111 0101 1001 0000 bit30: 0 pos: 96
1001 0000 0000 1000 1100 1000 0001 0001 bit30: 0 pos: 97
1001 0000 0000 0111 0101 0000 1100 0001 bit30: 0 pos: 98
1001 0000 0000 0100 1010 1010 1010 0001 bit30: 0 pos: 99
1001 0000 0000 0000 1110 1110 0010 0001 bit30: 0 pos: 100
1001 0000 0000 1110 0101 0110 0110 0001 bit30: 0 pos: 101
1001 0000 0000 1101 0101 1011 1111 0000 bit30: 0 pos: 102
1001 0000 0000 1010 0100 1000 0011 0000 bit30: 0 pos: 103
1001 0000 0000 1100 1000 1010 0011 0001 bit30: 0 pos: 104
1001 0000 0000 1110 0011 1101 0100 0001 bit30: 0 pos: 105
1001 0000 0000 0000 0000 1110 0011 0001 bit30: 0 pos: 106
1001 0000 0000 0011 0010 1001 1001 0001 bit30: 0 pos: 107
1001 0000 0000 1010 1010 0000 1100 0000 bit30: 0 pos: 108
1001 0000 0000 1011 0010 1100 1111 0000 bit30: 0 pos: 109
1001 0000 0000 0111 0101 1000 0100 0001 bit30: 0 pos: 110
1001 0000 0000 1001 0110 0011 1011 0001 bit30: 0 pos: 111
1001 0000 0000 0111 0100 1010 0100 0001 bit30: 0 pos: 112
1001 0000 0000 0100 1001 1011 1000 0001 bit30: 0 pos: 113
1001 0000 0000 0111 1111 0001 1101 0001 bit30: 0 pos: 114
1001 0000 0000 1110 0101 0010 0110 0000 bit30: 0 pos: 115
1001 0000 0000 0101 1000 0100 1001 0000 bit30: 0 pos: 116
1001 0000 0000 1011 0101 0000 1010 0001 bit30: 0 pos: 117
1001 0000 0000 0110 0010 0101 1001 0001 bit30: 0 pos: 118
1001 0000 0000 0010 0000 0011 0101 0001 bit30: 0 pos: 119
1001 0000 0000 0011 0001 1110 0010 0001 bit30: 0 pos: 120
1001 0000 0000 1111 1100 0100 0001 0000 bit30: 0 pos: 121
1001 0000 0000 1010 0001 1010 0101 0001 bit30: 0 pos: 122
1001 0000 0000 0010 0000 0010 0010 0001 bit30: 0 pos: 123
1001 0000 0000 1100 1011 0000 1001 0001 bit30: 0 pos: 124
1001 0000 0000 1111 0000 0010 0010 0000 bit30: 0 pos: 125
1001 0000 0000 1000 1011 1100 1111 0000 bit30: 0 pos: 126
1001 0000 0000 0011 0101 0001 1011 0000 bit30: 0 pos: 127
1001 0000 0000 1101 0011 0101 1010 0001 bit30: 0 pos: 128
1001 0000 0000 0110 1011 0010 1011 0001 bit30: 0 pos: 129
1001 0000 0000 0011 0100 0110 0000 0001 bit30: 0 pos: 130
1001 0000 0000 0010 1101 1110 0100 0000 bit30: 0 pos: 131
1001 0000 0000 1101 0000 0100 1111 0000 bit30: 0 pos: 132
1001 0000 0000 1101 0000 1101 1110 0001 bit30: 0 pos: 133
1001 0000 0000 1110 1010 0101 1010 0001 bit30: 0 pos: 134
1001 0000 0000 1000 0011 0001 0000 0000 bit30: 0 pos: 135
1001 0000 0000 0010 0001 1110 0101 0001 bit30: 0 pos: 136
1001 0000 0000 0000 1110 1101 1001 0000 bit30: 0 pos: 137
1001 0000 0000 1001 1001 0100 0001 0000 bit30: 0 pos: 138
1001 0000 0000 0101 0101 1001 0100 0001 bit30: 0 pos: 139
1001 0000 0000 1011 0110 0010 0011 0000 bit30: 0 pos: 140
1001 0000 0000 1101 0010 1011 0011 0001 bit30: 0 pos: 141
1001 0000 0000 0000 0000 0000 1110 0001 bit30: 0 pos: 142
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 143
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 144
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 145
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 146
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 147
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 148
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 149
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 150
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 151
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 152
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 153
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 154
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 155
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 156
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 157
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 158
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 159
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 160
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 161
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 162
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 163
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 164
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 165
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 166
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 167
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 168
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 169
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 170
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 171
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 172
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 173
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 174
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 175
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 176
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 177
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 178
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 179
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 180
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 181
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 182
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 183
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 184
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 185
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 186
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 187
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 188
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 189
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 190
1001 0000 0000 0000 0000 0000 0000 0000 bit30: 0 pos: 191