Originally Posted by Glassman
the main difference between SpAct used in S/PDIF receiver and USB chip is that in case of S/PDIF, it has to lock on and follow the incoming signal and it can vary in time so the PLL has to adjust to it all the time, on the other hand, USB chip itself is a master and asks computer for next data when the buffer gets empty, the PLL is there just to be able to support multiple sample rates using just one crystal, it doesn't need to lock on USB bus's clock.. at least that's what I believe is happening.. PCI audio controllers do that the same way except they have usually two oscillators..
do you know something more about it, Wodgy?? I might be wrong of course..
What you're describing is a synchronous protocol. The Burr-Brown devices actually use an isochronous protocol (check the datasheet). The sound device cannot request more data from the main CPU, but this is not strictly an asynchronous protocol because there are some timing guarantees (because the on-chip buffer is not infinite and there will be glitches if the CPU cannot keep up).
I understand why you'd naturally think the implementation would be synchronous, but due to the nature of digital audio, like any constant data stream a synchronous protocol doesn't offer any advantages unless you increase the complexity. The receiver never needs to ask "give me more data" because that request would be redundant -- the CPU knows that the receiver will be needing more data in X milliseconds just by the constant nature of digital audio. On a heavily loaded USB bus, a synchronous protocol would make more sense, because the receiver could send feedback back to the sender saying, in effect, my buffer seems to be dangerously low on a regular basis, send more data. However, the USB audio protocol is not that complicated. With the advent of USB 2, the bus is almost never that heavily loaded.
PCI audio cards use DMA so that cards can pull data off the bus themselves. The USB bus doesn't support DMA from devices.
Anyway, this isochronous protocol is why SpAct is essentially implemented the same way on USB receivers as it is implemented on S/PDIF receivers. At first glance it seems that a more sophisticated receiver IC might maintain two clocks, one recovered from the incoming data from the USB bus (to put data in a buffer) and another physical clock to run the internal DAC or output the data via I2S (i.e. taking data out of the buffer), but if you work through this in your head you'll realize that if the two clocks are even slightly off from one another the buffer will always be either empty or full. Hence the need for SpAct.