[Photostory] Building a Multichannel UAC2 Interface

GroupDIY Audio Forum

Help Support GroupDIY Audio Forum:

This site may earn a commission from merchant affiliate links, including eBay, Amazon, and others.
Hi,

I'm still working on it. The feedback (either implicit or not not) still gives me some headache. I'm getting constantly drop outs in the i2s audio stream and cannot see a pattern yet. But I'm not giving up yet.

R.
 
After letting it rest for a while I'm now coming back to it. The current status:
I wasn't able to get the feedback working but now I gave it a new try with fresh thoughts on it.
Anyway yesterday I was able to make a version that does not have buffer underruns (=> dropouts) for the playback stream. This version was made with the configuration 48kHz, 16bit, stereo but in high-speed mode. Thus, I'm now working on getting the record stream working for the same configuration. Once I've made that I'm going to change it to 24bit and multichannel.
I'll report about this soon.

R.
 
I've VERY VERY VERY good news:
I got a loopback working. A sinus was constantly send to the output, internally looped back and sent back to PC. I saw no drop-outs on the screen anymore. I used the SignalScope software for this test. The configuration was 16bit, 48kHz, stereo, but High-Speed mode. Thus, I conclude the UAC2 software framework on my chip is basically working now. Next step is: Upgrade to 24bit.

R.
 
I've now recording in 24bit working. This is a bit tricky. Since I'm working on a 32bit processor but the audio stream from the ADC is 24bit per sample I have to do some clever byte-repacking. For 16bit this is much easier. 2 samples fit into 1 32bit-word of the processor. For 24bit samples this is obviously not the case...
Now let's look into the playback. We want this 24bit, too...

R.
 
I think it is time to give you an update.

By far this is the hardest diy-project I ever did.  :mad: :eek:

Until yesterday I still had trouble with drop outs in the audio streams. It usually happened after 5 or 10mins for a short moment.

Meanwhile I was already thinking to stop the project and restart with a XMOS design but their sample applications are really hard to understand. After looking at it for a day it was still not clear to me where to change it in order to have more then 8 channels on an i2s or tdm interface...  :-\

So back to my implementation. After tracing and debugging it again, I now have a solution that works now already for a few hours without dropouts or a buffer xruns in a stereo loopback configuration. Thus, I'm now preparing for changing it to 24bit. Well, I wanted to have this done already some months ago...  :-[ So keep fingers crossed!

R.

 
Some good news: It seems that I got 8 ins and 8 outs working in full-duplex modes at 48kHz/16bit yesterday evening.
Today let's see if I can make it 24bit.
 
Now it is working with the configuration: 8ins, 8outs, full-duplex, 24bits, 48kHz
Next step: 16 input and 16 output channels and unpacking them for the i2s or tdm interface.
 
Konfiguration 16/16, 24bit, 48kHz working.  8)
I'm now going to implement the TDM interface in order to connect it to my new AD and DA converter PCB.
 
So you've got a functioning, USB Class 2 board that will do 16x16 audio I/O?  If so, this should work with Linux.  Any chance of trying that out?  What about X2 sample rates?  AES/SPDIF?

I appreciate your effort on this stuff.  Impressive.  :)
 
Yes, exactly: USB Audio Class 2 with 16x16 I/O.
At the moment I/Os are on I2S. Thus, you can connect any PCB supporting I2S for interfacing (Analog, AES3/SPDIF, ADAT...). But, I want to make a change to TDM in order to save some data lines: 10 vs 4 lines for each 8 channel i/o port.
Mainly I have to do that because I don't have enough pins on my silicon to run more then 16i/o in i2s mode and I still want more i/o.

Linux: Yes. I want to support it. That's one reason why I'm doing this. I do run Linux in parallel with my MacOSX. I learned if you want to do multichannel audio on Linux your choices are very limited especially if you want to go via USB or FireWire.
What I don't know yet: Does Linux ALSA support implicit feedback for UAC2? For now I implemented implicit feedback because Apple recommends. Else I have to implement explicit feedback, too.

X2 sample rates will follow later but for now I'll stick with 48kHz until I have a fully working prototype with everything in a box.
But I'm planning to make the project open hardware. For the software I have to check first some legal stuff. I'm using source code for the USB-Chip which is not open source. It was delivered with the development environment and it is only allowed to give away the binary but not the source code. But that is still a long way to go and will not happen next week already that you see the project on GitHub.  ;)

 
It is time for an update on this project:

Currently I am preparing some ADC and DAC pcbs that can be connected to the audio interface pcb. The ADC is already done. Next is the DAC. Besides that I am searching for a solution to program the chip. Since the program binary is stored in a standard SPI flash I think there is a cheap solution for DIY nerds somewhere.
Thus, I hope the UAC2 interface will be soon available for DIY.

R.
 
Pst. Rumor: I have heard the mainboard that connects the ADC/DAC/AES-Boards to the UAC2 and adds ADAT i/o is currently designed.

R.
 

Latest posts

Back
Top