Open Source DSP XOs

Status
This old topic is closed. If you want to reopen this topic, contact a moderator using the "Report Post" button.
I agree that ARM is nice for maximum openness. Open source compilers can even be used in most cases, which is very attractive, and there are tools that will at least lower the barrier to entry (low cost dev boards, mbed platform, etc).

Unfortunately, it is still a large project for one person to create all of the custom hardware and software, and somewhat expensive to develop with perhaps minor payoff above what already exists commercially, or in a semi-closed environment with the AD audio DSPs or even cypress parts. I guess that is probably the reason that nobody has really done this on ARM yet.

If I had a shield for my F401 Nucleo with optical input and 4x digital outputs, I'd probably already be crunching out some code.

If anybody knows of some inexpensive i2s breakout DACs or an optical -> i2s bridge like the wm8804 breakout, it could help for prototyping. Needs to be 3.3v compatible for ARM. Nothing like the twistedpear wm8804 breakout though.... not looking to spend a small fortune just to get some prototyping parts. In fact, I wouldn't really care how well it sounds, initially.

If anyone wants to collaborate on this, then we should organize a standard bill of materials (breakouts for DAC, ADC, Optical transceiver) for the prototype. Then we can work together on the same initial platform. After that, we would design a shield or something with nicer parts for the finished product and have minimal effort to adapt the code to new parts if we abstract properly.
 
I agree - ARM really seems the way to go.

There are still lots of variation among the ARM micros, and there is no standard ARM I2S I/O.

Also there are some standard plugin formats like Arduino, BBB and the one used on the most popular development boards like on the STM32-Discovery. What would be nice would be one simple plugin or shield kind of standard with multichannel I2S interfaces (also available as TDM interface) and I2Cand SPI. So you could build a single "motherboard" with DAC's, S/PDIF receivers, ASRC's and the power supplies (including opamp supplies), and use it with different pluggable processor boards. MikroElektoronikas UNI-DS6 is one example of that kind of architecture:

MikroElektronika - UNI-DS6 Development System for PIC, PSOC, AVR, 8051, ARM, dsPIC microcontroller
 
From a project management standpoint, if the scope is too broad, the project will never get done. At some point, you are maximizing expense, scattering the limited resources for development work and everything ends up failing. I don't think there is enough benefit to enabling all of these platforms when none of the embedded code is the same... besides the fact that designing the hardware is not nearly as big a challenge as the software.
 
Last edited:
... besides the fact that designing the hardware is not nearly as big a challenge as the software.

I think the opposite. Anyway you mentioned the missing audio shield for Nucleo, that could be one thing you could start from, design an multichannel audio header for the Morpho headers:

ST Nucleo F401RE | mbed

Also try to make the pinning compatible with F411RE at the same time. The Nucleo headers are actually two-sided (there are ones on both sides). Nice antennas. Well, might be better not to care about the quality. Just use the sure electronics wm8004 spdif (google) board with proto jumper wires (100 Dupont Jumperkabel 20cm Buchse auf Buchse Prototyping Arduino ATMEL | eBay). Order any DAC (not needing MCLK) from Ebay (PCM5102A based should work fine).
 
There are still lots of variation among the ARM micros, and there is no standard ARM I2S I/O.

I agree that the lack of standardization of the basic peripheral set holds back progress. Its great having the same CPU but sucks that everyone has their own peripherals (not entirely - there are some, rather limited ARM peripherals).

Just thinking out loud here but since all SoCs have GPIO could anyone see a way of using GPIO as a way of creating a more standard audio interface? Having suggested it I can already see problems with bit-banging strobes as nobody's GPIO has clocked register output that I've seen..... Back in the days of the 68k there was the 68k's PI/T chip (68230) which had exactly that kind of buffered register output which I'm thinking of...
 
I was thinking at the chip level rather than at the board level. SPI seems to be quite a common peripheral but once again, its implementation differs - even within a single vendor. NXP for example has at least two incarnations of it, one being an ARM variant.

Perhaps the bit-banging overhead isn't so drastic on ports which support the full bandwidth of the CPU (so called 'fast GPIO'). I shall investigate a little more.
 
