Pin Maps Belong in the Bring-Up Evidence
One wrong GPIO can imitate a codec, driver or clocking failure.
One wrong GPIO can imitate a codec, driver or clocking failure.
Network packets arrive when the network allows; speakers need samples when the audio clock demands them.
RTP arrived in bursts even when packet sequence was mostly healthy, so directly pacing I2S from receive callbacks made network jitter audible.
Prove clocks, framing, routing and gain before judging microphones, speakers or enclosure acoustics.
Echo cancellation only has a useful reference when the reference represents what the loudspeaker actually played.
A large first callback-to-speaker delay suggested work was accumulating between RTP reception and physical output.
MCLK, BCLK and LRCK have to agree before higher-level audio debugging means anything.
DMA behavior after underrun can shape what a user hears during gaps.
Digital audio bugs are often scheduling and buffer bugs that happen to come out of a speaker.
Microphone sampling, RTP packetization, network arrival and speaker playout each have their own timing domain.
The firmware sounded worse while producing the very diagnostics intended to explain it.
Crackle and cutouts needed a device-side timing metric that was closer to the DAC than packet arrival.
A clean frequency response is irrelevant if the playback path periodically stops feeding samples.
A call can sound excellent for thirty seconds while two media clocks slowly walk apart.
Increasing jitter tolerance seemed like the obvious response to bursty packet arrival.
Before tuning echo cancellation I verified that the algorithm was receiving the microphone and far-end reference channels I thought it was.