【AD2426/7/8_A2B收发器技术参考手册】第四章 事件控制

四,A2B 事件控制

A2B 协议引擎包含一组寄存器,可为向主机发出的中断提供支持。这些寄存器包括:

• A2B_INTSTAT;

• A2B_INTSRC;

• A2B_INTTYPE;

• A2B_INTPND0 至 A2B_INTPND2;

• A2B_INTMSK0 至 A2B_INTMSK2。

要在主节点中注册从属中断请求,请在 A2B_INTMSK0 和 A2B_INTMSK1 寄存器中取消屏蔽从属节点中断。仅在主节点中,还需在 A2B_INTMSK2 寄存器中取消屏蔽中断。

A2B_IRQ 引脚的有效极性通过 A2B_PINCFG 寄存器进行设置。默认情况下,中断请求通过 A2B_IRQ 引脚上的高电平以及 A2B_INTSTAT.IRQ 位的设置来指示。主收发器中的活动中断请求在主机读取主收发器 A2B_INTTYPE 寄存器时被清除并修订。这个过程也适用于主节点接收来自从属节点的中断请求。

主收发器寄存器(A2B_INTSRC)指示活动中断是由主节点还是由从属节点生成(在从属节点生成的情况下,它还提供从属节点的 ID)。主收发器中的 A2B_INTTYPE 寄存器包含主机用于确定中断原因的信息。优先级逻辑自动确定 A2B_INTSRC 和 A2B_INTTYPE 寄存器的值。在读取 A2B_INTTYPE 寄存器后,可能会出现其他待处理的中断请求。当读取 A2B_INTTYPE 寄存器时,A2B_IRQ 引脚在一个 fSYSBCLK 周期(约 20 纳秒)内变为低电平。如果有待处理的中断请求,该引脚会立即转换为高电平。

当被屏蔽的中断发生时,它们会作为粘连位记录在 A2B_INTPND0 至 A2B_INTPND2 寄存器中,但不会触发中断请求。一旦取消屏蔽,任何待处理的中断将按照以下优先级顺序触发中断请求:

• 主节点中断优先于从属节点中断。

• 较低的从属节点 ID 号优先于较高的 ID 号。

• 较低编号的 A2B_INTTYPE 优先于较高编号的。

• A2B_INTPND0 优先于 A2B_INTPND1,A2B_INTPND1 优先于 A2B_INTPND2。

• 待处理寄存器 A2B_INTPND0 至 A2B_INTPND2 中较低编号的位优先于较高编号的位。

当主收发器从从属节点接收到中断请求时,IRQ 信号会立即被置位。

主机对中断请求的响应

当主机从主节点接收到中断请求(由 IRQ 信号变为高电平指示)时,主机可以读取 A2B_INTSRC 和 A2B_INTTYPE 寄存器,分别获得生成中断请求的从属节点 ID 以及中断请求的类型。这可以通过执行一次从 A2B_INTSRC 地址开始的双字节读取来实现,这样可以同时读取这两个寄存器。在完成 A2B_INTTYPE 寄存器的读取后,如果没有其他待处理的中断请求,活动中断将被清除且 IRQ 变为低电平。

中断延迟

中断在同步响应帧(SRF)内从从属收发器向上游发送到主收发器。在 SRF 开始后(在从属节点开始驱动 AP 和 AN 引脚后)触发的中断会在下一个超帧的 SRF 中发送到主节点。假设没有其他更高优先级的中断屏蔽所讨论的 IO 引脚中断,从属节点 IO 引脚和主节点 IRQ 之间的延迟是以下各项之和:

• 引脚中断生成的四个 SYSBCLK 周期(81.4 纳秒)+

• 进入 SRF 的一个超帧延迟(20833.3 微秒)+

• SRF 长度的 64 个 SYSBCLK 周期(1302.1 纳秒)+

• 主接收延迟的五个 SYSBCLK 周期(101.7 纳秒)+

