Audio Transport Module York

Hello DiyAudio community,

I wanted to share my audio transport module project called York.


Original Concept:
I personally used the Amanero modules for my audio devices and never had any problems with drivers or it's hardware, so I bought licenses for integration in my projects a while ago.
The main disadvantage was lack of possibility to communicate from PC to, for example I2C port, for sending configuration to audio DSP. There was only I2S audio stream. So my first idea was just to have USB hub on board to connect VCP IC. As the ESP-ADF was released, the idea evolved into creating a versatile audio data transport module with wireless interfaces, aligning perfectly with the ESP32 module configuration.
So, this architecture was born:
photo1701172546.jpeg


Hardware Features:
USB Audio interface (44.1-384kHz stereo)
BT AptX Audio input (in I2S slave mode)
FPGA reconfiguration (by ESP32 - no need for external programmer)
Amanero compatible interface

The device includes a module for AptX Bluetooth audio, addressing the ESP32's lack of support for high-quality codecs.
While the hardware might seem overkill with an 8K FPGA, it provides ample room for experimentation and DSP capabilities. It is very nice for experiments and hardcore DSP fun! :)

Photo of the first revision:
photo1701172519.jpeg

The BT module is underneath:
photo1701172519 (2).jpeg


Currently Implemented Features:
Web interface
mDNS service
MP3 stream playback (Web radio)
CLI for ESP control, FPGA, and external DSP register access
OTA firmware update (both FPGA and ESP32)
Analog Devices SigmaStudio support for ADAU DSP (configuration/control via Wi-Fi)

Later I've discovered ESP32-Squeezelite project, and it is a perfect fit for this hardware, adding Squeezelite, AirPlay and Spotify playback capabilities to all of the above.
I had to do some modifications to original project to include all the nice features that were developed separately for this module.

Hardware Evolution:
It is clear that the current hardware does not make much sense cost-wise: it needs an MCU for Amanero, an Amanero license, USB HUB and USB-UART chips.
Amanero MCU also requires an FPGA. Yes, the FPGA handles all stuff related to I2S multiplexing and clock generation, but all these functions can be implemented with one chip.

So for future version I'm going to use PIC32MZ MCU for as USB-I2S transport combined with VCP. That will consolidate four ICs into one MCU and expanding USB audio to support 8 channels (it can support both In and Out, maybe for future evolution)
I have a prototype of PIC32MZ module based on firmware developed by Alexey (Dortonyan) posted on Vegalab forum.
photo1701172519 (1).jpeg

Here's a photo of the hardware in my 4 (8ch) Class-D amp with ADAU1452 DSP (probably worth another topic)
photo1701172605.jpeg

As there are so many features, I'd like to hear on which are the most interesting ones for the community, I can expand more on them.
I'm eager to hear your thoughts and suggestions as I continue refining and expanding this project.
My vision for now is to make a new revision of the PCB with ESP32 + PIC32 + BT AptX module.

As for the firmware I'm going to fork ESP32-SqueezeLite.

Best regards,
Vladislav
 
Last edited:
  • Like
Reactions: 2 users
Hi Vladislav,
nice project you got there.
I want to share some thoughts with the FreeDSP-Octavia in mind.

SInce version 1.0 of the octavia board does not have the I2C connected on the Amanero header it might be nice to have the I2C bus on a seperate header (if this is not already the case). This way one could have a little flat band cable connecting the York to the USBi header of the board.

I was also wondering how you switch for example between USB und BLE input. In case of the octavia for example, we have multiple inputs, where the amanero header is one of them, and already implement some kind of input selection. So it would be nice to have a way of telling the York which input it should provide on the i2s, maybe with a signal on the header. Or do you provide all inputs on the i2s at the same time and you just pick the channels of the desired input?

Best Regards,
Ludwig
 
  • Like
Reactions: 1 user
Hello Ludwig,

1. Good point. I was also thinking about this during debug of the board. There are several I2C bus masters available in the MCU, so it is possible to have one routed to Amanero header and another to the connector on the side. I checked and unfortunately in the current revision I2C pins are not routed to side connector. At the moment of schematic design I was only thinking about UART and couple GPIOs. But I will definitely fix that in next revision.

