CS42448 board update for T4 pinouts and improved performance

Status
Not open for further replies.

palmerr

Well-known member
Hi all,

I'm starting work on an update to the CS42448 6 in/8 out board for the T4 pinouts - similar to the "Rev D" version of the SGTL5000 board Paul has recently published. It will go up on OSHPark and be fully open source, as is the Teensy tradition.

Here's my design thoughts (in order of priority):

1. T4 pinouts
2. Software and connector compatibility with Paul's existing version.
3. Buffered outputs with at least 2 pole filters (Butterworth).
4. Input buffers/preamps - this one is tricky as there are likely to be multiple different requirements, and "universal" preamps have high parts counts, and lots of switches and controls.
My thought is to replicate Paul's simple (straight from the data sheet) single pole passive input filter, and add a header (and some board jumpers) to allow external preamps to be powered.
On the short list:
- a mic preamp with compression and noise gate based on the SSM2167. This would serve the folks who use the audio library for live performances (providing improved noise performance and headroom management).
- a "universal" mic/line/instrument input (probably without phantom power) with gain control, possibly based on the MAX4063.
I2C or a GPIO could be provided (at some small cost to noise performance) to allow digital control of the preamps.
VCC of greater than 5V could be required for some preamps (although SSM2167 and MAX4063 are both 3.3/5V devices).
5. AUX SDIN header for full 8in/8out operation. A SGTL5000 could easily be used if I2C was supplied.
6. Stand alone (as well as USB) powering, possibly from a "universal" 9V instrument foot pedal supply, or 12v plugpack.
7. Keep it as simple and cheap as possible, at least in base format, for practical hand loading of single boards.
- are 0805 or even 1206 SMD components preferable for hand loading (I hate tweezering 0603 parts!).

What's the level of interest, and other desirable features?
 
I think you shouldn't try designing one board for all possible users and use cases. People who need multiple inputs usually want to record some music performance like drum set with multiple microphones. They don't usually need multiple outputs (for independent monitoring maybe it would be nice to have like four outputs, though using mono mixes you could run two different mixes to headphones on a stereo channel). Typically you have an USB audio interface with multiple mic pres and multichannel A/D for that. Some people use ADAT I/O and converters like ADA8200 (or older ADA8000) and other. Also to have decent performance the A/D converters have to be driven from very close low impedance source. I've found some interesting OPA1632 (differential opamp) modules on Ebay, they would make nice frontends for multiple channels (https://www.ebay.co.uk/itm/OPA1632-...mplifier-Board-ADC-Driver-Module/311755306798). They have all needed inputs and outputs including common voltage input. You have to implement your own dual supply for them. Running it from USB requires step ups for both positive and negative voltages though. Using the same layout you could replace the active module with a passive one which could use a transformer (5:1 or so) to drive the A/D. Also it would be better to use a proper dedicated A/D converter chip like AK5558 (which doesn't need heatsink either). Cirrus chips are known to break easily.