• 主节点中 IRQ 逻辑的两个 SYSBCLK 周期(40.7 纳秒)

除了这总共 22.36 微秒的延迟之外,对于 SRF 必须经过的每个从属节点,还有额外的九个 SYSBCLK 周期的延迟(N×183.1 纳秒)。例如,在一个有三个从属节点的系统中,从从属节点 2 到主节点的 GPIO 中断的最大延迟为 22.36 微秒+(2×0.183)微秒=22.73 微秒。

4.1 错误管理

以下部分提供有关错误管理的信息。在 A2B 总线上传输的所有数据在接收端都会检查线路码违规(DDERR)情况。此外,同步控制帧(SCF)和同步响应帧(SRF)使用循环冗余码(CRC),并且每个同步数据时隙都使用一个奇偶校验位来增加错误检测的确定性,如帧结构细节图所示。

在这里插入图片描述

4.1.1 下行数据错误检测

16 位循环冗余码(CRC)是同步控制帧(SCF)内任何下行控制数据的一部分。在接收端,这个 CRC 用于确定 SCF 数据在传输过程中是否被损坏。

SCF 有一个前导码来指示超帧的开始。它提供一种位模式,供从属节点用于时钟和帧同步。如果从属节点未检测到这个帧同步,则该错误被视为 CRC 错误。

4.1.2 上行数据错误检测

16 位循环冗余码是同步响应帧(SRF)内任何上行响应数据的一部分。在接收端,这个 CRC 用于确定 SRF 数据在传输过程中是否被损坏。中断请求字段在 SRF 内部有一个额外的 CRC(ICRC),以防止触发错误的中断。

SRF 有一个前导码来指示响应帧的开始。它提供一种位模式,用于时钟和帧同步。如果上游节点未检测到这个帧同步,则在从属节点中该错误被捕获为 SRFCRCERR,在主节点中被捕获为 CRCERR。

4.1.3 数据时隙错误纠正

节点中接收数据时隙的自动纠正可能情况如下所述。

• 如果未看到帧同步前导码,则从总线上接收的所有数据时隙将自动被替换为先前的良好值。

• 如果从属节点在同步控制帧(SCF)中检测到 CRC 错误(A2B_INTPND0.CRCERR = 1),则从总线上接收的所有下行数据时隙将被替换为先前的良好值。

• 如果主节点在同步响应帧(SRF)中检测到 CRC 错误(A2B_INTPND0.CRCERR = 1),则从总线上接收的所有上行数据时隙将被替换为先前的良好值。

• 如果在数据时隙中检测到数据解码错误(A2B_INTPND0.DDERR = 1)或数据奇偶校验错误(A2B_INTPND0.DPERR = 1),则接收到的错误数据时隙将自动被替换为先前的良好时隙值。

4.1.4 控制和响应错误处理

当主机通过 I2C 和 A2B 访问寄存器时(例如,远程 I2C),同步控制帧(SCF)和同步响应帧(SRF)进行此数据交换。如果控制帧或响应帧中存在通信错误,主节点会自动启动寄存器访问的重试。主节点会多次重试,直到访问成功或主节点中发生 I2C 超时。在重试期间,应用 I2C 时钟拉伸,这向主机表明事务未完成。如果发生 I2C 超时(I2C 超时在 30 个超帧后发生),主节点会标记一个 I2CERR 中断,主机可以对此做出响应。

主节点中损坏的接收到的中断请求将被忽略。如果发生真正的中断事件,由于未被清除,从属节点会自动重新生成中断。

4.1.5 错误信号

在 A2B_INTPND0 或 A2B_INTPND2 寄存器中标记的任何通信错误,当在 A2B_INTMSK0 或 A2B_INTMSK2 寄存器中分别启用相应的中断时,会触发中断请求。这些中断请求使用 A2B_IRQ 引脚或 A2B_INTSTAT.IRQ 位向主机发出请求信号。然后主机可以读取 A2B_INTSRC 和 A2B_INTTYPE 寄存器以确定错误是什么以及在哪里发生。

