Master clock and isolator for the MiniDSP USBStreamer
Some time ago, I bought a MiniDSP USBStreamer. It has a number of nice features. Compared to many of the other XMOS based USB interfaces (and other similar interfaces), the USBStreamer has the advantage that it has digital inputs in addition to the usual outputs. One of the projects I am planning to do is to make an audio analyzer, and for that the input is of course crucial. For normal playback to a DAC it is obviously not needed.
The most important features for my applications were:
1. Digital inputs
2. Up to 192kHz sample rate
3. ASIO driver, to get bit-true data in and out, with no resampling in the PC
Other nice features include
4. I2S interface
5. Up to 10 channels out and 10 channels in
Initially I intended to use the Toslink interfaces for the audio analyzer, since that would allow me to synchronize the PC to my external clock system for the ADC and DAC. I actually made a design for this, but before I got the PCB back from the manufacturer I got the idea to do it in a different way. This was also inspired by the fact that the Toslink receive performance seemed to be a bit critical at 192kHz.
So I decided to use the I2S bus instead of the Toslink. There are two issues when doing this:
1. The USBStreamer I2S bus is not isolated from the PC.
2. There is a relatively high level of jitter on the clocks from the USBStreamer.
So I needed to add isolators on the I2S bus and find a way to synchronize the sample clocks to external high quality clock oscillators.
I already mentioned here that I was looking at that possibility:
The design is now up and running. I have tested loopback from a PC generator to a PC FFT analyzer. I am using AudioTester. Initially I had a problem with that at 192kHz, since there was too much delay in the path, so the bits received were shifted one position. Using faster digital isolators solved the problem. So now I can make a loopback at 192kHz with no errors.
The timing on the output side is quite simple, since all the I2S signals are going in the same direction, just getting a certain delay though the isolators.
The timing on the input side is more critical, because the data is coming from an ADC (or other device) clocked by the delayed LRCK and SLCK. But with careful selection of isolators and interface formats this can be handled.
The interface board I have made contains the following functions:
2. Two crystal oscillators: 24.576MHz and 22.5792MHz. These can be disabled if an external clock is preferred.
3. A flip-flop to generate 1/2 the clock frequency on a separate output if needed for the converters attached. This is just for convenience and it can be disabled if not needed.
4. A detection circuit to detect the sample frequency set by the USBStreamer (PC application). This circuit determines if the active crystal oscillator should be the 24.576MHz or the 22.5792MHz.
5. An octal flip-flop to synchronize the LRCK, SCLK and output data to the MCLK.
6. Voltage regulators.
I decided to bypass the flip-flops synchronizing the outputs since in most cases it is not needed. And it can be a problem when doing a loopback test due to the additional delay introduced by the synchronization. Most converters just need a clean MCLK and don't care too much about the other clocks.
If an external clock is used, the interface board will signal to the external circuit whether it should input 24.576MHz or 22.5792MHz. Of course these may be derived from e.g. 49.152/45.1584MHz or 98.304/90.3168MHz. This could be useful in connection a synchronous ESS based design, e.g. for the ES9018 and ES9102.
The sample frequency detection circuit has two additional logic signals. These indicate whether the sample frequency is 44.1/48, 88.2/96 or 176.4/192. This can be useful with some converters to put them into Single-Speed, Double-Speed or Quad-Speed mode.
Until now I have mainly tested it with the PC based AudioTester and an oscilloscope. Today I finally got around to test it with a DAC board based on the CS4398 (also my own design). I ran it though my KGSS Headphone amplifier driving my Stax Headphones. I think it sounded fantastic. But I may of course be a little biased. :)
I have not tested all 8 outputs and inputs, but that should not be a problem, since the isolator design is the same for all data signals of the I2S bus.
I am in the process of making a new version of the board, where I will use faster isolators in some places and leave out one of the voltage regulators. I decided to use the 3.3V supply on the USBStreamer as the supply for the interface on the USBStreamer side, since the power consumption is very low and I don't think that the USBStreamer has any problems to deliver this small additional current.
I will probably also remove the flip-flops, which can be used to synchronize the output signals to the MCLK.
I may also make a simpler version with no on-board crystal oscillators. Ideally the crystal oscillators should be close to the converters. It is not terribly important that they are close to the USBStreamer interface.
So what has been achieved here? Well, I Now have an interface which is
1. Isolated from the PC, with 8 channels in/out (10 is possible with an add-on board interfacing to the Toslink channels).
2. Able to use a "perfect clock" for the converters (or as good as it is possible to get them :)).
Here is a picture of the prototype, attached to the USBStreamer. The PCB is 5x5cm.
A couple of modifications were done on this to test the fast isolators. For a basic version, with just one I2S channel in and out, only two isolator devices are needed.
Jen this is awesome. If it is possible i would be interested for one board.
That can probably be arranged. I have just made a couple of new layouts. One is a slightly modified version, with footprints for the faster isolaters. They come in a different configuration than the ones I used for the first design.
The other one is a simplified version, with no on-board oscillators. So this one relies on having the oscillator on the ADC/DAC board (where they should ideally be placed anyway). It cleans up a large part of the area on the lower end of the PCB shown on the picture above. I have just submitted the simplified version to the PCB manufacturer yesterday.
An advantage of the simplified design is that it will be easier to mount. In this case the most difficult components will probably be the SC70 packages. The versions with on-board oscillators use a couple of US8 packages, which are not exactly DIY-friendly :eek:
Awesome, was looking everywhere to find something like this.
I would be very interested in the board without the crystal's mainly because formfactor.
But any of the two would be fine.
Again, very nice!
Thanks for your kind words.
Actually the form factor is the same, so the board is still 5x5cm. I could have chosen to make it smaller, but I didn't. I did add some mounting holes though. And I shifted the connectors to the side, so that the existing mounting hole in the upper left corner is easier to use, without getting a conflict between the screw and the USBStreamer below.
If only a 2 channel output or a 2out/2in is needed, it is of course not necessary to mount the 2x17pin IDC connector at the bottom. In this case e.g. a 2x10 pin connector (or smaller if some features are not needed) can be used. For every signal pin there is also a ground pin to get a good signal quality.
im realy locking forward of your project. Please let us be posted.
Greatings from Germany
Hello Jens, I'm also very interested in your board (my application will need 6 I2S channels). Please keep us updated as when/how we could order the boards.
I hope to receive the new simplified version PCB within the next few days. This is the one, which use the faster isolators and has no on-board crystal oscillators.
I have made a block diagram of this version. The basic principle is the same as for the other versions. I just removed the on-board crystal oscillators. And used one redundant pin for the 3.3 supply, so that it can now be supplied via the same cable that carries the I2S signals etc. In fact I also have the option to mount a local 3.3V regulator, just in case. This is not shown in the block diagram.
|All times are GMT. The time now is 10:55 AM.|
Search Engine Optimisation provided by DragonByte SEO (Pro) - vBulletin Mods & Addons Copyright © 2021 DragonByte Technologies Ltd.
Resources saved on this page: MySQL 17.65%
vBulletin Optimisation provided by vB Optimise (Pro) - vBulletin Mods & Addons Copyright © 2021 DragonByte Technologies Ltd.
Copyright ©1999-2021 diyAudio