For output you could use a simple PCM5102A alone or with a PCM5142 which could be programmed to work as an active crossover for your speakers (it contains TI's miniDSP but has only two channel DAC). Also you could also just put there some I2S /TDM header for a separate board. From musicians point of view it would be also nice to have MIDI connectors at least. These day the 2.5mm mini jack is quite a standard (Korg etc. uses them) and doesn't take much space. The symmetric A/D inputs could also use 3.5mm stereo sockets to save space, though 6.3mm one isn't actually much larger.

I don't know for what else people would like to use multichannel I/O. Some kind of MEMS mic array would maybe useful for some.
 
Thanks for all the suggestions there - I'll respond to a few of them, and bank the rest for future consideration.

Writing the drivers is hard work, particularly when you need to ensure that they will work across all the Teensy range from T3.0 onwards. For this reason, I'm inclined to keep with a chip that already has drivers - i.e. the CS42448.

As for applications, there seem to be a very broad range discussed in the forum , from video editing (the current LTC stream), to performance (all kinds of interesting instruments and effects), to recording/playback. I'm keen to not limit the application to one or the other and agree with you that flexibility is key. Also multi-channel (> 2) USB audio is not implemented yet in the libraries, I believe.

ADAT is a pain. The encoding is messy, and only ADAT send has been implemented so far in the Teensy library (there's plenty of chat about the challenges of timing when using Teensy as a slave device, which would be required for an ADAT input.) I have an old, but good Tascam 8 channel interface that I connect via ADAT to a newer firewire Focusrite for extra channels when recording, to avoid having to deal with ADAT directly. I'm not sure too many others still have ADAT gear, and there has been little recent forum discussion on the topic.

As for the preamps - I agree wholeheartedly that one solution will definitely not fit all. I intend to provide as flexible an interface for connecting various preamps as possible. I toyed with providing +/- audio supplies, but decided against it as board real estate is at a premium and there are generally 5V alternatives I have found a couple of interesting (5V) preamps on eBay - one based on an ADA828 and another on an SSM2167. Leveraging these, and others, makes a lot of sense. I'll probably design a couple of variants as part of the project.

Similarly for jacks. 2.5 and 3.5mm jacks have an almost identical footprint. I'm pretty much fixed on skinny 3.5mm jacks (more common, at least for now), plus PTH holes for headers, if other input/output options are desired. 6.35mm jacks are much larger, and would consume much of the available space (keeping within the 80cm sq limit of free Eagle). (Each header has a pair of inputs/outputs, clean 5V and ground). This also aligns with the other Teensy hardware, which makes plug and play simpler.

Your other ideas I'll think further on, but my first reactions are: MIDI already has some Teensy solutions, which could be stacked onto the Teensy with this board. The MEMS array is best possibly best handled as a direct digital input - and there are specialist chips for this, so maybe for a later project.

My current motivation for the project is multi-channel monitoring - I intend to team this up with my Ethernet audio library, with inputs at the desk, and individual monitoring, remote controlled from individual (or paired) monitoring stations - sonething like the Aviom approach, which I've used successfully in studio and live situations over the years.

I'd love to hear any other ideas you might have, and I hope to publish a high-level design in a few weeks. Keen to have your comments on it when it appears.
 
On another thread (older, sorry, don't have the link handy) there were requests from modular synth folks for DC coupled input & output filters with gain & attenuation for the +/- 10V signal range those systems use.

The trouble with DC coupled signals is how to null the offset voltages (assuming the ref voltage pin from the chip is usable for circuits to DC shift the signals). Perhaps a low offset, high gain opamp and a dedicated A/D (or feeding the signals to Teensy's analog inputs) could be used to measure the DC offset. Then those values could be stored to a EEPROM chip, and that permanent data could be used to digitally correct for the offsets?

The other lesser issue is gain error. Not sure what to do here, if anything?

Whether you care about modular synth applications, and care *that* much, is a good question. It's a request that does come up occasionally. I've often thought of making an audio shield with these sorts of features, but Teensy 4 has kept me far too busy for the last 2 years to make those types of specialty peripherals.
 
Ok. However, if you use HW configuration mode for the converters you don't need any special drivers other than for Teensy (which already exists).

I hadn't thought the stacking option, that would make it possible to use modular approach. Different modules like a basic stereo codec (AK4558 for an example which already has drivers), 2/8-channel A/D, 2/8-channel DAC, S/PDIF with hardware ASRC, microphone preamps etc. could be combined based to user needs.
 
Paul,

Thanks for the modular synth ideas. The overhead - extra supplies, DC coupling/offset, is probably more than I have real estate/energy for at this stage - at least to fully execute. What I can do is make it easy for people to plug the necessary gubbins into the core board for these purposes.

In my younger days I did some maintenance on a Moog and I smile when I see the whole analogue synth thing with digital innards and old-fashioned analog controls - it kind of ruins the purity (IMHO)! On the other hand, the modular synth folks are doing things that we couldn't even dream of with a real 1980's Moog - so all power to them. I'll see if I can make an allowance for specialist bolt on preamps and outputs. Mhelin also suggested +/- supplies as a worthy option, which would be the backbone of their requirement. I can imagine a pre/post board that generates the appropriate rails and signal conditioning.

One thought for the DC offset/scaling/gain linearity issues could be to build an audio effect object that post-processes inputs to make the corrections (parameters stored in EEPROM) - this would obviate the need for heavy changes to the drivers. Similarly for outputs.

In all, I'd be more inclined to head for an SGTL5000 solution for a first go at modular synthing - the 2 in 2 out format would require a lot less real estate to service all the channels. (On my first draft of the CS42448 board, a quad set of 2 pole filters takes up nearly 3 sq ins using 0805 components and spacings appropriate for manual component loading.)

For now, I'm leaning toward:
- T4 pinouts
- Sufficient compatibility with the original version for plug and play changeover (3.5mm jacks with the same pinouts, roughly the same board footprint) and no code chnages.
- "Proper" filtered LowZ output buffers - for at least 4 channels, possibly all 8
- Flexible input arrangements, with the default being your original passive single pole filtering. Pin headers and on-board jumpers for single-ended or differential inputs, AC/DC coupling.
- Possibly one or two specialist input modules: a straight 2 channel balanced mic/line with jumper-set gain (AD828) and a 2 channel Mic/line input with compression and gating (SSM2167). Both would run off the audio 5V rail.

BTW: one thing that I've been pondering - whether it's worth including 2 separate 5V regs for VA and VD, rather than just decoupling VA with a ferrite and caps. Do you have an opinion?

Richard
 
Ok. However, if you use HW configuration mode for the converters you don't need any special drivers other than for Teensy (which already exists).

I hadn't thought the stacking option, that would make it possible to use modular approach. Different modules like a basic stereo codec (AK4558 for an example which already has drivers), 2/8-channel A/D, 2/8-channel DAC, S/PDIF with hardware ASRC, microphone preamps etc. could be combined based to user needs.

I'm not quite sure what you're getting at with "HW configuration mode for the converters" - is it that some converters (e.g. CS5351) that could be used for adding extra channels via the the AUX function have config via pins, rather than needing I2C or SPI and drivers to match?

Richard
 
Paul,

A further question - it appears from tracing the Gerber file tracks on CS42446 OSHPark board, that the first of each pair of inputs goes to the tip of a 3.5 mm jack, whereas the first output of a pair goes to the ring.

Also, because of the strange pin ordering of outputs on the chip (+ of each output pair adjacent), you appear to have connected AOUT2-, AOUT4- and AOUT7- instead of the positive outputs to the rings of output jacks 1,2 and 4.

I could be wrong, but I repeated the tracing several times to make sure!

Should I duplicate these in the update, or go for the more logical tip = first of pair for both input an output, and all positive phase outputs?

Richard
 
Yup, looks like I did get the negative side of those 3 outputs.

or go for the more logical tip = first of pair for both input an output, and all positive phase outputs?

Yes, do that... don't follow my layout exactly.

Truth is, this PCB was made quickly as a test to develop the TDM support in the audio library. I never really meant for it to be a product. If you're making something to sell or just share with the world, definitely clean up those minor issues.
 
I'm not quite sure what you're getting at with "HW configuration mode for the converters" - is it that some converters (e.g. CS5351) that could be used for adding extra channels via the the AUX function have config via pins, rather than needing I2C or SPI and drivers to match?

Richard

Configuring via pins practically means that you don't wire the I2C or SPI at all and practically hardwire the used PCM mode (I2S, TDM etc.), sample rates, bit depth etc.. Thus no need for codec drivers. Most of the converters have that "parallel interface" anyway, but it's seldom used.
 
I made this breakout in order to experiment with DC coupled analog input and output stages interfacing with the CS42448. That one is for the Teensy 3.5/6 (built and working) but I have an (currently unfinished) version for the T4 as well. If I remember correctly it cost something like 20$ shipped for 5 PCBs and BOM, excluding the codec and Teensy of course. If you use stackable headers (*off topic rant* Why are there no stackable headers with more than 8 positions?), you can access all the pins from the Teensy as well.

Using a breakout like this allows for more flexibility in the analog stages, which can be application specifically designed. I also find it helpful to take a modular approach, as finding a critical mistake on a monolithic board after you've populated it just sucks.
 
Do you have any photos of the working board with analog filters connected? Would it be ok to share this on the blog?


It's just stuck in a breadboard for experimentation right now. I don't have any photos (but I could take some when I get a chance). You're welcome to share it, it's CC-BY-NC-SA 3.0 licensed.
 
Definitely need at least 1 photo of the real hardware to share it on the blog. Breadboard construction is perfectly fine.
 
Using a breakout like this allows for more flexibility in the analog stages, which can be application specifically designed. I also find it helpful to take a modular approach, as finding a critical mistake on a monolithic board after you've populated it just sucks.

useful thoughts. I'll definitely be sharing the final product, rather than producing them to sell, and the modular approach, particularly for inputs makes sense. your "super long Teensy" approach looks neat.

How have the DC coupled experiments gone?
 
I've added some pictures and some more information about this breakout in another thread.

How have the DC coupled experiments gone?

The CS42448 seems to have a built in high pass filter - Signals lower than 5Hz are heavily attenuated. According to the datasheet, you can shut it off, but I haven't been able to try that yet.

For the analog input and output stages, I have the following design simulated:

Screenshot from 2020-01-03 10-25-12.jpg

...but I've gotten hung up on how to best protect the codec from over-voltage and transients. Also, there is always the question of which voltages to scale to. The simulation expects up to 20Vpp input and output, but in the Eurorack world, audio signals are rarely over 10Vpp which doesn't leave much headroom for DSP in the Audio library. Some modules might make good use of 0-10V Envelopes, but I'm not sure the trade-off is worth it. I haven't had much time lately to reach any conclusions.
 
Eurorack PSU supplies are +/- 12V so that must be the absolute maximum range.
Anyway, for CV's some digital interface could make sense more than the analog, how about ADAT I/O?. ES-8 for an example has ADAT interface (https://www.expert-sleepers.co.uk/es8.html). There seems to be a standalone CV-to-ADAT and ADAT-to-CV converters also from Expert Sleepers:

https://www.expert-sleepers.co.uk/es3.html (ADAT->CV, PCM1690 DAC)
https://www.expert-sleepers.co.uk/es6.html (CV->ADAT, 3x PCM1803A ADC)


Also MIDI with 14-bit CC's could work if you don't limit to the serial MIDI baudrate.
OSC would be the best option, at least if you use Ableton with Max for Live. The scaling should be rather defined by some standard.

There is also a simple way to encode AC (diode and capacitor):
https://www.expert-sleepers.co.uk/siwaacencoder.html
http://www.muffwiggler.com/forum/viewtopic.php?t=13698
 
Last edited:
The discussion about the Eurorack requirements has been enlightening - as I don't play on that side of the fence, and your bare-bones breakout board approach makes a lot of sense to allow for flexibility - particularly the DC coupled requirements.

As I've been working on a board with the active in/out buffers, the complexity/cost has risen rapidly and it's become clear that most of the added complexity relates to features that will only appeal to some users (i.e. AC coupled, low noise, filtered line level in/out).

I'm thinking a KISS core, with the ability to patch on different analog I/O to suit different needs might be a better approach. Something similar to yours, mhelin, with a gull-wing arrangement of expansion pins, rather than your extended Teensy footprint (which, admittedly, is better for breadboarding).
CS46448 Teensy modular.PNG

Power would be pinned through the In/Out headers, with pins for 5v VA as well as +/- 12v. Additional power could be supplied through a daughter board, or via an additional header on the main audio board. Possibly buffered VQ as well?
cs42448 pinouts.PNG

Daughter boards would probably provide pairs or quads of inputs or outputs. Jumpers on the daughter boards would assign channels to pins.

I'd be keen to align the pinouts on the expansion headers if possible, with whatever, you're planning, so that users get more, rather than less flexibility, as I/O modules appear.
 
Last edited:
Nice, I find you have some good ideas there. I'm a little curious what your minimal, DC-coupled IO filter stages might look like. Having the VQ pin available would be useful for DC-coupled applications, as it is the bias voltage, and should have the same PSRR (and error) as the codec - although not strictly necessary as it should just be a conditioned VA/2. If you do break it out, I'd leave it un-buffered, as it should be buffered with a low offset precision op-amp, which adds unnecessary cost to the BOM if it's not needed. Access to a bipolar supply on the daughter board(s) is a great idea and would be useful for things like mic pre-amps or (small) class-D power amps.

For me the other important points would be 1.) physical size - HPs in Eurorack are a precious commodity, and 2.) Part count / availability - I personally prefer simpler circuits with lower part counts, even if that means minor sacrifices in performance (I'm no audiophile). The parts should also be readily available through the usual channels. I have no problem with small SMT parts, but I know some people do, so that's certainly something to consider.

Just my 2 cents. Looking forward to your design, and thanks for sharing the decision process.
 
Yes, the trade-offs in both BOM and board size are important. I'm heading toward on board single pole filters, as the Audio Library's 16 bit depth gives a best case dynamic range of 78dB, and the internal anti-decimation filters provide about 50dB, so another 30dB at 6.144MHz is all that's required.

My current iteration has onboard output buffers (MCP664, single 5V rail) but I'm now questioning that, given the Eurorack (10V & DC coupling) leanings of the folks who have expressed interest.

I've shifted my thinking a little from single long headers and bat-wing input and output boards - which lacked mechanical stability - to a separate header for each pair of ins or outs. This allows a modular approach and ribbon cable connections between the main board and each module. I'll keep the footprints in place for the 3.5 mm sockets, as they are really useful for testing. Adding V+/V- and buffered VQ (an opamp and some decoupler caps won't take up much space at all!) rounds out the pins - a total of 9 pins between 2 inputs (I1+/-, I2+/-, V+/-, GND, VA, VQ). It could be brought down to 8 if VA & V+ were jumperable options.

The other add is a header for the AUX input. A daughter board with a CS5341 or similar jumper configurable converter could easily add 2 more input channels.

Paul's comment about "share or manufacture" was interesting. My guess is that there's a market of folks who might want to use one of these, but doesn't / can't build SMD boards. Keeping the BOM small substantially reduces assembly cost, which is a major component of total cost, after the board and the CS chip.

On the main board, I'll provide basic passive filters slightly differently configured from Paul's initial board, jumperable for differential / DC connections.

One more iteration of the basic design and I'll post the draft schematic and a board layout for review.
 
As promised here is a first cut of the schematic and broad layout.

None of the components are optimised at this stage, and the decoupling caps are still sitting in a neat row at the bottom. Most SMD components are 0805 or 1206 to make manual loading for the prototype easier. I'd expect a 20% narrower board with smaller components, optimised layout.

What's driven this iteration:
  • T4 pinouts
  • At least the same basic functions as the original board, same I/O connectors as base
  • Flexibility - additional supply arrangements and headers for input and output expansion boards.
cs42448 layout.PNG

Commentary and suggestions welcome!
 

Attachments

  • cs42448 schematic.pdf
    188.9 KB · Views: 280
Looks good. I have a couple of suggestions.

1,) Use IDC socket footprints for the output headers as well because of the pin orientation with VA/VQ opposite GND. IDC sockets are optional components anyhow, and take up only a little more real-estate than the bare headers.
2.) I question breaking out the AUX port, MCLK is a fast switching signal (22.5 MHz) which might lose integrity quickly over a ribbon cable. I'm not sure there is much use for that extra channel pair either.
3.) Perhaps break out the rest of the Teensy pins by mounting it with a footprint like this breakout board - that would allow including access to an SD card with 4 bit SDIO, and, if not too constrained for space, an SD socket footprint as well. Also perhaps a footprint for some PSRAM or serial Flash like the Audio Shield has. These things are important to better support the Audio library.
4.) It'd be great if at least one side of the board were less than 109mm long, as this is the typical Eurorack rail clearance. Better of course wold be both sides ;-)
 