A2B_BECCTL 寄存器选择要计数哪些通信错误以及必须超过什么计数器阈值才能生成中断请求。使用此功能,某些单比特通信错误不必生成中断,除非自上次清除 A2B_BECNT 寄存器以来,它们在一段时间内大量积累。此外,可以使用 A2B_ERRMGMT 寄存器选择三种不同的方法在 I2S/TDM 接口上发出数据时隙错误信号(有关详细信息,请参阅错误管理寄存器)。

4.1.6 A2B 通信和位错误

A2B 通信和位错误如下:

• HDCNTERR(A2B_INTTYPE = 0)

同步控制帧(SCF)和同步响应帧(SRF)字段包含一个 2 位字段 CNT。在 SCF 中,CNT 字段从上一个超帧使用的值开始递增(模 4)。在 SRF 中,SCF 中接收的 CNT 字段值被传输回主节点。HDCNTERR 表示当前节点检测到头计数错误。对于主节点,这意味着同步响应帧具有与预期不同的 CNT 值。对于从属节点,这意味着同步控制帧具有与预期不同的值。

• DDERR(A2B_INTTYPE = 1)

DDERR 错误表示 A2B 总线上的差分曼彻斯特数据流中缺少时钟边沿。数据解码错误仅在特定节点正在使用的数据时隙上报告。SCF/SRF 中的数据解码错误会导致 CRC 错误,不会引发数据解码错误。

• CRCERR(A2B_INTTYPE = 2)

CRCERR 错误表示从属节点在接收到的 SCF 字段中检测到 CRC 错误。对于主节点,该错误表示在接收到的 SRF 字段中检测到 CRC 错误。

• DPERR(A2B_INTTYPE = 3)

A2B 总线上的数据时隙由一个奇偶校验位保护。DPERR 错误仅在特定节点正在使用的数据时隙上报告。节点不会检查仅经过它的数据时隙的奇偶性。

• BECOVF(A2B_INTTYPE = 4)

A2B_BECCTL.THRESHLD 字段配置在设置 A2B_INTPND0.BECOVF 位之前要计数的位错误(HDCNTERR、DDERR、CRCERR、DPERR 和 ICRCERR)的数量。如果不希望为每个位错误都发出中断信号,这个阈值很有用。可以根据特定时间段内可接受的噪声和稳健性来设置阈值。位错误计数器应定期清除。过多的位错误会设置 A2B_INTPND0.BECOVF 位并发出中断信号。主节点和从属节点可以独立设置位错误阈值。

• SRFERR(A2B_INTTYPE = 5)

SRFERR 错误表示在本地定时窗口过期之前未接收到后续节点的 SRF,受影响的节点生成自己的 SRF,并将其向上游传输到任何更早的节点。该错误对主节点和从属节点均有效。

• SRFCRCERR(A2B_INTTYPE = 6)

SRFCRCERR 错误表示当前从属节点在 SRF 字段中检测到 CRC 错误。通常,当从属节点在 SRF 中检测到 CRC 错误时,它会标记该节点的 SRFCRCERR 错误位。从属节点不会尝试纠正错误,而是按原样向上传递 SRF。但例外情况是,在响应命令时,从属节点会插入自己的 SRF,包括 CRC。在主节点中,CRCERR 字段用于指示 SRF 中的 CRC 错误。

• PWRERR(A2B_INTTYPE = 9 - 15)

PWRERR 是来自数字线路电源开关(DLPS)模块错误的屏蔽位;LDO2 在内部用于为 DLPS 模块供电。

4.1.7 从属节点中断处理

本节描述从属节点中断如何在主节点内部进行处理。当从属节点发生中断时,会发生以下一系列事件作为响应:

1. 从属节点中断发生后,从属收发器的 A2B_INTPND0、A2B_INTPND1、A2B_MBOX0STAT 和 A2B_MBOX1STAT 寄存器中的相关位被设置。

