Record the WM8960 mixer state and the audio switch gotcha
Capture works: singing at arm's length reads -34 to -49 dBFS RMS with peaks at -18 dBFS and no clipping. The earlier all-zero recordings were the HAT's hardware Audio ON/OFF switch being off; the codec answers on I2C and looks fully configured either way. Save the stored mixer state (capture +18 dB, input mixer boost on) in pi/wm8960_asound.state. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AFN8nRRCiDiMN7ChBpHJhs
This commit is contained in:
+13
-12
@@ -62,20 +62,21 @@ printed enclosure, speakers. Work until those arrive is limited to what the Pi,
|
||||
`opencv-python-headless==4.10.0.84` with `numpy<2` (system NumPy stays 1.26.4 for ROS), and
|
||||
`robot-env.sh` puts the venv first on `PYTHONPATH`; YuNet also needs input sides that are multiples
|
||||
of 32. Tested on a sample image and on a live frame (one face found, upright, no flip needed).
|
||||
- **Audio: card works, microphones read digital silence (open).** The stock `wm8960-soundcard`
|
||||
overlay fails every stream with `wm8960: No MCLK configured` on Ubuntu 24.04: it puts the 12.288 MHz
|
||||
fixed clock on the sound card's codec link, but the codec driver reads `mclk` from its own node.
|
||||
- **Audio capture works (verified 2026-10-04).** The stock `wm8960-soundcard` overlay fails every
|
||||
stream with `wm8960: No MCLK configured` on Ubuntu 24.04: it puts the 12.288 MHz fixed clock on the
|
||||
sound card's codec link, but the codec driver reads `mclk` from its own node.
|
||||
`pi/overlays/hermes-wm8960.dts` is the stock overlay plus `clocks`/`clock-names` on the codec node;
|
||||
`pi/install-audio-overlay.sh` compiles it to `/boot/firmware/overlays/hermes-wm8960.dtbo`, sets
|
||||
`dtparam=audio=off` and `dtoverlay=hermes-wm8960`. With it, capture opens at 8-48 kHz. Address
|
||||
the card by name (`hw:CARD=wm8960soundcard,DEV=0`): its index changes (it was card 1, then 0).
|
||||
But every recording is exactly zero (no noise floor), with every mixer path on and gains maxed.
|
||||
Checked: DAPM shows ADCs, input mixers, boost mixers and LINPUT1/RINPUT1 on; registers
|
||||
`R25=0xfc`, `R47=0x30`, `R32/33=0x108`; MCLK 12.288 MHz and BCLK 1.536 MHz running; GPIO18-21 in
|
||||
`alt0` for the I2S; setting `ALRCGPIO` (R9 bit 6) over I2C made no difference. Not yet checked:
|
||||
the HAT's hardware **Audio ON/OFF slide switch** position, MICBIAS, a DAC-to-ADC loopback.
|
||||
`Left/Right Input Mixer Boost Switch` default to off and must be turned on for the mic path.
|
||||
No speakers on hand, so playback is untested.
|
||||
`dtparam=audio=off` and `dtoverlay=hermes-wm8960`. Capture then opens at 8-48 kHz. Address the
|
||||
card by name (`hw:CARD=wm8960soundcard,DEV=0`): its index changes (it was card 1, then 0).
|
||||
- **The HAT's hardware Audio ON/OFF slide switch (right edge, by the "Audio" label) must be ON.**
|
||||
With it off, the codec still answers on I2C and every software check looks right, but all
|
||||
recordings are exactly zero. That cost an hour of debugging; check it first.
|
||||
- Mixer: `Left/Right Input Mixer Boost Switch` default to off and must be on. Settings in use:
|
||||
Capture 47/47 (+18 dB), `Left/Right Input Boost Mixer LINPUT1/RINPUT1` volume 1, input mixer boost
|
||||
on. Singing at arm's length: RMS -34 to -49 dBFS, peaks -18 dBFS, no clipping, channels within
|
||||
1-2 dB. Saved with `alsactl store` and exported as `pi/wm8960_asound.state`; restoring at boot is
|
||||
not yet verified. No speakers on hand, so playback is untested.
|
||||
- Not done: PWM (waits for servos). Ask before rebooting the Pi.
|
||||
|
||||
## Package 0b (USB link): Pi side and talos side working
|
||||
|
||||
Reference in New Issue
Block a user