I'd like to attach digital speakers on a PC, using the S/PDIF-out of the PC.
I'd like to convey some volume info over S/PDIF.

This could be the layout :

S/PDIF from the PC (uncompressed stereo audio & no volume info) -> small box powered by USB -> two S/PDIF sockets (one for the left audio channel + volume, the other for the right audio channel + volume)

What would be inside the small box ?
- a S/PDIF to I2S converter hooked on a half-duplex STM32F4 I2S-in
- the STM32F4 would be powered by USB
- the STM32F4 USB would read the volume info from the PC, provided the PC is running some dedicated software
- a rotary encoder connected to the STM32F4, acting as physical volume knob
- possibly a second rotary encoder as physical balance (left - right) knob
- two I2S to S/PDIF converters hooked on two half-duplex STM32F4 I2S-out

About I2S to S/PDIF converters, I found nothing on eBay.
Can somebody advise a I2S to S/PDIF converter that I can hook on a half-duplex STM32F4 I2S-out ?
 
Cirrus logic appears to have what's required.

CS8416 = SPDIF to I2S converter
CS8406 = I2S to SPDIF converter

******************
Stereo S/PDIFv adapter
******************
grabbing stereo audio (uncompressed) from S/PDIF (PC or CD/DVD/BluRay)
- reading the volume setting from a rotary encoder
- reading the balance setting from a rotary encoder
S/PDIF -> CS8416 -> I2S -> STM32F4 -> TX_VOLUME_INFO -> I2S x2 -> CS8406 x2 -> S/PDIFv x2

************
S/PDIFv XOVER
************
S/PDIFv -> CS8416 -> I2S -> STM32F4 -> XOVER -> RX_VOLUME_INFO -> I2S x2 -> PCM5102A x2 -> RU-3.30505 (+5V -5V from 3.3V) -> PGA4311

I have a few ST Nucleo F411RE lying around.
The STM32F411 is equipped with three half-duplex I2S.

Can somebody help me designing :
- the ST Nucleo F411RE "cape" acting as Stereo SPDIFv adapter
- the ST Nucleo F411RE "cape" acting as SPDIFv XOVER
 
steph_tsf,

I have a ST Nucleo F411RE as well that I would like to use. I can help to design a shield after prototyping is done. Would you like to buy the same S/PDIF->I2S converter and DAC so that we can help each other out with code and design?

For my project I would like S/PDIF input and 4 channels of DAC output, but to prototype, 2 channels will be fine.

I would like to buy the WM8804 breakout that mhelin is suggesting:
WM8804 Ebay (US)


For DACs I am considering these:
DAC Sabre ES9023
CS4334 IIS/I2S to stereo
PCM5102 DAC

DAC must be 3.3V complaint for the ARM board. Once the prototype is done, I would like to upgrade the DAC when the shield is built. For now, I want to use an inexpensive DAC so that other people can follow along if they wish.

steph_tsf - do you have any preference?
 
For my project I would like S/PDIF input and 4 channels of DAC output, but to prototype, 2 channels will be fine. I would like to buy the WM8804 breakout that mhelin is suggesting. For now, I want to use an inexpensive DAC so that other people can follow along if they wish. steph_tsf - do you have any preference?
Indeed, the eBay WM8804 board looks handy as SPDIF to I2S converter. I guess that using jumpwires, we can hook the WM8804 eBay board on the ST Nucleo 411RE board.

Indeed, the same modular approach may be used regarding the DACs, buying one of the DACs you have spotted on eBay.
We can add the PCM5102A board to the list.

Unfortunately, there are no volume control in most eBay DAC boards.
I guess that we need to add volume controllers like a PGA2311 (2-channel) or a PGA4311 (4-channel).

Do you know the WM8731 Audio Codec ?
There is a board embedding it.
This is the MikroE Audio Codec Proto Board.
The MikroE board brings 1 x mike input.
The MikroE board brings 2 x headphone outputs with volume control.
The MikroE Audio Codec Proto Board earns thus my preference, for experimenting.

I suggest that later on, after the experimentation phase, that we get rid of the jumpwires, issuing a couple of Nucleo "capes". Only then, we'll take the opportunity of selecting audiophile-grade DACs and audiophile-grade volume controls.

