1. 项目概述
在嵌入式音频处理系统的硬件设计里,串行音频接口(Serial Audio Interface)是连接数字信号处理器(DSP)与外部编解码器(Codec)、数字音频接收器(DIR)等器件的生命线。它直接决定了音频数据的吞吐量、延迟和最终音质。今天,我们就来深入拆解飞思卡尔(现恩智浦)Symphony系列中的明星产品——DSP56720和DSP56721多核音频处理器。这两颗芯片在专业音频设备、汽车音响和广播设备中应用广泛,其核心的音频接口能力,尤其是增强型串行音频接口(Enhanced Serial Audio Interface, ESAI),是设计者必须吃透的关键。
简单来说,ESAI就是DSP的“嘴巴”和“耳朵”。它负责将DSP内部处理完的数字音频流,精准、同步地“说”给外部的DAC(数模转换器);同时,也能把外部ADC(模数转换器)采集的音频数据,准时、无误地“听”进来。DSP56720/56721的强大之处在于,它集成了多达四个独立的ESAI接口组(ESAI, ESAI_1, ESAI_2, ESAI_3),并且支持灵活的引脚复用和引脚交换功能,这为构建复杂的多通道、多采样率音频系统提供了极大的硬件灵活性。理解每个引脚的功能、配置选项以及它们在不同工作模式下的行为,是成功驱动这块芯片、发挥其多核音频处理潜力的第一步。无论你是正在评估这颗芯片的硬件工程师,还是负责底层驱动开发的软件工程师,这篇针对ESAI接口信号的详解与配置指南,都将为你扫清障碍。
2. ESAI接口架构与核心概念解析
在直接翻阅数据手册那密密麻麻的引脚表格之前,我们需要先建立起对ESAI接口的整体认知。这就像看地图前先了解地形图例一样,能让你后续的“导航”事半功倍。
2.1 多核架构下的ESAI分组与归属
DSP56720和DSP56721都是双核架构(DSP Core-0 和 DSP Core-1)。为了最大化并行处理能力和I/O带宽,四个ESAI接口组被巧妙地分配给了两个核心:
- ESAI 和 ESAI_1:归属于DSP Core-0。你可以理解为Core-0拥有两套完整的音频输入输出“装备”。
- ESAI_2 和 ESAI_3:归属于DSP Core-1。同样,Core-1也拥有两套独立的音频接口。
这种分配方式允许两个核心独立、并发地处理不同的音频流。例如,Core-0的ESAI可以连接主ADC/DAC处理主通路信号,而ESAI_1可以连接一个辅助的蓝牙音频接收芯片;同时,Core-1的ESAI_2和ESAI_3可以分别处理环绕声的后置声道和低频效果声道。这种硬件级的隔离,避免了核间资源争抢,是实现复杂音频算法流水线的基石。
注意:虽然接口组归属于特定核心,但通过芯片内部的总线互连和内存共享机制,一个核心处理的数据,理论上可以通过内部DMA或核间通信传递给另一个核心使用。但在硬件引脚连接和初始配置时,必须明确其归属关系。
2.2 引脚交换(Pin Switching)功能:灵活性的体现
这是一个非常实用且容易忽略的高级功能。数据手册中提到:“ESAI can switch pins with ESAI_2, and ESAI_1 can switch pins with ESAI_3. The switch controls are pin by pin.”
这意味着什么?它意味着物理引脚的功能不是一成不变的。例如,原本属于Core-0的ESAI接口的某个数据输出引脚(如SDO0),可以通过配置,将其信号“路由”到物理上属于Core-1的ESAI_2接口的某个引脚上去。这种交换是按引脚(pin by pin)控制的,提供了极致的布线灵活性。
应用场景举例:假设你的PCB板已经设计好,将一块外部Codec连接到了Core-1的ESAI_2引脚上。但后来软件规划变更,希望由Core-0来驱动这块Codec。如果没有引脚交换功能,你可能需要飞线或改板。有了这个功能,你只需在软件中配置相应的引脚交换控制寄存器,就能将Core-0的ESAI信号“映射”到连接着Codec的物理引脚上,从而让Core-0来控制它。这极大地增强了硬件设计的容错性和后期软件调整的便利性。
2.3 理解信号的三重身份:ESAI、GPIO与S/PDIF
观察任何一个ESAI引脚(例如HCKR)的描述,你都会发现它具备多重身份。这是现代高性能MCU/DSP的典型特征,旨在有限的引脚数量下提供最多的功能。
- 主功能(Primary Function):作为ESAI接口的一部分。例如,
HCKR作为接收器高频时钟,可以是输入(接受外部时钟源)或输出(为外部器件提供主时钟)。 - GPIO功能:当ESAI功能未被启用时,该引脚可以配置为通用输入/输出(GPIO)引脚,甚至可以设置为内部断开(高阻态)以节省功耗。复位后,所有相关引脚默认处于“GPIO Disconnected”状态,即内部上拉/下拉电阻可能有效,但引脚功能未激活,处于安全的高阻输入态。
- 复用功能(Alternate Function):部分引脚还复用了其他专用功能,最典型的就是S/PDIF(Sony/Philips Digital Interface)相关信号。例如,
SRCK引脚可以作为S/PDIF接收时钟输出,STCLK可以作为S/PDIF发射时钟输入。这意味着同一个物理引脚,既可以作为标准的ESAI同步时钟,也可以作为S/PDIF这种单线数字音频接口的时钟信号。
配置的层级关系:通常,芯片会有一个顶层的“引脚复用控制寄存器”(Pin Mux Control Register)。你需要先在这个寄存器中,选择该引脚是用于“ESAI”功能、“GPIO”功能还是“S/PDIF”功能。当选定了“ESAI”功能后,才需要进一步去配置ESAI模块内部的寄存器(如TCCR、RCCR),来详细定义这个引脚在ESAI模式下的具体行为(例如,是输入还是输出,是时钟还是帧同步)。
3. 核心信号引脚详解与功能配置
现在,我们深入到每个信号的具体含义。为了清晰起见,我们将信号按功能分类进行解读,而不是完全按照手册的表格顺序。我们会以ESAI组(即Core-0的第一个接口)的信号为例进行详细说明,其他组(ESAI_1, _2, _3)的信号命名规则完全一致,只是前缀不同。
3.1 时钟信号(Clock Signals):系统的心跳
时钟信号是串行接口同步的基石,ESAI的时钟设计较为灵活,分发射和接收两套。
HCKR (High Frequency Clock for Receiver) & HCKT (High Frequency Clock for Transmitter)
- 功能:高频主时钟。它们的主要作用是提供比位时钟(SCKR/SCKT)频率更高的时钟源,通常用于驱动内部采样率转换器或作为外部音频器件(如高性能DAC)的系统主时钟(MCLK)。
- 方向:可编程为输入或输出。
- 输入模式:接收外部提供的高质量、低抖动的时钟源,以确保整个音频系统的时钟同步于一个高精度主时钟。这在专业音频系统中很常见。
- 输出模式:DSP内部的锁相环(PLL)产生一个稳定的高频时钟,通过此引脚输出,供给外部音频器件使用。例如,可以输出一个12.288MHz的时钟给外部Codec作为主时钟。
- 关联引脚:
PC2(HCKR),PC5(HCKT)。当配置为GPIO时使用。 - 配置要点:是否使用HCKR/HCKT取决于你的系统时钟架构。如果外部有专用的时钟发生器,通常配置为输入。如果DSP作为主时钟源,则配置为输出。需注意其频率与音频采样率、位时钟的倍数关系。
SCKR (Receiver Serial Clock) & SCKT (Transmitter Serial Clock)
- 功能:位时钟(Bit Clock, BCLK)。这是数据位传输的节拍器,每个上升沿或下降沿(可配置)锁存一位数据。SCKR用于接收器,SCKT用于发射器。
- 方向与模式:其行为高度依赖于ESAI的工作模式(同步/异步)。
- 异步模式 (SYN=0):SCKR和SCKT独立工作。SCKR是所有启用接收器的时钟(输入/输出),SCKT是所有启用发射器的时钟(输入/输出)。这意味着收发可以有不同的位时钟源。
- 同步模式 (SYN=1):SCKT作为所有启用发射器和接收器的共同位时钟。此时,SCKR引脚的功能发生变化,它不再作为接收时钟,而是被复用为串行标志引脚(Serial Flag 0)。这个标志引脚可以配置为输入(IF0)或输出(OF0),用于传输控制或状态信号(如一个通道静音标志)。
- 关联引脚:
PC0(SCKR),PC3(SCKT)。 - 配置要点:这是最关键的配置之一。你需要根据连接的从设备(Slave)或主设备(Master)角色来决定方向。例如,DSP作为Master时,SCKT应配置为输出,以驱动从设备;作为Slave时,则配置为输入,接收来自主设备的时钟。同时,要根据音频数据的位宽(如16位、24位、32位)和采样率,正确计算并设置位时钟的频率。
3.2 帧同步信号(Frame Sync Signals):数据帧的起跑线
帧同步信号标志着一个音频数据帧(通常对应左/右声道的一个采样点)的开始。
FSR (Frame Sync for Receiver) & FST (Frame Sync for Transmitter)
- 功能:帧同步(Frame Sync, FS),也称为左右声道时钟(LRCLK或WS)。它在一个采样周期内电平变化一次(例如,高电平代表左声道,低电平代表右声道),告诉接收方当前传输的是哪个声道的数据。
- 方向与模式:同样受SYN位控制。
- 异步模式 (SYN=0):FSR和FST独立。FSR用于所有接收器,FST仅用于所有发射器。
- 同步模式 (SYN=1):FST作为所有发射器和接收器的共同帧同步信号。此时,FSR引脚的功能被复用为串行标志引脚1(Serial Flag 1)或发射器外部缓冲使能控制(TEBE)。作为标志引脚时,可配置为IF1或OF1。
- 关联引脚:
PC1(FSR),PC4(FST)。 - 配置要点:需要配置帧同步的极性(高有效还是低有效)、长度(一个脉冲宽度还是一个位时钟周期)以及相对于数据的位置(在数据之前还是之后)。这些必须与外部音频器件严格匹配。在I2S标准格式下,帧同步信号在数据开始前的一个位时钟周期变化。
3.3 数据信号(Data Signals):音频的载体
数据信号是音频比特流的物理通道。ESAI支持多达6个发射数据引脚(SDO0-SDO5)和4个接收数据引脚(SDI0-SDI3),提供了强大的多通道传输能力。
SDO0-SDO5 (Serial Data Output)
- 功能:串行数据输出。每个SDOx引脚对应一个独立的发射器移位寄存器(TX0-TX5)。这意味着ESAI可以同时、独立地输出最多6个通道的音频数据。
- 方向:输出。
- 关联引脚:
PC11(SDO0),PC10(SDO1),PC9(SDO2),PC8(SDO3),PC7(SDO4),PC6(SDO5)。注意,SDO0和SDO1仅在DSP56721的144引脚封装中可用。 - 配置要点:你需要使能(Enable)计划使用的发射器(TX)。数据格式(如标准I2S、左对齐、右对齐、DSP模式)、字长(Word Length)、移位方向(MSB先出还是LSB先出)都需要在寄存器中配置。多个SDO可以并行输出,以支持TDM(时分复用)模式,在同一个数据帧内传输多个通道。
SDI0-SDI3 (Serial Data Input)
- 功能:串行数据输入。每个SDIx引脚对应一个独立的接收器移位寄存器(RX0-RX3)。ESAI可以同时接收最多4个通道的音频数据。
- 方向:输入。
- 关联引脚:与SDO引脚复用(见下文表格),但功能独立。例如,
PC6引脚,作为ESAI功能时,可以是SDO5(输出)或SDI0(输入),具体由配置决定。 - 配置要点:需要使能计划使用的接收器(RX)。其数据格式、字长等配置必须与发送端严格匹配。接收时钟(SCKR)和帧同步(FSR)的配置决定了数据采样的时机。
数据引脚复用关系表理解引脚复用是硬件设计的关键。下表清晰地展示了ESAI组中,数据引脚与GPIO引脚以及输入/输出功能的对应关系:
| ESAI 信号名 | 信号类型 | 关联GPIO引脚 | 关键说明 |
|---|---|---|---|
| SDO5 | 输出 | PC6 | 与SDI0输入功能复用同一物理引脚。配置为发射时用作SDO5,配置为接收时用作SDI0。 |
| SDI0 | 输入 | PC6 | 同上。 |
| SDO4 | 输出 | PC7 | 与SDI1输入功能复用同一物理引脚。 |
| SDI1 | 输入 | PC7 | 同上。 |
| SDO3 | 输出 | PC8 | 与SDI2输入功能复用同一物理引脚。 |
| SDI2 | 输入 | PC8 | 同上。 |
| SDO2 | 输出 | PC9 | 与SDI3输入功能复用同一物理引脚。 |
| SDI3 | 输入 | PC9 | 同上。 |
| SDO1 | 输出 | PC10 | 仅DSP56721 144-pin封装可用。 |
| SDO0 | 输出 | PC11 | 仅DSP56721 144-pin封装可用。 |
实操心得:硬件原理图设计时,务必参考此复用关系。你不能同时将一个物理引脚(如PC6)既连接到外部DAC的输入(希望它作为SDO5输出),又连接到外部ADC的输出(希望它作为SDI0输入)。你需要根据系统所需的音频流方向,提前规划好每个引脚的功能。例如,如果你需要连接一个全双工的Codec(同时收发),那么至少需要一对SDOx和SDIx引脚,并且它们不能是复用的同一对。
3.4 S/PDIF相关信号
部分引脚(如SRCK,STCLK,以及在ESAI_2/3组中出现的SPDIFOUT1,SPDIFIN1)专门用于S/PDIF协议。S/PDIF是一种将数字音频信号和时钟信息编码到单一差分或同轴电缆中的协议,常用于消费电子设备间的数字音频传输。
- SRCK (S/PDIF Receive Clock):S/PDIF接收时钟输出。当启用S/PDIF接收器时,内部数字锁相环(DPLL)从输入的S/PDIF流中恢复出的时钟,可以从此引脚输出,供其他电路使用。
- STCLK (S/PDIF Transmit Clock):S/PDIF发射时钟输入。为S/PDIF发射器提供参考时钟源。
- 配置要点:使用这些功能需要在引脚复用控制寄存器中,将对应引脚的功能从“ESAI”或“GPIO”切换到“S/PDIF”模式。这是一个独立的协议层,与ESAI的同步串行音频传输是两套不同的硬件模块,虽然可能共用引脚。
4. 寄存器配置实战与工作模式解析
了解了引脚功能后,我们来看看如何通过配置寄存器,让ESAI按照我们期望的方式工作。配置的核心在于几个关键寄存器:传输时钟控制寄存器(TCCR)、接收时钟控制寄存器(RCCR)、传输控制寄存器(TCR)、接收控制寄存器(RCR)以及SAI控制寄存器(SAICR)。
4.1 同步模式 vs. 异步模式:核心选择
这是配置的起点,由TCCR和RCCR中的SYN位决定。
同步模式 (SYN = 1):
- 特点:发射器和接收器共享同一套时钟(SCKT)和帧同步(FST)。这是最常见的模式,用于连接标准的I2S、左对齐、右对齐格式的音频器件。
- 引脚变化:在此模式下,
SCKR引脚变为串行标志0(SF0),FSR引脚变为串行标志1(SF1)或发射器外部缓冲使能(TEBE)。 - 应用场景:连接单个主从结构的音频编解码器。DSP通常作为Master,��供SCKT和FST。
异步模式 (SYN = 0):
- 特点:发射器和接收器有各自独立的时钟(SCKT, SCKR)和帧同步(FST, FSR)。这提供了极大的灵活性。
- 应用场景:
- 全双工独立时钟:DSP同时与两个不同采样率的���备通信。例如,从ADC(44.1kHz)接收数据,同时向DAC(48kHz)发送数据。
- 网络模式(TDM):在复杂的多设备TDM网络中,不同设备可能需要不同的帧同步信号。异步模式允许ESAI独立地产生或接收多套同步信号。
配置示例(伪代码风格):
// 假设我们要配置ESAI为同步模式,DSP作为Master // 设置TCCR (Transmit Clock Control Register) TCCR = 0; TCCR |= (1 << SYN_POS); // 设置为同步模式 TCCR |= (TFSD_OUTPUT << TFSD_POS); // FST配置为输出(Master提供帧同步) TCCR |= (SCKT_MASTER << SCKT_DIR_POS); // SCKT配置为输出(Master提供位时钟) TCCR |= (HCKT_OUTPUT << HCKT_DIR_POS); // HCKT输出,可选 // ... 设置分频器,决定SCKT频率 = (输入时钟) / (分频系数) // 设置RCCR (Receive Clock Control Register) RCCR = 0; RCCR |= (1 << SYN_POS); // 同步模式,与TCCR一致 // 在同步模式下,SCKR和FSR的方向由RCKD和RFSD位控制,用于配置串行标志 RCCR |= (RCKD_OUTPUT << RCKD_POS); // 例如,将SCKR引脚配置为输出标志OF0 RCCR |= (RFSD_INPUT << RFSD_POS); // 例如,将FSR引脚配置为输入标志IF14.2 时钟与帧同步生成:Master/Slave配置
- Master模式:DSP内部产生位时钟(SCKT)和帧同步(FST),并输出给外部从设备。需要配置TCCR中的相应方向控制位为输出,并设置内部时钟分频器。
- Slave模式:DSP接收外部主设备提供的位时钟(SCKT)和帧同步(FST)。需要配置TCCR中的方向控制位为输入。
时钟分频计算: 位时钟频率SCLK = (输入时钟源频率) / (分频系数)帧同步频率FS = SCLK / (字长 * 2)// 对于立体声I2S,一帧包含左右两个声道的数据字。 例如,输入时钟源为24.576MHz,希望得到48kHz采样率、32位字长(每个声道)的I2S流。
- 位时钟
SCLK = 采样率 * 字长 * 2 = 48kHz * 32 * 2 = 3.072 MHz。 - 分频系数
= 24.576MHz / 3.072MHz = 8。 需要在分频器寄存器中设置此值。
4.3 数据格式与对齐方式
这需要在TCR和RCR中配置。常见的格式有:
- I2S格式:帧同步信号在数据开始前的一个SCLK周期变化,数据在SCLK的第二个上升沿(或下降沿,取决于极性)开始传输,MSB先出。
- 左对齐(MSB对齐):帧同步信号变化后,紧接着的第一个SCLK周期就开始传输MSB。
- 右对齐(LSB对齐):数据字的LSB在帧同步信号结束前的最后一个SCLK周期被传输。
- DSP模式(Motorola格式):帧同步是一个脉冲(通常为一个SCLK周期宽),数据在脉冲结束后立即开始传输。
配置时需设置TCR[TWA]和RCR[RWA]位来控制字对齐方式,以及TCR[TCKP]/RCR[RCKP]来控制数据在时钟的哪个边沿有效。
4.4 发送与接收使能及数据缓冲区管理
- 使能发射器/接收器:通过设置
TCR[TE(x)]和RCR[RE(x)]位来分别使能TX0-TX5和RX0-RX3。只有被使能的通道才会在对应的数据引脚上活动。 - 数据缓冲区:每个发射器和接收器都有对应的数据寄存器(TXx, RXx)。通常,数据通过DMA(直接内存访问)控制器在内存和这些寄存器之间自动搬运,以减轻CPU负担。你需要配置DMA通道,指定内存中的音频缓冲区地址和长度。
- 串行标志(Serial Flags):在同步模式下,
SCKR和FSR引脚复用的串行标志(SF0, SF1)非常有用。你可以将它们配置为输出(OF0, OF1),用于向外部器件发送控制信号(如静音、增益切换);或配置为输入(IF0, IF1),用于读取外部器件的状态。数据会在帧同步或时隙边界同步更新/采样,保证了与音频数据的精准对齐。
5. 硬件设计注意事项与常见问题排查
理论配置清楚了,但在实际的电路板和代码调试中,总会遇到一些“坑”。以下是我在多个基于DSP5672x的项目中积累的一些实战经验。
5.1 硬件设计检查清单
- 电源与去耦:这是老生常谈但至关重要的一点。确保为DSP和所有相连的音频器件提供干净、稳定的电源。在每个电源引脚附近放置足够且合适容值的去耦电容(如100nF和10uF组合),并尽量靠近芯片引脚。音频电路对噪声极其敏感。
- 时钟信号完整性:SCKT和FST是高速数字信号。如果布线过长(通常超过几厘米)或经过连接器,需要考虑端接电阻(串联或并联)以减少反射。尽量让时钟线走线短、粗、直,并远离高频噪声源。
- 数据引脚负载:确认SDOx引脚的输出驱动能力是否足以驱动所有连接的从设备输入。如果连接多个器件,可能需要检查总负载电容是否在DSP的驱动能力范围内。
- 引脚复用冲突:再次核对原理图,确保没有将同一个物理引脚(例如PC6)同时分配给两个冲突的功能。仔细阅读数据手册中关于引脚复用的章节。
- 未用引脚处理:对于未使用的ESAI引脚,特别是配置为输入的引脚(如不用的SDIx),建议在软件中将其配置为GPIO输出并驱动到一个固定电平(高或低),或者使能内部上拉/下拉,以避免浮空输入引入噪声和额外功耗。
- 复位后状态:牢记所有ESAI相关引脚复位后默认为“GPIO Disconnected”。这意味着在你初始化ESAI模块之前,这些引脚处于高阻态,外部电路需要确保此时不会产生冲突的电平。最好在初始化GPIO和引脚复用功能后,再使能ESAI模块的时钟和功能。
5.2 软件调试与问题排查指南
当音频没有声音、有噪声或数据错乱时,可以按照以下步骤排查:
| 现象 | 可能原因 | 排查步骤 |
|---|---|---|
| 完全无声 | 1. 时钟未产生/未正确输入。 2. 发射器/接收器未使能。 3. DMA未正确配置或未启动。 4. 数据缓冲区为空或未填充数据。 | 1. 用示波器测量SCKT和FST引脚,确认有时钟信号,且频率、极性正确。 2. 检查TCR/TE(x)和RCR/RE(x)寄存器是否已置位。 3. 检查DMA配置寄存器,确认源/目标地址、传输长度正确,并使能DMA通道。 4. 检查内存中的音频缓冲区,确认已写入有效数据(对于发送)或数据被更新(对于接收)。 |
| 有规律的爆音或噪声 | 1. 数据格式(对齐、字长)不匹配。 2. 帧同步信号极性或相位错误。 3. 位时钟边沿采样点错误。 | 1. 核对DSP与外部音频器件的TCR/RCR配置,确保格式(I2S/左对齐等)、字长(16/24/32位)完全一致。 2. 用示波器同时捕获FST和SDOx信号,对照数据手册的时序图,检查数据是否在正确的帧同步边沿后开始传输。 3. 检查TCKP/RCKP位,尝试翻转时钟极性。 |
| 声音失真或音调变化 | 1. 采样率配置错误。 2. 时钟分频计算错误。 | 1. 用频率计或示波器测量FST频率,确认其等于预期的音频采样率(如44.1kHz)。 2. 重新计算并检查时钟分频寄存器的值。确认输入时钟源频率正确。 |
| 只有单声道有声音 | 1. 仅使能了一个发射器或接收器。 2. 数据缓冲区交错存储(Interleave)格式错误。 3. 帧同步信号理解错误,设备始终锁定在左或右声道。 | 1. 检查是否使能了TX0和TX1(对于立体声)。 2. 确认DMA传输的数据在内存中是按L, R, L, R...顺序交错存放的。 3. 检查帧同步信号是否稳定,并用逻辑分析仪查看数据与帧同步的对应关系。 |
| 初始有声音,运行一段时间后异常 | 1. DMA缓冲区溢出/下溢。 2. 时钟源不稳定(如PLL失锁)。 3. 中断服务程序(ISR)处理超时,导致数据流中断。 | 1. 使能DMA中断,在中断服务程序中检查状态位,确保缓冲区及时切换。 2. 检查系统PLL配置寄存器,确认锁定状态位正常。 3. 优化ISR代码,确保其执行时间远小于音频缓冲区时长(例如,对于48kHz采样率、256样本的缓冲区,处理时间需小于5.3ms)。 |
一个实用的调试技巧:在初始化代码中,不要一次性配置完所有寄存器然后启动。采用分步验证法:
- 先只配置时钟部分(TCCR, 确保SCKT/FST有输出),用示波器验证。
- 再配置一个最简单的发射器(如TX0),发送固定的测试数据(如0xAA55AA55),用逻辑分析仪捕获SDO0、SCKT、FST的波形,检查时序和数据是否正确。
- 最后再使能DMA和所有通道,并连接真实的音频数据。
5.3 关于ESAI_2/ESAI_3的特殊说明
ESAI_2和ESAI_3在功能上与ESAI/ESAI_1几乎完全相同,但需要注意两点:
- 引脚可用性:部分引脚(如SDO0_2, SDO1_2等)仅在DSP56721的144引脚封装中可用。在80引脚封装中,这些引脚可能不存在或被其他功能占用。设计硬件前务必核对芯片的具体封装和引脚图。
- 内部上拉/下拉电阻:数据手册中提到,ESAI_2/3的某些引脚在DSP56720和DSP56721上使用的内部电阻不同(例如PC6_1在DSP56720上用下拉,在DSP56721上用上拉)。这可能会影响复位后或配置为GPIO时的默认电平。如果外部电路依赖此默认电平,需要特别注意。
6. 高级应用:TDM模式与多通道扩展
ESAI的强大之处在于其支持TDM(时分复用)模式,可以将多个音频通道的数据打包到同一个串行数据流中,极大地节省了引脚资源。
6.1 TDM模式原理
在标准立体声I2S中,一帧数据包含左声道和右声道。在TDM模式下,一帧被划分为多个时隙(Slot),每个时隙可以传输一个通道的数据。例如,一个8时隙的TDM帧,可以传输8个单声道音频数据。ESAI通过TCR[TSCKP]和RCR[RSCKP]等位来配置时隙的长度和数量。
6.2 ESAI的TDM配置要点
- 选择网络模式:通过设置
TCR[TWA]和RCR[RWA]为特定值(通常与DSP模式相关),进入网络模式(Network Mode),这是ESAI实现TDM的基础。 - 配置时隙:需要定义每帧有多少个时隙(
TCR[TDC]/RCR[RDC]),以及每个时隙包含多少位(TCR[TPSR]/RCR[RPSR])。时隙长度可以与音频字长相同,也可以更长(用于传输附加信息)。 - 分配发射/接收器到时隙:每个使能的发射器(TX0-TX5)和接收器(RX0-RX3)都需要被分配到一个特定的时隙。这通过
TCR[TE(x)]和RCR[RE(x)]的扩展配置(在某些模式下,需要结合其他寄存器)来完成。例如,可以配置TX0发送时隙0的数据,TX1发送时隙1的数据,以此类推。 - 串行标志在TDM中的使用:在TDM模式下,串行标志(SF0, SF1)的更新/采样可以配置为在时隙边界进行,而不是帧边界。这允许你在每个时隙传输额外的控制位,功能非常强大。
6.3 多ESAI接口协同工作示例
假设我们要设计一个8进8出的音频矩阵处理器,使用DSP56721。
- 方案:使用ESAI和ESAI_1两组接口,每组配置为8时隙TDM模式(Master)。
- 连接:将ESAI的TDM输出连接到一块8通道DAC芯片,ESAI_1的TDM输出连接到另一块8通道DAC芯片,实现16通道输出。输入同理,连接多通道ADC。
- 软件:在DSP内部,为每个音频通道分配独立的内存缓冲区和处理算法。DMA控制器负责将16个通道的音频数据从内存搬运到对应的TX数据寄存器(TX0-TX5需重复使用以填满8时隙),并按照TDM时隙顺序组织成串行流输出。
- 优势:仅用两组ESAI接口(共4个数据输出引脚)就实现了16通道的并行输出,极大地扩展了系统的I/O能力。
通过深入理解ESAI接口的每一个引脚、每一种工作模式和配置细节,你就能充分发挥DSP56720/56721这颗多核音频处理器的强大连接能力,为各种高保真、多通道的音频应用打下坚实的硬件基础。记住,耐心阅读数据手册,用示波器和逻辑分析仪验证硬件信号,采用模块化的方法进行软件调试,是搞定任何复杂嵌入式音频系统的黄金法则。