2. 如果 A2B_INTSTAT.IRQ 位为低电平,它将被置位。然后将最高优先级的待处理中断类型写入 A2B_INTTYPE 寄存器。

3. 从属节点开始在 SRF 的中断字段中发送 IRQ 信号。任何没有活动中断的上游从属节点将此字段向上游传递。

4. 当主节点接收到具有有效 CRC 且 IRQ 字段被设置的中断字段时,如果主节点的 A2B_INTSTAT.IRQ 位尚未被置位,则主节点将其置位。主节点随后用从属节点编号更新 A2B_INTSRC 寄存器,并将 A2B_INTTYPE 寄存器设置为 0x80。此时,主节点的 IRQ 引脚被驱动为有效。

5. 主节点自动从相应的从属节点读取 A2B_INTTYPE 寄存器并更新其 A2B_INTTYPE 寄存器。如果正在应用新结构(在最后五个超帧内设置了 A2B_CONTROL.NEWSTRCT),或者如果需要发送远程 I2C 停止命令,则此操作将被延迟。

6. 一旦读取了 A2B_INTTYPE,主节点会自动向相应的从属节点执行写入操作以清除中断。如果正在应用新结构,或者如果需要发送远程 I2C 停止命令,则此操作将被延迟。此时,从属节点停止在 SRF 中发送中断信号。

7. 当由于从属节点中断而使主节点的 IRQ 引脚被置位时,主机处理器读取 A2B_INTSTAT 和 A2B_INTTYPE 寄存器以确定中断类型并识别是哪个从属节点引发了中断。

如果主机在步骤 4 之后但在步骤 5 完成之前从主节点读取 A2B_INTTYPE 寄存器,主机可能从 A2B_INTTYPE 读取到 0x80。如果从属节点没有从总线上断开,A2B_INTTYPE 位字段最终会更新。

当主机读取 A2B_INTTYPE 寄存器等于 0x80 时,建议再次读取 A2B_INTTYPE 寄存器以确认中断类型。如果从属节点发出中断信号然后从总线上断开(可能是由于开关故障),下一个上游从属节点最终会在 32 个丢失的 SRF 帧后切换为最后一个从属节点。此时,如果主节点(而不是主机处理器)仍在内部尝试从丢失的从属节点读取 A2B_INTTYPE,新的最后一个从属节点会发送一个特殊的 SRF,向主节点指示读取无法进行。这会导致 A2B_INTTYPE 被设置为 0xFD 并且中断识别过程终止。由于丢失的 SRF 超时是 32 个超帧(在此之后上游节点成为最后一个节点),因此不太可能出现错误类型 0xFD。

换句话说,当主节点基于接收到的中断尝试从从属节点读取 A2B_INTTYPE 但从上游从属节点接收到指示该从属节点现在是最后一个从属节点的响应时,会发生从属节点 A2B_INTTYPE 读取错误(0xFD)中断。A2B_INTTYPE = 0xFD 和 A2B_INTTYPE = 0x80 的主要区别在于,当主节点仍在尝试读取 A2B_INTTYPE 时可以看到 A2B_INTTYPE = 0x80,因此它可能随后会被解决,而当 A2B_INTTYPE 位字段等于 0xFD 时则无法解决。

如果从属节点只是向主节点报告一个中断,此后没有任何其他线路故障。如果在步骤 4 之后,主机过快地读取 A2B_INTTYPE,它会读取到 A2B_INTTYPE = 0x80,导致 IRQ 被清除。如果在从属节点更新寄存器值之前读取 A2B_INTTYPE 寄存器,主节点不会重新置位 IRQ。如果主机在看到 IRQ 后(建议这样做)读取 A2B_INTSRC 寄存器,然后读取 A2B_INTTYPE 寄存器,那么 A2B_INTTYPE 的值是有效的(除非存在线路错误)。

如果没有待处理中断的从属节点与总线的其余部分断开连接,上游从属节点会在连续 32 个超帧中生成 SRFERR。

4.1.8 错误管理寄存器

