CS42448 board ( 6 audio inputs / 8 outputs ) ?

Hello everyone!

I have the following question:

Both the CS42448 add-on board from @PaulStoffregen and the Aliexpress CS42448 boards use basic passive RC output filters with tiny SMD components. However, those components are physically too small to handle output levels above -20 dBFS without adding distortion (except between 500 and 1000 Hz).

Also, the CS42448 outputs are internally buffered and provide ~0.9 V RMS with a 1.5 V DC offset. So, without an active op-amp stage, the board must be connected to a high-impedance input, and you're stuck with a relatively low signal level and roughly half the potential dynamic range.

In theory, the CS42448 can drive a line input directly (via a DC-blocking capacitor), and the ~1.1 V RMS may be technically enough in terms of volume. But can we really talk about high-quality audio output under these conditions?

In summary, with such weak RC output stages, both boards effectively cripple the performance of the CS42448 DAC:
– significant distortion should appear at levels above -20 dBFS due to undersized SMD components,
– the output voltage is too low, cutting the dynamic range in half,
– and overall sound quality should suffer greatly as a result.

Can someone please confirm or debunk these concerns? I'd really appreciate any insights.

Using the balanced differential outputs could have saved the situation, since they provide double the voltage swing and better noise rejection — but unfortunately, neither board exposes the negative signal pins (INx−/OUTx−) from the CS42448, making it impossible to use the chip’s full differential capabilities without hardware modifications.
 
I think Paul's board was never intended to be more than proof-of-concept, and I've no idea what (if any) the design criteria were for the one currently available from Aliexpress. So it's entirely likely that the shortcomings you note are indeed present.

Much of this is made academic by the fact that the CS42448 is obsolete, so no-one should be basing designs around it at this point anyway. I've done a proof-of-concept based on the PCM3168, and there's an ongoing development using multiple TLV320AIC3104s which by the look of it is probably your best bet if you want a reasonable degree of quality; apart from anything else, you're free to choose your own signal conditioning.
 
I think Paul's board was never intended to be more than proof-of-concept, and I've no idea what (if any) the design criteria were for the one currently available from Aliexpress. So it's entirely likely that the shortcomings you note are indeed present.
Thanks a lot for the quick reply!

Please don't get me wrong — I'm not trying to criticize Paul's board at all. I'm really just trying to figure out if my theoretical concerns are grounded in practice — or if maybe I'm overthinking things. Perhaps these tiny SMD components in the output RC filters are good enough for DIY HiFi-level audio (at least for home use), and maybe modern amplifiers can easily cope with a lower input voltage without adding significant distortion.

To be honest, I'm about 20 years behind on digital audio tech. I'm just trying to catch up and refresh my skills, play with modern DSP features like active crossovers and bi-amping, and at the same time build a small, digital-first audio setup that lives somewhere in the "budget HiFi" range — but still sounds decent and is fully integrated into my smart home (based on ESPHome + Home Assistant).

The problem I’m running into is that there just aren’t many affordable, multichannel DAC modules available these days — which are crucial for bi-amping and multi-zone setups. Sure/Wondom ADAU1701 boards are decent for prototyping, but the onboard DACs fall short of even entry-level HiFi performance, and the amplifier ICs used there are similarly underwhelming.

So now I’m a bit stuck trying to find something that hits the sweet spot — maybe even something DIY-friendly — and while digging around DAC expansions for Teensy, I stumbled upon those CS42448-based modules on Aliexpress. They seemed like a promising budget option… until I looked closer at the output stage.

Thanks again for your reply! Being able to define your own analog signal path makes a huge difference.
 
However, those components are physically too small to handle output levels above -20 dBFS without adding distortion (except between 500 and 1000 Hz).
Firstly if the capacitors are type-II ceramic they will add distortion that's very measurable across a wide range of levels, this is cured by changing to type-I ceramic or plastic-film caps.

Resistors should be thin-film, not thick-film for low distortion, and larger is better for such resistors in general, but its a minor issue compared to using the wrong capacitor type. Type-II ceramic are _highly_ non-linear, exhibiting cross-over distortion amongst others - they can change a distortion floor from -100dB to -40dB or worse.

Capacitor size is only indirectly an issue - type-I ceramic are larger for a given capacitance and voltage than type-II.

In general an input network for an audio signal requires about 4 or even 5 components to work well, as it needs to block DC, block RF, and have its DC-blocking capacitor bled to ground on the connector side on a time constant of a few seconds.
 
Hello guys!
I have a problem
@alfa66 I've experimented with one of those boards from ali express, they work fine with Teensy.

I captured a few details of the connections on my board - it look exactly the same as your board.

I have it running with the 6 ins and 8 out with breadboard wiring (you'd want to tidy up the wiring and keep it short if you're making any sort of permanent installations).

I've dumped the details below - any question just shout out.

Cheers Paul


Main Connector
View attachment 31356

Master Control Connector
View attachment 31357

A picture of it connected
View attachment 31358

A test program
Code:
#include <Audio.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <SerialFlash.h>

