Document boot, safeload, Adau1701Driver API, AudioService, parameter map, HTTP usage, and cross-link from hardware, firmware, API, and SigmaStudio chapters. Co-authored-by: Cursor <cursoragent@cursor.com>
267 lines
10 KiB
TeX
267 lines
10 KiB
TeX
\chapter{DSP Configuration (SigmaStudio)}
|
|
\label{ch:sigmastudio}
|
|
|
|
This chapter documents how the ADAU1701 is configured in SigmaStudio: the
|
|
hardware settings that must match the board, the audio signal-processing
|
|
chain, and the parameters exposed for runtime control by the ESP32. The
|
|
resulting SigmaStudio export is what the host writes into the DSP's RAM at
|
|
every boot (Section~\ref{sec:hw-adau}). For the firmware driver, safeload
|
|
API, persistence, and HTTP usage, see Chapter~\ref{ch:adau1701}.
|
|
|
|
\section{Overview}
|
|
\label{sec:ss-overview}
|
|
|
|
The DSP program is built once in SigmaStudio and exported as a sequence of
|
|
register writes. Because the board carries no self-boot EEPROM, the ESP32
|
|
replays that sequence over I\textsuperscript{2}C (address 0x34) on every
|
|
power-up. SigmaStudio is therefore used purely to \emph{design and export}
|
|
the program, not to drive the chip in operation.
|
|
|
|
\begin{drkey}[No hardware required to export]
|
|
The whole program can be built and exported offline, without a physical
|
|
ADAU1701 or a USBi programmer connected. A USBi block is placed in the
|
|
Hardware Configuration only because SigmaStudio requires a communication
|
|
channel to compile; it is never used for a real download in this project.
|
|
\end{drkey}
|
|
|
|
\section{Hardware Configuration}
|
|
\label{sec:ss-hwcfg}
|
|
|
|
The Hardware Configuration tab must mirror the board exactly. The key
|
|
settings are collected in Table~\ref{tab:ss-hwcfg}.
|
|
|
|
\begin{table}[htbp]
|
|
\centering
|
|
\begin{tabular}{@{}ll@{}}
|
|
\drhead Setting & Value \\
|
|
\midrule
|
|
Control port (I\textsuperscript{2}C address) & 0x34 (ADDR0/ADDR1 = GND) \\
|
|
Self-boot & Disabled (host RAM load) \\
|
|
System sample rate & 48\,kHz \\
|
|
MCLK & 12.288\,MHz active oscillator \\
|
|
Serial Input format & I\textsuperscript{2}S, 24-bit \\
|
|
Serial Output & \textbf{Master Mode} (ADAU generates clocks) \\
|
|
Word length & 24 bits \\
|
|
RAM Modulo / Program Length & 1x (1024 instructions) \\
|
|
\bottomrule
|
|
\end{tabular}
|
|
\caption{ADAU1701 hardware settings in SigmaStudio.}
|
|
\label{tab:ss-hwcfg}
|
|
\end{table}
|
|
|
|
\subsection{Multipurpose pin (MP) assignment}
|
|
|
|
The ADAU1701 multipurpose pins are assigned to the serial audio signals
|
|
as wired on the board. Table~\ref{tab:ss-mp} lists the assignment; it
|
|
matches the board GPIO map (Section~\ref{sec:hw-gpio}).
|
|
|
|
\begin{table}[htbp]
|
|
\centering
|
|
\begin{tabular}{@{}lll@{}}
|
|
\drhead MP pin & Direction / function & Signal \\
|
|
\midrule
|
|
MP0 & Input Sdata\_in0 & audio from Si4684 (radio) \\
|
|
MP1 & Input Sdata\_in1 & audio from ESP32 \\
|
|
MP4 & Input Lrclk\_in & LRCLK (returned via board link) \\
|
|
MP5 & Input Bclk\_in & BCLK (returned via board link) \\
|
|
MP6 & Output Sdata\_out0 & audio to FSC-BT1035 \\
|
|
MP10 & Lrclk\_out & LRCLK generated (master) \\
|
|
MP11 & Bclk\_out & BCLK generated (master) \\
|
|
\bottomrule
|
|
\end{tabular}
|
|
\caption{Multipurpose pin assignment. MP2, MP3, MP7--MP9 are unused
|
|
(GPIO input, default).}
|
|
\label{tab:ss-mp}
|
|
\end{table}
|
|
|
|
\begin{drnote}[Master clock routing]
|
|
The ADAU1701 is the I\textsuperscript{2}S master: it generates LRCLK and
|
|
BCLK on MP10/MP11. On the board these are wired to MP4/MP5, so the same
|
|
master clocks time the serial inputs. This shared-clock scheme means the
|
|
serial inputs are configured as \emph{clock inputs} even though the ADAU
|
|
itself is master --- the clocks originate at MP10/MP11 and return through
|
|
the board link. All companion chips (Si4684, ESP32, BT1035) are
|
|
I\textsuperscript{2}S slaves.
|
|
\end{drnote}
|
|
|
|
\section{Signal-processing chain}
|
|
\label{sec:ss-chain}
|
|
|
|
The audio flows through a fully stereo chain, built in the Schematic tab
|
|
(Figure~\ref{fig:ss-chain}). Two stereo sources are level-trimmed, mixed,
|
|
equalised, volume-controlled, and peak-limited before reaching the two
|
|
digital outputs that feed the Bluetooth module.
|
|
|
|
\begin{figure}[htbp]
|
|
\centering
|
|
\includegraphics[width=\linewidth]{sigma-chain.jpg}
|
|
\caption{The complete stereo signal-processing chain in SigmaStudio:
|
|
Input \(\rightarrow\) source faders \(\rightarrow\) stereo mixer
|
|
\(\rightarrow\) parametric EQ \(\rightarrow\) master volume
|
|
\(\rightarrow\) per-channel limiters \(\rightarrow\) outputs.}
|
|
\label{fig:ss-chain}
|
|
\end{figure}
|
|
|
|
\subsection{Block-by-block}
|
|
|
|
\begin{table}[htbp]
|
|
\centering
|
|
\small
|
|
\begin{tabular}{@{}lll@{}}
|
|
\drhead Stage & Block & Role \\
|
|
\midrule
|
|
Input & Input (ch. 2--5) & radio L/R, ESP32 L/R \\
|
|
Source trim & Si4674, ESP32 faders & per-source stereo level \\
|
|
Mix & Stereo Mixer & combine sources, keep L/R \\
|
|
EQ & Parametric EQ (2-ch) & high-pass + 5 peaking bands \\
|
|
Volume & Multiple volume (2-ch) & master volume \\
|
|
Protect & Limiter 1 / Limiter 2 & per-channel peak limiting \\
|
|
Output & Output (DIG0, DIG1) & L/R to FSC-BT1035 \\
|
|
\bottomrule
|
|
\end{tabular}
|
|
\caption{Signal-processing blocks and their roles. The chain is stereo
|
|
end to end; L and R never collapse to mono.}
|
|
\label{tab:ss-blocks}
|
|
\end{table}
|
|
|
|
\subsection{Signal flow}
|
|
|
|
\begin{drcode}[Signal flow (stereo)]
|
|
Input ch2/3 (radio L/R) -> Si4674 fader --.
|
|
|-> Stereo Mixer -> Param EQ
|
|
Input ch4/5 (ESP32 L/R) -> ESP32 fader --'
|
|
-> Master Volume -> Limiter L / Limiter R -> Output DIG0 / DIG1 -> BT1035
|
|
\end{drcode}
|
|
|
|
\section{Equaliser}
|
|
\label{sec:ss-eq}
|
|
|
|
The parametric EQ is a two-channel (stereo) block; a single set of bands
|
|
applies identically to L and R. It is configured with one high-pass and
|
|
five peaking bands, all starting flat (0\,dB) so the default response is
|
|
neutral and any tone shaping is an explicit choice made at runtime by the
|
|
firmware.
|
|
|
|
\begin{table}[htbp]
|
|
\centering
|
|
\begin{tabular}{@{}lllll@{}}
|
|
\drhead Band & Type & Frequency & Gain & Q \\
|
|
\midrule
|
|
1 & Butterworth High (high-pass) & 20\,Hz & --- & 1.41 \\
|
|
2 & Peaking & 100\,Hz & 0\,dB & 1.0 \\
|
|
3 & Peaking & 400\,Hz & 0\,dB & 1.0 \\
|
|
4 & Peaking & 1\,kHz & 0\,dB & 1.0 \\
|
|
5 & Peaking & 3\,kHz & 0\,dB & 1.0 \\
|
|
6 & Peaking & 8\,kHz & 0\,dB & 1.0 \\
|
|
\bottomrule
|
|
\end{tabular}
|
|
\caption{Parametric EQ bands. Band~1 removes DC and subsonic content;
|
|
bands 2--6 are the tone controls the firmware adjusts.}
|
|
\label{tab:ss-eq}
|
|
\end{table}
|
|
|
|
\begin{drnote}[Double precision for the high-pass]
|
|
The high-pass sits at 20\,Hz, very low relative to the 48\,kHz sample
|
|
rate, so it uses a double-precision second-order block to avoid
|
|
coefficient-quantisation noise in the bass. The peaking bands can use
|
|
single precision.
|
|
\end{drnote}
|
|
|
|
\section{Master volume and limiters}
|
|
\label{sec:ss-vol}
|
|
|
|
A two-channel volume block provides the master level (0\,dB default). Two
|
|
single-channel limiters --- one per channel --- protect the FSC-BT1035
|
|
input from clipping on peaks. Suggested limiter settings are in
|
|
Table~\ref{tab:ss-lim}.
|
|
|
|
\begin{table}[htbp]
|
|
\centering
|
|
\begin{tabular}{@{}ll@{}}
|
|
\drhead Parameter & Value \\
|
|
\midrule
|
|
RMS TC & 50\,dB/s \\
|
|
Decay & 12\,dB/s \\
|
|
Threshold & $-1$\,dB (protective) \\
|
|
\bottomrule
|
|
\end{tabular}
|
|
\caption{Per-channel limiter settings. The limiter is left fixed (not
|
|
runtime-adjustable).}
|
|
\label{tab:ss-lim}
|
|
\end{table}
|
|
|
|
\section{Runtime-controllable parameters}
|
|
\label{sec:ss-runtime}
|
|
|
|
The firmware controls a subset of the DSP at runtime via safeload writes.
|
|
These are the parameter cells whose addresses must be recorded from the
|
|
SigmaStudio export (Section~\ref{sec:ss-export}).
|
|
|
|
\begin{table}[htbp]
|
|
\centering
|
|
\begin{tabular}{@{}lll@{}}
|
|
\drhead Control & Block & Runtime-adjustable \\
|
|
\midrule
|
|
Source levels (2) & Si4674 / ESP32 faders & yes \\
|
|
EQ bands 2--6 & Parametric EQ & yes (gain/freq/Q) \\
|
|
Master volume & Multiple volume & yes \\
|
|
High-pass (band 1) & Parametric EQ & fixed \\
|
|
Limiters & Limiter 1 / 2 & fixed \\
|
|
\bottomrule
|
|
\end{tabular}
|
|
\caption{Parameters exposed to the firmware. Fixed blocks are set once
|
|
in the program and never written at runtime.}
|
|
\label{tab:ss-runtime}
|
|
\end{table}
|
|
|
|
\section{Virtual enhancements (stereo depth and bass boost)}
|
|
\label{sec:ss-enhancements}
|
|
|
|
The SigmaStudio export does not include dedicated stereo widener or bass
|
|
boost blocks. Firmware~0.5.0 maps enhancement levels (0--100) onto the
|
|
existing Param EQ1 bands at runtime:
|
|
|
|
\begin{itemize}
|
|
\item \textbf{Bass enhance} --- peaking boost at 100\,Hz (+9\,dB max)
|
|
and 400\,Hz (+3\,dB max).
|
|
\item \textbf{Stereo enhance} --- slight 1\,kHz cut, plus 3\,kHz and
|
|
8\,kHz lift for a wider, more present image. This is a
|
|
psychoacoustic curve, not mid/side processing.
|
|
\end{itemize}
|
|
|
|
Enhancement levels are stored in \texttt{AudioProfile::enhancements} and
|
|
applied by \texttt{core::applyEnhancementsToEq()} before safeload. Base EQ
|
|
band settings in NVS are preserved; overlays replace affected bands only
|
|
while the corresponding level is greater than zero.
|
|
|
|
\begin{drcaution}[Use safeload for live changes]
|
|
All runtime updates to the volume, source levels, and EQ bands must go
|
|
through the ADAU1701 safeload mechanism. Writing parameter cells directly
|
|
while audio is playing produces audible clicks.
|
|
\end{drcaution}
|
|
|
|
\section{Exporting the program}
|
|
\label{sec:ss-export}
|
|
|
|
With the schematic complete, the program is exported for the firmware:
|
|
|
|
\begin{enumerate}
|
|
\item Enable \emph{Action \(\rightarrow\) Enable Short Parameter Name
|
|
for Export} so the exported cell names are concise.
|
|
\item \emph{Action \(\rightarrow\) Export System Files}, and choose an
|
|
output folder.
|
|
\end{enumerate}
|
|
|
|
The export produces the program data (control registers, program RAM, and
|
|
parameter RAM) as byte sequences, plus the symbolic parameter addresses.
|
|
The firmware's ADAU1701 driver replays the program data over
|
|
I\textsuperscript{2}C at boot, and uses the parameter addresses for
|
|
safeload updates.
|
|
|
|
\begin{drnote}[No download needed]
|
|
Since there is no ADAU1701 attached during development, do \emph{not} use
|
|
\emph{Link Compile Download} (it would fail trying to reach the chip).
|
|
\emph{Export System Files} compiles the schematic and writes the files
|
|
directly.
|
|
\end{drnote}
|