当 A2B 数据时隙未被正确接收时(通过该时隙中任何一位的奇偶校验错误或数据解码错误检测到),该时隙接收到的最后一个良好样本将被重复。A2B_ERRMGMT 寄存器还控制通过 I2S/TDM 接口指示错误数据时隙的方式。

当设置 A2B_ERRMGMT.ERRLSB 位时,每个数据时隙的最低有效位(LSB)用于指示该时隙是否被正确接收。例如,在具有 24 位上行时隙大小的主节点中,当数据有效时,通过 DTX0 或 DTX1 发送的第 24 个数据位为低电平;当数据无效时,该位为高电平。这种方法改变了接收的 I2S/TDM 数据字中最低有效位的含义。

当设置 A2B_ERRMGMT.ERRSIG 位时,每个数据时隙的最低有效位以下的所有位用于指示该时隙是否被正确接收。对于 24 位时隙大小,当数据有效时,每个 32 周期数据时隙中的最后 8 位为低电平;当数据无效时,这些位为高电平。如果未设置 A2B_ERRMGMT.ERRSIG 位,则额外的八位始终为低电平。这种方法保留了接收的 I2S/TDM 数据字中最低有效位的含义,但要使此方法起作用,数据字大小必须小于数据通道大小。数据通道宽度通常为 32 位,但可以编程为 16 位。

当设置 A2B_ERRMGMT.ERRSLOT 位时,A2B 总线上生成的时隙数量增加 1。在主节点中,协议引擎通常在每个超帧中将 A2B_UPSLOTS 个数据写入帧缓冲区。在从属节点中,写入的时隙数量通常为 A2B_LDNSLOTS + A2B_BCDNSLOTS。通过使用此方法启用的额外数据时隙附加在配置的 A2B 通信流量的末尾。它包含该超帧中每个前面数据时隙的一位错误信息。额外时隙的最高有效位表示数据时隙 0 中发生了错误。下一位表示数据时隙 1 中发生了错误,依此类推。例如,0x80000000 表示时隙 0 中有错误,而 0xffffff00 表示时隙 0 到 23 都包含错误。如果为 16 位通道大小设置了 A2B_I2SGCFG.TDMSS 位,则只能报告前 16 个数据通道。如果为 32 位通道大小设置了 A2B_I2SGCFG.TDMSS 位,则最多可以报告 32 个数据通道的错误。

4.1.9 位错误控制寄存器

A2B_BECNT 寄存器控制位错误计数,包括 2 的 n 次方的中断阈值,其中 n 的范围从 1 到 8。它选择哪些通信错误进入计数器,以及在什么计数器阈值下生成中断请求。使用此功能,某些单一位通信错误不必生成中断,除非它们在 A2B_BECNT 寄存器上次被清除后的时间段内大量积累。

4.2 测试与调试

对于测试和调试,收发器允许使用引发中断(A2B_RAISE)和生成错误(A2B_GENERR)寄存器来产生中断和位错误。

引发(A2B_RAISE)寄存器

A2B_RAISE 寄存器允许主机通过软件在系统中的任何节点产生中断。该寄存器必须通过 A2B 总线进行写入,因为从本地 I2C 端口对该寄存器的写入没有效果。

生成错误(A2B_GENERR)寄存器:

• 0x01 生成头计数错误(A2B_GENERR.GENHCERR)

1. 当主节点生成头计数错误时: 主节点仅在一帧中更改同步控制帧(SCF)中的 2 位 CNT 字段。在后续帧中,它发送正确的 CNT 字段。 因为每个从属节点都接收 SCF,所以所有从属节点都检测到(A2B_INTPND0.HDCNTERR)错误。