As promised here is a first cut of the schematic and broad layout.

None of the components are optimised at this stage, and the decoupling caps are still sitting in a neat row at the bottom. Most SMD components are 0805 or 1206 to make manual loading for the prototype easier. I'd expect a 20% narrower board with smaller components, optimised layout.

What's driven this iteration:
  • T4 pinouts
  • At least the same basic functions as the original board, same I/O connectors as base
  • Flexibility - additional supply arrangements and headers for input and output expansion boards.
View attachment 18678

Commentary and suggestions welcome!

When I'm looking at the schematics and compare to T4 pins I wonder if there is an error. It looks like that the MCLK pin is connected to correct T4 pin (D23) but the pins SCLK (BLCK), LRCLK, SDA and SCL should been connected to D21 - D18 in that order meaning they have been shifted to D22 - D19 in schematics.


I would also like to see SD and flash/PSRAM (SOIC8) on the pcb. Also header for UART TX and RX for external MIDI breakout with GND and 3V3 pins, rather in that order, or actually reversed, 3V3 pin 1, then GN, RX and TX, like used on this breakout: https://electricdruid.net/product/midi-inoutthru-pcb/. Then also instead of the single AUX ADC a header for freeDSP connected to I2S2 (all pins, MCLK from I2S1 as I2S2 MCLK is routed to some pad only).

