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出现一次。
二、时隙分配与通道数扩展
时隙分配决定了哪个通道占用帧内的哪一段。常见有两种模式:
- 固定时隙模式:每个通道固定占用一个时隙,时隙号与通道号一一对应,配置简单,适合通道数固定的系统。
- 动态/掩码模式:通过寄存器掩码选择哪些时隙有效,允许只启用部分通道,或把多个时隙映射到同一物理通道,适合通道数可变的场景。
通道数扩展的本质是增加帧内时隙数量。当从4通道扩展到8通道时,帧长翻倍,BCLK频率也翻倍(若采样率不变)。例如4通道×32位=128 BCLK,扩展到8通道后变为256 BCLK。设计时必须确认主控的BCLK上限、DMA缓冲区大小以及CODEC是否支持目标时隙数。
| 通道数 | 每时隙位数 | 一帧BCLK数 | fs=48kHz时BCLK | 典型应用 |
|---|---|---|---|---|
| 2 | 32 | 64 | 3.072 MHz | 立体声 |
| 4 | 32 | 128 | 6.144 MHz | 车载语音 |
| 8 | 32 | 256 | 12.288 MHz | 会议阵列 |
| 16 | 32 | 512 | 24.576 MHz | 专业调音台 |
三、同步信号与数据对齐
TDM的同步信号包括帧同步(FSYNC/WS)和位时钟(BCLK)。帧同步的极性、宽度和相对数据的位置决定了数据对齐方式,常见有三种:
- 标准I2S对齐:帧同步比数据延迟一个BCLK,数据在帧同步跳变后的第二个BCLK开始有效,左右通道各占半帧。
- 左对齐(Left Justified):帧同步跳变的同时数据最高位(MSB)立即有效,没有延迟,适合高速传输。
- 右对齐(Right Justified):数据LSB与帧同步边沿对齐,数据在时隙末尾有效,常用于某些DSP接口。
数据对齐错误是TDM调试中最常见的问题。若主控配置为左对齐而CODEC期望I2S对齐,会出现整体移位一位,表现为音量极小或噪声。排查时应先用示波器同时观察FSYNC、BCLK和SDATA三根信号,确认MSB出现的位置与帧同步边沿的关系。
四、菊花链模式:多器件级联
菊花链(Daisy Chain)是TDM在多器件系统中的典型拓扑。多个CODEC或ADC/DAC共用同一组BCLK和FSYNC,数据线则首尾相接:主控的SDATA输出接到第一片器件的输入,第一片器件的输出接到第二片的输入,依次串联。每个器件从帧中“取走”属于自己的时隙,并把剩余数据转发给下一级。
菊花链的优点是节省主控引脚,N个器件只需1根数据线;缺点是延迟累加,且任一器件故障会导致链路中断。设计时要确认每个器件的时隙偏移(Slot Offset)配置正确,否则会出现通道错位。例如8通道系统用两片4通道CODEC级联,第一片占用时隙0~3,第二片必须配置为从时隙4开始读取。
五、典型误区与复盘
误区二:忽略时隙偏移配置。菊花链中第二片器件若未设置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帧结构、时隙分配、同步信号与数据对齐,是设计多通道音频硬件的基础。菊花链模式在节省引脚的同时引入了时隙偏移和延迟管理的新要求,实际项目中应结合示波器测量和寄存器配置逐项验证,才能保证多通道数据在整条链路上正确无误地传输。