【AD2426/7/8_A2B收发器技术参考手册】第三章 操作和配置

三,A2B 操作和配置

A2B总线是高等级可编程的,可以满足多种使用场景。A2B系统易于配置,基于对系统、节点和外设的了解。通过分别收集每个从设备的信息,可以获得确切的系统配置。例如,同一A2B模块可以由不同供应商提供,每个模块都有独特的寄存器编程要求。一种模块可以使用TDM4作为音频接口,而另一种则使用TDM8。一个模块可以提供两个上行通道,而另一个模块可以提供三个上行通道,而主机在此之前并不知道连接了多少个节点。

重要提示:确保寄存器编程产生有效的系统配置。

Analog Devices 提供免费的 SigmaStudioTM(http://www.analog.com/SigmaStudio)工具,具有直观的图形用户界面,用于架构、配置和设置 A2B 总线。这些工具还可以为嵌入式软件生成驱动程序代码。

Linux 和 QNX 软件驱动程序也可根据请求提供。

3.1 I2C 端口编程概念

主启用的收发器寄存器通过 A2B 主机使用直接 I2C 寄存器访问直接编程。启用从设备的收发器寄存器也可以通过连接到从节点的 I2C 控制器以这种方式编程;然而,A2B 从收发器寄存器通常是通过 A2B 主机通过主收发器在 A2B 总线上远程编程的,使用的是远程从 I2C 寄存器访问。此外,如果从收发器本地连接到从节点的 I2C 从设备,则该连接的 I2C 从设备也可以通过 A2B 主机在 A2B 总线上使用远程外设 I2C 访问进行远程访问。I2C 访问的编程序列图是编程收发器寄存器和访问从节点 I2C 外设设备时所需的编程序列的图形表示。
在这里插入图片描述
在 I2C 访问的编程序列图中:

  • I2C ADDR 是主收发器的 I2C 设备地址。
    • 对主收发器的直接 I2C 寄存器访问使用 BASE_ADDR(I2C ADDR: BASE)。
    • 对从收发器的远程从 I2C 寄存器访问和对从节点上与 I2C 连接的外设的远程外设 I2C 访问使用 BUS_ADDR(I2C ADDR: BUS)。

注意:有关 BASE_ADDR 和 BUS_ADDR 的更多细节,请参见收发器 I2C 访问。

  • NODEADR 是主收发器的 A2B_NODEADR 寄存器。
    • NODE 是 A2B_NODEADR.NODE 字段。
    • PERI 是 A2B_NODEADR.PERI 位。
  • CHIP 是 A2B_CHIP 寄存器:
    • 黑色文本表示 A2B_CHIP 寄存器本身。
    • 蓝色文本表示 A2B_CHIP 寄存器的值。

3.1.1 直接I2C寄存器访问

I2C 端口可以用于直接访问收发器寄存器空间,无论收发器是配置为主设备还是从设备:

  • 在主节点上,A2B 主机通过此方法直接访问主收发器的寄存器空间。
  • 在从节点上,本地连接的 I2C 主机通过此方法直接访问从收发器的寄存器空间。

如 I2C 访问编程序列图中的主 I2C 访问部分所示,主收发器寄存器访问要求主机的 I2C 传输包含主收发器 I2C 设备地址(I2C ADDR: BASE = BASE_ADDR),其次是寄存器地址(ADDR),最后是与主收发器寄存器相关联的数据(R/W 数据)。有关更多细节,请参见收发器 I2C 访问。

注意:该主 I2C 访问序列对于直接访问从收发器寄存器空间的从节点上的 I2C 连接主机是相同的。

3.1.2 远程从 I2C 寄存器访问

尽管从节点上的本地连接 I2C 主机可以通过 I2C 端口直接编程从收发器寄存器,但 A2B 系统通常由主节点上的 A2B 主机进行全面配置。如 I2C 访问编程序列图中的从设备 0 I2C 访问部分所示,这一 2 步过程首先要求 A2B 主机直接配置主收发器,然后使用远程 I2C 访问通过 A2B 总线编程特定的从收发器。A2B 主机必须使用以下编程序列从主节点远程访问 A2B 从收发器寄存器空间通过 A2B 总线。

1,使用直接 I2C 寄存器访问将主收发器的 A2B_NODEADR.NODE 字段设置为要访问的从节点 ID。在此写入操作中,确保 A2B_NODEADR.PERI 位被设置为 0,以便后续的总线访问针对指定的从收发器寄存器空间,而不是连接到指定从设备的 I2C 外围设备。

附加信息:将 A2B_NODEADR.NODE 字段设置为 0 意味着后续的总线访问将针对从节点 0。如果此字段设置为 1,后续的总线访问将针对从节点 1。如果想要将写入广播到所有发现的节点(主设备和从设备),请确保在此写入中也设置广播位(A2B_NODEADR.BRCST)。

2,要访问从收发器寄存器,主机的 I2C 传输包括主收发器的总线地址(I2C ADDR: BUS = BUS_ADDR),接着是从收发器寄存器地址(ADDR),最后是与从收发器寄存器相关联的数据(Data)。有关更多细节,请参见收发器 I2C 访问。

3.1.3 远程外设 I2C 访问

I2C 访问编程序列图中的从设备 1 I2C 访问部分说明了 A2B 主机通过 A2B 总线使用远程外设 I2C 访问访问连接到从收发器 I2C 端口的外设所需的序列。A2B 主机必须遵循以下编程序列,以便通过 A2B 总线访问 A2B 从节点上的 I2C 外设(例如,麦克风或 DAC)。

1,使用直接 I2C 寄存器访问写操作,将主收发器的 A2B_NODEADR.NODE 字段设置为连接到要访问的外设的从节点 ID。在此写入操作中,请确保清除 A2B_NODEADR.PERI 位,以便后续的总线访问是针对目标从收发器的寄存器空间,而不是从外设本身。

附加信息:在此写入操作中,A2B_NODEADR.NODE 字段设置为 1,以便后续的总线访问针对从节点 1。如果打算将外设写入广播到所有发现的节点(主设备和从设备),请确保在此写入中也设置 A2B_NODEADR.BRCST 位。如果目标从收发器中的 A2B_CHIP 寄存器已经设置为预期外设访问的 I2C 地址,请执行此写入操作,并设置(而不是清除)A2B_NODEADR.PERI 位,然后直接进入最后一步。

2,使用远程从设备 I2C 寄存器访问写操作,将所需的从收发器的 A2B_CHIP 寄存器编程为连接到从设备的外设的 I2C 设备地址。

3,使用直接 I2C 寄存器访问写操作设置主收发器的 A2B_NODEADR.PERI 位(同时保持 A2B_NODEADR.NODE 字段的内容),确保后续的 BUS_ADDR 访问可以发送到所需的从节点 I2C 外设。

4,要访问从节点外设,主机的 I2C 传输必须包含主收发器的 BUS_ADDR(I2C 地址:BUS),接着是从收发器将用于访问从节点 I2C 外设的地址(ADDR),最后是与该地址相关联的数据(Data)。

3.2 系统启动与发现

A2B 系统由 A2B 主机启动。一旦电源正常建立,系统中的每个节点必须按顺序进行发现和配置,从主节点开始。

3.2.1 复位状态和操作状态

丢失 PLL 锁定会重置所有寄存器信息,除了 A2B_BMMCFG 和 A2B_CONTROL.MSTR。收发器状态图显示了在启动和运行完整的 A2B 系统时,了解的收发器状态信息。
在这里插入图片描述

备注:由于持续模式是仅限于从设备的功能,主收发器不会进入 SUSTAIN 状态。在主收发器上丢失 PLL 锁定会直接返回到 POWER-UP 状态。

收发器上电与复位

当收发器初始上电时,它处于 RESET 状态。在 RESET 状态下,所有 A2B 系统寄存器都保持复位状态,直到收发器进入 POWER-UP RESET 状态,此状态取决于施加到收发器上的电源(VIN)。

一个内部的上电复位电路监测 VIN 电源引脚的状态,保持内部上电复位信号(PORST)为低电平,直到满足 VRSTN 规格,此时 PORST 被拉高以指示收发器已正确供电。接着,收发器过渡到 POWER-UP RESET 状态。

在收发器进入 POWER-UP RESET 状态后,PORST 信号保持高电平,除非在 VIN 电源引脚上感应到的电压降到其 VRST 规格范围内,此时 PORST 会被拉低,将收发器带回 RESET 状态。

3.2.2 主节点启动与操作

参考收发器状态图,ADR1/IO1 和 ADR2/IO2 引脚被锁存以确定 I2C 设备地址,当收发器过渡到 POWER-UP RESET 状态时,收发器在不超过 2.5 毫秒后可访问 I2C 设备。然后,A2B 主机在驱动 SYNC 引脚(主设备启用的收发器的 PLL 的输入时钟)之前设置收发器中的 A2B_CONTROL.MSTR 位,时钟频率为系统的音频采样率(可选择 48 kHz 或 44.1 kHz)。主收发器根据 PLL 锁定时间(tPLK)规格锁定其 PLL 到接收到的 SYNC 信号。

备注:建议主机设置超时,超过 PLL 锁定时间(tPLK)规格,以便软件能够检测到不响应的主收发器。

当 PLL 锁定后,主收发器过渡到 NODE READY PLL LOCKED 状态,此时它向主机生成 MSTR_RUNNING(0xFF)中断(IRQ/IO0 引脚被拉高),该信息存储在中断类型寄存器(A2B_INTTYPE)中,表示主收发器已准备好通过 I2C 接口进行编程。

备注:一旦 PLL 锁定,写入 A2B_CONTROL.MSTR 位将没有效果。如果主收发器的 PLL 在总线操作期间解锁,收发器将返回到 POWER-UP 状态,因为 SUSTAIN 状态仅为从设备功能(SUSTAIN = 0)。除 A2B_CONTROL 寄存器外,所有寄存器均返回其复位值。

3.2.3 从节点启动与操作

参考收发器状态图,一旦建立本地或A2B总线电源,收发器就会进入POWER-UP RESET(上电复位)状态,并且ADR1/IO1和ADR2/IO2引脚会被锁存以确定I2C设备地址。默认情况下,该收发器为从设备,并且在进入POWER-UP RESET状态后的2.5毫秒内准备好被发现和编程。

备注:在 POWER-UP RESET 状态下,BCLK 和 SYNC 输出处于三态。

在 POWER-UP RESET 状态下,连接的主机可以通过 I2C 端口使用直接 I2C 寄存器访问配置从收发器寄存器空间的子集。这些寄存器包括:
在这里插入图片描述

虽然在 POWER-UP RESET 状态下可以写入这些寄存器,但编程的值在收发器进入 NODE READY PLL LOCKED 状态之前不会生效,唯一的例外是槽寄存器(A2B_BCDNSLOTS、A2B_LDNSLOTS、A2B_LUPSLOTS、A2B_DNSLOTS、A2B_UPSLOTS、A2B_UPMASK0 到 A2B_UPMASK3,以及 A2B_DNMASK0 到 A2B_DNMASK3)。对列出的槽寄存器编程的值在主收发器的 A2B_DATCTL 寄存器被编程并且新结构随后应用(A2B_CONTROL.NEWSTRCT = 1)之前也不会生效。

在 POWER-UP RESET 状态下,从设备收发器等待来自主设备的同步控制帧(SCF),当主机通过设置主设备收发器的 A2B_DISCVRY 寄存器为目标从设备的响应时间来启动该特定 A2B 系统从设备的发现过程时,这一过程被触发。当进行此写操作时,主设备通过发送包含响应时间值的发现帧来启动发现过程。被发现的从设备随后提取信息以设置其响应时间(A2B_RESPCYCS)。这些发现帧为从设备收发器提供输入时钟,从设备收发器根据 PLL 锁定时间(tPLK)规范锁定其 PLL。一旦从设备收发器 PLL 锁定,它就进入 NODE READY PLL LOCKED 状态,并开始向上游节点生成同步响应帧(SRF),这会导致主设备收发器生成 DSCDONE 中断(A2B_INTTYPE = 0x18),表明从设备收发器已准备好通过远程从设备 I2C 寄存器访问在 A2B 总线上进行编程。

注意:当同时尝试从 A2B 总线(使用远程从设备 I2C 寄存器访问)和 I2C 端口(使用直接 I2C 寄存器访问)对同一寄存器进行写入时,这些 I2C 访问发生的顺序是不可预测的。因此,在同时来自两个来源的 I2C 事务时,必须特别小心。

提示:如果应用中希望进行本地节点编程(使用直接 I2C 寄存器访问),可以通过与主节点使用一个邮箱握手来避免这种潜在的冲突,以便主机在准备开始进行寄存器访问时写入从设备的一个邮箱,并等待从设备读取该邮箱,以此指示其初始化序列已完成。有关更多信息,请参见邮箱部分。

在 NODE READY PLL LOCKED 状态下,BCLK 和 SYNC 输出被拉低,直到从设备收发器的 A2B_PDMCTL(对于 PDM 模式)或 A2B_I2SCFG(对于 I2S/TDM 模式)寄存器中启用了任何 I2S/TDM/PDM 端口数据引脚。

如果在总线操作期间从设备收发器的 PLL 解锁,并且时钟保持特性被禁用(A2B_SUSCFG.SUSDIS = 1,在收发器状态图中表示为 SUSTAIN = 0),它将返回到 POWER-UP 状态。一旦回到 RESET 状态,主设备可以发出另一个发现序列。

时钟保持功能

默认情况下(在收发器状态图中表示为 SUSTAIN = 1),从设备收发器具有时钟保持功能,可以对带有处理器和 DAC 的从节点进行断电处理,同时优雅地静音本地供电的从节点的音频信号。当总线失去通信且从设备收发器无法恢复可靠时钟(在收发器状态图中为 PLL UNLOCK)时,从设备收发器进入 SUSTAIN 状态,前提是时钟保持功能未被禁用(A2B_SUSCFG.SUSDIS = 1)。进入 SUSTAIN 状态时,收发器会执行以下操作:

  • 在 1024 个 SYNC 周期内以当前时钟频率运行
  • I2S/TDM 端口继续运行
  • 如果启用,则在 GPIO 上输出 SUSTAIN 状态信号
  • 在 SUSTAIN 状态下不尝试 PLL 重新锁定
  • 重置并重新进入 POWER-UP RESET 状态
  • 如果存在稳定的 SCF 发现帧,则过渡到 NODE READY PLL LOCKED 状态

如果保持 GPIO 输出使能位(A2B_SUSCFG.SUSOE)被设置,当收发器处于 SUSTAIN 状态时,来自 PLL 的保持信号会在 A2B_SUSCFG.SUSSEL 位域选择的 GPIO 引脚上被拉高。此功能的优先级高于其他 GPIO 输出,但低于引脚上的功能输出。例如,如果时钟输出 1 被启用(A2B_CLK1CFG.CLK1EN = 1),那么 ADR1/IO1 引脚会作为时钟输出。设置 A2B_SUSCFG.SUSOE 位并在 ADR1/IO1 引脚上配置保持输出(A2B_SUSCFG.SUSSEL = 1)并不会覆盖这一行为。

来自 PLL 的保持信号在超帧开始时附近变为高电平。一旦保持信号高电平,DTX0/IO3 和 DTX1/IO4 引脚上会在随后的 I2S/TDM 帧中产生衰减数据值。TX 帧缓冲区中的数据(参见管理 A2B 系统数据流)是从 A2B 总线上接收到的 32 位值,将输出到 I2S DTX0/DTX1 数据引脚之一或两个。负值逐渐衰减至 0,而正值在启用的数据引脚上逐渐衰减至 -109 dB(0x00001F00)。

3.2.4 节点发现与初始化

本节提供有关 A2B 总线系统的简单节点发现和初始化的信息。在本手册的附录 A:额外的发现流程示例中,描述了修改、优化和高级的发现流程。您可以将这些软件流程图作为发现和初始化的指导。

简单发现流程

所有从节点都按顺序从从节点 0 开始被发现,直到系统中最后一个可用的从节点,使用的软件流程如简单发现流程图所示。在该图中,各个阶段显示了在主机和主控收发器之间通过 I2C 接口发出的命令。写命令标识为“wr”,读命令标识为“rd”,并附有正在访问的 REGISTER_NAME。“M”表示对 BASE_ADDR 的访问,“S”表示对 BUS_ADDR 的访问。
在这里插入图片描述
在这里插入图片描述

注意:在简单发现流程图中,在主节点或任何从节点中设置 A2B_SWCTL.ENSW 位会导致该节点开始向下游的下一个连接从节点发送 SCFs,从而允许下一个从收发器在主节点启动针对它的发现帧之前开始锁定其 PLL。

按照以下指南使用反向接线功能 A2B_CONTROL.XCVRBINV(从 LVDS XCVR B 反转数据):

  1. 在主节点中,先设置 A2B_CONTROL.XCVRBINV 位,然后再写入 A2B_SWCTL.ENSW 位。在为其他目的(例如写入 A2B_CONTROL.NEWSTRCT 位)写入 A2B_CONTROL 寄存器时,请小心不要不小心清除 A2B_CONTROL.XCVRBINV 位。

  2. 在任何从节点中,必须在写入 A2B_SWCTL.ENSW 位之前先设置 A2B_CONTROL.XCVRBINV 位。

一旦所有从节点被发现,便可以初始化节点以进行同步数据交换。示例流程图从最后一个节点开始初始化,最后完成主节点的初始化。

发现过程很快完成,提前访问所有节点及其 I2C 外设,为需要额外时间完成的同步音频初始化提供便利。

在所有节点被发现并编程后,不再需要进行总线管理。可以使用中断服务例程响应特殊的中断请求(IRQ)事件(例如来自 IO 引脚的事件)。或者,可以轮询 A2B_INTTYPE 寄存器以监控中断事件。

优化发现流程和高级发现流程部分演示了如何进行自动配置。

响应周期

A2B_RESPCYCS 寄存器设置从同步控制帧(SCF)开始到最后一台从机响应同步响应帧(SRF)的相对时间。此寄存器设置表示前级节点何时预期从最后一台从机收到响应。如果最后一台节点不响应,则紧邻假定最后一台节点的上一台节点会做出响应。
在这里插入图片描述

收发器的响应周期值将在附录 B: 响应周期公式中讨论,作为以下参数的函数:

  • 从节点数量
  • 下游槽位数量
  • 下游槽位大小
  • 上游槽位数量
  • 上游槽位大小
  • 主 I2S/TDM 通道配置

注意:主收发器的响应周期值是使用上述参数在响应周期计算器电子表格或 SigmaStudio 软件中计算得出的。如需更多信息,请联系您当地的模拟设备代表。

从节点响应周期

从节点响应周期图显示了从节点 A 和 B 收发器端口上同步控制帧(SCF)与同步响应帧(SRF)之间的相对时序。一个从节点会在 A 收发器上的同步控制帧开始后大约 ((4 * A2B_RESPCYCS) + 7) 位时生成同步响应帧。例如,当 A2B_RESPCYCS= 128 (0x80) 时,从节点将在第 519 位 ((4 * 128) + 7 = 519) 开始生成同步响应帧。
在这里插入图片描述

如“从节点响应周期”图所示,从一个收发器端口到另一个收发器端口传递超帧时会产生收发器延迟(TD)。在超帧的下游部分,从 A 侧到 B 侧时产生约七(± 2)位的延迟(TDDOWN)。相反,在同一超帧的上游部分,从 B 侧到 A 侧时会产生九(± 2)位的延迟(TDUP)。这些延迟在支持的帧率中汇总在“收发器延迟”表中,并由以下公式决定:

延迟范围 = 名义延迟范围 / (SYNC 速率 * 1024)
在这里插入图片描述

除了这些收发器延迟外,节点之间的电缆延迟(CD)也会改变在超帧的下游部分接收到同步控制帧(SCF)与在同一超帧的上游部分返回到该点的互补同步响应帧(SRF)之间的相对时序。在从节点 B 侧正确接收到 SRF 并传递到 A 侧的 5 位时间窗口(预期位时间 ± 2)内,SRF 被正确接收。超出此窗口的 SRF 仍然会被检测到,并且在发现过程中,收发器会逐渐(并自动)调整预期响应时间以补偿不匹配,调整范围为 -4 位时间到 +15 位时间,以涵盖电缆长度规格。因此,A2B_RESPCYCS 公式适用于所有支持的电缆长度。如果在系统设计阶段已知电缆长度,则可以为所有发现流程应用此建议。如果电缆长度未知,默认的响应周期计算(假设 4 米电缆长度)是足够的。尽管在使用较长电缆时,在发现过程中可能会观察到一些错误(CRCERR、SRFERR 或 SRFCRCERR),但由于这种自动调整能力,系统在发现完成后运行良好。

在发现过程中执行的自动响应周期调整如下:

  1. 主机通过设置 A2B_RESPCYCS = 128 (0x80),如上所述 ((4 * 128) + 7 = 519),编程主节点在超帧的第 519 位期望 SRF。
  2. 当主机向其 A2B_DISCVRY 寄存器写入 0x80 时,主节点开始发现从节点 0。当从节点 0 开始发送 SRF 时,主节点调整其响应时间以与从节点 0 对齐。短电缆长度(最长 20 厘米)不会影响主节点在超帧的第 519 位接收 SRF 的能力。
    然而,较长的电缆长度会在接收节点捕获 SRF 的时间上引入物理电缆延迟(CD),约为 5ns/m。例如,主节点和从节点 0 之间的 10 米电缆会使主节点接收 SRF 的时间延迟 100ns(50ns 下游 CD 加上 50ns 上游 CD)。这 100ns 的总 CD 相当于 5 个 A2B 位,因此在这种情况下,主节点会调整其响应周期,以期望在超帧的第 524 位(± 2)接收 SRF。
  3. 当主机向 A2B_DISCVRY 寄存器写入 0x7C 时,主节点开始发现从节点 1。当从节点 1 开始发送 SRF 时,从节点 0 调整其响应时间以与从节点 1 对齐,这导致从节点 0 的 SRF 延迟,从而进一步延迟 SRF 到达主节点的时间。主节点接收 SRF 的时间取决于主节点与从节点 0 之间的 CD 以及从节点 0 与从节点 1 之间的 CD。继续上面的例子,从节点 0 和从节点 1 之间的第二根 10 米电缆会使主节点接收 SRF 的时间再延迟 5 位,因此主节点会调整其响应周期,以期望在超帧的第 529 位(± 2)接收 SRF。

SRF 响应图说明了电缆和收发器延迟如何影响 SRF 响应。在这种情况下,不会观察到 SRF 丢失错误,因为响应周期在发现阶段进行了调整。
在这里插入图片描述

在这个例子中:

• 从设备1是排在最后的从设备节点,它负责启动SRF(同步响应帧)以开始超帧的上游部分。当使用A2B_RESPCYCS=124(0x7C)进行编程时,从设备1被配置为在超帧的第503位生成SRF((4*124)+7=503)。

• 从上游从设备0的角度来看,在超帧的下游部分SCF(同步控制帧)到达从设备0的A侧收发器,与在相同超帧的上游部分出现相应的SRF之间的总延迟是430ns(21位),包括以下部分:

• 从设备0的下游收发器延迟(TDDOWN=150ns),

• 从设备0和从设备1之间的下游电缆延迟(CD=5ns/m x 10m=50ns),

• 从设备1和从设备0之间的上游电缆延迟(CD=5ns/m x 10m=50ns),以及

• 从设备0的上游收发器延迟(TDUP=180ns)。

因此,在从设备0的A侧收发器接收到SCF与在那里生成相应的SRF之间的位数计算为503+21=524位,这是在从设备0节点和从设备1节点之间使用10m电缆长度的情况下。

• 从主节点的角度来看,在生成SCF与在相同超帧的上游部分出现相应的SRF之间的总延迟是100ns(5位),包括以下部分:

• 主设备和从设备0之间的下游电缆延迟(CD=5ns/m x 10m=50ns)和

• 从设备0和主设备之间的上游电缆延迟(CD=5ns/m x 10m=50ns)。

因此,在SCF字段生成与接收相应的SRF之间的位数计算为524+5=529位。

3.3 管理 A2B 系统数据流

在完整的A2B系统中,每个主设备和从设备收发器必须根据所需的时隙管理方案和格式,正确配置用于A2B总线上任意两个收发器之间的上下行流量。每个收发器具有两个内部帧缓冲区:

• TX帧缓冲区 - 由A2B总线填充,并输出到DTX0和/或DTX1引脚。

• RX帧缓冲区 - 由DRX0和/或DRX1输入引脚填充,并输出到A2B总线。

这些帧缓冲区在每个超帧期间被填充和耗尽,其中下游时隙内容占据缓冲区的低阶位置,上游时隙内容占据高阶位置。帧缓冲区深度为32个位置,宽度为32位,因为任何给定的收发器可以占用A2B总线上的最多32个时隙,并支持最多32位的数据。

注意:如果一个收发器被配置为从A2B总线上接收超过32个组合的下游和上游时隙,则无法被帧缓冲区容纳的与上游时隙相关的额外数据将被丢弃。

TX帧缓冲区由A2B总线填充。启用的下游时隙数量和特定的时隙掩码决定在超帧的下游部分期间哪些下游时隙被存储到TX帧缓冲区。类似地,上游数据时隙的数量和特定的时隙掩码决定在下游数据之后,哪些上游时隙随后被存储到TX帧缓冲区。这个合并的数据缓冲区随后根据启用的传输数据引脚的数量以及是否启用插帧功能,以DTXn数据引脚的形式呈现。

RX帧缓冲区由通过启用的DRXn数据引脚的I2S/TDM端口填充。启用的接收引脚数量以及插帧功能是否开启决定数据如何被放入RX帧缓冲区。一旦缓冲区被填充,启用的下游时隙数量和特定的时隙掩码决定哪些下游时隙在超帧的下游部分期间被RX帧缓冲区填充。类似地,上游数据时隙的数量和特定的时隙掩码决定在发送下游数据之后,哪些上游时隙随后被RX帧缓冲区填充。

dnmaskrx和upmaskrx的定义

dnmaskrx值是通过A2B_DNMASK0到A2B_DNMASK3寄存器的值来确定的。

if (DNMASK3.RXDNSLOT31==1) dnmaskrx = 32;
	else if (DNMASK3.RXDNSLOT30==1) dnmaskrx = 31;
	else if (DNMASK3.RXDNSLOT29==1) dnmaskrx = 30;
	. . .
	else if (DNMASK0.RXDNSLOT02==1) dnmaskrx = 3;
	else if (DNMASK0.RXDNSLOT01==1) dnmaskrx = 2;
	else if (DNMASK0.RXDNSLOT00==1) dnmaskrx = 1;
	else dnmaskrx = 0;

upmaskrx的值是通过A2B_UPMASK0到A2B_UPMASK3寄存器的值来确定的。

if (UPMASK3.RXUPSLOT31==1) upmaskrx = 32;
	else if (UPMASK3.RXUPSLOT30==1) upmaskrx = 31;
	else if (UPMASK3.RXUPSLOT29==1) upmaskrx = 30;
	. . .
	else if (UPMASK0.RXUPSLOT02==1) upmaskrx = 3;
	else if (UPMASK0.RXUPSLOT01==1) upmaskrx = 2;
	else if (UPMASK0.RXUPSLOT00==1) upmaskrx = 1;
	else upmaskrx = 0;	

3.3.1 A2B 槽格式

上游和下游数据槽的正常(默认)格式是数据后跟一个奇偶校验位。但是,也支持支持浮点压缩或ECC保护的其他格式。上游和下游数据槽的大小和格式均使用A2B_SLOTFMT寄存器进行配置。槽格式表总结了由A2B_SLOTFMT.DNFMT、A2B_SLOTFMT.DNSIZE、A2B_SLOTFMT.UPFMT和A2B_SLOTFMT.UPSIZE位配置的可能的数据格式。在槽格式表中,FMT列是A2B_SLOTFMT.DNFMT位或A2B_SLOTFMT.UPFMT位,SIZE列是3位A2B_SLOTFMT.DNSIZE或A2B_SLOTFMT.UPSIZE字段,具体取决于正在配置的是下游还是上游(分别)槽格式。

在这里插入图片描述
在这里插入图片描述

注意:在槽格式表中,I2S/TDM数据宽度列指示以MSB优先格式在I2S/TDM/PDM端口上交换的实际数据的宽度。对于该列中数据宽度为8到16位的用例,可以选择设置A2B_I2SGCFG.TDMSS位,以在I2S/TDM/PDM端口上使用16位的TDM通道数据宽度。数据宽度为20到32位时,需要清除A2B_I2SGCFG.TDMSS位(32位TDM通道数据宽度)。有关更多详细信息,请参阅I2S/TDM端口编程概念。

ECC 保护

收发器支持 24 位和 32 位数据的 ECC 保护,适用于 A2B 总线数据槽。

注意:如槽格式表所示,24 位数据有六个 ECC 位,32 位数据有七个 ECC 位。

在存在强噪声干扰(短于超级帧)的环境中,ECC 保护非常有用,否则可能会产生位错误。ECC 可以与音频数据的错误校正(重复最后已知的良好数据)一起使用,但它仅适用于非音频数据,因为它需要额外的总线带宽。

浮点数据压缩

A2B 协议引擎提供可选的浮点数据压缩/解压缩功能,以便在 A2B 总线上为给定数据大小使用较少的带宽(比紧邻的较小数据大小的质量更好)。此压缩可用于 A2B 数据大小为 12、16 和 20 位的情况,对应于 I2S 数据宽度。该压缩将源数据中的前导符号位的数量编码为 3 位字段,并将符号位本身连接起来,后跟 N-4 位数据(其中 N 是 A2B 数据大小)。16 位到 12 位压缩的示例显示在“16 位到 12 位压缩示例”表中。在表中,s 是符号位,~s 是符号位的反位。
在这里插入图片描述
在这里插入图片描述

数据解压缩则是反向处理。压缩数据的最低有效位(在“12 位到 16 位数据解压缩示例”表中为 L)用于生成解压缩数据中未在压缩格式中存储的其余最低有效位。
在这里插入图片描述

选择浮点压缩是一种良好的方法,可以降低数据槽的大小。这在需要多个数据通道的系统中是有益的。有时,确保有足够的数据槽或者槽位不足都是有利的。减少槽大小还可以降低电流消耗,这在幻象供电节点中可能很重要。

当启用数据压缩时,音频信号的完整动态范围(24 位 = 144.49 dB)得以保留。人类耳朵可以在安静环境中听到接近噪声水平的声音,但在非常响的音频内容存在时,人耳会屏蔽非常微弱的音频内容。浮点压缩(至 20 位)利用了这种心理声学效应,在高音频内容存在时去除低级别内容。当没有高波段音频内容时,浮点压缩能够保留所有低级别内容(在 20 位数据槽中,16 位 = 96.33 dB),并为强音频信号支持完整的动态范围(在 20 位数据槽中高达 144.49 dB),且始终具有 16 位 = 96.33 dB 的分辨率。

3.3.2 下行数据槽

从节点可以选择性地接收下游总线槽,并输出到 DTXn 引脚。在 DRXn 引脚上的可编程 I2S/TDM 数据通道数量(A2B_DNOFFSET)可以在下一个排队通道之前跳过,从而将其呈现为 A2B 总线的下游数据槽。因此,这种模式允许从节点接收和传输下游数据。

A2B_DNMASK0 到 A2B_DNMASK3 寄存器为每个可能的下游数据槽提供一位。这些下游掩码位用于选择哪些下游槽被收发器消耗并放置在其 TX 帧缓冲区中,以通过 I2S/TDM 端口输出,这由下游掩码使能位(A2B_LDNSLOTS.DNMASKEN)控制。

当 A2B_LDNSLOTS.DNMASKEN = 0 时,A2B_DNSLOTS 寄存器定义了下游数据槽的数量,这些数据槽从 SCF 后立即开始通过从节点向下游传递,A2B_LDNSLOTS 寄存器定义了在超级帧的下游部分中被收发器捕获的下游数据槽数量。收发器消耗这些数据槽,并不将它们向下游传递到下一个节点。因此,从收发器在 A 侧接收 “A2B_BCDNSLOTS + A2B_DNSLOTS + A2B_LDNSLOTS” 的下游数据槽,并在 B 侧收发器上发送 “A2B_BCDNSLOTS + A2B_DNSLOTS” 的下游数据槽。

注意:当在从收发器中清除 A2B_LDNSLOTS.DNMASKEN 位时,A2B_DNMASK0 到 A2B_DNMASK3 寄存器将被忽略。

当 A2B_LDNSLOTS.DNMASKEN = 1 时,A2B_LDNSLOTS 寄存器定义了本地节点在超级帧的下游部分添加的数据槽数量。这些数据槽在 A2B_DNSLOTS 数据槽之后通过本地节点传递到下游。设置的 A2B_DNMASK0 到 A2B_DNMASK3 寄存器中最显著的位决定了收发器必须接收的数据槽数量(dnmaskrx),以便它识别哪些个别数据槽被放置在其 RX 帧缓冲区中以通过 I2S/TDM 端口输出。因此,从节点在 A 侧收发器接收 MAX(A2B_DNSLOTS, dnmaskrx) 的下游数据槽,并在 B 侧收发器上发送 “A2B_DNSLOTS + A2B_LDNSLOTS” 的下游数据槽。

注意:当在从收发器中设置 A2B_LDNSLOTS.DNMASKEN 位时,A2B_BCDNSLOTS 寄存器将被忽略。

A2B_DNOFFSET 寄存器的值仅在从收发器配置为传输下游数据时才有意义(A2B_LDNSLOTS.DNMASKEN = 1,且 A2B_LDNSLOTS 寄存器非零)。数据将从 RX 帧缓冲区的起始位置放置在启用的下游槽中,除非 A2B_DNOFFSET 寄存器已被编程以在 RX 帧缓冲区中应用偏移量,从而开始填充启用的下游槽。

“使用 A2B_DNMASKn 和 A2B_DNOFFSET 寄存器的从节点”图示例展示了如何在从收发器中使用下游数据槽,并在编程 A2B_DNMASK0、A2B_DNMASK1 和 A2B_DNOFFSET 寄存器后进行数据传输。
在这里插入图片描述

3.3.3 上行数据槽

A2B_UPSLOTS寄存器定义了上游数据槽的数量。对于主收发器,该寄存器定义了来自首个从站收发器将上游传输给主站的数据槽数量。对于从收发器,该寄存器定义了从SRF之后开始的上游数据槽数量(从槽0开始),这些数据槽在收发器中上游传输,无论该从收发器是否使用这些数据槽中包含的信息。

A2B_LUPSLOTS寄存器定义了从收发器在将数据槽通过上游传递之后(如A2B_UPSLOTS寄存器所定义),附加到超级帧上游部分的数据槽数量。放置在上游数据槽中的数据来自收发器的内部RX帧缓冲区,由其I2S/TDM/PDM端口填充。

从收发器选择性地将上游A2B总线数据槽接收至其TX帧缓冲区,以供在从节点的DTXn引脚上输出。在从收发器中,A2B_UPMASK0至A2B_UPMASK3寄存器为每个可能的上游数据槽提供一个位。当这些寄存器中的任意位置被设置时,从收发器会将来自相应槽的上游数据取出,并在接收到的下游数据槽之后放置到其TX帧缓冲区中,然后通过I2S/TDM端口输出至相应的DTXn引脚。

A2B_UPMASK0至A2B_UPMASK3寄存器中设置的最高有效位定义了收发器必须接收的槽数量(upmaskrx),以便将启用的槽适当地放置到TX帧缓冲区中并输出至I2S/TDM端口。为此,从收发器在B侧收发器上接收最大(A2B_UPSLOTS,upmaskrx)个上游数据槽。然后,在A侧收发器上发送“A2B_UPSLOTS + A2B_LUPSLOTS”个上游数据槽。

在DRXn引脚上的可编程I2S/TDM数据通道数量(A2B_UPOFFSET)可以在下一个排队的通道呈现为上游数据槽到A2B总线之前被跳过。默认情况下,从节点会使用其RX帧缓冲区中的第一个条目填充启用的上游槽。可以对A2B_UPOFFSET寄存器进行写入,以定义从RX帧缓冲区中开始填充启用的上游槽的偏移量。

"使用A2B_UPMASKn和A2B_UPOFFSET寄存器的从节点"图提供了一个示例,展示了在编程A2B_UPMASK0、A2B_UPMASK1和A2B_UPOFFSET寄存器之后,从收发器如何使用上游数据槽。
在这里插入图片描述

3.3.4 A2B 带宽

所有上游数据都限制为相同的槽大小(每个槽的位数),所有下游数据也限制为相同的槽大小(每个槽的位数),但下游槽的大小可以与上游槽的大小不同。Analog Devices提供详细的计算表格和SigmaStudio软件,用于计算所有可能情况下的带宽。

“带宽示例”表提供了48kHz采样、同步上游和下游数据槽的带宽示例。为了简化表格,每个节点使用相同数量的上游和下游槽位。上游数据最多使用32个槽位,下游数据最多使用32个槽位。
在这里插入图片描述

3.4 I2S/TDM 端口编程概念

编程I2S/TDM接口涉及选择端口的操作模式,控制用于发送和接收操作的数据信号引脚数量,以及配置BCLK和SYNC信号相对于数据信号的极性和时序。

A2B_I2SGCFG和A2B_I2SCFG寄存器用于配置I2S/TDM端口,以支持这些不同的操作模式。串行模式数据和时钟格式表提供了主收发器和从收发器支持的不同数据和时钟格式的概述。
在这里插入图片描述
在这里插入图片描述

为了支持超过立体声双通道(TDM2)信号,必须将A2B_I2SGCFG.TDMMODE字段设置为启用任何支持的TDM操作模式。一旦配置,所使用的操作模式将适用于每个启用的数据引脚,该模式由A2B_I2SCFG.RX0EN、A2B_I2SCFG.RX1EN、A2B_I2SCFG.TX0EN和A2B_I2SCFG.TX1EN位控制。

当两个方向的数据引脚都被启用时,可以通过设置相应的两引脚交错(A2B_I2SCFG.RX2PINTL 和 A2B_I2SCFG.TX2PINTL)位来启用交错功能。当设置为启用时,偶数槽数据与DTX0/DRX0数据引脚关联,奇数槽数据与DTX1/DRX1数据引脚关联。当清除时,启用槽的下半部分与DTX0/DRX0数据引脚关联,上半部分与DTX1/DRX1数据引脚关联。例如,如果数据格式设置为I2S或TDM2模式,则“TDM2设置的数据通道结构”图摘要说明了数据是如何对齐的。
在这里插入图片描述

注意:单引脚传输可以在DTX0或DTX1引脚上,单引脚接收可以在DRX0或DRX1引脚上。

A2B_I2SGCFG.TDMSS 位用于为 I2S/TDM 端口在 16 位和 32 位串行数据之间进行选择,并且主机有责任确保提供适当的时序信号以适应完整的数据窗口。例如,如果选择了 TDM8 模式(A2B_I2SGCFG.TDMMODE = 0b010),那么主机必须为数据提供 128 个(8×16 位,当 A2B_I2SGCFG.TDMSS = 1 时)或 256 个(8×32 位,当 A2B_I2SGCFG.TDMSS = 0 时)BCLK 脉冲以及适当的同步信号(根据 A2B_I2SGCFG.ALT 位的设置,要么脉冲要么保持 50% 的占空比),如 I2S/TDM8 示例时序图所示。
在这里插入图片描述

如 I2S/TDM8 示例时序图所示,TDM 通道数据为最高有效位优先格式。当通过 A2B 总线交换的数据并非恰好为 16 位或 32 位(由 A2B_I2SGCFG.TDMSS 位配置)时,收发器期望输入的 TDM 数据通道以最高有效位优先格式到达,并忽略任何低阶位。当输出到本地节点时,收发器以最高有效位优先格式将接收到的 A2B 时隙数据呈现给 I2S/TDM 端口,未使用的低阶位用零填充。例如,如果 A2B 时隙配置为 12 位数据(对于上行时隙,A2B_SLOTFMT.UPSIZE = 1;对于下行时隙,A2B_SLOTFMT.DNSIZE = 1),则 12 位输入数据必须在 TDM 通道中左对齐,并且输出数据由 12 位 A2B 时隙数据后跟四个零位组成。

如果同步信号提前一位到达,可以重新表述为数据比同步信号的相关边沿晚一位到达。I2S/TDM2 至 TDM16 A2B 主设备或从设备图显示了 I2S 的典型时序,以及具有可编程选项的 TDM2 至 TDM16 接口模式。数据在 BCLK 的一个边沿上提供,并在 BCLK 的相反边沿上进行采样(A2B_I2SCFG.TXBCLKINV ≠ A2B_I2SCFG.RXBCLKINV)。
在这里插入图片描述

在 TDM16 模式下,当两个数据引脚都启用时,可使用完整的 32 通道组合带宽。

注意:如果在 TDM32 接口中只有一个数据引脚可用,需谨慎,因为这会将位时钟(BCLK)速率提高到可能发生竞争条件的速度。

A2B 主设备在 BCLK 边沿对数据进行采样,并在前一个相同极性的 BCLK 边沿上更改数据(A2B_I2SCFG.TXBCLKINV ≠ A2B_I2SCFG.RXBCLKINV),如 TDM32 A2B 主设备图所示。
在这里插入图片描述

A2B 从设备在 BCLK 边沿上更改数据,并在下一个相同极性的 BCLK 边沿上对数据进行采样(A2B_I2SCFG.TXBCLKINV ≠ A2B_I2SCFG.RXBCLKINV),如 TDM32 A2B 从设备图所示。
在这里插入图片描述

同步从节点

A2B 从节点可以通过在 A2B_SYNCOFFSET 寄存器中单独补偿其传播延迟来实现完全同步采样。向该寄存器写入非零值可调整 A2B 总线时钟(fSYSBCLK)周期,在该周期中,SYNC 引脚指示特定从收发器的音频帧开始。由于编程值是在同步发生处与随后超帧开始处之间的 SYSBCLK 周期整数的 8 位有符号二进制补码表示,所以只有负值是有效的。

可以编程到 A2B_SYNCOFFSET 寄存器中的最大值定义了一个同步信号,在超帧开始前 104 个 SYSBCLK 周期出现(-104 = 0x98),但该值仅对在完全填充的 A2B 网络拓扑中离主节点最远的从节点有效(A2B_NODEADR.NODE = 0x09)。对于任何更靠近主节点的从节点 n,支持将 I2S/TDM 数据可预测地传输到 A2B 时隙的有效范围是网络中从节点 n 的位置的函数,由以下公式控制:

(-32 - 8n) <= A2B_SYNCOFFSET <= 0。

“支持的同步偏移表”总结了在 SYSBCLK 周期(偏移范围)中任何给定从节点的 A2B_SYNCOFFSET 寄存器的有效设置。
在这里插入图片描述

3.4.1 I2S 降低数据速率

从节点也可以相对于超帧速率(fSYNCM)以降低的频率运行 I2S/TDM 接口。降低后的频率是通过将超帧速率除以一组可编程的值得到的。不同的从节点可以配置为以不同的降低后的 I2S/TDM 速率运行。

A2B_I2SRATE.I2SRATE 位字段用于将超帧 A2B 速率向下分频至降低后的 I2S 速率。它还提供一个控制位 A2B_I2SRRATE.RBUS,以在总线上启用降低速率的数据时隙。总线上的 A2B 数据时隙仅在每“A2B_I2SRRATE.RRDIV + 1”个超帧中传输一次。

A2B_I2SRATE.I2SRATE 位字段可用于将分频系数编程为 2、4 或在 A2B_I2SRRATE.RRDIV 字段中设置的值。如果从节点已禁用 I2S 发送,则 A2B_I2SRATE.SHARE 位可在降低速率的从节点中启用共享 A2B 总线时隙。

A2B_I2SRRCTL 寄存器提供位,允许处理器跟踪全速率音频帧,其中包含新的降低速率样本。通过设置 A2B_I2SRRCTL.ENSTRB 位,可将 IO7 引脚用作选通信号,该位指示更新降低速率数据的音频帧。A2B_I2SRRCTL.STRBDIR 位在将 IO7 引脚用作选通时配置其方向。主节点处的降低速率选通输出基于 A2B_I2SRRATE.RRDIV 字段设置。当 A2B_I2SRRATE.RRDIV 字段不为 1 时,每个节点中都维护降低速率计数,并相应地生成选通输出信号。当选通为输入时,它在 SYNC 的有效边沿上进行采样,并且降低速率计数与之同步。用户必须创建与 A2B_I2SRRATE.RRDIV 设置匹配的选通信号。

A2B_I2SRRSOFFS 寄存器提供一个位字段,用于在超帧增量中移动降低速率从节点中的 SYNC 边沿。

“降低数据速率图”展示了收发器的上游时隙如何降低总线上的超帧速率,允许从节点以降低的采样频率运行,同时禁用(A2B_I2SRATE.SHARE = 0)和启用(A2B_I2SRATE.SHARE = 1)共享。此图是针对一个具有一个主节点和一个从节点的系统绘制的。
在这里插入图片描述

下表显示了根据降低后的速率在系统模式下分类的 I2S/TDM 采样率。
在这里插入图片描述

降低速率功能允许系统设计人员添加以下功能:

1. 从节点可以以从超帧速率分频得到的降低速率运行 I2S/TDM 接口。例如,对于 48 kHz 的超帧速率,降低后的速率可以是 24 kHz、12 kHz、6 kHz、4 kHz、3 kHz、2.4 kHz、2 kHz、1.71 kHz 或 1.5 kHz。从节点上的 I2S/TDM 接收数据可以以降低后的速率向上游或下游发送。不同的从节点可以以不同的降低后的 I2S/TDM 速率运行。

2. 降低速率从节点的 SYNC 信号可以以超帧增量进行调整,以确保降低速率数据传输的延迟最小。

3. 对 BCLK 信号生成的控制可以通过在降低速率的 I2S 数据上快速采样(例如,在 48 kHz 的 I2S/TDM 帧内)或以降低后的 I2S/TDM 速率采样来最小化延迟。

4. 提供在降低速率的 I2S/TDM 数据通道更新时通知处理器的选项。

5. 选择以全连续音频速率(通常为 48 kHz)或降低后的速率运行总线数据时隙。可以通过以下方式降低速率:

a. 对于不包含数据的超帧跳过数据时隙(例如,A2B 总线上仅降低采样率的麦克风节点)。这种方法通过降低总线活动水平来节省功率,但不会增加总线上的信道带宽。当同一节点中的多个 I2S/TDM 通道共享相同的 A2B 数据时隙时,程序不能跳过 A2B 数据时隙。

b. 将节点的总线数据时隙时分复用为多个 I2S/TDM 通道,并且对于超帧不跳过数据时隙。如果在同一 A2B 总线上连接不同类型的从节点(例如,同一总线上带有麦克风或放大器节点的多轴加速度计节点),则使用这种方法。总线必须以全数据速率运行,以允许 A2B 数据时隙共享。这种方法通过允许降低速率的从节点在总线数据时隙上对 I2S/TDM 数据字进行时分复用来增加总线上的信道带宽。

• 以半速率运行的从节点可以使用 2:1 时分复用(同一从节点中的两个 I2S/TDM 通道在一个 A2B 时隙上交替)。

• 以更低速率运行的从节点可以使用 4:1 时分复用(同一从节点中的四个 I2S/TDM 通道在一个 A2B 时隙上交替)。

• 不支持超过 4:1 的 A2B 数据时隙时分复用。

• 不支持节点之间的 A2B 数据时隙时分复用。

• 总线必须以全连续音频速率运行 A2B 数据时隙,以便共享数据时隙。

• I2S/TDM 接收的降低速率数据可以向上游或下游传输。

I2S 降低速率限制

在使用 I2S 降低速率功能时,请遵守以下一般限制。

• 每个从节点只能以单一的 I2S/TDM 速率运行。

• 为 I2S/TDM 接收数据(而非 I2S/TDM 发送数据)配置以降低的 I2S/TDM 速率运行的从节点。这意味着降低速率的从节点必须具有 A2B_I2SCFG.TX0EN = 0 和 A2B_I2SCFG.TX1EN = 0。

• 如果设置了 A2B_I2SRRATE.RBUS 并且配置了降低的速率(A2B_I2SRRATE.RRDIV > 1),从节点必须具有 A2B_I2SRATE.I2SRATE 值为 0(SFF x 1)或 3(SFF / A2B_I2SRRATE.RRDIV)。

数据时隙共享的限制(A2B_I2SRATE.SHARE = 1)

在使用 I2S 降低速率功能时,请遵守以下数据时隙共享限制。

• 总线必须以全数据速率运行(A2B_I2SRRATE.RBUS = 0)才能进行 A2B 数据时隙共享。当同一节点中的多个 I2S/TDM 通道共享相同的 A2B 数据时隙时,不能使用 A2B 数据时隙跳过。

• 由具有 A2B_I2SRATE.SHARE = 1 的降低速率从节点在 A2B 总线上产生的数据时隙必须由全速率或增加速率的节点从 A2B 总线接收。

• 如果在降低速率的从节点中设置了 A2B_I2SRATE.SHARE 位,则最大同步偏移为一个超帧(A2B_I2SRRSOFFS.RRSOFFSET 必须为 0 或 1)。

如果在降低速率的从节点中设置了 A2B_I2SRATE.SHARE 位且没有同步偏移(A2B_I2SRRSOFFS.RRSOFFSET = 0),则相对于 N(可用的上行和下行时隙数量),对节点编程有进一步的限制。例如,如果 TDMS 是降低速率从节点的一个引脚上每帧的时隙数量(可以是 2、4、8、16 或 32),则 N 的计算如下表所示:
在这里插入图片描述

如果降低速率的从节点设置了 A2B_I2SCFG.RX0EN、A2B_I2SCFG.RX1EN 和 A2B_I2SCFG.RX2PINTL 位,那么“A2B_LUPSLOTS + A2B_UPOFFSET”必须小于等于 2N。否则,“A2B_LUPSLOTS + A2B_UPOFFSET”必须小于等于 N。

如果降低速率的从节点正在生成下游数据时隙(A2B_LDNSLOTS.DNMASKEN = 1),同样的限制适用于“A2B_LDNSLOTS + A2B_DNOFFSET”。

备用 BCLK 速率(A2B_I2SRATE.BCLKRATE)的限制

在使用 I2S 降低速率功能时,请遵守以下备用 BCLK 速率限制。

- 在降低速率的从节点中,如果 I2S 速率设置为 SFF / 2(A2B_I2SRATE.I2SRATE = 1),请勿将 BCLK 频率设置为 SYNC x 4096(A2B_I2SRATE.BCLKRATE!= 2)。

- 如果系统级降低速率除数为 1(A2B_I2SRRATE.RRDIV = 1)且 I2S 速率设置为“SFF / A2B_I2SRRATE.RRDIV”(A2B_I2SRATE.I2SRATE = 3),请勿将 BCLK 频率设置为“SYNC x 2048”(A2B_I2SRATE.BCLKRATE = 1)或“SYNC x 4096”(A2B_I2SRATE.BCLKRATE = 2)。

- 如果系统级降低速率除数为 2(A2B_I2SRRATE.RRDIV = 2)且 I2S 速率设置为“SFF / A2B_I2SRRATE.RRDIV”(A2B_I2SRATE.I2SRATE = 3),请勿将 BCLK 频率设置为“SYNC x 4096”(A2B_I2SRATE.BCLKRATE = 2)。

- 如果在降低速率的从节点中,BCLK 频率不是由 A2B_I2SGCFG 寄存器中编程的值确定的(A2B_I2SRATE.BCLKRATE!= 0),则同步偏移不能超过 1 个超帧(A2B_I2SRRSOFFS.RRSOFFSET < 2)。

3.4.2 I2S 增加数据速率

A2B 从收发器支持相对于超帧速率(fSYNCM)在 I2S/TDM 接口上提高采样率。从设备的本地采样率可以在 A2B_I2SRATE 寄存器中编程为 1×fSYNCM、2×fSYNCM 或 4×fSYNCM。例如,给定 48kHz 的超帧频率,本地采样率可以分别设置为 48kHz、96kHz 或 192kHz。“提高数据速率图”展示了在一个具有一个主设备和一个从设备的系统中,对于不同的 A2B_I2SRATE 位设置(A2B_I2SRATE.REDUCE = 0),A2B 超帧的下行和上行时隙如何在从收发器的 DTX0/DTX1 和 DRX0/DRX1 引脚上分布。
在这里插入图片描述

“提高数据速率示例图”进一步基于一个示例系统说明了 A2B_I2SRATE 寄存器设置的行为。在该图中,两个从收发器(S1 和 S2)都设置为 2×fSYNCM 速率模式。然而,S1 的 A2B_I2SRATE.REDUCE 位设置为 1。图中的波形说明了 A2B_I2SRATE.REDUCE 位对上行和下行时隙的影响。当设置 A2B_I2SRATE.REDUCE 位时,对于 2×fSYNCM 速率,DRX0/DRX1 引脚上仅前两个通道用于上行时隙,其他两个通道被忽略。对于 DTX0/DTX1 发送器,当设置 A2B_I2SRATE.REDUCE 位时,对于 2×fSYNCM 速率,两个本地下行时隙在 DTX0/DTX1 引脚上重复。
在这里插入图片描述
注意:增加的数据速率功能不是采样率转换器。帧缓冲区条目到 TDM 时隙的映射是顺序发生的,因此增加速率的 TDM 需要足够的总线时隙来使数据对齐。或者,可以使用 TX 交叉开关功能来产生看起来像采样转换的预期 TX 映射。

3.5 远距离 GPIO

此功能允许在初始编程后无需主机干预即可通过 A2B 总线进行 GPIO 通信。主机仅需通过使用虚拟端口来初始化远程 GPIO 功能。

远程 GPIO 功能具有以下特点:

• 由主节点管理的八个并行 1 位虚拟端口。主节点可以在 A2B_GPIODDAT 寄存器中读取每个虚拟端口的状态。

• GPIO 引脚到虚拟端口 0 至 7 的灵活映射方案。

• GPIO 引脚可以配置为输入,以更新 A2B_GPIODDAT 寄存器的内容,或者配置为输出,以反映 A2B_GPIODDAT 寄存器的内容。

• 当多个虚拟端口映射到一个 GPIO 输出引脚时,这些值会进行或运算。

• 当多个 GPIO 输入引脚映射到一个虚拟端口时,即使它们来自多个节点,这些值也会进行或运算。

配置

在尝试对给定引脚上的远程 GPIO 功能进行配置之前,首先根据“GPIO 引脚配置表”确认该引脚可用于 GPIO。
在这里插入图片描述

如果引脚可用作 GPIO,可通过设置远程 GPIO 使能(A2B_GPIODEN)寄存器中的相应使能位来启用远程 GPIO。当某一位被设置时,相应的 GPIO 引脚可以使用远程 GPIO 掩码寄存器(A2B_GPIOD0MSK 至 A2B_GPIOD7MSK,分别对应具有 GPIO 功能的引脚 IO0 至 IO7)映射到一个或多个远程 GPIO 虚拟端口。这些寄存器中的位 0 至位 7 分别对应虚拟端口 0 至 7。如果这些寄存器中的某一位被设置,它将与该寄存器相关联的 GPIO 引脚映射到相应的虚拟端口。

如果为给定的具有 GPIO 功能的引脚启用了远程 GPIO,则该引脚的方向完全通过 GPIO 输出使能寄存器(A2B_GPIOOEN)控制,而不是由该寄存器和互补的 GPIO 输入使能寄存器(A2B_GPIOIEN)组合控制。当 A2B_GPIOOEN 寄存器中的某一位被设置时,相关联的 GPIO 引脚是远程 GPIO 的输出。如果 A2B_GPIOOEN 寄存器中的该位被清零,则相关联的 GPIO 引脚是远程 GPIO 的输入。在对感兴趣的引脚使用远程 GPIO 时,无需对 A2B_GPIOIEN 寄存器进行编程。

如果 GPIO 引脚是输入(A2B_GPIOOEN 中的相关位为 0),本地节点会更新与相应远程 GPIO 掩码寄存器(A2B_GPIOD0MSK.IOD0MSK 至 A2B_GPIOD7MSK.IOD7MSK)中设置位相关联的虚拟端口。可以在远程 GPIO 数据寄存器(A2B_GPIODDAT)中读取虚拟端口值。

如果 GPIO 引脚是输出(A2B_GPIOOEN 中的相关位为 1),映射到该引脚的虚拟端口(由相关远程 GPIO 掩码寄存器(A2B_GPIOD0MSK.IOD0MSK 至 A2B_GPIOD7MSK.IOD7MSK)中的设置位确定)进行或运算,以产生 GPIO 输出值(A2B_GPIODDAT 寄存器中相应位的逻辑或)。

注意:A2B_GPIODDAT 寄存器是只读的。建议主机始终从主节点读取此寄存器。

远程 GPIO 反转寄存器(A2B_GPIODINV)允许对 GPIO 引脚输入或输出进行反转。当此寄存器中的某一位被设置时,相关联的 GPIO 引脚信号被反转。如果 GPIO 引脚是虚拟端口的输入(A2B_GPIOOEN 中的相关位为 0),则在从引脚输入的方向上进行反转;如果引脚是虚拟端口的输出(A2B_GPIOOEN 中的相关位为 1),则在输出到 GPIO 引脚的方向上进行反转。

如果多个节点正在更新同一个虚拟端口,则可以使用 A2B_GPIODINV 寄存器设置将行为从线或改为线与。例如,要创建多个高电平有效的 GPIO 位的线与,必须反转 GPIO 输入和 GPIO 输出。

将多个 GPIO 输入映射到一个虚拟端口

当多个节点的 GPIO 输入映射到同一个虚拟端口时,该协议将输入引脚视为线或连接到虚拟端口。当虚拟端口为低电平(非活动状态)时,任何设置虚拟端口的请求都会导致主节点发出命令,以更新系统中所有的 A2B_GPIODDAT 寄存器。

当虚拟端口为高电平(活动状态)时,任何清除虚拟端口的请求都会导致主节点发出特殊命令,以通知所有从节点该请求。如果任何从节点拒绝该请求,主节点会看到请求被拒绝,并且 A2B_GPIODDAT 寄存器将保留其值。如果没有从节点拒绝该请求,主节点会看到请求被接受,并随后更新 A2B_GPIODDAT 的值。

3.5.1 GPIO 远程编程示例

以下步骤描述了使用远程 GPIO 的引脚映射情况。

注意:远程 GPIO 编程必须在节点被发现后进行。有关节点发现的更多信息,请参阅 “简单发现流程” 和 “附录 A:其他发现流程示例” 部分。

3.5.1.1 将主节点的 DRX1/IO6 引脚映射到从节点 2 的 ADR1/IO1 引脚

以下步骤描述了如何将主节点的 DRX1/IO6 引脚映射到从节点 2 的 ADR1/IO1 引脚。

1. 向主节点的 A2B_GPIOD6MSK 寄存器写入 0x04,以将 DRX1/IO6 引脚映射到虚拟端口 2。

2. 向主节点的 A2B_GPIODEN 寄存器写入 0x40,以在 DRX1/IO6 引脚上启用远程 GPIO 访问。

3. 向从节点 2 的 A2B_GPIOOEN 寄存器写入 0x02,以启用 ADR1/IO1 引脚的 GPIO 输出。

4. 向从节点 2 的 A2B_GPIOD1MSK 寄存器写入 0x04,以将虚拟端口 2 映射到 ADR1/IO1 引脚。

5. 向从节点 2 的 A2B_GPIODEN 寄存器写入 0x02,以在 ADR1/IO1 引脚上启用远程 GPIO 访问。

2.5.1.2 将从节点 1 的 DTX1/IO4 引脚映射到主节点的 ADR1/IO1 引脚

以下步骤描述了如何将从节点 1 的 DTX1/IO4 引脚映射到主节点的 ADR1/IO1 引脚。

1. 向从节点 1 的 A2B_GPIOD4MSK 寄存器写入 0x10,以将 DTX1/IO4 引脚映射到总线 GPIO 端口 4。

2. 向从节点 1 的 A2B_GPIODEN 寄存器写入 0x10,以在 DTX1/IO4 引脚上启用远程 GPIO 访问。

3. 向主节点的 A2B_GPIOOEN 寄存器写入 0x02,以启用 ADR1/IO1 引脚的 GPIO 输出。

4. 向主节点的 A2B_GPIOD1MSK 寄存器写入 0x10,以将总线 GPIO 端口 4 映射到 ADR1/IO1 引脚。

5. 向主节点的 A2B_GPIODEN 寄存器写入 0x02,以在 ADR1/IO1 引脚上启用远程 GPIO 访问。

2.5.1.3 将从节点 0 至 2 的 ADR1/IO1 引脚映射到主节点的 ADR1/IO1 引脚

以下步骤描述了如何将从节点 0 至 2 的 ADR1/IO1 引脚映射到主节点的 ADR1/IO1 引脚。

1. 对于从节点 2、1 和 0,向 A2B_GPIOD1MSK 寄存器写入 0x01,以将每个从节点的 ADR1/IO1 引脚映射到总线 GPIO 端口 0。

2. 对于从节点 2、1 和 0,向 A2B_GPIODEN 寄存器写入 0x02,以在每个从节点的 ADR1/IO1 引脚上启用远程 GPIO 访问。

3. 向主节点的 A2B_GPIOOEN 寄存器写入 0x02,以启用主节点 ADR1/IO1 引脚的 GPIO 输出。

4. 向主节点的 A2B_GPIOD1MSK 寄存器写入 0x01,以将总线 GPIO 端口 0 映射到主节点的 ADR1/IO1 引脚。

5. 向主节点的 A2B_GPIODEN 寄存器写入 0x02,以在主节点的 ADR1/IO1 引脚上启用远程 GPIO 访问。

3.6 收发器识别

每个 A2B 收发器都有一个供应商 ID 寄存器(A2B_VENDOR)、一个产品 ID 寄存器(A2B_PRODUCT)和一个版本 ID(A2B_VERSION)寄存器,用于向主机指示系统中存在哪些 A2B 收发器。每个 A2B 收发器供应商都被分配一个唯一的供应商 ID(ADI 的 A2B 收发器使用 0xAD 作为供应商 ID)。A2B_PRODUCT 和 A2B_VERSION 寄存器由芯片供应商分配,以唯一地识别芯片并表明 A2B 的互操作性。收发器型号使用 0x26(AD2426W)、0x27(AD2427W)和 0x28(AD2428W)作为其产品 ID。

每个 A2B 收发器还具有一个 A2B_CAPABILITY 寄存器,用于识别可用的控制接口,因此可以确定是否存在 I2C 接口(A2B_CAPABILITY.I2CAVAIL = 1)。

EEPROM 中的自动配置系统信息

在 A2B 系统中,如果从模块包含配置存储器(I2C EEPROM),且其组织和内容如附录 C“模块 ID 和模块配置存储器”中所述,那么可以确定每个 A2B 节点的供应商和特定产品 ID 以进行自动配置。当主机事先不知道确切的系统配置时,可以使用自动配置进行发现。特定从节点的配置命令也可以通过使用可选配置块存储在配置存储器中。

3.7 待机模式

在待机模式下,A2B 总线上没有上行流量。仅存在一个最小的(19 位)同步控制帧(SCF)以保持所有从节点同步,并且没有同步参考帧(SRF)。报头计数错误和 CRC 错误被忽略,并且数据时隙被禁用。在待机模式下,GPIO 设置保持其值。

在正常模式下,主机可以写入主收发器的 A2B_DATCTL 寄存器以进入待机模式,但写入直到新的结构应用于系统才生效。主机执行以下操作:

1. 在主收发器中设置 A2B_DATCTL.STANDBY 位,以生成广播写入 0x80,从而在所有已发现的从节点中设置 A2B_DATCTL.STANDBY 位。向 A2B_DATCTL 寄存器写入 0x80 可确保数据时隙被禁用。

2. 在主收发器中设置 A2B_CONTROL.NEWSTRCT 位以应用新结构。

在应用新结构后,系统转换为待机模式。主机可以通过向主节点中的 A2B_DATCTL 寄存器写入 0x00 将系统恢复到正常模式。此指令会生成对所有从节点中的 A2B_DATCTL 寄存器广播写入 0x00。当系统恢复到正常模式时,主节点向主机提供待机完成中断(A2B_INTTYPE = 0xFE)。

3.8 总线监控支持

总线监控模式使收发器能够作为无源汽车音频总线监控器(也称为嗅探器)发挥作用。A2B 测试设备使用这种模式。只有主处理器能够允许 A2B 总线段上的总线监控器监控同步数据内容。为了允许这种同步数据监控,主机必须设置主收发器中的 A2B_DATCTL.ENDSNIFF 位。这种配置会触发向连接的总线监控设备进行 A2B 总线信息广播。

“总线监控器行为” 图展示了在 A2B 网络中,插入在从设备 0 和 1 之间的一个总线监控节点。
在这里插入图片描述

总线监视器在系统中是被动的;它不响应总线同步控制帧(SCF),也不为总线提供任何数据。它仅使用 A 侧收发器,而 B 侧收发器处于停用状态。在总线监视器模式下,收发器与 SCF 同步,并可以窥探 SCF 控制写入以配置其总线接口,使其与被监视的下游节点匹配。A2B 总线监视器收发器使用其 I2S/TDM 端口将 A2B 总线流量传输到协议分析电路。

总线监视器节点的行为如下:

1. B 侧(下游)收发器被禁用。

2. A 侧(上游)收发器被启用为仅接收(不发送)。

3. SRF 生成被禁用。

4. I2S/TDM 接口配置为 32 位数据宽度:

- 下游 SCF 在 DTX0 引脚上传输。

- 上游 SRF 在 DTX1 引脚上传输。

- 只有当 A2B 总线主设备被编程以启用此功能时,数据时隙位才能从 DTXn 引脚流出。

- 下游时隙在 DTX0 引脚上流出。

- 上游时隙在 DTX1 引脚上流出。

- 如果 A2B 总线上的数据时隙比可用的 I2S/TDM 通道多,则可编程偏移确定在 I2S/TDM 通道上监视哪些数据时隙。

注意:当总线监视器接收器被禁用时,必须使用外部开关来控制进入处于总线监视器模式的收发器 A 侧的 LVDS 流量。

在发现和初始化后连接到 A2B 总线的总线监视器可能会错过广播,因此同步数据时隙的监视被禁用。首选方法是在初始化和发现之前连接总线监视器。或者,为了完全支持必须看到数据时隙但在发现后连接的总线监视器,主机可以定期写入 A2B_DATCTL 寄存器以生成启用数据时隙嗅探广播。总线监视器节点微控制器必须设置 A2B_BMMCFG.BMMEN 位以启用总线监视器模式,并且在连接到和从 A2B 总线断开时可以进一步配置总线监视器收发器。

• A2B_BMMCFG.BMMNDSC 位决定总线监视器是在系统发现和初始化之前还是之后连接。当该位清零(=0)时,监视器在 A2B 发现之前连接,因此发现序列会自动设置总线定时属性。当该位置位(=1)时,总线定时属性必须由总线监视器节点微控制器使用本地 I2C 寄存器写入进行设置。

• A2B_BMMCFG.BMMRXEN 位用于在连接总线监视器时使 LVDS A 侧收发器输入保持静态。它还用于在不实际断开总线监视器节点的情况下重新启动总线监视器锁定序列。

除了在 A2B_BMMCFG 寄存器中配置和启用总线监视器模式外,使用总线监视器模式还会影响以下 A2B 寄存器中位的含义和设置:

• I2S 全局配置寄存器(A2B_I2SGCFG)

• A2B_I2SGCFG.INV、A2B_I2SGCFG.EARLY 和 A2B_I2SGCFG.ALT 位必须进行编程以匹配协议分析器的接口。

• A2B_I2SGCFG.TDMSS 位必须编程为 0 以设置 32 位 TDM 时隙大小。

• A2B_I2SGCFG.TDMMODE 字段必须设置为匹配协议分析器的能力:

• TDM2 允许监视 SCF 和 SRF 帧。 • TDM4 允许监视 SCF 和 SRF 帧,以及同时最多两个上游和两个下游数据时隙。

• TDM8 允许并行监视 SCF 和 SRF 帧,以及同时最多六个上游和六个下游数据时隙。

• TDM16 允许并行监视 SCF 和 SRF 帧,以及同时最多 14 个上游和 14 个下游数据时隙。

• TDM32 允许并行监视 SCF 和 SRF 帧,以及同时最多 30 个上游和 30 个下游数据时隙。

• I2S 配置寄存器(A2B_I2SCFG)

• 设置 A2B_I2SCFG.TX0EN 位可在 DTX0 引脚上启用下游数据输出。

• 设置 A2B_I2SCFG.TX1EN 位可在 DTX1 引脚上启用上游数据输出。

• 设置 A2B_I2SCFG.TXBCLKINV 位以匹配协议分析器的接口。

• A2B_I2SCFG.TX2PINTL、A2B_I2SCFG.RXBCLKINV 和 A2B_I2SCFG.RX0EN 位必须编程为 0。

• 本地上游时隙偏移寄存器(A2B_UPOFFSET)——确定在 A2B 总线上接收的上游数据时隙与作为 I2S/TDM 通道驱动到 DTX1 引脚上的上游数据时隙之间的数据时隙偏移量。如果时隙数量超过所选 TDM 格式中可用的传输通道数量,则该寄存器在监视较高或较低索引时隙之间进行编程。

• 本地下游时隙偏移寄存器(A2B_DNOFFSET)——确定在 A2B 总线上接收的下游数据时隙与作为 I2S/TDM 通道驱动到 DTX0 引脚上的下游数据时隙之间的数据时隙偏移量。如果时隙数量超过所选 TDM 格式中可用的传输通道数量,则该寄存器在监视较高或较低索引时隙之间进行编程。

3.8.1 I2S/TDM 通道格式

在待机模式下,A2B 总线上没有上行流量。只有一个最小的(19 位)SCF 存在以保持所有从属节点同步,并且没有 SRF。报头计数错误和 CRC 错误被忽略,并且数据时隙被禁用。在待机模式下,GPIO 设置保持其值。

以下示例描述了总线监视器模式下的 I2S/TDM 输出格式。

DTX0 引脚在前两个 32 位 I2S/TDM 传输通道中传输下游帧状态位,随后是下游控制帧信息。如果可用且被允许,更多的 I2S/TDM 通道携带下游同步数据。A2B_DNOFFSET 寄存器在下游数据时隙和 DTX0 上产生的数据时隙之间提供一个偏移量。

DTX1 引脚在前两个 32 位 I2S/TDM 传输通道中传输上游帧状态位,随后是上游响应帧信息。如果可用且被允许,更多的 I2S/TDM 通道携带上游同步数据。A2B_UPOFFSET 寄存器在上游数据时隙和 DTX1 上产生的数据时隙之间提供一个偏移量。

在发现和初始化期间,主机在主收发器中编程数据时隙格式寄存器(A2B_SLOTFMT),该寄存器会自动将此信息广播到从属节点。连接的总线监视器可以监听此控制消息并推导出时隙大小设置(最大 32 位)。

数据始终以最高有效位对齐的方式传输。

奇偶校验位不包括在 I2S/TDM 通道中,但 A2B_ERRMGMT 寄存器可用于在数据的最低有效位之下的最低有效位中或在数据通道之后的附加错误通道中指示数据时隙错误。

“TDM16 下游示例(DTX0 引脚)寄存器”图显示了在 A2B_I2SGCFG.TDMMODE = TDM16 时为在 DTX0 引脚上进行监视而产生的下游数据。
在这里插入图片描述

“TDM16 上游示例(DTX1 引脚)寄存器”图显示了在 A2B_I2SGCFG.TDMMODE = TDM16 时为在 DTX1 引脚上进行监视而产生的上游数据。
在这里插入图片描述

3.8.2 启动序列

所需的启动序列取决于总线监视器节点是在 A2B 系统发现和初始化之前还是之后连接到总线,这由 A2B_BMMCFG.BMMNDSC 位控制。

在发现之前

当 A2B_BMMCFG.BMMNDSC = 0 时,会发生以下事件序列:

1. 确保被探测的总线段没有直流偏置(紧邻上游节点中的 A2B_SWCTL.ENSW = 0)。

2. 将总线监视器物理连接到总线段(探测点)。

3. 通过 I2C 设置 A2B_BMMCFG.BMMEN = 1 和 A2B_BMMCFG.BMMRXEN = 1。

4. 通过 A2B_I2SGCFG、A2B_I2SCFG、A2B_I2SRATE、A2B_SYNCOFFSET 和 A2B_ERRMGMT 寄存器中的 I2C 配置 I2S/TDM 传输设置,以匹配所需的定时和格式特性。

5. 主机通过向被探测的总线段施加总线电源,然后在主收发器中写入 A2B_DISCVRY 寄存器,开始发现下一个节点。

6. 在总线监视器节点锁定其锁相环后,I2S/TDM 接口开始传输。总线监视器节点上的 IRQ 引脚变为高电平,以指示节点找到锁定。此事件应在下一个节点开始响应之前发生。

7. 对被探测总线段上的下一个从属节点中的 A2B_BCDNSLOTS、A2B_LDNSLOTS、A2B_LUPSLOTS、A2B_DNSLOTS、A2B_UPSLOTS、A2B_SLOTFMTA2B_DATCTL、A2B_TESTMODE、A2B_I2SRRATE、A2B_I2SRRCTL、A2B_UPMASK0 至 A2B_UPMASK3 以及 A2B_DNMASK0 至 A2B_DNMASK3 寄存器的写入在总线监视器节点中被镜像,在那里它们可通过 I2C 接口在本地访问。总线上新数据结构的应用(当主机在主收发器中设置 A2B_CONTROL.NEWSTRCT 位时)也应用于总线监视器节点。

8. 除非总线监视器看到主机在主收发器中设置 A2B_DATCTL.ENDSNIFF 位而产生的广播写入,否则 DTX[1:0]引脚不会传输数据时隙内容。

3.9 优化电磁兼容性能

电磁兼容性(EMC)性能在 A2B 收发器系统设计中至关重要。收发器具有几个可编程特性,可用于优化 EMC 性能:

• 扩频时钟。

• 可编程 LVDS 发送电平。

• 仅数据和仅电源总线操作。

3.9.1 扩频时钟

扩频时钟可用于减少印刷电路板(PCB)上的窄带发射。默认情况下,收发器上的扩频时钟被禁用,但对 A2B_PLLCTL 寄存器的写入可以在发现期间启用扩频时钟。A2B_PLLCTL 寄存器包含的设置可对收发器内部的时钟启用扩频时钟。

如果为内部时钟启用了扩频时钟支持,那么也可以为 I2S 接口和编程的 CLKOUT 启用扩频时钟。为内部时钟、CLKOUT 和 I2S 接口启用扩频时钟可以使特定节点上的窄带发射降低几 dB。

注意:当在时钟输出上启用扩频时钟时,该时钟上的时间间隔误差(TIE)抖动会增加。

要启用具有扩频时钟的 A2B 网络,所有节点必须设置为相同的深度和频率。按照以下顺序设置节点:

1. 发现所有从属节点。

2. 通过对每个节点的 A2B_PLLCTL 寄存器进行广播写入,为所有节点(包括主节点)配置扩频。

对于具有扩频功能的单个节点(包括使用 AD2421/AD2422/AD2425 型号的系统),请遵循以下顺序:

1. 发现所有节点。

2. 一次为一个从属节点配置扩频(通过设置 A2B_PLLCTL 寄存器)。

a. A2B_PLLCTL.SSDEPTH 位仅限于设置为 0x0。

b. 相邻节点必须具有相同的 A2B_PLLCTL.SSFREQ 设置。

注意:当系统中的所有节点都启用扩频时,对 A2B_PLLCTL 寄存器进行广播写入是强制性的。设置 A2B_NODEADR.BRCST 位,并使用 A2B_BUS_ADDR 对 A2B_PLLCTL 寄存器进行写入。广播写入会影响所有节点。它首先在主节点中发生,然后在下一个 SCF 期间在从属节点中发生。

扩频的顺序编程必须遵循单个节点的准则。对于扩频时钟的顺序编程,以及在启用扩频时钟的单个节点的系统中,A2B_PLLCTL.SSDEPTH 位仅限于设置为 0x0。

无论是否启用扩频时钟,A2B_PLLCTL.SSMODE 字段都可以设置为仅协议或 I2S+协议。

3.9.2 可编程 LVDS 发送电平

LVDS 发送器可以设置为以高、中或低电平发送信号。较高的发送电平对电磁干扰具有更强的抗扰性,而较低的发送电平可以减少连接 A2B 总线节点的双绞线电缆的辐射。

可以通过调整 A2B_TXACTL(A 侧)或 A2B_TXBCTL(B 侧)寄存器中的设置来改变 LVDS 发送电平。如果需要非默认的发送电平,则必须在设置 A2B_SWCTL.ENSW 位之前,在每个节点上(在发现期间)写入 A2B_TXxCTL。必须设置 A2B_TXACTL.TXAOVREN 使能位,才能使 TXxLEVEL 设置生效。

3.9.3 仅数据和仅电源总线操作

A2B 总线可以在不闭合开关以向下游发送直流偏置的情况下运行。这要求在发现期间设置 A2B_CONTROL.SWBYP 位而不是 A2B_SWCTL.ENSW 位。

相反,A2B_SWCTL.DISNXT 位允许在没有数据的情况下向下游发送直流偏置。此设置应与在发现期间设置 A2B_SWCTL.ENSW 位的写入同时应用。 这些模式主要用于调试目的。

3.10 交叉或直通布线

直通电缆可以通过在 B 侧连接器处交换直流耦合电路来支持。对于设计用于支持直通电缆的硬件,在发现期间必须设置 A2B_CONTROL.XCVRBINV 位以确保正常操作。在为每个使用直通电缆连接的从属节点设置 A2B_SWCTL.ENSW 位之前进行此操作。

重要提示:在进行其他操作(例如写入 A2B_CONTROL.NEWSTRCT 位(应用新结构))时,确保 A2B_CONTROL.XCVRBINV 位不会被覆盖。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

音频金钟小赵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值