I don't know Teensy well enough but regarding clocking I've read that it provides only odd 44117.65 Hz sample rate. I'd like to run everything on 48kHz though. Has anybody studied/experiment using external MCLK as reference clock to generate the internal clock. There are various registers which AFAIK allow for routing external master clock's (256x Fs, that's 12.288 MHz for 48 kHz sample rate, for 44.1 kHz little bit less) output to SPDIF_EXT_CLK pin (D16 A2 RX4 SCL1) on T4. That would also improve SQ by decreasing jitter (don't know how the digital PLL works on T4, on Raspberry Pi it's pretty bad). Anyway, you could place some know good quality oscillator chip (like NDK NZ2520SD, https://www.ndk.com/en/products/search/clock/1190904_1433.html) with a bypass cap close to that pin, doesn't take much space and if you don't need it just leave it out (it could be an option). I don't have the D-type audio card so I can't test that feature yet.
 
Last edited:
I don't know Teensy well enough but regarding clocking I've read that it provides only odd 44117.65 Hz sample rate.

Just for the sake of correctness.
Your statement is only valid for T3.x.
On the T4.0 the audio lib runs @ 44100Hz.
 
Thanks Mhelin for the commentary,

I'll check the pinouts on the Teensy again. I must admit they are amongst the easiest things to fix - I've been concentrating on the audio ins and outs which are a real headache to route neatly and keep away from digital stuff.

Sadly there's not enough real estate to meet every need. So SD & flash will miss out this time. They are available readily on other stackable boards, so I don't feel too bad about not being able to meet that particular need on this specific board.

You can get to RX/TX directly by stacking a MIDI board on to the Teensy. Same for the other I2S pins to allow freeDSP access (which is a very neat idea).

Neurofun has addressed the 48kHz issue, which is akin to the 24 bit discussion - and well covered already in other posts.

One part of the circuit I'm not yet happy with is the 5V power changeover from VUSB to external. I've simply left it that you shouldn't plug both in a the same time. Not very elegant. I originally included a jumper, as it merely duplicated the "don't plug both in together" instruction. The only other solution I can think of would be a power management chip, but this would be better on the Teensy board than a daughter board.
 
Status
Not open for further replies.
Back
Top