I2S/TDM 时钟、格式与 RK3588 控制器

I2S/TDM 时钟、格式与 RK3588 控制器

1. RK3588 驱动

主驱动:sound/soc/rockchip/rockchip_i2s_tdm.c,匹配:

1
rockchip,rk3588-i2s-tdm

旧控制器由 rockchip_i2s.c 支持,RK3588 DTS 中也存在兼容旧 I2S IP 的节点。具体板卡启用哪些节点由 DTS 决定。

2. 信号

  • MCLK:codec/控制器主时钟;
  • BCLK/SCLK:每 bit 时钟;
  • LRCK/FS:frame/左右声道同步;
  • SDI/SDO:数据 lane。

常见:

1
2
BCLK = sample_rate * slots * slot_width
MCLK = sample_rate * mclk_fs

例如 48 kHz × 2 × 32 = 3.072 MHz BCLK。

3. 格式

snd_soc_dai_set_fmt() 组合:

  • I2S;
  • Left/Right Justified;
  • DSP_A/DSP_B;
  • clock inversion;
  • CPU/codec bit/frame clock master。

双方 master 设置冲突会无时钟或总线争用。

4. TDM

set_tdm_slot() 指定:

  • TX/RX slot mask;
  • slots;
  • slot width。

channel 与 slot 不完全等同。多 lane 模式将 slots 分布到多个 data pin,需 DTS pinctrl 和驱动 lane 配置一致。

5. hw_params

驱动典型步骤:

  1. 根据 format 选 sample width;
  2. 配置 channel/slot;
  3. 计算 BCLK div;
  4. 设置 MCLK;
  5. 写 CKR/TXCR/RXCR 等寄存器;
  6. 设置 FIFO/DMA;
  7. 对称 rate/channel 约束。

时钟无法精确整除时应返回错误,不能静默使用错误采样率。

6. Trigger

START/RESUME/PAUSE_RELEASE:

  • 启 DMA request;
  • 启 TX/RX;
  • 清 FIFO/状态;
  • 处理同步启动。

STOP/SUSPEND/PAUSE_PUSH 反向关闭。播放停止过早关时钟可能截断最后样本。

7. TRCM

rockchip_trcm.c 支持 TX/RX common clock / 同步模式,使双向流共享时钟并协调启动。SND_SOC_ROCKCHIP_I2S_TDM 会选择 TRCM 支持。

使用场景:

  • 全双工同步;
  • codec要求连续时钟;
  • 多 DAI 同步。

代价是方向之间参数约束更强。

8. Clock/GRF

RK3588 音频还涉及:

  • CRU clock parents/dividers;
  • reset;
  • GRF/IO mux;
  • pinctrl;
  • assigned-clocks/rates/parents;
  • power domain。

驱动 probe 成功不代表引脚和外部 codec 已有正确时钟。

9. 常见故障

现象 检查
无 BCLK/LRCK master、clock、trigger、pinctrl
速率偏差 MCLK parent/divider、PLL family
声道错位 slot mask/width、format
噪声 word length、inversion、RGM? 实为音频 pin 时序
只单向工作 DMA、SDI/SDO pin、TRCM
hw_params EINVAL rate/format/channel/clock 不可满足

文章互动

阅读 --

留言

0 条留言

正在加载留言…