// GUItool: begin automatically generated code
AudioInputTDM            tdm1;           //xy=233,172
AudioOutputTDM           tdm2;           //xy=605,170
AudioConnection          patchCord1(tdm1, 0, tdm2, 0);
AudioConnection          patchCord2(tdm1, 0, tdm2, 12);
AudioConnection          patchCord3(tdm1, 2, tdm2, 2);
AudioConnection          patchCord4(tdm1, 2, tdm2, 14);
AudioConnection          patchCord5(tdm1, 4, tdm2, 4);
AudioConnection          patchCord6(tdm1, 6, tdm2, 6);
AudioConnection          patchCord7(tdm1, 8, tdm2, 8);
AudioConnection          patchCord8(tdm1, 10, tdm2, 10);
AudioControlCS42448      cs42448_1;      //xy=273,405
// GUItool: end automatically generated code


void setup() {
  AudioMemory(1000);
  Serial.begin(38400);
  while (!Serial)
    ;
  if (cs42448_1.enable() && cs42448_1.volume(0.7)) {
    Serial.println("configured CS42448");
  } else {
    Serial.println("failed to config CS42448");
  }
}

void loop() {}

View attachment 31359
Hi Houston
I'm using the same board. But I just can't get the signal through TDM input. The input signal of TDM is two identical sine wave from a function generator which Vpp is 1v. I have tried using library built-in sine wave sending toTDM output and I can see it. So I guess the problem is at ADC. btw the ADC mode I'm using now is single-ended.
 
How have you connected the sig-gen output to the ADC inputs? Ideally, provide a schematic, not just a description in words...
 
Thanks for replying
the schematics is like this.
A1IN+ ---> 3.5 Right ---> Sine wave (yellow in scope)
A2IN+ ---> 3.5 Left ---> Sine wave (pink in scope)
GND ---> 3.5 GND ---> cable shield
Code:
#include <Audio.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <SerialFlash.h>

// --- TDM ---
AudioInputTDM      tdmIn;       // TDM in
AudioOutputTDM     tdmOut;      // TDM out

AudioConnection l0(tdmIn, 0, tdmOut, 0);
AudioConnection l2(tdmIn, 2, tdmOut, 2);

AudioControlCS42448 cs;
const uint8_t CODEC_ADDR = 0x48;

void setup() {
  delay(200);
  Serial.begin(115200);
  Wire.begin();
  AudioMemory(100);      

  cs.setAddress(CODEC_ADDR);
  bool ok = cs.enable();
  Serial.printf("cs42448.enable(): %s\n", ok ? "OK" : "FAIL");
 
  cs.volume(0.8f);  

void loop() {
}

Screenshot 2025-09-19 at 10.11.53 PM.png
IMG_0905.jpg

How have you connected the sig-gen output to the ADC inputs? Ideally, provide a schematic, not just a description in words...
 
Ah, OK, paying proper attention now ... it's that board. You can find some information on how to set it up to work with the Teensy at this post - it's possibly worth skimming the whole thread.

One thing that occurs to me is the clock wiring. The CS42448 has separate BCLK and LRCLK pins for the DAC and ADC, which need to be wired - that's a reasonably unusual thing to need to do. Connect BCLK_OUT0 to BCLK_IN0, and LRCLK_OUT0 to LRCLK_IN0 (these are board connector pin names, not chip). You'll see I did it with very fine wires to the resistors, but as long as the wires are short enough you should be OK.

It sounds like you have AD0 and AD1 wired, and pull-ups on SCL and SDA, since you have the DAC working.
 
Ah, OK, paying proper attention now ... it's that board. You can find some information on how to set it up to work with the Teensy at this post - it's possibly worth skimming the whole thread.

One thing that occurs to me is the clock wiring. The CS42448 has separate BCLK and LRCLK pins for the DAC and ADC, which need to be wired - that's a reasonably unusual thing to need to do. Connect BCLK_OUT0 to BCLK_IN0, and LRCLK_OUT0 to LRCLK_IN0 (these are board connector pin names, not chip). You'll see I did it with very fine wires to the resistors, but as long as the wires are short enough you should be OK.

It sounds like you have AD0 and AD1 wired, and pull-ups on SCL and SDA, since you have the DAC working.
yeah the board connector pin name and chip is confusing. After reading couple threads about CS42448 and its data sheet. I'm sure the DAC is running normal. The clock looks normal (MCLK_22.58 MHz / LRCLK 11.29 MHz / BCLK 44.1 KHz). Trying to figure out is there anything missing.
The whole wire I have connected is
Teensy 4.1CS42448__board connector pin
5V5V
GNDGND
MCLK1 (pin23)MCLK_OUT
LRCLK1 (pin20)LRCLK_O0 / LRCLK_IN0
BLCK1 (pin21)BLCK_O0 / BCLK_IN0
SCL (pin19)SCL (w 2.2K ohm to 3.3V)
SDA (pin18)SDA (same as SCL)
OUT1A (pin7)SD_OUT0
IN1 (pin8)SD_IN0
AD0 / AD1 to GND (address 0x48)

IMG_0906.jpg
 
Last edited:
Back
Top