As stated in this thread (http://www.xcore.com/viewtopic.php?f=37&t=5145) we have implemented the USB-audio functionality on an XUF208 and have succeeded so far. Most everything is working, including DSD support. But whenever the DSD-stream stops there are nasty pops or clicks. I have tried to corner this problem from various perspectives, but I could not solve it, yet.
I am guessing:
The problem arises from the fact, that the I2S/DSD clocks are stopped when playback is stopped (is that correct? - if so,why!!!) or I2S/DSD-Data_out is set to 0 when the track is paused ( is that correct? ). Both result in the DAC (an ESS Sabre model) reading zeros which in the DSD-case doesn't mean zero, but negative full-scale. That is also what I see on the oscilloscope.
I tried using the UserAudioStreamStop() functions to eliminate this problem (mute the DAC), but for two reasons that doesn't work properly:
- UserAudioStreamStop() is called only a few hundred microseconds before the plop. I need about a millisecond to mute or otherwise kill the DAC output. Thus, I can shorten the plop, but it is still nasty of course.
- Also, the UserAudioStreamStop() function does not seem to be called when the stream is paused. But there is a plop when the stream is paused.
Is there another way around this? Am I doing something wrong here?
You cannot possibly consider this normal behaviour - in my humble opinion the implementation is broken if it is only possible to enter or leave a DSD stream with a full-scale blow to the output....