I've just downloaded the Nucleo Boards User Manual.

I've just downloaded the STM32CubeMX chip configurator. Very handy to use.

Trough the STM32CubeMX chip configurator, it seems possible to configure the STM32 F411RE chip for providing :
- USART2 full duplex in asynchronous mode (imposed by the Nucleo schematic)
- SWD port (imposed by the Nucleo schematic) with optional SYS8_JTDO-SWO pin and optional SYS_WKUP pin
- I2S2 full duplex
- I2S3 full duplex with optional MCLK pin
- SPI1 with optional SPI1_NSS pin
- I2C1
- I2C2
- ADC1 inputs 8,9,14,15
- and the full USB Host/Device with all optional USB pins !

Here is how to provide 2 x Mike input, 1 x S/PDIF input and 4 x analog audio outputs with volume control :
- one Nucleo F411RE board
- one eBay WM8804 board
- two MikroE Audio Codec Proto Boards
- one volume pot on a 12-bit ADC input (optional)
- one balance pot on a 12-bit ADC input (optional)
- lots of jumpwires or preferably a passive Nucleo "cape" consisting of connectors
This enables a realtime gain/phase loudspeaker measurement and interactive setup system.
This enables a stereo 2-way preamp & crossover, with volume and balance pots.
This enables a mono 4-way crossover.

Here is how to provide 1 x S/PDIF in and 2 x S/PDIFv out
- one Nucleo F411RE
- two eBay WM8804 boards
- one volume knob on a 12-bit ADC input
- one balance knob on a 12-bit ADC input
- lots of jumpwires or preferably a passive Nucleo "cape" consisting of connectors
This enables a stereo preamp, feeding two digital speakers, along with volume control data. Each digital speaker must embed a mono 4-way crossover (see above).

Only two different configurations.
Many applications.

Waiting some comments ...
 
Do you know the WM8580 Codec ?
Mouser has it in stock. See here.
One S/PDIF-in and six DACs with volume control.
Also two line-level ADCs, for conducting realtime interactive measurements.
Your stereo 3-way crossover is there, waiting for you.

Let's design a solid Nucleo "audio cape" embedding such WM8580 Codec, and two pots (volume and balance).
Such WM8580-based "audio cape" can also operate as a mono 6-way crossover. In such case, the two pots are not required. This is fantastic for array speakers, etc.

A separate Nucleo "SPDIF splitter cape" would host two WM8804 (and a volume pot and a balance pot), acting as stereo preamp with volume and balance control, feeding S/PDIF multiway active speakers.

A Nucleo 411RE equipped with a "SPDIF splitter cape" would feed two Nucleo 411RE, each equipped with an "audio cape" acting as 6-way crossovers.
Clearly, the three Nucleo 411RE, the "SPDIF splitter cape" and the two "audio cape" form a high-specification, versatile system. With galvanic isolation through the S/PDIF transformers.

And still, there is a simple, affordable entry point consisting of using a Nucleo 411RE equipped with the "audio cape", materializing a stereo preamp and stereo 2-way or 3-way crossover. Still with galvanic isolation, trough the S/PDIF transformers.

Forget about the eBay modules and jumpwires. Designing two custom PCBs as "capes" will ensure a faster job (you save the jumpwires design phase), and a bigger return (more channels, and they are with volume control).

This is going to be the reference system.

An "audiophile cape" may be designed later, embedding an audiophile-grade clocking scheme, embedding audiophile-grade DACs, and embedding an audiophile-grade volume control.
While doing so, the WM8580-based "audio cape" must be used as comparison base, as it already relies on a high-quality clocking scheme provided by the WM8580 internals.
A lot of development time will be required during the design phase of the "audiophile cape", for providing results that are significantly better than the plain normal "audio cape". One must foresee that the Nucleo board and the "audiophile cape" will need proper shielding.

The "audio capes" can be replaced by "audiophile capes" in all existing systems, because the "audiophile cape" can output 6 channels, just like the "audio cape".

If you follow the above guidelines, your revenue stream becomes obvious.
 
Status
This old topic is closed. If you want to reopen this topic, contact a moderator using the "Report Post" button.