4. TDM协议详解

TDM(Time Division Multiplexing,时分复用)是I2S协议在多通道音频场景下的自然扩展。I2S本质上只传输两个声道,当系统需要4路、8路甚至16路以上音频通道时,TDM通过在同一根数据线上按时间切片分配时隙,让多个通道共享一条数据线。理解TDM的关键在于掌握帧结构、时隙分配规则、同步信号时序以及数据对齐方式,这些要素直接决定了多通道音频系统能否正确采样和回放。

一、TDM帧结构:一帧承载所有通道

TDM把采样周期划分为一个“帧”(Frame),一帧内包含若干个“时隙”(Time Slot),每个时隙承载一个通道的一个采样点。帧同步信号(Frame Sync,也称WS或LRCK)标记一帧的起始,位时钟(BCLK)则驱动每一位数据的移位。假设系统有N个通道,每个采样点量化位数为W位,则一帧至少需要N×W个BCLK周期。

以8通道、24位采样为例,一帧需要8×24=192个BCLK。实际设计中常把每个时隙补齐到32位(便于对齐和DMA搬运),此时一帧为8×32=256个BCLK。帧同步信号的频率等于采样率fs,例如fs=48kHz时,帧同步每20.83μs出现一次。

核心公式:一帧BCLK数 = 通道数 × 每时隙位数;BCLK频率 = 帧同步频率 × 一帧BCLK数。

二、时隙分配与通道数扩展

时隙分配决定了哪个通道占用帧内的哪一段。常见有两种模式:

  • 固定时隙模式:每个通道固定占用一个时隙,时隙号与通道号一一对应,配置简单,适合通道数固定的系统。
  • 动态/掩码模式:通过寄存器掩码选择哪些时隙有效,允许只启用部分通道,或把多个时隙映射到同一物理通道,适合通道数可变的场景。

通道数扩展的本质是增加帧内时隙数量。当从4通道扩展到8通道时,帧长翻倍,BCLK频率也翻倍(若采样率不变)。例如4通道×32位=128 BCLK,扩展到8通道后变为256 BCLK。设计时必须确认主控的BCLK上限、DMA缓冲区大小以及CODEC是否支持目标时隙数。

通道数每时隙位数一帧BCLK数fs=48kHz时BCLK典型应用
232643.072 MHz立体声
4321286.144 MHz车载语音
83225612.288 MHz会议阵列
163251224.576 MHz专业调音台

三、同步信号与数据对齐

TDM的同步信号包括帧同步(FSYNC/WS)和位时钟(BCLK)。帧同步的极性、宽度和相对数据的位置决定了数据对齐方式,常见有三种:

  1. 标准I2S对齐:帧同步比数据延迟一个BCLK,数据在帧同步跳变后的第二个BCLK开始有效,左右通道各占半帧。
  2. 左对齐(Left Justified):帧同步跳变的同时数据最高位(MSB)立即有效,没有延迟,适合高速传输。
  3. 右对齐(Right Justified):数据LSB与帧同步边沿对齐,数据在时隙末尾有效,常用于某些DSP接口。

数据对齐错误是TDM调试中最常见的问题。若主控配置为左对齐而CODEC期望I2S对齐,会出现整体移位一位,表现为音量极小或噪声。排查时应先用示波器同时观察FSYNC、BCLK和SDATA三根信号,确认MSB出现的位置与帧同步边沿的关系。

调试口诀:先看帧同步频率是否等于fs,再数一帧BCLK数是否等于通道数×时隙位数,最后确认MSB相对帧同步边沿的位置。

四、菊花链模式:多器件级联

菊花链(Daisy Chain)是TDM在多器件系统中的典型拓扑。多个CODEC或ADC/DAC共用同一组BCLK和FSYNC,数据线则首尾相接:主控的SDATA输出接到第一片器件的输入,第一片器件的输出接到第二片的输入,依次串联。每个器件从帧中“取走”属于自己的时隙,并把剩余数据转发给下一级。

菊花链的优点是节省主控引脚,N个器件只需1根数据线;缺点是延迟累加,且任一器件故障会导致链路中断。设计时要确认每个器件的时隙偏移(Slot Offset)配置正确,否则会出现通道错位。例如8通道系统用两片4通道CODEC级联,第一片占用时隙0~3,第二片必须配置为从时隙4开始读取。

TDM帧结构与菊花链拓扑示意 一帧(8通道 × 32位 = 256 BCLK) CH0 CH1 CH2 CH3 CH4 CH5 CH6 CH7 FSYNC(帧同步,频率 = fs) BCLK(位时钟,256 × fs) 菊花链拓扑(两片4通道CODEC级联) 主控 SoC TDM Master CODEC A 时隙 0~3 CODEC B 时隙 4~7 SDATA SDATA BCLK + FSYNC 共享总线

五、典型误区与复盘

误区一:认为TDM通道数可以无限扩展。实际上BCLK频率受主控和CODEC上限约束,16通道@48kHz已需24.576MHz BCLK,再翻倍会超出多数器件能力。
误区二:忽略时隙偏移配置。菊花链中第二片器件若未设置Slot Offset,会重复读取第一片的时隙,导致通道数据错乱。
误区三:把帧同步宽度设错。部分CODEC要求帧同步为1个BCLK宽,部分要求半个帧宽,配置不匹配会导致帧边界识别错误。

复盘一个8通道会议阵列案例:主控配置为8时隙×32位,CODEC A和B各4通道菊花链。调试时发现CH4~CH7全是噪声,检查发现CODEC B的Slot Offset仍为默认0,改为4后恢复正常。这说明TDM调试必须逐项核对帧长、时隙偏移和对齐方式,任何一项偏差都会在通道边界处暴露为数据错位。

# 典型TDM配置参数(以8通道、48kHz、32位时隙为例)
sample_rate   = 48000
channels      = 8
slot_width    = 32
frame_bclk    = channels * slot_width   # 256
bclk_freq     = frame_bclk * sample_rate # 12.288 MHz
fsync_freq    = sample_rate              # 48 kHz
data_offset   = 1                        # I2S标准对齐,MSB延迟1个BCLK
slot_offset_A = 0                        # CODEC A 起始时隙
slot_offset_B = 4                        # CODEC B 起始时隙

掌握TDM帧结构、时隙分配、同步信号与数据对齐,是设计多通道音频硬件的基础。菊花链模式在节省引脚的同时引入了时隙偏移和延迟管理的新要求,实际项目中应结合示波器测量和寄存器配置逐项验证,才能保证多通道数据在整条链路上正确无误地传输。