2. There are two versions of the module exist right now:
  • Let's call first one York-ESP. It is built with WiFi, BT module, Amanero MCU. Here I used web interface running on ESP32 to switch inputs.
  • York-Pico, prototype to replace 4 chips by one PIC32 MCU, one I proposed to be used in FreeDSP. This prototype does not include BT and WiFi modules. Hence, cheaper. However, WiFi+BT can be added and the selection of the input can be done by, let's say, toggling one of the GPIO pins.
Thank you so much for your inputs! These are exactly what I wanted to hear: what features are really required.
One of the questions I have: should the next version include BT and WiFi modules? Or only BT?

Best Regards,
Vladislav
 
Hi Vladislav,
Very good here,

One of the questions I have: should the next version include BT and WiFi modules? Or only BT?
So for my usecacse my dream would be a device with multichannel USB audio (preferably input and output like the amanero) and BT with a good codec. I don't really need wifi since I already got that covered with the raspberry pi. Can you do TDM stream with the MCU?

Maybe you can do a PCB with BT and WiFi as assembly options and the MCU detects if a BT or WiFi cheap is soldered and then their functions are unlocked/available.

BR Ludwig
 
No news for a long time :) Quick project update:

I've been working on the firmware and cross-platform configuration tool.
The tool would allow to customize device (change name, PID/VID, number of in/out channels, etc) as well as update the firmware.
As for the hardware I decided to go with three options:

1. York-pico: USB only audio interface: UAC2 (PCM up to 384kHz input/output), 2 channels. Compatible with Amanero, provides optional HID and/or CDC (serial) interface for custom user controls. (can be used as PC-I2C bridge, for example)
2. Multichannel version: multichannel in/out interface (up to 8 channel total)
3. USB + WiFi + BT (AptX) interface. Compatible with Amanero, additionally provides web interface, Spotify and AirPlay playback (uses squeezelite-esp project)


All these versions will support firmware update and configuration using the GUI configuration tool and can be integrated with SigmaStudio for ADAU DSP programming: Post in FreeDSP Octavia thread
If you would like to create a custom GUI App for you device, say, to control DAC/DSP under Windows/MacOS/Linux, it will be possible as well.
I am going to release library for C/Python/Matlab and a code examples.

Screenshots will follow in next couple of weeks.

Best Regards,
Vladislav
 
Hi Ludwig,

Yes, there is difference in hardware: for option 2 (multichannel) there will be 4 I2S ports available as inputs/outputs and a flexible clock generation circuit to support simultaneous audio input and output streams at different sampling frequencies.

TDM is possible even in option 1, however because of MCU peripheral speed limitations it will limit max Fs as a consequence.
For example, option 1 at MCLK = 49.152MHz max Fs for 2 channels thru I2S will be 384kHz, for 8 channels in TDM - 96kHz. In theory, I still need to test it in hardware.
Option 2 will be capable to output 8 channels thru 4xI2S at max Fs of 384kHz.

Best Regards,
Vladislav
 
Alright, it is converging to something. At some point I should just stop putting new features and release it :)

As I said, I was working on the configuration tool and on the firmware side as well to support all these configuration options.
There are several tabs: general, audio interface, clocking, i2c, gpio, serial interface (UART), DSP support (for ADAU) and firmware.

Firmware update mechanism is already in place as well as many other features, currently I'm stiching everything with the user interface.
Screenshots attached.

I'm going to release some source-code and a library so that users could build their own custom apps for Windows/Linux/MacOS.
 

Attachments

  • photo1701172519 (1).jpeg
    photo1701172519 (1).jpeg
    138.5 KB · Views: 38
  • cfg_serial.png
    cfg_serial.png
    3.9 KB · Views: 46
  • cfg_i2s.png
    cfg_i2s.png
    4.2 KB · Views: 43
  • cfg_gpio.png
    cfg_gpio.png
    4 KB · Views: 38
  • cfg_firmware.png
    cfg_firmware.png
    4.1 KB · Views: 40
  • cfg_clk.png
    cfg_clk.png
    4.1 KB · Views: 44
  • Like
Reactions: 1 users
Second HW revision is ready for production. There are some important changes done to be compatible with FreeDSP projects and to enable TDM8 output. I also managed to implement SPDIF output.
IO0, IO1 can be remapped as GPIO/UART/I2C/SPDIF.
Also, a second I2S is available on pads F0-F3. Can be used as I2S input, for example. So the module could handle input and output streams.
york-pico-v2.png
 
  • Like
Reactions: 1 users