2. 当从属节点生成头计数错误时: 从属节点更改同步响应帧(SRF)中的 2 位 CNT 字段。通常,从属节点按原样传递从下游从属节点接收的 SRF。在这种情况下(因为从属节点在该帧中接收到对 A2B_GENERR 的写入命令),它已经在生成带有自己 SRF 的响应,但根据命令指示,CNT 字段是错误的。 虽然上游从属节点接收 SRF,但这些节点不会检查 CNT 字段是否正确。从属节点仅在检查 SCF 时生成 A2B_INTPND0.HDCNTERR。因此,当从属节点生成此错误时,只有主节点能检测到它。

• 0x02 生成数据解码错误(A2B_GENERR.GENDDERR)

生成数据解码错误需要将曼彻斯特编码违规应用于数据时隙,而不是 SCF 和 SRF 字段。

1. 当主节点生成数据解码错误时: 主节点在第一个下行数据时隙(仅时隙 0)上引起曼彻斯特编码错误。它不会在任何其他数据时隙上注入错误。由于节点仅在正在使用的数据时隙上报告数据解码错误,所以当主节点生成错误时,只有使用时隙 0 的从属节点能检测到该错误。当从属节点向下游传递(不使用)数据时,它发送与接收到的相同的位流,并且不会检测到错误。

2. 当从属节点生成数据解码错误时: 从属节点在它贡献的第一个上行数据时隙上引起曼彻斯特编码错误,而不是在任何传递的数据时隙上。如果从属节点贡献多个上行时隙,它仅在第一个时隙上引起错误。从属节点不会在下行数据上引起编码错误。 由于数据解码错误仅在正在使用的数据时隙上报告,所以只有使用贡献的第一个上行时隙的上游节点能检测到该错误。如果上游从属节点或主节点不使用第一个贡献的数据时隙,则它不会检测到错误。

• 0x04 生成 CRC 错误(A2B_GENERR.GENCRCERR)

1. 当主节点生成 CRC 错误时: 主节点仅在一帧中在 SCF 的 CRC 字段中引起错误。因为每个从属节点都接收 SCF,所以所有从属节点都能检测到 CRC 中的错误。

2. 当从属节点生成 CRC 错误时: 从属节点仅在一帧中在 SRF 的 CRC 字段中引起错误。由于所有上游从属节点都接收 SRF 并检查 CRC,所以当任何下游从属节点生成此错误时,它们都能检测到该错误。从属节点在 A2B_INTPND0.SRFCRCERR 字段中报告 SRF CRC 错误,但这些错误不会被位错误计数器计数。主节点将该错误检测为 A2B_INTPND0.CRCERR,如果启用,位错误计数器会递增。

• 0x08 生成数据奇偶校验错误,A2B_GENERR.GENDPERR

1. 当主节点生成数据解码错误时: 主节点在第一个下行数据时隙(时隙 0)上引起数据奇偶校验错误。它不会在其他数据时隙上引起错误。当主节点生成数据奇偶校验错误时,只有使用时隙 0 的从属节点能检测到它。不使用时隙 0 的从属节点不会检测到它。

2. 当从属节点生成数据解码错误时: 从属节点仅在它贡献的第一个上行数据时隙上引起数据奇偶校验错误。它不会在超帧的下行部分引起错误。当从属节点生成错误时,所有使用贡献的第一个时隙的上游节点都能检测到它。如果上游从属节点或主节点不使用第一个贡献的数据时隙,则它不会检测到它。

• 0x10 生成中断帧 CRC 错误(A2B_GENERR.GENICRCERR)

1. 主节点不能生成中断帧 CRC 错误。

2. 当从属节点生成中断帧 CRC 错误时,只有主节点能够检测到该错误。其他上游从属节点不会检查中断帧中的 CRC。

4.3 唯一 ID

每个收发器都包含一个 48 位的唯一 ID。读取 A2B_CHIPID0 至 A2B_CHIPID5 寄存器以获得唯一 ID。如果读取唯一 ID 失败,将生成一个中断(A2B_INTTYPE = 0xFC),这表示无法恢复唯一 ID。如果发生这种情况,请将收发器返回给亚德诺半导体(Analog Devices)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

音频金钟小赵

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

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

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

打赏作者

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

抵扣说明:

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

余额充值